Method: Tml::Tokens::Data#token_value_from_hash_param

Defined in:
lib/tml/tokens/data.rb

#token_value_from_hash_param(hash, language, options) ⇒ Object

Hashes are often used with JSON structures. We can be smart about how to pull default values.

examples:

tr(“Hello user”, => {:name => “Michael”, :gender => :male}}

tr(“Hello user”, => {:object => {:gender => :male, :value => “Michael”}}} tr(“Hello user”, => {:object => {:name => “Michael”, :gender => :male, :property => :name}}} tr(“Hello user”, => {:object => {:name => “Michael”, :gender => :male, :attribute => :name}}}

tr(“Hello user”, => {:object => user, :value => “Michael”}} tr(“Hello user”, => {:object => user, :property => :name}} tr(“Hello user”, => {:object => user, :attribute => :name}}



322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
# File 'lib/tml/tokens/data.rb', line 322

def token_value_from_hash_param(hash, language, options)
  value = Tml::Utils.hash_value(hash, :value)
  [:name, :first_name, :display_name, :full_name, :username].each do |attr|
    value ||= Tml::Utils.hash_value(hash, attr)
  end

  attr  = Tml::Utils.hash_value(hash, :attribute) || Tml::Utils.hash_value(hash, :property)
  value ||= Tml::Utils.hash_value(hash, attr)

  object = Tml::Utils.hash_value(hash, :object)

  unless value.nil?
    return sanitize(value, object || hash, language, options.merge(:safe => true))
  end

  if object.nil?
    return error("Missing value for hash token #{full_name} in #{label}")
  end

  if object.is_a?(Hash)
    unless attr.nil?
      return sanitize(Tml::Utils.hash_value(object, attr), object, language, options.merge(:safe => false))
    end

    return error("Missing value for hash token #{full_name} in #{label}")
  end

  sanitize(object.send(attr), object, language, options.merge(:safe => false))
end