Class: AssignableValues::ActiveRecord::Restriction::Base
- Inherits:
-
Object
- Object
- AssignableValues::ActiveRecord::Restriction::Base
- Defined in:
- lib/assignable_values/active_record/restriction/base.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#model ⇒ Object
readonly
Returns the value of attribute model.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#property ⇒ Object
readonly
Returns the value of attribute property.
-
#secondary_default ⇒ Object
readonly
Returns the value of attribute secondary_default.
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Instance Method Summary collapse
- #assignable_value?(record, value) ⇒ Boolean
- #assignable_values(record, decorate = false) ⇒ Object
-
#initialize(model, property, options, &values) ⇒ Base
constructor
A new instance of Base.
- #not_included_error_message ⇒ Object
- #set_default(record) ⇒ Object
- #validate_record(record) ⇒ Object
Constructor Details
#initialize(model, property, options, &values) ⇒ Base
Returns a new instance of Base.
8 9 10 11 12 13 14 15 16 17 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 8 def initialize(model, property, , &values) @model = model @property = property @options = @values = values ensure_values_given setup_default define_assignable_values_method setup_validation end |
Instance Attribute Details
#default ⇒ Object (readonly)
Returns the value of attribute default.
6 7 8 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 6 def default @default end |
#model ⇒ Object (readonly)
Returns the value of attribute model.
6 7 8 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 6 def model @model end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
6 7 8 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 6 def @options end |
#property ⇒ Object (readonly)
Returns the value of attribute property.
6 7 8 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 6 def property @property end |
#secondary_default ⇒ Object (readonly)
Returns the value of attribute secondary_default.
6 7 8 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 6 def secondary_default @secondary_default end |
#values ⇒ Object (readonly)
Returns the value of attribute values.
6 7 8 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 6 def values @values end |
Instance Method Details
#assignable_value?(record, value) ⇒ Boolean
36 37 38 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 36 def assignable_value?(record, value) assignable_values(record).include?(value) end |
#assignable_values(record, decorate = false) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 40 def assignable_values(record, decorate = false) assignable_values = [] parsed_values = parsed_assignable_values(record) current_values = parsed_values.delete(:values) old_value = previously_saved_value(record) if old_value.present? && !current_values.include?(old_value) assignable_values << old_value end assignable_values += current_values parsed_values.each do |, | assignable_values.singleton_class.send(:define_method, ) { } end if decorate assignable_values = decorate_values(assignable_values) end assignable_values end |
#not_included_error_message ⇒ Object
32 33 34 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 32 def I18n.t('errors.messages.inclusion', :default => 'is not included in the list') end |
#set_default(record) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 58 def set_default(record) if record.new_record? && record.send(property).nil? default_value = evaluate_default(record, default) begin if secondary_default? && !assignable_value?(record, default_value) secondary_default_value = evaluate_default(record, secondary_default) if assignable_value?(record, secondary_default_value) default_value = secondary_default_value end end rescue AssignableValues::DelegateUnavailable # skip secondary defaults if querying assignable values from a nil delegate end record.send("#{property}=", default_value) end true end |
#validate_record(record) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/assignable_values/active_record/restriction/base.rb', line 19 def validate_record(record) value = current_value(record) unless allow_blank? && value.blank? begin unless assignable_value?(record, value) record.errors.add(property, ) end rescue DelegateUnavailable # if the delegate is unavailable, the validation is skipped end end end |