Module: FormatAlias::Base::ClassMethods
- Defined in:
- lib/format_alias/base.rb,
lib/format_alias/formatters/date_format.rb,
lib/format_alias/formatters/polymorphic_alias.rb
Instance Method Summary collapse
- #date_format_alias(attr, format, *args) ⇒ Object
- #format_alias(attr, getter, setter, *args) ⇒ Object
- #polymorphic_alias(attr, *args) ⇒ Object
Instance Method Details
#date_format_alias(attr, format, *args) ⇒ Object
4 5 6 7 8 9 10 11 |
# File 'lib/format_alias/formatters/date_format.rb', line 4 def date_format_alias(attr, format, *args) format_alias( attr, proc { send(attr).strftime(format) unless send(attr).nil? }, proc { |value| send(:"#{attr}=", (Time.parse(value, format) rescue nil)) }, *args ) end |
#format_alias(attr, getter, setter, *args) ⇒ Object
11 12 13 14 15 16 17 |
# File 'lib/format_alias/base.rb', line 11 def format_alias(attr, getter, setter, *args) = args. name = .delete(:as) || "#{attr}_formatted" define_method name, &getter define_method "#{name}=", &setter end |
#polymorphic_alias(attr, *args) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/format_alias/formatters/polymorphic_alias.rb', line 4 def polymorphic_alias(attr, *args) = args. polymorphic = .delete(:polymorphic) || true attrs = .delete(:attrs) delim = .delete(:delimiter) || ':' raise ArgumentError, "Specify :polymorphic or :attrs option for polymorphic_alias :#{attr} in #{self.name}" if attrs.blank? && polymorphic.blank? if polymorphic attrs = ["#{attr}_type", "#{attr}_id"] [:as] ||= "#{attr}_type_id" else [:as] ||= "#{attr}_split" end format_alias( attr, proc { r = attrs.map { |a| send(a) }.compact r.present? ? r.join(delim) : nil }, proc { |value| values = value.to_s.split(delim) h = Hash[attrs.zip(values)] h.map { |a, v| send("#{a}=", v) } }, ) end |