Class: Jei::Serializer

Inherits:
Object
  • Object
show all
Defined in:
lib/jei/serializer.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, options = nil) ⇒ Serializer

Returns a new instance of Serializer.

Parameters:

  • resource (#id)
  • options (Hash<Symbol, Object>) (defaults to: nil)


66
67
68
69
# File 'lib/jei/serializer.rb', line 66

def initialize(resource, options = nil)
  @resource = resource
  @options = options
end

Instance Attribute Details

#resourceObject (readonly)

Returns:

  • (Object)


4
5
6
# File 'lib/jei/serializer.rb', line 4

def resource
  @resource
end

Class Method Details

.attribute(name, &blk) ⇒ Object

Parameters:

  • name (Symbol)


19
20
21
22
# File 'lib/jei/serializer.rb', line 19

def self.attribute(name, &blk)
  value = block_given? ? blk : name
  fields[:attributes][name] = Attribute.new(name, value)
end

.attributes(name, ...) ⇒ Object

Parameters:

  • name (Symbol)
  • ... (Symbol)


14
15
16
# File 'lib/jei/serializer.rb', line 14

def self.attributes(*names)
  names.each { |name| attribute(name) }
end

.belongs_to(name, options = {}, &blk) ⇒ Object

Parameters:

  • name (Symbol)
  • options (Hash<Symbol, Object>) (defaults to: {})

See Also:



27
28
29
30
31
# File 'lib/jei/serializer.rb', line 27

def self.belongs_to(name, options = {}, &blk)
  value = block_given? ? blk : name
  fields[:relationships][name] =
    BelongsToRelationship.new(name, value, options)
end

.factory(resource, klass = nil) ⇒ Serializer

Instantiates a new serializer based on the type of the given resource.

This assumes serializer classes are defined in the global namespace. If not, a serializer class can be passed to override the lookup.

Examples:

artist = Artist.new

serializer = Serializer.factory(artist)
# => #<ArtistSerializer>

serializer = Serializer.factory(artist, SimpleArtistSerializer)
# => #<SimpleArtistSerializer>

Parameters:

  • resource (Object)
  • klass (Class) (defaults to: nil)

    the class used instead of serializer lookup

Returns:



59
60
61
62
# File 'lib/jei/serializer.rb', line 59

def self.factory(resource, klass = nil)
  klass ||= const_get("#{resource.class.name}Serializer")
  klass.new(resource)
end

.fieldsHash<Symbol, Attribute>

Returns:



7
8
9
# File 'lib/jei/serializer.rb', line 7

def self.fields
  @fields ||= Hash.new { |h, k| h[k] = {} }
end

.has_many(name, options = {}, &blk) ⇒ Object

Parameters:

  • name (Symbol)
  • options (Hash<Symbol, Object>) (defaults to: {})

See Also:



36
37
38
39
40
# File 'lib/jei/serializer.rb', line 36

def self.has_many(name, options = {}, &blk)
  value = block_given? ? blk : name
  fields[:relationships][name] =
    HasManyRelationship.new(name, value, options)
end

Instance Method Details

#==(other) ⇒ Boolean Also known as: eql?

Returns:

  • (Boolean)


109
110
111
# File 'lib/jei/serializer.rb', line 109

def ==(other)
  hash == other.hash
end

#attributes(fieldset = nil) ⇒ Hash<Symbol, Attribute>

Parameters:

  • fieldset (Array<Symbol>) (defaults to: nil)

Returns:



83
84
85
# File 'lib/jei/serializer.rb', line 83

def attributes(fieldset = nil)
  fields(:attributes, fieldset)
end

#hashFixnum

Returns a digest for this serializer.

The second element is shifted to preserve order.

Returns:

  • (Fixnum)


119
120
121
# File 'lib/jei/serializer.rb', line 119

def hash
  type.hash ^ (id.hash >> 1)
end

#idString

Returns:

  • (String)


72
73
74
# File 'lib/jei/serializer.rb', line 72

def id
  resource.id.to_s
end

#keyArray<String>

Returns:

  • (Array<String>)


104
105
106
# File 'lib/jei/serializer.rb', line 104

def key
  [type, id]
end

Returns:

  • (Array<Link>, nil)


94
95
96
# File 'lib/jei/serializer.rb', line 94

def links
  nil
end

#optionsHash<Symbol, Object>

Returns:

  • (Hash<Symbol, Object>)


99
100
101
# File 'lib/jei/serializer.rb', line 99

def options
  @options ||= {}
end

#relationships(fieldset = nil) ⇒ Hash<Symbol, Relationship>

Parameters:

  • fieldset (Array<Symbol>) (defaults to: nil)

Returns:



89
90
91
# File 'lib/jei/serializer.rb', line 89

def relationships(fieldset = nil)
  fields(:relationships, fieldset)
end

#typeString

Returns:

  • (String)


77
78
79
# File 'lib/jei/serializer.rb', line 77

def type
  "#{resource.class.name.downcase}s"
end