pmp 0.2.0 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e96a6950ad0285f1269552f82ec2ceb83abc756
4
- data.tar.gz: c0d564eb5a48aa79242bba4033acff0c38c207ab
3
+ metadata.gz: 499ef7d634987ac1b12ec8ff9ac7c11032f3f29d
4
+ data.tar.gz: 731e197a1ba576417cc28d30c47ae21f9ece371b
5
5
  SHA512:
6
- metadata.gz: ffef1af394ef66319065fa9d09c76211bc7a6f48bf897cc0b4b878057856b08f450bb7851786cda12709003c8ecf3faaff02543ae8fbc337acf8ac49763f582d
7
- data.tar.gz: 07f5be73a5e7749597080b8c16af46e9cb6a1050e80a6b37961158dc46cd90f54adfd62392d7147166f389233a1b45f09450acc1a422b3e5235da1261ee32ddd
6
+ metadata.gz: 7c9da9f1703bc732ab9c5fe421a57d52a0d9fdcb57f1c3577b4aeab87164c7057867c9c94bff8224d5d6a7441ca94cc2b63f3bba698702b8027abaace538c056
7
+ data.tar.gz: b65cc1b02e347d3b87772cd82bd137f53b1b018a57c48bdb9ba11a28251aeb1604780e725db5a4c38d4051ba5fad1fc99eaf442200800a4f62ec2bb405dbe027
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # PMP gem
2
2
 
3
3
  [![Build Status](https://travis-ci.org/PRX/pmp.png)](https://travis-ci.org/PRX/pmp)
4
+ [![Coverage Status](https://coveralls.io/repos/PRX/pmp/badge.png)](https://coveralls.io/r/PRX/pmp)
4
5
 
5
6
  Gem to make it easier to use the PMP API, which is a hypermedia API using the collection.doc+json format.
6
7
 
@@ -11,14 +11,17 @@ module PMP
11
11
  end
12
12
 
13
13
  def credentials(opts={})
14
+ @credentials = nil if (opts != {})
14
15
  @credentials ||= PMP::Credential.new(options.merge(opts))
15
16
  end
16
17
 
17
18
  def token(opts={})
19
+ @token = nil if (opts != {})
18
20
  @token ||= PMP::Token.new(options.merge(opts)).get_token
19
21
  end
20
22
 
21
23
  def root(opts={})
24
+ @root = nil if (opts != {})
22
25
  opts = options.merge(href: endpoint).merge(opts)
23
26
  @root ||= PMP::CollectionDocument.new(opts)
24
27
  end
@@ -35,5 +38,10 @@ module PMP
35
38
  "#{endpoint}profiles/#{type}"
36
39
  end
37
40
 
41
+ # assume you want to make a call on the root doc for stuff it can do
42
+ def method_missing(method, *args)
43
+ self.root.send(method, *args)
44
+ end
45
+
38
46
  end
39
47
  end
@@ -55,7 +55,7 @@ module PMP
55
55
 
56
56
  def items
57
57
  load
58
- @items
58
+ @items ||= []
59
59
  end
60
60
 
61
61
  def attributes
@@ -126,9 +126,17 @@ module PMP
126
126
 
127
127
  setup_oauth_token
128
128
 
129
- raw = connection(options.merge({url: url})).send(method) do |request|
130
- if [:post, :put].include?(method.to_sym) && !body.blank?
131
- request.body = body.is_a?(String) ? body : body.to_json
129
+ begin
130
+ raw = connection(options.merge({url: url})).send(method) do |request|
131
+ if [:post, :put].include?(method.to_sym) && !body.blank?
132
+ request.body = body.is_a?(String) ? body : body.to_json
133
+ end
134
+ end
135
+ rescue Faraday::Error::ResourceNotFound=>not_found_ex
136
+ if (method.to_sym == :get)
137
+ raw = OpenStruct.new(body: nil, status: 404)
138
+ else
139
+ raise not_found_ex
132
140
  end
133
141
  end
134
142
 
@@ -30,12 +30,13 @@ module PMP
30
30
  faraday.request :authorization, 'Bearer', opts[:oauth_token]
31
31
  end
32
32
 
33
- faraday.request :url_encoded
34
33
  faraday.request :multipart
34
+ faraday.request :url_encoded
35
35
 
36
36
  faraday.response :mashify
37
37
  faraday.response :logger if opts[:debug]
38
38
  faraday.response :json
39
+ faraday.response :raise_error
39
40
 
40
41
  faraday.adapter opts[:adapter]
41
42
  end
@@ -91,7 +91,7 @@ module PMP
91
91
  end
92
92
 
93
93
  def parse_items(document)
94
- self.items = Array(document).collect{|i| PMP::CollectionDocument.new(document:i)}
94
+ self.items = Array(document).collect{|i| PMP::CollectionDocument.new(options.merge(document:i))}
95
95
  end
96
96
 
97
97
  end
@@ -8,20 +8,20 @@ module PMP
8
8
  @raw = raw
9
9
  @request = request
10
10
 
11
- check_for_error(raw)
11
+ # check_for_error(raw)
12
12
  end
13
13
 
14
- def check_for_error(response)
15
- status_code_type = response.status.to_s[0]
16
- case status_code_type
17
- when "2"
18
- # puts "all is well, status: #{response.status}"
19
- when "4", "5"
20
- raise "Whoops, error back from PMP: #{response.status}"
21
- else
22
- raise "Unrecongized status code: #{response.status}"
23
- end
24
- end
14
+ # def check_for_error(response)
15
+ # status_code_type = response.status.to_s[0]
16
+ # case status_code_type
17
+ # when "2"
18
+ # # puts "all is well, status: #{response.status}"
19
+ # when "4", "5"
20
+ # raise "Whoops, error back from PMP: #{response.status}"
21
+ # else
22
+ # raise "Unrecongized status code: #{response.status}"
23
+ # end
24
+ # end
25
25
 
26
26
  def body
27
27
  self.raw.body
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  module PMP
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
27
27
  gem.add_development_dependency('guard-bundler')
28
28
  gem.add_development_dependency('guard-minitest')
29
29
  gem.add_development_dependency('simplecov')
30
+ gem.add_development_dependency('coveralls')
30
31
 
31
32
  gem.add_runtime_dependency('faraday')
32
33
  gem.add_runtime_dependency('faraday_middleware')
@@ -21,7 +21,6 @@ describe PMP::Client do
21
21
  end
22
22
 
23
23
  it "root doc can be loaded" do
24
-
25
24
  root_doc = json_file(:collection_root)
26
25
 
27
26
  stub_request(:get, "https://api.pmp.io/").
@@ -32,6 +31,17 @@ describe PMP::Client do
32
31
  @root.creator.must_be_instance_of PMP::Link
33
32
  end
34
33
 
34
+ it "calls the root doc when client does not have method" do
35
+ root_doc = json_file(:collection_root)
36
+
37
+ stub_request(:get, "https://api.pmp.io/").
38
+ with(:headers => {'Accept'=>'application/vnd.pmp.collection.doc+json', 'Content-Type'=>'application/vnd.pmp.collection.doc+json', 'Host'=>'api.pmp.io:443'}).
39
+ to_return(:status => 200, :body => root_doc, :headers => {})
40
+
41
+ @pmp.creator.must_be_instance_of PMP::Link
42
+ end
43
+
44
+
35
45
  it "gets a credentials object" do
36
46
  @pmp.credentials.wont_be_nil
37
47
  end
@@ -100,6 +100,25 @@ describe PMP::CollectionDocument do
100
100
  @doc.oauth_token.must_equal 'thisisatesttoken'
101
101
  end
102
102
 
103
+ it "should should get oauth_token if missing" do
104
+
105
+ response_body = {
106
+ access_token: 'thisisalsoatesttoken',
107
+ token_type: "Bearer",
108
+ token_issue_date: DateTime.now,
109
+ token_expires_in: 24*60*60
110
+ }.to_json
111
+
112
+ stub_request(:post, "https://api.pmp.io/auth/access_token").
113
+ with(:body => {"grant_type"=>"client_credentials"},
114
+ :headers => {'Accept'=>'application/json', 'Authorization'=>'Basic Og==', 'Content-Type'=>'application/x-www-form-urlencoded', 'Host'=>'api.pmp.io:443'}).
115
+ to_return(:status => 200, :body => response_body, :headers => {'Content-Type' => 'application/json; charset=utf-8'})
116
+
117
+ @doc.oauth_token = nil
118
+ @doc.setup_oauth_token
119
+ @doc.oauth_token.must_equal 'thisisalsoatesttoken'
120
+ end
121
+
103
122
  it "should load" do
104
123
  @doc.wont_be :loaded
105
124
  @doc.load
@@ -148,6 +167,15 @@ describe PMP::CollectionDocument do
148
167
  queries["urn:pmp:query:docs"].must_be_instance_of PMP::Link
149
168
  end
150
169
 
170
+ it "should handle 404 results on a search" do
171
+
172
+ stub_request(:get, "https://api-sandbox.pmp.io/docs").
173
+ with(:headers => {'Accept'=>'application/vnd.pmp.collection.doc+json', 'Authorization'=>'Bearer thisisatesttoken', 'Content-Type'=>'application/vnd.pmp.collection.doc+json', 'Host'=>'api-sandbox.pmp.io:443', 'User-Agent'=>'PMP Ruby Gem 0.2.0'}).
174
+ to_return(:status=>404, :body=>"Not Found", :remote_ip=>"107.20.158.113", :headers=>{"Access-Control-Allow-Headers"=>"origin, x-http-method-override, accept, content-type, authorization, x-pingother", "Access-Control-Allow-Methods"=>"GET,OPTIONS,HEAD,PUT,POST,DELETE,PATCH", "Access-Control-Allow-Origin"=>"*", "Content-Type"=>"application/vnd.pmp.collection.doc+json", "Date"=>"Thu, 24 Oct 2013 17:20:04 GMT", "Vary"=>"Accept-Encoding", "X-Powered-By"=>"Express", "X-Response-Time"=>"18ms", "Content-Length"=>"9", "Connection"=>"keep-alive"})
175
+
176
+ @doc.query["urn:pmp:query:docs"].items.must_equal []
177
+ end
178
+
151
179
  end
152
180
 
153
181
  describe 'persistence' do
@@ -18,11 +18,15 @@ describe PMP::Response do
18
18
  response = PMP::Response.new(@raw, @request)
19
19
  end
20
20
 
21
- it "can raise an error" do
22
- raw = Minitest::Mock.new
23
- raw.expect(:status, 500).expect(:status, 500)
24
- proc{ PMP::Response.new(raw, @request) }.must_raise RuntimeError
25
- end
21
+ # it "can raise an error" do
22
+ # raw = Minitest::Mock.new
23
+ # raw.expect(:status, 500).expect(:status, 500)
24
+ # proc{ PMP::Response.new(raw, @request) }.must_raise RuntimeError
25
+
26
+ # raw = Minitest::Mock.new
27
+ # raw.expect(:status, 600).expect(:status, 600)
28
+ # proc{ PMP::Response.new(raw, @request) }.must_raise RuntimeError
29
+ # end
26
30
 
27
31
  it "can return body" do
28
32
  @raw.expect(:body, {foo: 'bar'})
@@ -1,7 +1,13 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  require 'simplecov'
4
+ require 'coveralls'
5
+
4
6
  SimpleCov.command_name 'Unit Tests'
7
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ Coveralls::SimpleCov::Formatter
10
+ ]
5
11
  SimpleCov.start
6
12
 
7
13
  require 'minitest'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kuklewicz
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: coveralls
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: faraday
141
155
  requirement: !ruby/object:Gem::Requirement