puree 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -1
- data/README.md +16 -339
- data/lib/puree.rb +15 -2
- data/lib/puree/collection.rb +161 -32
- data/lib/puree/configuration.rb +1 -5
- data/lib/puree/dataset.rb +95 -88
- data/lib/puree/download.rb +170 -12
- data/lib/puree/event.rb +16 -11
- data/lib/puree/journal.rb +5 -2
- data/lib/puree/map.rb +13 -2
- data/lib/puree/organisation.rb +16 -15
- data/lib/puree/person.rb +38 -16
- data/lib/puree/project.rb +163 -3
- data/lib/puree/publication.rb +132 -15
- data/lib/puree/publisher.rb +6 -2
- data/lib/puree/resource.rb +95 -70
- data/lib/puree/server.rb +147 -0
- data/lib/puree/version.rb +1 -1
- data/puree.gemspec +2 -2
- data/spec/collection.rb +15 -6
- data/spec/dataset.rb +25 -24
- data/spec/spec_helper.rb +14 -2
- metadata +8 -7
data/lib/puree/project.rb
CHANGED
@@ -7,18 +7,178 @@ module Puree
|
|
7
7
|
# @param endpoint [String]
|
8
8
|
# @param optional username [String]
|
9
9
|
# @param optional password [String]
|
10
|
-
|
10
|
+
# @param optional basic_auth [Boolean]
|
11
|
+
def initialize(endpoint: nil, username: nil, password: nil, basic_auth: nil)
|
11
12
|
super(api: :project,
|
12
13
|
endpoint: endpoint,
|
13
14
|
username: username,
|
14
|
-
password: password
|
15
|
+
password: password,
|
16
|
+
bleeding: false,
|
17
|
+
basic_auth: basic_auth)
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
# Acronym
|
23
|
+
#
|
24
|
+
# @return [String]
|
25
|
+
def acronym
|
26
|
+
path = '/acronym'
|
27
|
+
xpath_query_for_single_value path
|
28
|
+
end
|
29
|
+
|
30
|
+
# Description
|
31
|
+
#
|
32
|
+
# @return [String]
|
33
|
+
def description
|
34
|
+
path = '/description/localizedString'
|
35
|
+
xpath_query_for_single_value path
|
36
|
+
end
|
37
|
+
|
38
|
+
# Organisation
|
39
|
+
#
|
40
|
+
# @return [Array<Hash>]
|
41
|
+
def organisation
|
42
|
+
path = '/organisations/association/organisation'
|
43
|
+
xpath_result = xpath_query path
|
44
|
+
data = []
|
45
|
+
xpath_result.each do |i|
|
46
|
+
o = {}
|
47
|
+
o['uuid'] = i.xpath('@uuid').text.strip
|
48
|
+
o['name'] = i.xpath('name/localizedString').text.strip
|
49
|
+
o['type'] = i.xpath('typeClassification/term/localizedString').text.strip
|
50
|
+
data << o
|
51
|
+
end
|
52
|
+
data
|
53
|
+
end
|
54
|
+
|
55
|
+
# Owner
|
56
|
+
#
|
57
|
+
# @return [Hash]
|
58
|
+
def owner
|
59
|
+
path = '/owner'
|
60
|
+
xpath_result = xpath_query path
|
61
|
+
o = {}
|
62
|
+
o['uuid'] = xpath_result.xpath('@uuid').text.strip
|
63
|
+
o['name'] = xpath_result.xpath('name/localizedString').text.strip
|
64
|
+
o['type'] = xpath_result.xpath('typeClassification/term/localizedString').text.strip
|
65
|
+
o
|
66
|
+
end
|
67
|
+
|
68
|
+
# Person (internal, external, other)
|
69
|
+
#
|
70
|
+
# @return [Array<Hash>]
|
71
|
+
def person
|
72
|
+
data = {}
|
73
|
+
# internal
|
74
|
+
path = '/persons/participantAssociation'
|
75
|
+
xpath_result = xpath_query path
|
76
|
+
internal = []
|
77
|
+
external = []
|
78
|
+
other = []
|
79
|
+
|
80
|
+
xpath_result.each do |i|
|
81
|
+
o = {}
|
82
|
+
name = {}
|
83
|
+
name['first'] = i.xpath('person/name/firstName').text.strip
|
84
|
+
name['last'] = i.xpath('person/name/lastName').text.strip
|
85
|
+
o['name'] = name
|
86
|
+
o['role'] = i.xpath('personRole/term/localizedString').text.strip
|
87
|
+
|
88
|
+
uuid_internal = i.at_xpath('person/@uuid')
|
89
|
+
uuid_external = i.at_xpath('externalPerson/@uuid')
|
90
|
+
if uuid_internal
|
91
|
+
o['uuid'] = uuid_internal
|
92
|
+
internal << o
|
93
|
+
elsif uuid_external
|
94
|
+
o['uuid'] = uuid_external
|
95
|
+
external << o
|
96
|
+
else
|
97
|
+
other << o
|
98
|
+
o['uuid'] = ''
|
99
|
+
end
|
100
|
+
end
|
101
|
+
data['internal'] = internal
|
102
|
+
data['external'] = external
|
103
|
+
data['other'] = other
|
104
|
+
data
|
105
|
+
end
|
106
|
+
|
107
|
+
# Status
|
108
|
+
#
|
109
|
+
# @return [String]
|
110
|
+
def status
|
111
|
+
path = '/status/term/localizedString'
|
112
|
+
xpath_query_for_single_value path
|
113
|
+
end
|
114
|
+
|
115
|
+
# Temporal, expected and actual start and end dates as UTC datetime.
|
116
|
+
#
|
117
|
+
# @return [Hash]
|
118
|
+
def temporal
|
119
|
+
o = {}
|
120
|
+
o['expected'] = {}
|
121
|
+
o['actual'] = {}
|
122
|
+
|
123
|
+
path = '/expectedStartDate'
|
124
|
+
xpath_result = xpath_query path
|
125
|
+
o['expected']['start'] = xpath_result.text.strip
|
126
|
+
|
127
|
+
path = '/expectedEndDate'
|
128
|
+
xpath_result = xpath_query path
|
129
|
+
o['expected']['end'] = xpath_result.text.strip
|
130
|
+
|
131
|
+
path = '/startFinishDate/startDate'
|
132
|
+
xpath_result = xpath_query path
|
133
|
+
o['actual']['start'] = xpath_result.text.strip
|
134
|
+
|
135
|
+
path = '/startFinishDate/endDate'
|
136
|
+
xpath_result = xpath_query path
|
137
|
+
o['actual']['end'] = xpath_result.text.strip
|
138
|
+
|
139
|
+
o
|
140
|
+
end
|
141
|
+
|
142
|
+
# Title
|
143
|
+
#
|
144
|
+
# @return [String]
|
145
|
+
def title
|
146
|
+
path = '/title/localizedString'
|
147
|
+
xpath_query_for_single_value path
|
148
|
+
end
|
149
|
+
|
150
|
+
# Type
|
151
|
+
#
|
152
|
+
# @return [String]
|
153
|
+
def type
|
154
|
+
path = '/typeClassification/term/localizedString'
|
155
|
+
xpath_query_for_single_value path
|
156
|
+
end
|
157
|
+
|
158
|
+
# URL
|
159
|
+
#
|
160
|
+
# @return [String]
|
161
|
+
def url
|
162
|
+
path = '/projectURL'
|
163
|
+
xpath_query_for_single_value path
|
15
164
|
end
|
16
165
|
|
17
166
|
# All metadata
|
18
167
|
#
|
19
168
|
# @return [Hash]
|
20
169
|
def metadata
|
21
|
-
super
|
170
|
+
o = super
|
171
|
+
o['acronym'] = acronym
|
172
|
+
o['description'] = description
|
173
|
+
o['organisation'] = organisation
|
174
|
+
o['owner'] = owner
|
175
|
+
o['person'] = person
|
176
|
+
o['status'] = status
|
177
|
+
o['temporal'] = temporal
|
178
|
+
o['title'] = title
|
179
|
+
o['type'] = type
|
180
|
+
o['url'] = url
|
181
|
+
o
|
22
182
|
end
|
23
183
|
|
24
184
|
end
|
data/lib/puree/publication.rb
CHANGED
@@ -7,20 +7,41 @@ module Puree
|
|
7
7
|
# @param endpoint [String]
|
8
8
|
# @param optional username [String]
|
9
9
|
# @param optional password [String]
|
10
|
-
|
10
|
+
# @param optional basic_auth [Boolean]
|
11
|
+
def initialize(endpoint: nil, username: nil, password: nil, basic_auth: nil)
|
11
12
|
super(api: :publication,
|
12
13
|
endpoint: endpoint,
|
13
14
|
username: username,
|
14
|
-
password: password
|
15
|
+
password: password,
|
16
|
+
basic_auth: basic_auth)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Category
|
20
|
+
#
|
21
|
+
# @return [String]
|
22
|
+
def category
|
23
|
+
path = '/publicationCategory/publicationCategory/term/localizedString'
|
24
|
+
xpath_query_for_single_value path
|
15
25
|
end
|
16
26
|
|
17
27
|
# Description
|
18
28
|
#
|
19
29
|
# @return [String]
|
20
30
|
def description
|
21
|
-
path = '
|
22
|
-
|
23
|
-
|
31
|
+
path = '/abstract/localizedString'
|
32
|
+
xpath_query_for_single_value path
|
33
|
+
end
|
34
|
+
|
35
|
+
# Event
|
36
|
+
#
|
37
|
+
# @return [Hash]
|
38
|
+
def event
|
39
|
+
path = '/event'
|
40
|
+
xpath_result = xpath_query path
|
41
|
+
o = {}
|
42
|
+
o['uuid'] = xpath_result.xpath('@uuid').text.strip
|
43
|
+
o['title'] = xpath_result.xpath('title/localizedString').text.strip
|
44
|
+
o
|
24
45
|
end
|
25
46
|
|
26
47
|
# Digital Object Identifier
|
@@ -28,16 +49,15 @@ module Puree
|
|
28
49
|
# @return [String]
|
29
50
|
def doi
|
30
51
|
path = '//doi'
|
31
|
-
|
32
|
-
xpath_result ? xpath_result.text.strip : ''
|
52
|
+
xpath_query_for_single_value path
|
33
53
|
end
|
34
54
|
|
35
55
|
# Supporting file
|
36
56
|
#
|
37
57
|
# @return [Array<Hash>]
|
38
58
|
def file
|
39
|
-
path = '
|
40
|
-
xpath_result =
|
59
|
+
path = '/electronicVersionAssociations/electronicVersionFileAssociations/electronicVersionFileAssociation/file'
|
60
|
+
xpath_result = xpath_query path
|
41
61
|
docs = []
|
42
62
|
xpath_result.each do |d|
|
43
63
|
doc = {}
|
@@ -51,22 +71,112 @@ module Puree
|
|
51
71
|
docs.uniq
|
52
72
|
end
|
53
73
|
|
74
|
+
# Organisation
|
75
|
+
#
|
76
|
+
# @return [Array<Hash>]
|
77
|
+
def organisation
|
78
|
+
path = '/organisations/association/organisation'
|
79
|
+
xpath_result = xpath_query path
|
80
|
+
data = []
|
81
|
+
xpath_result.each do |i|
|
82
|
+
o = {}
|
83
|
+
o['uuid'] = i.xpath('@uuid').text.strip
|
84
|
+
o['name'] = i.xpath('name/localizedString').text.strip
|
85
|
+
o['type'] = i.xpath('typeClassification/term/localizedString').text.strip
|
86
|
+
data << o
|
87
|
+
end
|
88
|
+
data
|
89
|
+
end
|
90
|
+
|
91
|
+
# Page
|
92
|
+
#
|
93
|
+
# @return [Array<String>]
|
94
|
+
def page
|
95
|
+
path = '/numberOfPages'
|
96
|
+
xpath_query_for_single_value path
|
97
|
+
end
|
98
|
+
|
99
|
+
# Person (internal, external, other)
|
100
|
+
#
|
101
|
+
# @return [Array<Hash>]
|
102
|
+
def person
|
103
|
+
data = {}
|
104
|
+
# internal
|
105
|
+
path = '/persons/personAssociation'
|
106
|
+
xpath_result = xpath_query path
|
107
|
+
internal = []
|
108
|
+
external = []
|
109
|
+
other = []
|
110
|
+
|
111
|
+
xpath_result.each do |i|
|
112
|
+
o = {}
|
113
|
+
name = {}
|
114
|
+
name['first'] = i.xpath('name/firstName').text.strip
|
115
|
+
name['last'] = i.xpath('name/lastName').text.strip
|
116
|
+
o['name'] = name
|
117
|
+
o['role'] = i.xpath('personRole/term/localizedString').text.strip
|
118
|
+
|
119
|
+
uuid_internal = i.at_xpath('person/@uuid')
|
120
|
+
uuid_external = i.at_xpath('externalPerson/@uuid')
|
121
|
+
if uuid_internal
|
122
|
+
o['uuid'] = uuid_internal
|
123
|
+
internal << o
|
124
|
+
elsif uuid_external
|
125
|
+
o['uuid'] = uuid_external
|
126
|
+
external << o
|
127
|
+
else
|
128
|
+
other << o
|
129
|
+
o['uuid'] = ''
|
130
|
+
end
|
131
|
+
end
|
132
|
+
data['internal'] = internal
|
133
|
+
data['external'] = external
|
134
|
+
data['other'] = other
|
135
|
+
data
|
136
|
+
end
|
137
|
+
|
138
|
+
# Status
|
139
|
+
#
|
140
|
+
# @return [Array<Hash>]
|
141
|
+
def status
|
142
|
+
path = '/publicationStatuses/publicationStatus'
|
143
|
+
xpath_result = xpath_query path
|
144
|
+
data = []
|
145
|
+
xpath_result.each do |i|
|
146
|
+
o = {}
|
147
|
+
o['stage'] = i.xpath('publicationStatus/term/localizedString').text.strip
|
148
|
+
ymd = {}
|
149
|
+
ymd['year'] = i.xpath('publicationDate/year').text.strip
|
150
|
+
ymd['month'] = i.xpath('publicationDate/month').text.strip
|
151
|
+
ymd['day'] = i.xpath('publicationDate/day').text.strip
|
152
|
+
o['date'] = Puree::Date.normalise(ymd)
|
153
|
+
data << o
|
154
|
+
end
|
155
|
+
data
|
156
|
+
end
|
157
|
+
|
54
158
|
# Title
|
55
159
|
#
|
56
160
|
# @return [String]
|
57
161
|
def title
|
58
|
-
path = '
|
59
|
-
|
60
|
-
xpath_result ? xpath_result.text.strip : ''
|
162
|
+
path = '/title'
|
163
|
+
xpath_query_for_single_value path
|
61
164
|
end
|
62
165
|
|
63
166
|
# Subtitle
|
64
167
|
#
|
65
168
|
# @return [String]
|
66
169
|
def subtitle
|
67
|
-
path = '
|
68
|
-
|
69
|
-
|
170
|
+
path = '/subtitle'
|
171
|
+
xpath_query_for_single_value path
|
172
|
+
end
|
173
|
+
|
174
|
+
# Type
|
175
|
+
#
|
176
|
+
# @return [String]
|
177
|
+
def type
|
178
|
+
path = '/typeClassification/term/localizedString'
|
179
|
+
xpath_query_for_single_value path
|
70
180
|
end
|
71
181
|
|
72
182
|
# All metadata
|
@@ -74,11 +184,18 @@ module Puree
|
|
74
184
|
# @return [Hash]
|
75
185
|
def metadata
|
76
186
|
o = super
|
187
|
+
o['category'] = category
|
77
188
|
o['description'] = description
|
78
189
|
o['doi'] = doi
|
190
|
+
o['event'] = event
|
79
191
|
o['file'] = file
|
192
|
+
o['organisation'] = organisation
|
193
|
+
o['page'] = page
|
194
|
+
o['person'] = person
|
195
|
+
o['status'] = status
|
80
196
|
o['subtitle'] = subtitle
|
81
197
|
o['title'] = title
|
198
|
+
o['type'] = type
|
82
199
|
o
|
83
200
|
end
|
84
201
|
|
data/lib/puree/publisher.rb
CHANGED
@@ -7,13 +7,17 @@ module Puree
|
|
7
7
|
# @param endpoint [String]
|
8
8
|
# @param optional username [String]
|
9
9
|
# @param optional password [String]
|
10
|
-
|
10
|
+
# @param optional basic_auth [Boolean]
|
11
|
+
def initialize(endpoint: nil, username: nil, password: nil, basic_auth: nil)
|
11
12
|
super(api: :publisher,
|
12
13
|
endpoint: endpoint,
|
13
14
|
username: username,
|
14
|
-
password: password
|
15
|
+
password: password,
|
16
|
+
basic_auth: basic_auth)
|
15
17
|
end
|
16
18
|
|
19
|
+
|
20
|
+
|
17
21
|
# All metadata
|
18
22
|
#
|
19
23
|
# @return [Hash]
|
data/lib/puree/resource.rb
CHANGED
@@ -4,27 +4,48 @@ module Puree
|
|
4
4
|
#
|
5
5
|
class Resource
|
6
6
|
|
7
|
+
attr_reader :response
|
8
|
+
|
7
9
|
# @param api [String]
|
8
10
|
# @param endpoint [String]
|
9
11
|
# @param optional username [String]
|
10
12
|
# @param optional password [String]
|
13
|
+
# @param optional bleeding [Boolean]
|
14
|
+
# @param optional basic_auth [Boolean]
|
11
15
|
def initialize( api: nil,
|
12
16
|
endpoint: nil,
|
13
17
|
username: nil,
|
14
|
-
password: nil
|
18
|
+
password: nil,
|
19
|
+
bleeding: true,
|
20
|
+
basic_auth: nil)
|
15
21
|
@resource_type = api
|
16
22
|
@api_map = Puree::Map.new.get
|
17
|
-
@endpoint = endpoint.nil? ? Puree
|
18
|
-
@
|
19
|
-
@
|
23
|
+
@endpoint = endpoint.nil? ? Puree.endpoint : endpoint
|
24
|
+
@latest_api = bleeding
|
25
|
+
@basic_auth = basic_auth.nil? ? Puree.basic_auth : basic_auth
|
26
|
+
if @basic_auth === true
|
27
|
+
@username = username.nil? ? Puree.username : username
|
28
|
+
@password = password.nil? ? Puree.password : password
|
29
|
+
end
|
20
30
|
end
|
21
31
|
|
22
32
|
# Get
|
23
33
|
#
|
24
34
|
# @param uuid [String]
|
25
35
|
# @param id [String]
|
26
|
-
# @return [
|
27
|
-
def get(uuid: nil, id: nil)
|
36
|
+
# @return [Hash]
|
37
|
+
def get(uuid: nil, id: nil, rendering: :xml_long)
|
38
|
+
reset
|
39
|
+
|
40
|
+
@options = {
|
41
|
+
basic_auth: @basic_auth,
|
42
|
+
latest_api: @latest_api,
|
43
|
+
resource_type: @resource_type.to_sym,
|
44
|
+
rendering: rendering,
|
45
|
+
uuid: uuid,
|
46
|
+
id: id
|
47
|
+
}
|
48
|
+
|
28
49
|
missing = missing_credentials
|
29
50
|
if !missing.empty?
|
30
51
|
missing.each do |m|
|
@@ -35,19 +56,15 @@ module Puree
|
|
35
56
|
|
36
57
|
# strip any trailing slash
|
37
58
|
@endpoint = @endpoint.sub(/(\/)+$/, '')
|
38
|
-
@auth = Base64::strict_encode64(@username + ':' + @password)
|
39
59
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
'Accept' => 'application/xml',
|
49
|
-
'Authorization' => 'Basic ' + @auth
|
50
|
-
}
|
60
|
+
headers = {}
|
61
|
+
headers['Accept'] = 'application/xml'
|
62
|
+
|
63
|
+
if @options[:basic_auth] === true
|
64
|
+
@auth = Base64::strict_encode64(@username + ':' + @password)
|
65
|
+
headers['Authorization'] = 'Basic ' + @auth
|
66
|
+
end
|
67
|
+
|
51
68
|
query = {}
|
52
69
|
query['rendering'] = @options[:rendering]
|
53
70
|
|
@@ -59,26 +76,26 @@ module Puree
|
|
59
76
|
end
|
60
77
|
end
|
61
78
|
|
62
|
-
|
63
|
-
|
64
|
-
rescue HTTParty::Error => e
|
65
|
-
puts 'HttParty::Error '+ e.message
|
79
|
+
if @options['rendering']
|
80
|
+
query['rendering'] = @options['rendering']
|
66
81
|
end
|
67
82
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
83
|
+
begin
|
84
|
+
url = build_url
|
85
|
+
req = HTTP.headers accept: headers['Accept']
|
86
|
+
if @options[:basic_auth]
|
87
|
+
req = req.auth headers['Authorization']
|
88
|
+
end
|
89
|
+
@response = req.get(url, params: query)
|
90
|
+
@doc = Nokogiri::XML @response.body
|
91
|
+
@doc.remove_namespaces!
|
92
|
+
|
93
|
+
rescue HTTP::Error => e
|
94
|
+
puts 'HTTP::Error '+ e.message
|
72
95
|
end
|
73
|
-
@response
|
74
|
-
end
|
75
96
|
|
76
|
-
|
77
|
-
|
78
|
-
# @return [HTTParty::Response]
|
79
|
-
# @return [Nil]
|
80
|
-
def response
|
81
|
-
@response ? @response : nil
|
97
|
+
get_data? ? metadata : {}
|
98
|
+
|
82
99
|
end
|
83
100
|
|
84
101
|
# Set content
|
@@ -103,24 +120,24 @@ module Puree
|
|
103
120
|
#
|
104
121
|
# @return [String]
|
105
122
|
def created
|
106
|
-
|
107
|
-
|
123
|
+
path = '/created'
|
124
|
+
xpath_query_for_single_value path
|
108
125
|
end
|
109
126
|
|
110
127
|
# Modified (UTC datetime)
|
111
128
|
#
|
112
129
|
# @return [String]
|
113
130
|
def modified
|
114
|
-
|
115
|
-
|
131
|
+
path = '/modified'
|
132
|
+
xpath_query_for_single_value path
|
116
133
|
end
|
117
134
|
|
118
135
|
# UUID
|
119
136
|
#
|
120
137
|
# @return [String]
|
121
138
|
def uuid
|
122
|
-
|
123
|
-
|
139
|
+
path = '/@uuid'
|
140
|
+
xpath_query_for_single_value path
|
124
141
|
end
|
125
142
|
|
126
143
|
# All metadata
|
@@ -139,30 +156,13 @@ module Puree
|
|
139
156
|
private
|
140
157
|
|
141
158
|
|
142
|
-
|
143
|
-
path = '//renderedItem/@renderedContentUUID'
|
144
|
-
xpath_result = xpath_query path
|
145
|
-
xpath_result.each { |i| @uuids << i.text.strip }
|
146
|
-
end
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
# Node
|
153
|
-
#
|
154
|
-
# @return [Hash]
|
155
|
-
def node(path)
|
156
|
-
@content ? @content[path] : {}
|
157
|
-
end
|
158
|
-
|
159
|
-
|
160
|
-
# Is there any data after get?
|
159
|
+
# Is there any data after get? For a response that provides a count of the results.
|
161
160
|
#
|
162
161
|
# @return [Boolean]
|
163
162
|
def get_data?
|
164
|
-
|
165
|
-
@
|
163
|
+
path = service_xpath_count
|
164
|
+
xpath_result = @doc.xpath path
|
165
|
+
xpath_result.text.strip === '1' ? true : false
|
166
166
|
end
|
167
167
|
|
168
168
|
def service_name
|
@@ -175,6 +175,18 @@ module Puree
|
|
175
175
|
@api_map[:resource_type][resource_type][:response]
|
176
176
|
end
|
177
177
|
|
178
|
+
def service_xpath_base
|
179
|
+
service_response_name + '/result/content'
|
180
|
+
end
|
181
|
+
|
182
|
+
def service_xpath_count
|
183
|
+
service_response_name + '/count'
|
184
|
+
end
|
185
|
+
|
186
|
+
def service_xpath(str_to_find)
|
187
|
+
service_xpath_base + str_to_find
|
188
|
+
end
|
189
|
+
|
178
190
|
def build_url
|
179
191
|
service = service_name
|
180
192
|
if @options[:latest_api] === false
|
@@ -185,27 +197,40 @@ module Puree
|
|
185
197
|
@endpoint + '/' + service_api_mode
|
186
198
|
end
|
187
199
|
|
200
|
+
# content based
|
188
201
|
def xpath_query(path)
|
189
|
-
|
190
|
-
doc
|
191
|
-
doc.remove_namespaces!
|
192
|
-
doc.xpath path
|
202
|
+
path_from_root = service_xpath path
|
203
|
+
@doc.xpath path_from_root
|
193
204
|
end
|
194
205
|
|
206
|
+
def xpath_query_for_single_value(path)
|
207
|
+
xpath_result = xpath_query path
|
208
|
+
xpath_result ? xpath_result.text.strip : ''
|
209
|
+
end
|
210
|
+
|
211
|
+
|
195
212
|
def missing_credentials
|
196
213
|
missing = []
|
197
214
|
if @endpoint.nil?
|
198
215
|
missing << 'endpoint'
|
199
216
|
end
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
217
|
+
|
218
|
+
if @options[:basic_auth] === true
|
219
|
+
if @username.nil?
|
220
|
+
missing << 'username'
|
221
|
+
end
|
222
|
+
if @password.nil?
|
223
|
+
missing << 'password'
|
224
|
+
end
|
205
225
|
end
|
226
|
+
|
206
227
|
missing
|
207
228
|
end
|
208
229
|
|
230
|
+
def reset
|
231
|
+
@response = nil
|
232
|
+
end
|
233
|
+
|
209
234
|
alias :find :get
|
210
235
|
|
211
236
|
end
|