Sha256: 266d4112a3f6b1247fee8ded9e430eebaa53e77d6bf145b6976329333c4afe02

Contents?: true

Size: 664 Bytes

Versions: 4

Compression:

Stored size: 664 Bytes

Contents

# Models the pattern of a boolean attribute that must be true or false, but never nil.
# origin: RM
module FlagTrait

  as_trait do |field, options|

    options ||= {}

    default = options[:default]
    virtual = options[:virtual]
    field_var = "@#{field}"
    set_field = "#{field}="

    validates_inclusion_of field.to_sym, :in => [true, false], :allow_nil => !!virtual 
    has_defaults field.to_sym => default

    if virtual

      attr_reader field

      define_method set_field do |value|
        value = ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
        instance_variable_set(field_var, value)
      end

    end

  end 

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
serum-rails-0.2.1 spec/test_apps/rails-2-3/app/models/shared/flag_trait.rb
serum-rails-0.2.0 spec/test_apps/rails-2-3/app/models/shared/flag_trait.rb
serum-rails-0.1.1 spec/test_app/app/models/shared/flag_trait.rb
serum-rails-0.1.0 spec/test_app/app/models/shared/flag_trait.rb