class AssignableValues::ActiveRecord::Restriction::ScalarAttribute
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
AssignableValues::ActiveRecord::Restriction::Base::new
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 6 def initialize(*args) super define_humanized_value_instance_method define_humanized_value_class_method define_humanized_assignable_values_instance_method end
Public Instance Methods
humanized_assignable_values(record, options = {})
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 20 def humanized_assignable_values(record, options = {}) values = assignable_values(record, options) values.collect do |value| HumanizedValue.new(value, humanized_value(value)) end end
humanized_value(value)
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 13 def humanized_value(value) if value.present? dictionary_scope = "assignable_values.#{model.name.underscore}.#{property}" I18n.t(value, :scope => dictionary_scope, :default => default_humanization_for_value(value)) end end
Private Instance Methods
decorate_values(values)
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 91 def decorate_values(values) restriction = self values.collect do |value| if value.is_a?(String) humanization = restriction.humanized_value(value) value = HumanizableString.new(value, humanization) end value end end
default_humanization_for_value(value)
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 29 def default_humanization_for_value(value) if value.is_a?(String) value.humanize else value.to_s end end
define_humanized_assignable_values_instance_method()
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 74 def define_humanized_assignable_values_instance_method restriction = self multiple = @options[:multiple] enhance_model do define_method :"humanized_assignable_#{restriction.property.to_s.pluralize}" do |*args| restriction.humanized_assignable_values(self, *args) end unless multiple define_method :"humanized_#{restriction.property.to_s.pluralize}" do ActiveSupport::Deprecation.warn("humanized_<value>s is deprecated, use humanized_assignable_<value>s instead", caller) restriction.humanized_assignable_values(self) end end end end
define_humanized_value_class_method()
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 37 def define_humanized_value_class_method restriction = self enhance_model_singleton do define_method :"humanized_#{restriction.property.to_s.singularize}" do |given_value| restriction.humanized_value(given_value) end end end
define_humanized_value_instance_method()
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 46 def define_humanized_value_instance_method restriction = self multiple = @options[:multiple] enhance_model do define_method :"humanized_#{restriction.property.to_s.singularize}" do |*args| if args.size > 1 || (multiple && args.size == 0) raise ArgumentError.new("wrong number of arguments (#{args.size} for #{multiple ? '1' : '0..1'})") end given_value = args[0] value = given_value || send(restriction.property) restriction.humanized_value(value) end if multiple define_method :"humanized_#{restriction.property}" do values = send(restriction.property) if values.respond_to?(:map) values.map do |value| restriction.humanized_value(value) end else values end end end end end
has_previously_saved_value?(record)
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 102 def has_previously_saved_value?(record) if record.respond_to?(:attribute_in_database) !record.new_record? # Rails >= 5.1 else !record.new_record? && record.respond_to?(value_was_method) # Rails <= 5.0 end end
previously_saved_value(record)
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 110 def previously_saved_value(record) value_was(record) end
value_was(record)
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 116 def value_was(record) if record.respond_to?(:attribute_in_database) record.attribute_in_database(:"#{property}") # Rails >= 5.1 else record.send(value_was_method) # Rails <= 5.0 end end
value_was_method()
click to toggle source
# File lib/assignable_values/active_record/restriction/scalar_attribute.rb, line 124 def value_was_method :"#{property}_was" end