Sha256: a8417a3e061db514a871627378f272880a90676c1f6374c6eca8ec1e1e2ec575

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 KB

Contents

require 'singleton'


module Fluent
  module Json
    module Schema
      class Lexicon
        include Singleton

        def dictionary
          Fluent::Lexicon.reflect(Fluent::Json::Schema::Terms)
        end

        def translator
          lambda do |term|
            term.to_s.singularize.to_sym
          end
        end

        def combiner
          named = lambda do |definition, name| 
            definition.new(name) 
          end

          optioned = lambda do |definition, name, options| 
            definition.new(name, options) 
          end

          lambda do |api, term, definition, args, block|
            if definition.class.name.demodulize.downcase.to_sym == term
              return api.add(definition.new(*args))
            end

            results = Fluent::Lexicon.collect(
              named.curry.(definition), 
              optioned.curry.(definition)
            ).call(*args)

            block.call(*results) if block.present?
            return api.add(*results)
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fluent-json-schema-0.1.2 lib/fluent/json/schema/lexicon.rb
fluent-json-schema-0.1.1 lib/fluent/json/schema/lexicon.rb