Sha256: 672ab9183b5f5be6bf42befdd08df8d110500378bd28c107185b5a062a43e848

Contents?: true

Size: 877 Bytes

Versions: 2

Compression:

Stored size: 877 Bytes

Contents

require 'saru/list'
require 'saru/radical'
require 'saru/kanji'
require 'saru/vocabulary'

module Saru
  class Builder
    TYPES = %w(radical kanji vocabulary)

    attr_reader :type, :levels

    def initialize type, levels = nil
      @type  = type
      @levels = levels
    end

    def call
      raise ArgumentError, 'Not valid type' unless TYPES.include?(type)

      build
    end

  private

    def build
      request_items = request['requested_information']
      items = request_items.map{|item| build_class.new flatten(item) }

      List.new items
    end

    def request
      Connection.send(type, levels)
    end

    def build_class
      Module.const_get "Saru::#{type.capitalize}"
    end

    def flatten item
      item.merge!(item['user_specific']) if item['user_specific']
      item.delete_if{|key, _value| key == 'user_specific' }
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
saru-0.2.0 lib/saru/builder.rb
saru-0.1.0 lib/saru/builder.rb