Sha256: a968514af965e94e0cee9f8570595cc2844507b049b339b7e652b6c7cb100103

Contents?: true

Size: 1.09 KB

Versions: 46

Compression:

Stored size: 1.09 KB

Contents

class Gillbus
  # Gives a bunch of class methods
  # to parse gillbus responses hash and define accessors
  #
  # Warning:
  #   resulting definitions won't work properly in subclass
  #
  # Usage:
  #     class MyClass
  #       extend Gillbus::Fields
  #       field :foo, :date
  #     end
  #
  #     MyClass.parse(hash)
  module Fields
    def parser_class
      if defined? @parser_class
        @parser_class || Gillbus::Parser
      else
        Gillbus::Parser
      end
    end

    def parse(doc, instance: new, parent: nil, options: {})
      instance ||= new
      parser_class.new(
        doc: doc,
        instance: instance,
        fields: field_definitions,
        parent: parent,
        options: options,
      ).parse
      instance
    end

    def parser(&definition)
      @parser_class = Class.new(parser_class, &definition)
    end

    private

    def field_definitions
      @fields ||= []
    end

    def field(name, type = :string, key: name.to_s.upcase, root: nil)
      field_definitions << { name: name, key: key, type: type, root: root }
      attr_accessor name
    end
  end
end

Version data entries

46 entries across 46 versions & 1 rubygems

Version Path
gillbus-0.23.0 lib/gillbus/helpers/fields.rb
gillbus-0.22.9 lib/gillbus/helpers/fields.rb
gillbus-0.22.8 lib/gillbus/helpers/fields.rb
gillbus-0.22.7 lib/gillbus/helpers/fields.rb
gillbus-0.22.6 lib/gillbus/helpers/fields.rb
gillbus-0.22.5 lib/gillbus/helpers/fields.rb
gillbus-0.22.4 lib/gillbus/helpers/fields.rb
gillbus-0.22.3 lib/gillbus/helpers/fields.rb
gillbus-0.22.2 lib/gillbus/helpers/fields.rb
gillbus-0.22.1 lib/gillbus/helpers/fields.rb
gillbus-0.22.0 lib/gillbus/helpers/fields.rb
gillbus-0.21.0 lib/gillbus/helpers/fields.rb
gillbus-0.20.9 lib/gillbus/helpers/fields.rb
gillbus-0.20.8 lib/gillbus/helpers/fields.rb
gillbus-0.20.7 lib/gillbus/helpers/fields.rb
gillbus-0.20.6 lib/gillbus/helpers/fields.rb
gillbus-0.20.5 lib/gillbus/helpers/fields.rb
gillbus-0.20.4 lib/gillbus/helpers/fields.rb
gillbus-0.20.3 lib/gillbus/helpers/fields.rb
gillbus-0.20.2 lib/gillbus/helpers/fields.rb