module Gorillib::Builder

Public Instance Methods

getset(field, *args, &block) click to toggle source
# File lib/gorillib/model/elasticsearch_ext.rb, line 4
def getset(field, *args, &block)
  ArgumentError.check_arity!(args, 0..1)
  if args.empty?
    read_attribute(field.name)
  else
    self.send("receive_#{field.name}", args.first)
  end
end
getset_collection_item(field, item_key, attrs={}, &block) click to toggle source
# File lib/gorillib/model/elasticsearch_ext.rb, line 13
def getset_collection_item(field, item_key, attrs={}, &block)
  plural_name = field.plural_name
  if attrs.is_a?(field.item_type)
    # actual object: assign it into collection
    val = attrs
    set_collection_item(plural_name, item_key, val)
  elsif has_collection_item?(plural_name, item_key)
    # existing item: retrieve it, updating as directed
    val = get_collection_item(plural_name, item_key)
    val.receive!(attrs, &block)
  else
    # missing item: autovivify item and add to collection
    params = { key_method => item_key, :owner => self }.merge(attrs)
    val = self.send("receive_#{field.singular_name}", params, &block)
    set_collection_item(plural_name, item_key, val)
  end
  val
end
inscribe_methods(model) click to toggle source
# File lib/gorillib/model/elasticsearch_ext.rb, line 33
def inscribe_methods model        
  raise "Plural and singular names must differ: #{self.plural_name}" if (singular_name == plural_name)
  #
  @visibilities[:writer] = false
  model.__send__(:define_attribute_reader,   self.name, self.type, visibility(:reader))
  model.__send__(:define_attribute_tester,   self.name, self.type, visibility(:tester))
  #
  model.__send__(:define_collection_receiver, self)
  model.__send__(:define_collection_getset,   self)
  model.__send__(:define_collection_tester,   self)
  #
  model.__send__(:define_collection_single_receiver, self)                                                                                                          
end