crp 0.0.6 → 0.0.7

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: 89dc79fbad7cc7cb2ea6f00b9231697652783bd8
4
- data.tar.gz: ea341ffd304533323bec333d2b0c6b2d0b204921
3
+ metadata.gz: b55aa354b29035b7ae9f9a156cf3b800e151b3ae
4
+ data.tar.gz: a9e36f4cef8e3c64936d6f8a311b9c8f6fd0465a
5
5
  SHA512:
6
- metadata.gz: c05ad6fb9b711b16eaa1789c666296617c5dfc5b97a65afaae599416e2ca5866b648024a6706be7945db522d66796ae06f1923459b1420447f683e0b343db736
7
- data.tar.gz: 1fb696152dfdf1a588d57ce067aeb1651e0cd3f9c41b6fc5d9e242e71166540ac9d1b587d0417dd56dbdbe97c144cbc1b92ce0646e1f79b2a0a2ac7df0374725
6
+ metadata.gz: 6dfd96653d1e3210e9ee33ac82bf46d86aa9b25d4e202b9a8084c03c8d384ebc67f3127f569a42b0572f9390195b83b36444f24c6265fc0a20f609e5cdde428a
7
+ data.tar.gz: d30290643202e013a37224f687d94eff230c1eb2e9bbaaceb0d0c710d893274d076eb8863a93939d74fe9de6c2fbad5db4ae62f2a539f876df5ef49f11f9c912
data/README.md CHANGED
@@ -25,7 +25,7 @@ Create a new review:
25
25
  ```` ruby
26
26
  require "crp"
27
27
  => true
28
- review_poster = CRP::ReviewPoster.new("crp.example.com", "client", "key")
28
+ review_poster = CRP::ReviewPoster.new("crp.example.com", "client", "key", "username", "password")
29
29
  => #<CRP::ReviewPoster:0x007fa2c1119110 @host="crp.example.com", @client="client", @key="key">
30
30
  review_response = review_poster.new_description_review("I'm looking for that special someone.", "123ABC", :male, "davy22", 55)
31
31
  => #<CRP::ReviewResponse:0x007fa87c1fd020 @response=#<Net::HTTPOK 200 OK readbody=true>>
@@ -37,7 +37,9 @@ review_response.external_id
37
37
  => "ABCD1234"
38
38
  ````
39
39
 
40
- You can skip the host, client and key parameters and specify the `ENV['CRP_HOST']`, `ENV['CRP_CLIENT']` and `ENV['CRP_KEY']` environment variable for convenience.
40
+ The `client` and `key` variables are used to authenticate against the API, the `username` and `password` variables are the credentials for the basic auth used on the CRP server.
41
+
42
+ You can skip the host, client and key parameters and specify the `ENV['CRP_HOST']`, `ENV['CRP_CLIENT']` and `ENV['CRP_KEY']`, `ENV['CRP_USERNAME']`, `ENV['CRP_PASSWORD']` environment variable for convenience.
41
43
 
42
44
  Parse the callback received from CRP:
43
45
 
@@ -58,6 +60,13 @@ review_callback.result_message
58
60
 
59
61
  **WARNING** You are responsible for listening for the callback, the gem does not handle that in any way. Note that CRP expects to see an `ok` body when sending its callback or it will keep sending the same callback over and over again.
60
62
 
63
+ You can inspect the errors when the review response fails (status response code is not 200):
64
+
65
+ ```` ruby
66
+ review_response.raw_errors
67
+ => {"_rest_"=>["Invalid signature"]}
68
+ ````
69
+
61
70
  ## Contributing
62
71
 
63
72
  Something missing? Found a bug? Horrified by the code? Open a [github issue](https://github.com/agilewings/crp_gem/issues), write a failing test or add some code using pull requests. Your help is greatly appreciated!
@@ -3,7 +3,6 @@ require 'json'
3
3
  module CRP
4
4
  class ReviewResponse
5
5
  SUCCESS_STATUS_CODE = 200
6
- EMPTY_JSON = "{}"
7
6
 
8
7
  def initialize(response)
9
8
  @response = response
@@ -14,8 +13,11 @@ module CRP
14
13
  end
15
14
 
16
15
  def raw_review
17
- body = successful? ? @response.body : EMPTY_JSON
18
- JSON.parse(body)
16
+ successful? ? json_parsed_body : {}
17
+ end
18
+
19
+ def raw_errors
20
+ successful? ? {} : json_parsed_body["errors"]
19
21
  end
20
22
 
21
23
  def internal_id
@@ -25,5 +27,11 @@ module CRP
25
27
  def external_id
26
28
  raw_review.first["externalId"]
27
29
  end
30
+
31
+ private
32
+
33
+ def json_parsed_body
34
+ JSON.parse(@response.body)
35
+ end
28
36
  end
29
37
  end
@@ -1,3 +1,3 @@
1
1
  module CRP
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,6 @@
1
+ {
2
+ "errors":
3
+ {
4
+ "_rest_": ["Invalid signature"]
5
+ }
6
+ }
@@ -5,6 +5,8 @@ module CRP
5
5
  HOST = "crp.example.com"
6
6
  CLIENT = "client"
7
7
  KEY = "A1B2c3DeFGhi"
8
+ AUTH_USERNAME = "basic_auth_username"
9
+ AUTH_PASSWORD = "basic_auth_password"
8
10
  REVIEW_TYPE = 1
9
11
  REVIEW_CONTENT = "I am a very cheerful and good-humored."
10
12
  DESCRIPTION = REVIEW_CONTENT
@@ -15,139 +17,163 @@ module CRP
15
17
  AGE = 28
16
18
 
17
19
  it "accepts a host" do
18
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
20
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
19
21
  review_poster.instance_variable_get(:@host).must_equal(HOST)
20
22
  end
21
23
 
22
24
  it "accepts a client" do
23
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
25
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
24
26
  review_poster.instance_variable_get(:@client).must_equal(CLIENT)
25
27
  end
26
28
 
27
29
  it "accepts a key" do
28
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
30
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
29
31
  review_poster.instance_variable_get(:@key).must_equal(KEY)
30
32
  end
31
33
 
32
34
  it "requires a host" do
33
35
  ENV['CRP_HOST'] = nil
34
- lambda { ReviewPoster.new(nil, CLIENT, KEY) }.must_raise(ArgumentError)
36
+ lambda { ReviewPoster.new(nil, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD) }.must_raise(ArgumentError)
35
37
  end
36
38
 
37
39
  it "requires a non empty host" do
38
40
  ENV['CRP_HOST'] = nil
39
- lambda { ReviewPoster.new("", CLIENT, KEY) }.must_raise(ArgumentError)
41
+ lambda { ReviewPoster.new("", CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD) }.must_raise(ArgumentError)
40
42
  end
41
43
 
42
44
  it "requires a client" do
43
45
  ENV['CRP_CLIENT'] = nil
44
- lambda { ReviewPoster.new(HOST, nil, KEY) }.must_raise(ArgumentError)
46
+ lambda { ReviewPoster.new(HOST, nil, KEY, AUTH_USERNAME, AUTH_PASSWORD) }.must_raise(ArgumentError)
45
47
  end
46
48
 
47
49
  it "requires a non empty client" do
48
50
  ENV['CRP_CLIENT'] = nil
49
- lambda { ReviewPoster.new(HOST, "", KEY) }.must_raise(ArgumentError)
51
+ lambda { ReviewPoster.new(HOST, "", KEY, AUTH_USERNAME, AUTH_PASSWORD) }.must_raise(ArgumentError)
50
52
  end
51
53
 
52
54
  it "requires a key" do
53
55
  ENV['CRP_KEY'] = nil
54
- lambda { ReviewPoster.new(HOST, CLIENT, nil) }.must_raise(ArgumentError)
56
+ lambda { ReviewPoster.new(HOST, CLIENT, nil, AUTH_USERNAME, AUTH_PASSWORD) }.must_raise(ArgumentError)
55
57
  end
56
58
 
57
59
  it "requires a non empty key" do
58
60
  ENV['CRP_KEY'] = nil
59
- lambda { ReviewPoster.new(HOST, CLIENT, "") }.must_raise(ArgumentError)
61
+ lambda { ReviewPoster.new(HOST, CLIENT, "", AUTH_USERNAME, AUTH_PASSWORD) }.must_raise(ArgumentError)
62
+ end
63
+
64
+ it "requires a username" do
65
+ ENV['CRP_USERNAME'] = nil
66
+ lambda { ReviewPoster.new(HOST, CLIENT, KEY, nil, AUTH_PASSWORD) }.must_raise(ArgumentError)
67
+ end
68
+
69
+ it "requires a non empty username" do
70
+ ENV['CRP_USERNAME'] = nil
71
+ lambda { ReviewPoster.new(HOST, CLIENT, KEY, "", AUTH_PASSWORD) }.must_raise(ArgumentError)
72
+ end
73
+
74
+ it "requires a password" do
75
+ ENV['CRP_PASSWORD'] = nil
76
+ lambda { ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, nil) }.must_raise(ArgumentError)
77
+ end
78
+
79
+ it "requires a non empty password" do
80
+ ENV['CRP_PASSWORD'] = nil
81
+ lambda { ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, "") }.must_raise(ArgumentError)
60
82
  end
61
83
 
62
84
  it "uses the environment variables if the host, client and key are missing" do
63
- ENV['CRP_HOST'] = HOST
64
- ENV['CRP_CLIENT'] = CLIENT
65
- ENV['CRP_KEY'] = KEY
85
+ ENV['CRP_HOST'] = HOST
86
+ ENV['CRP_CLIENT'] = CLIENT
87
+ ENV['CRP_KEY'] = KEY
88
+ ENV['CRP_USERNAME'] = AUTH_USERNAME
89
+ ENV['CRP_PASSWORD'] = AUTH_PASSWORD
66
90
  lambda { ReviewPoster.new }.must_be_silent
67
- ENV['CRP_HOST'] = nil
68
- ENV['CRP_CLIENT'] = nil
69
- ENV['CRP_KEY'] = nil
91
+ ENV['CRP_HOST'] = nil
92
+ ENV['CRP_CLIENT'] = nil
93
+ ENV['CRP_KEY'] = nil
94
+ ENV['CRP_USERNAME'] = nil
95
+ ENV['CRP_PASSWORD'] = nil
70
96
  end
71
97
 
72
98
  describe :new_username_review do
73
- let(:new_username_review_url) { "https://crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:1,%22reviewContent%22:%22starryheart28%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=057bbe8cea1047c6173af865a78f1fbed75ca270" }
99
+ let(:new_username_review_url) { "https://basic_auth_username:basic_auth_password@crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:1,%22reviewContent%22:%22starryheart28%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=057bbe8cea1047c6173af865a78f1fbed75ca270" }
74
100
 
75
101
  before do
76
102
  @new_review_request = stub_new_review_request(new_username_review_url)
77
103
  end
78
104
 
79
105
  it "sends the review to CRP" do
80
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
106
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
81
107
  review_poster.new_username_review(INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
82
108
  assert_requested(@new_review_request)
83
109
  end
84
110
 
85
111
  it "returns a review response" do
86
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
112
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
87
113
  review_poster.new_username_review(INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse)
88
114
  end
89
115
  end
90
116
 
91
117
  describe :new_description_review do
92
- let(:new_description_review_url) { "https://crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:2,%22reviewContent%22:%22I%20am%20a%20very%20cheerful%20and%20good-humored.%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=863c18a8b6c538f29771568dcc0b82453d110f07" }
118
+ let(:new_description_review_url) { "https://basic_auth_username:basic_auth_password@crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:2,%22reviewContent%22:%22I%20am%20a%20very%20cheerful%20and%20good-humored.%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=863c18a8b6c538f29771568dcc0b82453d110f07" }
93
119
 
94
120
  before do
95
121
  @new_review_request = stub_new_review_request(new_description_review_url)
96
122
  end
97
123
 
98
124
  it "sends the review to CRP" do
99
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
125
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
100
126
  review_poster.new_description_review(DESCRIPTION, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
101
127
  assert_requested(@new_review_request)
102
128
  end
103
129
 
104
130
  it "returns a review response" do
105
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
131
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
106
132
  review_poster.new_description_review(DESCRIPTION, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse)
107
133
  end
108
134
  end
109
135
 
110
136
  describe :new_image_review do
111
- let(:new_image_review_url) { "https://crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:3,%22reviewContent%22:%22http://example.com/image.jpg%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=3cc4b50fc6734d02506b8778df8c971c8bdafead" }
137
+ let(:new_image_review_url) { "https://basic_auth_username:basic_auth_password@crp.example.com/api/v1/Review/newReview?arguments=%5B%7B%22reviewType%22:3,%22reviewContent%22:%22http://example.com/image.jpg%22,%22internalReviewId%22:%22ABCDE12345%22,%22gender%22:1,%22username%22:%22starryheart28%22,%22age%22:28%7D%5D&client=client&signature=3cc4b50fc6734d02506b8778df8c971c8bdafead" }
112
138
 
113
139
  before do
114
140
  @new_review_request = stub_new_review_request(new_image_review_url)
115
141
  end
116
142
 
117
143
  it "sends the review to CRP" do
118
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
144
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
119
145
  review_poster.new_image_review(IMAGE_URL, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
120
146
  assert_requested(@new_review_request)
121
147
  end
122
148
 
123
149
  it "returns a review response" do
124
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
150
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
125
151
  review_poster.new_image_review(IMAGE_URL, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse)
126
152
  end
127
153
  end
128
154
 
129
155
  describe :new_review do
130
- let(:new_review_url) { "https://crp.example.com/api/v1/Review/newReview?client=client&arguments=%5B%7B%22reviewType%22%3A1%2C%22reviewContent%22%3A%22I+am+a+very+cheerful+and+good-humored.%22%2C%22internalReviewId%22%3A%22ABCDE12345%22%2C%22gender%22%3A1%2C%22username%22%3A%22starryheart28%22%2C%22age%22%3A28%7D%5D&signature=77ce496ea7f78ae7b6deab0d492b265a81276cb6" }
156
+ let(:new_review_url) { "https://basic_auth_username:basic_auth_password@crp.example.com/api/v1/Review/newReview?client=client&arguments=%5B%7B%22reviewType%22%3A1%2C%22reviewContent%22%3A%22I+am+a+very+cheerful+and+good-humored.%22%2C%22internalReviewId%22%3A%22ABCDE12345%22%2C%22gender%22%3A1%2C%22username%22%3A%22starryheart28%22%2C%22age%22%3A28%7D%5D&signature=77ce496ea7f78ae7b6deab0d492b265a81276cb6" }
131
157
 
132
158
  before do
133
159
  @new_review_request = stub_new_review_request(new_review_url)
134
160
  end
135
161
 
136
162
  it "sends the review to CRP" do
137
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
163
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
138
164
  review_poster.new_review(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
139
165
  assert_requested(@new_review_request)
140
166
  end
141
167
 
142
168
  it "returns a review response" do
143
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
169
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
144
170
  review_poster.new_review(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse)
145
171
  end
146
172
  end
147
173
 
148
174
  describe :new_review_url do
149
175
  it "returns the new review URI" do
150
- review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
176
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY, AUTH_USERNAME, AUTH_PASSWORD)
151
177
  uri = review_poster.new_review_url(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
152
178
  uri.to_s.must_equal("https://crp.example.com/api/v1/Review/newReview?client=client&arguments=%5B%7B%22reviewType%22%3A1%2C%22reviewContent%22%3A%22I+am+a+very+cheerful+and+good-humored.%22%2C%22internalReviewId%22%3A%22ABCDE12345%22%2C%22gender%22%3A1%2C%22username%22%3A%22starryheart28%22%2C%22age%22%3A28%7D%5D&signature=77ce496ea7f78ae7b6deab0d492b265a81276cb6")
153
179
  end
@@ -55,6 +55,36 @@ module CRP
55
55
  end
56
56
  end
57
57
 
58
+ describe :raw_erros do
59
+ describe "when it succeeded" do
60
+ before do
61
+ @response = MiniTest::Mock.new # can't set response.body for some reason
62
+ @response.expect(:code, "200")
63
+ @response.expect(:body, valid_review_body)
64
+ end
65
+
66
+ it "does not return errors" do
67
+ review_response = ReviewResponse.new(@response)
68
+ review_response.raw_errors.must_equal({})
69
+ end
70
+ end
71
+
72
+ describe "when something went wrong" do
73
+ let(:errors) { {"_rest_" => ["Invalid signature"]} }
74
+
75
+ before do
76
+ @response = MiniTest::Mock.new # can't set response.body for some reason
77
+ @response.expect(:code, "401")
78
+ @response.expect(:body, error_review_body)
79
+ end
80
+
81
+ it "returns a the errors" do
82
+ review_response = ReviewResponse.new(@response)
83
+ review_response.raw_errors.must_equal(errors)
84
+ end
85
+ end
86
+ end
87
+
58
88
  describe :internal_id do
59
89
  describe "when the internal id is a string" do
60
90
  before do
@@ -14,6 +14,10 @@ def valid_review_body_with_integer_internal_id
14
14
  @valid_review_body_with_integer_internal_id ||= File.read(File.join(FIXTURES_PATH, 'valid_review_with_integer_internal_id.json'))
15
15
  end
16
16
 
17
+ def error_review_body
18
+ @error_review_body ||= File.read(File.join(FIXTURES_PATH, 'error_review.json'))
19
+ end
20
+
17
21
  def valid_callback_review_body
18
22
  @valid_callback_review_body ||= File.read(File.join(FIXTURES_PATH, 'valid_callback_review.txt')).chomp
19
23
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Agile Wings
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-29 00:00:00.000000000 Z
11
+ date: 2013-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: webmock
@@ -58,6 +58,7 @@ files:
58
58
  - lib/crp/review_poster.rb
59
59
  - lib/crp/review_response.rb
60
60
  - lib/crp/version.rb
61
+ - test/fixtures/error_review.json
61
62
  - test/fixtures/valid_callback_review.txt
62
63
  - test/fixtures/valid_review.json
63
64
  - test/fixtures/valid_review_with_integer_internal_id.json
@@ -93,6 +94,7 @@ specification_version: 4
93
94
  summary: The Central Review Platform is a platform to review user uploaded data. This
94
95
  gem wraps the CRP API in a more Ruby like syntax.
95
96
  test_files:
97
+ - test/fixtures/error_review.json
96
98
  - test/fixtures/valid_callback_review.txt
97
99
  - test/fixtures/valid_review.json
98
100
  - test/fixtures/valid_review_with_integer_internal_id.json