Sha256: afcf664a09f46164c5d573bfdd3df7d64b7d69b1feeedfc9c494a19e1b89700b
Contents?: true
Size: 1.26 KB
Versions: 1
Compression:
Stored size: 1.26 KB
Contents
class JsonParser::Fetcher attr_reader :path, :json, :options def initialize(json, path, options = {}) @path = path.to_s.split('.') @json = json @options = options end def fetch value = crawl(json, path) value = instance.send(after, value) if after value end private def crawl(json, path) return nil if json.nil? return wrap(json) if path.empty? return crawl_array(json, path) if json.is_a? Array key = change_case(path[0]) value = json.key?(key) ? json[key] : json[key.to_sym] crawl(value, path[1,path.size]) end def change_case(key) case case_type when :lower_camel key.camelize(:lower) when :upper_camel key.camelize(:upper) when :snake key.underscore end end def crawl_array(array, path) array.map { |j| crawl(j, path) }.tap do |a| a.compact! if compact end end def wrap(json) return json unless clazz return clazz.new json unless json.is_a? Array json.map { |v| wrap v }.tap do |j| j.compact! if compact end end def clazz options[:class] end def after options[:after] end def instance options[:instance] end def compact options[:compact] end def case_type options[:case_type] end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
json_parser-0.1.0 | lib/json_parser/fetcher.rb |