class RSolr::Field

def self.class_for_field(field_type)

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

def self.instance(attrs, value)

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

def as_json

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

def initialize(attrs, source_value)

"value" should be something that responds to #_to_s
"attrs" must be a hash
def initialize(attrs, source_value)
  @attrs = attrs
  @source_value = source_value
end

def name

the value of the "name" attribute
def name
  attrs[:name]
end

def value

def value
  source_value
end