Sha256: b2698961c6da98271ae93636d3eac50d65350764a2d9ad78de767eeca4b9a463
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
module TarvitHelpers module HashPresenter class Simple require 'active_support/core_ext/string' attr_reader :_hash, :_levels, :_parent def initialize(hash, levels=[], parent=nil) @_hash = _prepare_keys(hash) @_levels = levels @_parent = parent end def method_missing(m, *args) return _value(m) if _accessor_method?(m) super end protected def _value(method_name) _transform_value(method_name, _hash_value(method_name)) end def _hash_value(method_name) _hash[method_name] end def _transform_value(method_name, value) return value.map{|key| _transform_value(method_name, key) } if value.is_a?(Array) value.is_a?(Hash) ? _new_level_presenter(value, method_name) : value end def _accessor_method?(method_name) self._hash.keys.include?(method_name) end def _key_to_method(key) key.to_s.gsub(/\s+/, ?_).underscore.to_sym end def _prepare_keys(hash) res = hash.map do |k ,v| [ _key_to_method(k), v ] end Hash[res] end def _path(key) _levels + [ key ] end def _new_level_presenter(value, method_name) self.class.new(value, _path(method_name), self) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tarvit-helpers-0.0.20 | lib/tarvit-helpers/modules/hash_presenter/simple.rb |
tarvit-helpers-0.0.19 | lib/tarvit-helpers/modules/hash_presenter/simple_hash_presenter.rb |