Class: PactBroker::Client::Hal::Entity

Inherits:
Object
  • Object
show all
Defined in:
lib/pact_broker/client/hal/entity.rb

Direct Known Subclasses

ErrorEntity

Instance Method Summary collapse

Constructor Details

#initialize(href, data, http_client, response = nil) ⇒ Entity

Returns a new instance of Entity.



14
15
16
17
18
19
20
# File 'lib/pact_broker/client/hal/entity.rb', line 14

def initialize(href, data, http_client, response = nil)
  @href = href
  @data = data
  @links = (@data || {}).fetch("_links", {})
  @client = http_client
  @response = response
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



125
126
127
128
129
130
131
132
133
# File 'lib/pact_broker/client/hal/entity.rb', line 125

def method_missing(method_name, *args, &block)
  if @data.key?(method_name.to_s)
    @data[method_name.to_s]
  elsif @links.key?(method_name)
    Link.new(@links[method_name], @client).run(*args)
  else
    nil
  end
end

Instance Method Details



62
63
64
65
66
67
68
69
70
# File 'lib/pact_broker/client/hal/entity.rb', line 62

def _link(key, fallback_key = nil)
  if @links[key]
    Link.new(@links[key], @client)
  elsif fallback_key && @links[fallback_key]
    Link.new(@links[fallback_key], @client)
  else
    nil
  end
end

#_link!(key) ⇒ Object



85
86
87
# File 'lib/pact_broker/client/hal/entity.rb', line 85

def _link!(key)
  _link(key) or raise RelationNotFoundError.new("Could not find relation '#{key}' in resource at #{@href}")
end


72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/pact_broker/client/hal/entity.rb', line 72

def _links(key)
  if @links[key] && @links[key].is_a?(Array)
    link_collection = @links[key].collect do | hash |
      Link.new(hash, @client)
    end
    Links.new(@href, key, link_collection)
  elsif @links[key].is_a?(Hash)
    Links.new(@href, key, [Link.new(@links[key], @client)])
  else
    nil
  end
end

#_links!(key) ⇒ Object



89
90
91
# File 'lib/pact_broker/client/hal/entity.rb', line 89

def _links!(key)
  _links(key) or raise RelationNotFoundError.new("Could not find relation '#{key}' in resource at #{@href}")
end

#assert_success!(_ignored = nil) ⇒ Object



139
140
141
# File 'lib/pact_broker/client/hal/entity.rb', line 139

def assert_success!(_ignored = nil)
  self
end

#can?(key) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/pact_broker/client/hal/entity.rb', line 54

def can?(key)
  @links.key? key.to_s
end

#does_not_exist?Boolean

Returns:

  • (Boolean)


113
114
115
# File 'lib/pact_broker/client/hal/entity.rb', line 113

def does_not_exist?
  false
end

#embedded_entities(key = nil) ⇒ Object



98
99
100
101
102
103
104
105
106
107
# File 'lib/pact_broker/client/hal/entity.rb', line 98

def embedded_entities(key = nil)
  embedded_ents = if key
    @data["_embedded"][key]
  else
    yield @data["_embedded"]
  end
  embedded_ents.collect do | embedded_ent |
    Entity.new(embedded_ent["_links"]["self"]["href"], embedded_ent, @client, response)
  end
end

#embedded_entityObject



93
94
95
96
# File 'lib/pact_broker/client/hal/entity.rb', line 93

def embedded_entity
  embedded_ent = yield @data["_embedded"]
  Entity.new(embedded_ent["_links"]["self"]["href"], embedded_ent, @client, response)
end

#fetch(key, fallback_key = nil) ⇒ Object



121
122
123
# File 'lib/pact_broker/client/hal/entity.rb', line 121

def fetch(key, fallback_key = nil)
  @links[key] || (fallback_key && @links[fallback_key])
end

#follow(key, http_method, *args) ⇒ Object



58
59
60
# File 'lib/pact_broker/client/hal/entity.rb', line 58

def follow(key, http_method, *args)
  Link.new(@links[key].merge(method: http_method), @client).run(*args)
end

#get(key, *args) ⇒ Object



22
23
24
# File 'lib/pact_broker/client/hal/entity.rb', line 22

def get(key, *args)
  _link(key).get(*args)
end

#get!(key, *args) ⇒ Object



26
27
28
# File 'lib/pact_broker/client/hal/entity.rb', line 26

def get!(key, *args)
  get(key, *args).assert_success!
end

#patch(key, *args) ⇒ Object



46
47
48
# File 'lib/pact_broker/client/hal/entity.rb', line 46

def patch(key, *args)
  _link(key).patch(*args)
end

#patch!(key, *args) ⇒ Object



50
51
52
# File 'lib/pact_broker/client/hal/entity.rb', line 50

def patch!(key, *args)
  patch(key, *args).assert_success!
end

#post(key, *args) ⇒ Object



30
31
32
# File 'lib/pact_broker/client/hal/entity.rb', line 30

def post(key, *args)
  _link(key).post(*args)
end

#post!(key, *args) ⇒ Object



34
35
36
# File 'lib/pact_broker/client/hal/entity.rb', line 34

def post!(key, *args)
  post(key, *args).assert_success!
end

#put(key, *args) ⇒ Object



38
39
40
# File 'lib/pact_broker/client/hal/entity.rb', line 38

def put(key, *args)
  _link(key).put(*args)
end

#put!(key, *args) ⇒ Object



42
43
44
# File 'lib/pact_broker/client/hal/entity.rb', line 42

def put!(key, *args)
  put(key, *args).assert_success!
end

#respond_to_missing?(method_name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


135
136
137
# File 'lib/pact_broker/client/hal/entity.rb', line 135

def respond_to_missing?(method_name, include_private = false)
  @data.key?(method_name) || @links.key?(method_name)
end

#responseObject



117
118
119
# File 'lib/pact_broker/client/hal/entity.rb', line 117

def response
  @response
end

#success?Boolean

Returns:

  • (Boolean)


109
110
111
# File 'lib/pact_broker/client/hal/entity.rb', line 109

def success?
  true
end