Sha256: 2baf6c2a2224009316b31e47aa3eae9b751037974366a41e9757ea2269098c36

Contents?: true

Size: 917 Bytes

Versions: 1

Compression:

Stored size: 917 Bytes

Contents

module FormattedAttributes
  module ActiveRecord
    def self.included(base)
      base.instance_eval do
        include InstanceMethods
        extend ClassMethods
      end
    end

    module ClassMethods
      def formatted(*args)
        options = args.extract_options!

        args.each do |attr|
          accessible_attributes << "formatted_#{attr}"

          class_eval <<-RUBY
            def #{attr}=(value)
              @formatted_#{attr} = nil
              write_attribute :#{attr}, value
            end

            def formatted_#{attr}
              @formatted_#{attr} ||= format_from_#{options[:with]}(send(:#{attr}))
            end

            def formatted_#{attr}=(value)
              self.send :#{attr}=, format_to_#{options[:with]}(value)
              @formatted_#{attr} = value
            end
          RUBY
        end
      end
    end

    module InstanceMethods
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
formatted_attributes-0.1.0 lib/formatted_attributes/active_record.rb