Class: ActiveFacets::ResourceManager

Inherits:
Object
  • Object
show all
Defined in:
lib/active_facets/resource_manager.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.default_resource_mapper(resource_class) ⇒ Object

Default resource mapping scheme, can be overrided with config



8
9
10
11
12
13
14
15
# File 'lib/active_facets/resource_manager.rb', line 8

def self.default_resource_mapper(resource_class)
  [].tap do |map|
    until(resource_class.superclass == BasicObject) do
      map << resource_class.name.tableize
      resource_class = resource_class.superclass
    end
  end
end

.default_serializer_mapper(resource_class, serializer, type, version, options) ⇒ Object

TODO –jdc implement recursive superclass/parentclass lookup Default serializer mapping scheme, can be overrided with config



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/active_facets/resource_manager.rb', line 20

def self.default_serializer_mapper(resource_class, serializer, type, version, options)
  case type
  when :serializer
    [
      'V' + version.to_i.to_s + '::' + resource_class.name.camelcase + '::' + resource_class.name.camelcase + type.to_s.camelcase,
      'V' + version.to_i.to_s + '::' + resource_class.name.camelcase + type.to_s.camelcase,
    ].each { |name|
      klass = name.safe_constantize
      return klass.new if klass.present?
    }
  else
    [
      'V' + version.to_i.to_s + '::' + resource_class.name.camelcase + '::' + serializer + type.to_s.camelcase,
      'V' + version.to_i.to_s + '::' + serializer + type.to_s.camelcase,
    ].find { |name|
      klass = name.safe_constantize
      return klass if klass.present?
    }
  end
end

.instanceResourceManager

Singleton

Returns:



44
45
46
# File 'lib/active_facets/resource_manager.rb', line 44

def self.instance
  @instance ||= new
end

Instance Method Details

#attribute_serializer_class_for(resource_class, attribute_name, options) ⇒ AttributeSerializer::Base

Fetches the attribute serializer registered for the given resource_class

Parameters:

  • resource_class (Object)

    to find attribute serializer class for

  • attribute_class_name (String)

    to find attribute serializer class for

  • options (Hash)

    context

Returns:

  • (AttributeSerializer::Base)


70
71
72
# File 'lib/active_facets/resource_manager.rb', line 70

def attribute_serializer_class_for(resource_class, attribute_name, options)
  fetch_serializer(resource_class, attribute_name.to_s.camelcase, :attribute_serializer, options)
end

#extract_version_from_opts(options) ⇒ Object



93
94
95
# File 'lib/active_facets/resource_manager.rb', line 93

def extract_version_from_opts(options)
  ((options.try(:[], ActiveFacets.opts_key) || {})[ActiveFacets.version_key] || ActiveFacets.default_version).to_f
end

#register(resource_class, serializer, namespace = nil) ⇒ Array

(Memoized) Associate a serializer with a resource_class

Parameters:

  • resource_class (Object)
  • serializer (Serializer::Base)
  • namespace (String) (defaults to: nil)

    (TODO –jdc currently unused)

Returns:

  • (Array)


53
54
55
# File 'lib/active_facets/resource_manager.rb', line 53

def register(resource_class, serializer, namespace = nil)
  registry[resource_class] = [serializer, namespace]
end

#resource_class_for(serializer) ⇒ Object

Fetches the resource class registered for the serializer

Parameters:

Returns:

  • (Object)


77
78
79
80
81
82
# File 'lib/active_facets/resource_manager.rb', line 77

def resource_class_for(serializer)
  registry.each_pair do |resource_class, entry|
    return resource_class if serializer == entry[0]
  end
  nil
end

#resource_map(resource_class) ⇒ Array

Fetches the set of filter and field override indexes for resource_class

Parameters:

  • resource_class (Object)

Returns:

  • (Array)

    of string indexes



87
88
89
90
91
# File 'lib/active_facets/resource_manager.rb', line 87

def resource_map(resource_class)
  memoized_resource_map[resource_class] ||= begin
    self.class.resource_mapper.call(resource_class)
  end
end

#serializer_for(resource_class, options) ⇒ Serializer::Base

Fetches the serializer registered for the resource_class

Parameters:

  • resource_class (Object)

    to find serializer for

  • options (Hash)

    context

Returns:



61
62
63
# File 'lib/active_facets/resource_manager.rb', line 61

def serializer_for(resource_class, options)
  fetch_serializer(resource_class, resource_class.name.demodulize.to_s.camelcase, :serializer, options)
end