pmp 0.1.1 → 0.1.2
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/lib/pmp/client.rb +3 -3
- data/lib/pmp/collection_document.rb +4 -0
- data/lib/pmp/link.rb +30 -6
- data/lib/pmp/parser.rb +2 -8
- data/lib/pmp/version.rb +1 -1
- data/spec/link_spec.rb +14 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1aaa1c5c06065ba12e2b7b0ed571fb423b4bc845
|
4
|
+
data.tar.gz: 614cac49e7b7e22ce65a84e8f9378f3ca69cfa78
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afc288ea482769b5b8423403242bb0951ed9c7aa9c279da3b687a4d5c7d405596a96bf2459a42052a2a57d21b534368075e5460109d3aa691348f587d677a14c
|
7
|
+
data.tar.gz: aa8b076cb62f6b9f0d635836208633a31f79129c6aa77dc210f744abb6bd8cb6e7558d6e755df31e071b787e3d5e8bc693d116d6670ca901872cb3ab0d321cb4
|
data/lib/pmp/client.rb
CHANGED
@@ -11,11 +11,11 @@ module PMP
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def token(opts={})
|
14
|
-
PMP::Token.new(options.merge(opts)).get_token
|
14
|
+
@token ||= PMP::Token.new(options.merge(opts)).get_token
|
15
15
|
end
|
16
16
|
|
17
|
-
def root(opts={}, &block)
|
18
|
-
PMP::CollectionDocument.new(options.merge(opts), &block)
|
17
|
+
def root(opts={}, &block)
|
18
|
+
@root ||= PMP::CollectionDocument.new(options.merge(opts), &block)
|
19
19
|
end
|
20
20
|
|
21
21
|
end
|
@@ -30,6 +30,10 @@ module PMP
|
|
30
30
|
# private var to save links obj, to handle link additions
|
31
31
|
attr_accessor :links
|
32
32
|
|
33
|
+
# this is a tricky, read-only list of items, same as if loaded from link->item links
|
34
|
+
# do not put into json form of this doc
|
35
|
+
attr_accessor :items
|
36
|
+
|
33
37
|
# document is the original json derived doc used to create this resource
|
34
38
|
# assumption is that doc is a parsed json doc confirming to collection.doc+json
|
35
39
|
# TODO: check if this is a json string or hash, for now assume it has been mashified
|
data/lib/pmp/link.rb
CHANGED
@@ -25,13 +25,26 @@ module PMP
|
|
25
25
|
|
26
26
|
attr_accessor :params
|
27
27
|
|
28
|
-
def initialize(parent, link)
|
28
|
+
def initialize(parent=PMP::CollectionDocument.new, link={})
|
29
29
|
super()
|
30
|
-
self.parent = parent
|
30
|
+
self.parent = parent
|
31
31
|
self.params = link.delete('params') || {}
|
32
|
+
# puts "params: #{params.inspect}"
|
32
33
|
parse_attributes(link)
|
33
34
|
end
|
34
35
|
|
36
|
+
def href
|
37
|
+
self[:href]
|
38
|
+
end
|
39
|
+
|
40
|
+
def href_template
|
41
|
+
self[:href_template]
|
42
|
+
end
|
43
|
+
|
44
|
+
def method
|
45
|
+
self[:method]
|
46
|
+
end
|
47
|
+
|
35
48
|
def attributes
|
36
49
|
HashWithIndifferentAccess.new(marshal_dump)
|
37
50
|
end
|
@@ -45,17 +58,28 @@ module PMP
|
|
45
58
|
end
|
46
59
|
|
47
60
|
def url
|
61
|
+
# puts "url href_template: #{href_template}"
|
62
|
+
# puts "url href: #{href}"
|
48
63
|
URITemplate.new(href_template || href).expand(params)
|
49
64
|
end
|
50
65
|
|
51
66
|
def retrieve
|
52
|
-
|
67
|
+
# puts "retrieve method: #{method}"
|
68
|
+
# puts "retrieve url: #{url}"
|
69
|
+
parent.request((method || 'get').to_sym, url)
|
53
70
|
end
|
54
71
|
|
55
72
|
def method_missing(method, *args)
|
56
|
-
|
57
|
-
|
58
|
-
|
73
|
+
# puts "mm: #{method}"
|
74
|
+
# this is a method the link supports, call the link
|
75
|
+
# if this is an assignment, assign to the link
|
76
|
+
# if you want to assign to a linked doc(s), need to retrieve first
|
77
|
+
if self.respond_to?(method)
|
78
|
+
self.send(method, *args)
|
79
|
+
elsif method.to_s.last == '='
|
80
|
+
super
|
81
|
+
else
|
82
|
+
# puts "mm retrieve and send: #{method}"
|
59
83
|
self.retrieve.send(method, *args)
|
60
84
|
end
|
61
85
|
end
|
data/lib/pmp/parser.rb
CHANGED
@@ -11,9 +11,6 @@ module PMP
|
|
11
11
|
result['links'] = extract_links
|
12
12
|
result['attributes'] = extract_attributes
|
13
13
|
|
14
|
-
# more elegant?
|
15
|
-
result['attributes'].delete('items')
|
16
|
-
|
17
14
|
result
|
18
15
|
end
|
19
16
|
|
@@ -74,19 +71,16 @@ module PMP
|
|
74
71
|
end
|
75
72
|
|
76
73
|
def parse_link(name, info)
|
77
|
-
|
78
|
-
return parse_query_links(info) if (name.to_s == 'query')
|
79
|
-
|
80
74
|
if !info.is_a?(Array)
|
81
75
|
Link.new(self, info)
|
82
76
|
elsif info.size == 1
|
83
77
|
Link.new(self, info.first)
|
84
78
|
elsif info.size > 0
|
85
|
-
info
|
79
|
+
parse_links_list(info)
|
86
80
|
end
|
87
81
|
end
|
88
82
|
|
89
|
-
def
|
83
|
+
def parse_links_list(links)
|
90
84
|
links.inject({}) do |results, query|
|
91
85
|
rel = query['rels'].first
|
92
86
|
results[rel] = Link.new(self, query)
|
data/lib/pmp/version.rb
CHANGED
data/spec/link_spec.rb
CHANGED
@@ -18,6 +18,14 @@ describe PMP::Link do
|
|
18
18
|
@link.wont_be_nil
|
19
19
|
end
|
20
20
|
|
21
|
+
it "has a parent" do
|
22
|
+
@link = PMP::Link.new
|
23
|
+
@link.parent.wont_be_nil
|
24
|
+
|
25
|
+
@link = PMP::Link.new({}, @info)
|
26
|
+
@link.parent.must_equal({})
|
27
|
+
end
|
28
|
+
|
21
29
|
it "can save params to attributes" do
|
22
30
|
@link.href.must_equal 'http://api-sandbox.pmp.io/docs/'
|
23
31
|
end
|
@@ -31,7 +39,12 @@ describe PMP::Link do
|
|
31
39
|
end
|
32
40
|
|
33
41
|
it "gets a url based on an href string" do
|
34
|
-
@link.
|
42
|
+
@link.href.must_equal 'http://api-sandbox.pmp.io/docs/'
|
43
|
+
@link.href_template.must_be_nil
|
44
|
+
@link.params.must_equal({})
|
45
|
+
|
46
|
+
url = @link.url
|
47
|
+
url.must_equal 'http://api-sandbox.pmp.io/docs/'
|
35
48
|
end
|
36
49
|
|
37
50
|
it "can get a link for templated href" do
|