Sha256: 83c50f0d3bae5381955ba543963172e9c0b82fca1331e8972d7fadd4413f001d

Contents?: true

Size: 961 Bytes

Versions: 1

Compression:

Stored size: 961 Bytes

Contents

class JsonParser::Fetcher
  include OptionsParser

  attr_reader :path, :json, :instance

  delegate :after, :flatten, to: :options_object
  delegate :wrap, to: :wrapper
  delegate :crawl, to: :crawler

  def initialize(json, path, instance, options = {})
    @path = path.to_s.split('.')
    @json = json
    @instance = instance
    @options = options
  end

  def fetch
    value = crawl(json)
    value.flatten! if flatten && value.respond_to?(:flatten!)
    value = instance.send(after, value) if after
    value
  end

  private

  def crawler
    @crawler ||= buidl_crawler
  end

  def buidl_crawler
    JsonParser::Crawler.new(path, crawler_options) do |value|
      wrap(value)
    end
  end

  def crawler_options
    options.slice(:case_type, :compact)
  end

  def wrapper
    @wrapper ||= build_wrapper
  end

  def build_wrapper
    JsonParser::Wrapper.new(wrapper_options)
  end

  def wrapper_options
    options.slice(:clazz, :type)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
json_parser-1.0.0 lib/json_parser/fetcher.rb