hypermedia 1.0.7 → 1.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/api/api.rb CHANGED
@@ -41,6 +41,6 @@ module HypermediaAPI
41
41
  headers = response.to_hash
42
42
  nokogiri_html_document = Nokogiri::HTML::Document.parse(response.body, uri.to_s)
43
43
 
44
- Document.new(nokogiri_html_document, status, headers)
44
+ Document.new(nokogiri_html_document, status, headers, auth)
45
45
  end
46
46
  end
data/lib/api/document.rb CHANGED
@@ -8,10 +8,6 @@ class HypermediaAPI::Document
8
8
  klass.new_from_fields(article_element.element_children.filter('code'))
9
9
  end
10
10
 
11
- def entity_with_attribute (klass, kv_pairs)
12
- article_element = @document.at_css("article.#{klass.name.underscore}")
13
- end
14
-
15
11
  def entities (klass)
16
12
  article_elements = @document.css("article.#{klass.name.underscore}")
17
13
  article_elements.map {|article_element| klass.new_from_fields(article_element.element_children.filter('code')) }
@@ -36,26 +32,35 @@ class HypermediaAPI::Document
36
32
  @document.to_html
37
33
  end
38
34
 
39
- def initialize (nokogiri_html_document, status, headers)
35
+ def initialize (nokogiri_html_document, status, headers, auth)
40
36
  @document = nokogiri_html_document
41
37
  @status = status.to_i
42
38
  @headers = headers
39
+ @auth = auth
43
40
  end
44
41
 
45
42
  def link (css_selector)
46
43
  if a_element = @document.at_css(css_selector)
47
44
  href_uri = a_element['href']
48
- Link.new(action_uri, http_method)
45
+ HypermediaAPI::Link.new(href_uri)
49
46
  else
50
- raise MissingLink, "The API does not have a link matching '#{css_selector}'."
47
+ raise HypermediaAPI::MissingLink, "The API does not have a link matching '#{css_selector}'."
51
48
  end
52
49
  end
53
50
 
54
- def links (css_selector)
55
- @document.css(css_selector).map do |a_element|
56
- href_uri = a_element['href']
57
- Link.new(action_uri, http_method)
58
- end
51
+ def look_up_entity (klass, kv_pair)
52
+ index_link = self.link("nav#index-links a##{klass.name.underscore.pluralize}-link")
53
+ index_doc = index_link.click(basic_auth: @auth)
54
+
55
+ data_name, value = kv_pair.first
56
+ article_element = index_doc.instance_variable_get(:@document).xpath("//article[@class='#{klass.name.underscore}']/code[@data-name='#{data_name}' and text()='#{value}']/ancestor::article")
57
+ return nil unless article_element
58
+
59
+ bookmark_link_element = article_element.at_css('a[rel="bookmark"]')
60
+ bookmark_link = HypermediaAPI::Link.new(bookmark_link_element['href'])
61
+ entity_doc = bookmark_link.click(basic_auth: @auth)
62
+
63
+ entity_doc.entity(klass)
59
64
  end
60
65
 
61
66
  def status
data/lib/api/link.rb CHANGED
@@ -6,7 +6,7 @@ class HypermediaAPI::Link
6
6
  end
7
7
 
8
8
  def click (options = {})
9
- response = HypermediaAPI.get(@href_uri, options)
9
+ document = HypermediaAPI.get(@href_uri, options)
10
10
  rescue SocketError
11
11
  raise BadURI, "The client was unable to interact with a resource at #{@href_uri}."
12
12
  end
data/lib/hypermedia.rb CHANGED
@@ -8,4 +8,5 @@ require 'active_support/all'
8
8
  require_relative 'api/api.rb'
9
9
  require_relative 'api/document.rb'
10
10
  require_relative 'api/form.rb'
11
+ require_relative 'api/link.rb'
11
12
  require_relative 'api/model.rb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hypermedia
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: