Class: Hashie::Trash
Overview
A Trash is a 'translated' Dash where the keys can be remapped from a source hash.
Trashes are useful when you need to read data from another application, such as a Java api, where the keys are named differently from how we would in Ruby.
Class Method Summary collapse
- .permitted_input_keys ⇒ Object
-
.property(property_name, options = {}) ⇒ Object
Defines a property on the Trash.
Instance Method Summary collapse
-
#[]=(property, value) ⇒ Object
Set a value on the Dash in a Hash-like way.
Methods inherited from Dash
#[], inherited, #initialize, #merge, #merge!, property?, #replace, required?
Methods included from PrettyInspect
Methods inherited from Hash
Methods included from HashExtensions
#hashie_stringify_keys, #hashie_stringify_keys!, included, #to_mash
Constructor Details
This class inherits a constructor from Hashie::Dash
Class Method Details
.permitted_input_keys ⇒ Object
55 56 57 |
# File 'lib/hashie/trash.rb', line 55 def self.permitted_input_keys @permitted_input_keys ||= properties.map { |property| inverse_translations.fetch property, property } end |
.property(property_name, options = {}) ⇒ Object
Defines a property on the Trash. Options are as follows:
- :default - Specify a default value for this property, to be returned before a value is set on the property in a new Dash.
- :from - Specify the original key name that will be write only.
- :with - Specify a lambda to be used to convert value.
- :transform_with - Specify a lambda to be used to convert value without using the :from option. It transform the property itself.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/hashie/trash.rb', line 19 def self.property(property_name, = {}) super [:from] = [:from].to_sym if [:from] property_name = property_name.to_sym if [:from] if property_name == [:from] fail ArgumentError, "Property name (#{property_name}) and :from option must not be the same" end translations[[:from].to_sym] = property_name.to_sym define_method "#{[:from]}=" do |val| with = [:with] || [:transform_with] self[property_name.to_sym] = with.respond_to?(:call) ? with.call(val) : val end else if [:transform_with].respond_to? :call transforms[property_name.to_sym] = [:transform_with] end end end |
Instance Method Details
#[]=(property, value) ⇒ Object
Set a value on the Dash in a Hash-like way. Only works on pre-existing properties.
45 46 47 48 49 50 51 52 53 |
# File 'lib/hashie/trash.rb', line 45 def []=(property, value) if self.class.translations.key? property.to_sym send("#{property}=", value) elsif self.class.transforms.key? property.to_sym super property, self.class.transforms[property.to_sym].call(value) elsif property_exists? property super end end |