Sha256: 1ca51b449a55f44019682f0a0f197e4e2d93844cbf16d4229cc1e11a4b8aaa6d
Contents?: true
Size: 1.52 KB
Versions: 2
Compression:
Stored size: 1.52 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 = _modify_hash(_prepare_keys(hash)) @_levels = levels @_parent = parent end def _root? _parent.nil? 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) _new_level_presenter_klass.new(value, _path(method_name), self) end def _new_level_presenter_klass self.class end def _modify_hash(hash) hash end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
tarvit-helpers-0.0.23 | lib/tarvit-helpers/modules/hash_presenter/simple.rb |
tarvit-helpers-0.0.22 | lib/tarvit-helpers/modules/hash_presenter/simple.rb |