Sha256: 717fba4eb8bfd5e184ba935197c08a9add6ed5ab12fde9f0fbf82c856fedb8ca

Contents?: true

Size: 844 Bytes

Versions: 8

Compression:

Stored size: 844 Bytes

Contents

module Trax
  module Model
    module Freezable
      extend ::ActiveSupport::Concern

      included do
        class_attribute :freezable_fields
        self.freezable_fields = ::ActiveSupport::OrderedOptions.new
      end

      module ClassMethods
        def freezable_by_enum(options = {})
          freezable_fields.merge!(options)

          define_frozen_validators_for_enum(options)
        end

        def define_frozen_validators_for_enum(options)
          self.class_eval do
            options.each_pair do |enum_method, frozen_states|
              validates_with ::FrozenValidator, :if => lambda { |record|
                frozen_states.any?{ |state| state == :"#{record.send(enum_method)}" } && !record.changed.include?("#{enum_method}")
              }
            end
          end
        end
      end
    end

  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
trax_model-0.0.8 lib/trax/model/freezable.rb
trax_model-0.0.7 lib/trax/model/freezable.rb
trax_model-0.0.6 lib/trax/model/freezable.rb
trax_model-0.0.5 lib/trax/model/freezable.rb
trax_model-0.0.4 lib/trax/model/freezable.rb
trax_model-0.0.3 lib/trax/model/freezable.rb
trax_model-0.0.2 lib/trax/model/freezable.rb
trax_model-0.0.1 lib/trax/model/freezable.rb