Sha256: 6007d38d7ac647daa006a3067fe5032b57cf88a6a3b78179ed9521ca0ba62fff

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 KB

Contents

module AssignableValues
  module ActiveRecord
    module Restriction
      class ScalarAttribute < Base

        def initialize(*args)
          super
          define_humanized_method
        end

        def humanize_string_value(value)
          if value.present?
            dictionary_key = "assignable_values.#{model.name.underscore}.#{property}.#{value}"
            I18n.t(dictionary_key, :default => value.humanize)
          end
        end

        private

        def define_humanized_method
          restriction = self
          enhance_model do
            define_method "humanized_#{restriction.property}" do
              value = send(restriction.property)
              restriction.humanize_string_value(value)
            end
          end
        end

        def decorate_values(values)
          restriction = self
          values.collect do |value|
            if value.is_a?(String)
              value = value.dup
              value.singleton_class.send(:define_method, :humanized) do
                restriction.humanize_string_value(value)
              end
            end
            value
          end
        end

        def previously_saved_value(record)
          record.send("#{property}_was")
        end


      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
assignable_values-0.1.2 lib/assignable_values/active_record/restriction/scalar_attribute.rb
assignable_values-0.1.1 lib/assignable_values/active_record/restriction/scalar_attribute.rb