Class: Onsi::Resource

Inherits:
Object
  • Object
show all
Defined in:
lib/onsi/resource.rb

Defined Under Namespace

Classes: InvalidResourceError

Constant Summary collapse

TYPE_KEY =
'type'.freeze
ID_KEY =
'id'.freeze
ATTRIBUTES_KEY =
'attributes'.freeze
RELATIONSHIPS_KEY =
'relationships'.freeze
META_KEY =
'meta'.freeze
DATA_KEY =
'data'.freeze
INCLUDED_KEY =
'included'.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(object, version = nil, includes: nil) ⇒ Resource

Returns a new instance of Resource.



45
46
47
48
49
50
# File 'lib/onsi/resource.rb', line 45

def initialize(object, version = nil, includes: nil)
  @object  = object
  @version = version || Model::DEFAULT_API_VERSION
  @includes = includes
  validate!
end

Instance Attribute Details

#includesObject (readonly)

Returns the value of attribute includes.



3
4
5
# File 'lib/onsi/resource.rb', line 3

def includes
  @includes
end

#objectObject (readonly)

Returns the value of attribute object.



3
4
5
# File 'lib/onsi/resource.rb', line 3

def object
  @object
end

#versionObject (readonly)

Returns the value of attribute version.



3
4
5
# File 'lib/onsi/resource.rb', line 3

def version
  @version
end

Class Method Details

.all_included(resources) ⇒ Object



38
39
40
41
42
# File 'lib/onsi/resource.rb', line 38

def all_included(resources)
  Array(resources).map(&:flat_includes).flatten.uniq do |res|
    "#{res[TYPE_KEY]}-#{res[ID_KEY]}"
  end
end

.as_resource(resource, version) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# File 'lib/onsi/resource.rb', line 16

def as_resource(resource, version)
  case resource
  when Onsi::Resource
    resource
  when Enumerable
    resource.map { |res| as_resource(res, version) }
  else
    Onsi::Resource.new(resource, version)
  end
end

.render(resource, version) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/onsi/resource.rb', line 27

def render(resource, version)
  resources = as_resource(resource, version)
  {}.tap do |root|
    root[DATA_KEY] = resources.as_json
    included = all_included(resources)
    if included.any?
      root[INCLUDED_KEY] = included
    end
  end
end

Instance Method Details

#as_json(_opts = {}) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'lib/onsi/resource.rb', line 52

def as_json(_opts = {})
  {}.tap do |root|
    root[TYPE_KEY] = type
    root[ID_KEY]   = object.id.to_s
    root[ATTRIBUTES_KEY] = generate_attributes
    append_relationships(root)
    append_meta(root)
    append_includes(root)
  end
end

#flat_includesObject



67
68
69
# File 'lib/onsi/resource.rb', line 67

def flat_includes
  rendered_includes.values.map { |root| root[DATA_KEY] }.flatten
end

#rendered_includesObject



63
64
65
# File 'lib/onsi/resource.rb', line 63

def rendered_includes
  @rendered_includes ||= perform_render_includes
end