Module: AttrDefault::InstanceMethods
- Defined in:
- lib/attr_default.rb
Instance Method Summary collapse
- #_attr_default_set ⇒ Object
- #clone ⇒ Object
- #default_value_for(attr_name) ⇒ Object
- #dup ⇒ Object
- #needs_time_zone_fixup?(attr_name) ⇒ Boolean
- #read_attribute_with_fixups(attr_name) ⇒ Object
- #reset_to_default_value(attr_name) ⇒ Object
- #write_attribute_with_fixups(attr_name, args) ⇒ Object
Instance Method Details
#_attr_default_set ⇒ Object
61 62 63 |
# File 'lib/attr_default.rb', line 61 def _attr_default_set @_attr_default_set ||= {} end |
#clone ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/attr_default.rb', line 105 def clone result = super result.created_at = nil unless !result.class.columns_hash.has_key?('created_at') result.updated_at = nil unless !result.class.columns_hash.has_key?('updated_at') if self.new_record? result.instance_variable_set(:@_attr_default_set, self._attr_default_set.dup) else result.instance_variable_set(:@_attr_defaults_set_from_dup, true) end result end |
#default_value_for(attr_name) ⇒ Object
46 47 48 49 50 51 52 53 54 55 |
# File 'lib/attr_default.rb', line 46 def default_value_for(attr_name) attr_name = attr_name.to_s if self.class._attr_defaults.has_key?(attr_name) attr_default = self.class._attr_defaults[attr_name] attr_default.is_a?(Proc) ? instance_exec(&attr_default) : (attr_default.dup rescue attr_default) else column_data = self.class.columns_hash[attr_name] or raise ArgumentError, "#{self.class.name}##{attr_name} not found" column_data.default end end |
#dup ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/attr_default.rb', line 93 def dup result = super result.created_at = nil unless !result.class.columns_hash.has_key?('created_at') result.updated_at = nil unless !result.class.columns_hash.has_key?('updated_at') if self.new_record? result.instance_variable_set(:@_attr_default_set, self._attr_default_set.dup) else result.instance_variable_set(:@_attr_defaults_set_from_dup, true) end result end |
#needs_time_zone_fixup?(attr_name) ⇒ Boolean
88 89 90 |
# File 'lib/attr_default.rb', line 88 def needs_time_zone_fixup?(attr_name) self.class.send(:create_time_zone_conversion_attribute?, attr_name, self.class.columns_hash[attr_name]) end |
#read_attribute_with_fixups(attr_name) ⇒ Object
65 66 67 68 69 70 71 72 73 |
# File 'lib/attr_default.rb', line 65 def read_attribute_with_fixups(attr_name) if needs_time_zone_fixup?(attr_name) cached = @attributes_cache[attr_name] and return cached time = read_attribute(attr_name) @attributes_cache[attr_name] = time.acts_like?(:time) ? time.in_time_zone : time else read_attribute(attr_name) end end |
#reset_to_default_value(attr_name) ⇒ Object
57 58 59 |
# File 'lib/attr_default.rb', line 57 def reset_to_default_value(attr_name) send("#{attr_name}=", default_value_for(attr_name)) end |
#write_attribute_with_fixups(attr_name, args) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/attr_default.rb', line 75 def write_attribute_with_fixups(attr_name, args) if needs_time_zone_fixup?(attr_name) time = args.first unless time.acts_like?(:time) time = time.is_a?(String) ? Time.zone.parse(time) : time.to_time rescue time end time = time.in_time_zone rescue nil if time write_attribute(attr_name, time) else write_attribute(attr_name, *args) end end |