class RSolr::Field

Attributes

attrs[RW]

“attrs” is a hash for setting the “doc” xml attributes “value” is the text value for the node

source_value[RW]

“attrs” is a hash for setting the “doc” xml attributes “value” is the text value for the node

Private Class Methods

class_for_field(field_type) click to toggle source
# File lib/rsolr/field.rb, line 18
def self.class_for_field(field_type)
  potential_class_name = field_type + 'Field'.freeze
  search_scope = Module.nesting[1]
  search_scope.const_defined?(potential_class_name, false) ? search_scope.const_get(potential_class_name) : self
end
instance(attrs, value) click to toggle source
# File lib/rsolr/field.rb, line 3
def self.instance(attrs, value)
  attrs = attrs.dup
  field_type = attrs.delete(:type) {  value.class.name }

  klass = if field_type.is_a? String
            class_for_field(field_type)
          elsif field_type.is_a? Class
            field_type
          else
            self
          end

  klass.new(attrs, value)
end
new(attrs, source_value) click to toggle source

“attrs” must be a hash “value” should be something that responds to _to_s

# File lib/rsolr/field.rb, line 31
def initialize(attrs, source_value)
  @attrs = attrs
  @source_value = source_value
end

Private Instance Methods

as_json() click to toggle source
# File lib/rsolr/field.rb, line 45
def as_json
  if attrs[:update]
    { attrs[:update] => value }
  elsif attrs.any? { |k, _| k != :name }
    hash = attrs.dup
    hash.delete(:name)
    hash.merge(value: value)
  else
    value
  end
end
name() click to toggle source

the value of the “name” attribute

# File lib/rsolr/field.rb, line 37
def name
  attrs[:name]
end
value() click to toggle source
# File lib/rsolr/field.rb, line 41
def value
  source_value
end