diff options
author | Sean Griffin <sean@thoughtbot.com> | 2014-06-07 07:09:45 -0600 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2014-06-07 07:20:25 -0600 |
commit | 3fab9d8821bc73b28a76f27353cab34d49096ad2 (patch) | |
tree | 9b42b8abf13648468e7197419edc9ec9678c1e30 /activerecord/lib/active_record/properties.rb | |
parent | 23a751c2e15800c1b4aa96c10d1bfebc56fa30b9 (diff) | |
download | rails-3fab9d8821bc73b28a76f27353cab34d49096ad2.tar.gz rails-3fab9d8821bc73b28a76f27353cab34d49096ad2.tar.bz2 rails-3fab9d8821bc73b28a76f27353cab34d49096ad2.zip |
Rename `property` to `attribute`
For consistency with https://github.com/rails/rails/pull/15557
Diffstat (limited to 'activerecord/lib/active_record/properties.rb')
-rw-r--r-- | activerecord/lib/active_record/properties.rb | 122 |
1 files changed, 0 insertions, 122 deletions
diff --git a/activerecord/lib/active_record/properties.rb b/activerecord/lib/active_record/properties.rb deleted file mode 100644 index 48ee42aaca..0000000000 --- a/activerecord/lib/active_record/properties.rb +++ /dev/null @@ -1,122 +0,0 @@ -module ActiveRecord - module Properties # :nodoc: - extend ActiveSupport::Concern - - Type = ActiveRecord::Type - - included do - class_attribute :user_provided_columns, instance_accessor: false # :internal: - self.user_provided_columns = {} - end - - module ClassMethods - # Defines or overrides a property on this model. This allows customization of - # Active Record's type casting behavior, as well as adding support for user defined - # types. - # - # +name+ The name of the methods to define attribute methods for, and the column which - # this will persist to. - # - # +cast_type+ A type object that contains information about how to type cast the value. - # See the examples section for more information. - # - # ==== Options - # The options hash accepts the following options: - # - # +default+ is the default value that the column should use on a new record. - # - # ==== Examples - # - # The type detected by Active Record can be overriden. - # - # # db/schema.rb - # create_table :store_listings, force: true do |t| - # t.decimal :price_in_cents - # end - # - # # app/models/store_listing.rb - # class StoreListing < ActiveRecord::Base - # end - # - # store_listing = StoreListing.new(price_in_cents: '10.1') - # - # # before - # store_listing.price_in_cents # => BigDecimal.new(10.1) - # - # class StoreListing < ActiveRecord::Base - # property :price_in_cents, Type::Integer.new - # end - # - # # after - # store_listing.price_in_cents # => 10 - # - # Users may also define their own custom types, as long as they respond to the methods - # defined on the value type. The `type_cast` method on your type object will be called - # with values both from the database, and from your controllers. See - # `ActiveRecord::Properties::Type::Value` for the expected API. It is recommended that your - # type objects inherit from an existing type, or the base value type. - # - # class MoneyType < ActiveRecord::Type::Integer - # def type_cast(value) - # if value.include?('$') - # price_in_dollars = value.gsub(/\$/, '').to_f - # price_in_dollars * 100 - # else - # value.to_i - # end - # end - # end - # - # class StoreListing < ActiveRecord::Base - # property :price_in_cents, MoneyType.new - # end - # - # store_listing = StoreListing.new(price_in_cents: '$10.00') - # store_listing.price_in_cents # => 1000 - def property(name, cast_type, options = {}) - name = name.to_s - clear_caches_calculated_from_columns - # Assign a new hash to ensure that subclasses do not share a hash - self.user_provided_columns = user_provided_columns.merge(name => connection.new_column(name, options[:default], cast_type)) - end - - # Returns an array of column objects for the table associated with this class. - def columns - @columns ||= add_user_provided_columns(connection.schema_cache.columns(table_name)) - end - - # Returns a hash of column objects for the table associated with this class. - def columns_hash - @columns_hash ||= Hash[columns.map { |c| [c.name, c] }] - end - - def reset_column_information # :nodoc: - super - clear_caches_calculated_from_columns - end - - private - - def add_user_provided_columns(schema_columns) - existing_columns = schema_columns.map do |column| - user_provided_columns[column.name] || column - end - - existing_column_names = existing_columns.map(&:name) - new_columns = user_provided_columns.except(*existing_column_names).values - - existing_columns + new_columns - end - - def clear_caches_calculated_from_columns - @columns = nil - @columns_hash = nil - @column_types = nil - @column_defaults = nil - @raw_column_defaults = nil - @column_names = nil - @content_columns = nil - end - end - end -end |