crp 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 384fb08ad5f37298a1f005bfa74cd691240ddd34
4
+ data.tar.gz: 975e4cc203e8ab982c66bff6fd9351ba4f848d3a
5
+ SHA512:
6
+ metadata.gz: 821ffa6c8e96aa6516201ba1c72b8991208fec87dfa704f98581eb7875f901b090b3d6099733223fb526e3505bf7682aa94cb05c731fbd97d3fb4c880df3cadb
7
+ data.tar.gz: b8ba5b6eb1aea5cdc12b259951472063f5e3b859b006b42af33b2c7c91ae31a7ead5d51486525749e0be4cc4fa4480239fa20041a5e2aacd8d9795025d54438e
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .rvmrc
7
+ .ruby-version
8
+ .ruby-gemset
9
+ Gemfile.lock
10
+ InstalledFiles
11
+ _yardoc
12
+ coverage
13
+ doc/
14
+ lib/bundler/man
15
+ pkg
16
+ rdoc
17
+ spec/reports
18
+ test/tmp
19
+ test/version_tmp
20
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in crp.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Agile Wings
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # CRP
2
+
3
+ The **C**entral **R**eview **P**latform is a platform to review user uploaded data. This gem wraps the CRP API in a more Ruby like syntax.
4
+
5
+ ## Installation
6
+
7
+ The CRP gem is Ruby 1.9.x and 2.0.x compatible.
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'crp'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install crp
20
+
21
+ ## Usage
22
+
23
+ Create a new review:
24
+
25
+ ```` ruby
26
+ require "crp"
27
+ => true
28
+ review_poster = CRP::ReviewPoster.new("crp.example.com", "client", "key")
29
+ => #<CRP::ReviewPoster:0x007fa2c1119110 @host="crp.example.com", @client="client", @key="key">
30
+ review_response = review_poster.new_review(1, "davy22", 123, 2, "davy22", 55)
31
+ => #<CRP::ReviewResponse:0x007fa87c1fd020 @response=#<Net::HTTPOK 200 OK readbody=true>>
32
+ review_response.successful?
33
+ => true
34
+ review_response.internal_id
35
+ => 123
36
+ review_response.external_id
37
+ => "4321"
38
+ ````
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.
41
+
42
+ Parse the callback received from CRP:
43
+
44
+ ```` ruby
45
+ require "crp"
46
+ => true
47
+ review_callback_response = CRP::ReviewCallbackResponse.new(callback_response)
48
+ =>
49
+ review_callback_response.successful?
50
+ => true
51
+ review_callback_response.internal_id
52
+ => "123"
53
+ review_callback_response.external_id
54
+ => "4321"
55
+ review_callback_response.result_code
56
+ => 1
57
+ review_callback_response.result_message
58
+ => "Approved"
59
+ ````
60
+
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.
62
+
63
+ ## Contributing
64
+
65
+ 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!
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs.push "lib"
6
+ t.test_files = FileList['test/*_test.rb']
7
+ t.verbose = true
8
+ end
9
+
10
+ task :default => [:test]
data/crp.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'crp/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "crp"
8
+ gem.version = CRP::VERSION
9
+ gem.authors = ["Agile Wings"]
10
+ gem.email = ["noc@agilewings.com"]
11
+ gem.description = %q{Ruby interface for CRP's user uploaded data reviews.}
12
+ gem.summary = %q{The Central Review Platform is a platform to review user uploaded data. This gem wraps the CRP API in a more Ruby like syntax.}
13
+ gem.homepage = "https://github.com/agilewings/crp_gem"
14
+ gem.license = 'MIT'
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test)/})
19
+ gem.require_paths = ["lib"]
20
+
21
+ gem.add_development_dependency 'webmock', '~> 1.13.0'
22
+ gem.add_development_dependency 'rake', '~> 10.1.0'
23
+ end
@@ -0,0 +1,36 @@
1
+ require 'cgi'
2
+
3
+ module CRP
4
+ class ResultMapper
5
+ def self.to_message(code)
6
+ case code
7
+ when 1
8
+ "Approved"
9
+ when 2
10
+ "Updated"
11
+ when 3
12
+ "Denied"
13
+ when 31
14
+ "Deletion requested"
15
+ when 32
16
+ "Underaged"
17
+ when 33
18
+ "Angry customer"
19
+ when 34
20
+ "Commercial"
21
+ when 61
22
+ "G-rated"
23
+ when 62
24
+ "Sexual"
25
+ when 63
26
+ "Explicit"
27
+ when 64
28
+ "Hardcore"
29
+ when 99
30
+ "Irrelevant"
31
+ else
32
+ ""
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ require 'cgi'
2
+
3
+ module CRP
4
+ class ReviewCallbackResponse
5
+ SUCCESS_STATUS_CODE = 200
6
+
7
+ def initialize(response)
8
+ @response = response
9
+ end
10
+
11
+ def successful?
12
+ @response.code.to_i == SUCCESS_STATUS_CODE
13
+ end
14
+
15
+ def raw_review
16
+ successful? ? CGI::parse(@response.body) : {}
17
+ end
18
+
19
+ def external_id
20
+ raw_review["externalId"].first
21
+ end
22
+
23
+ def internal_id
24
+ raw_review["internalId"].first
25
+ end
26
+
27
+ def result_code
28
+ raw_review["result"].first.to_i
29
+ end
30
+
31
+ def result_message
32
+ ResultMapper.to_message(result_code)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,50 @@
1
+ require 'net/https'
2
+ require 'openssl'
3
+ require 'json'
4
+ require 'uri'
5
+
6
+ module CRP
7
+ class ReviewPoster
8
+ NEW_REVIEW_PATH = "/api/v1/Review/newReview"
9
+
10
+ def initialize(host = ENV['CRP_HOST'], client = ENV['CRP_CLIENT'], key = ENV['CRP_KEY'])
11
+ raise ArgumentError, "Missing CRP host" if host.nil? || host.strip.empty?
12
+ raise ArgumentError, "Missing CRP client" if client.nil? || client.strip.empty?
13
+ raise ArgumentError, "Missing CRP key" if key.nil? || key.strip.empty?
14
+ @host = host
15
+ @client = client
16
+ @key = key
17
+ end
18
+
19
+ def new_review(review_type, review_content, internal_review_id, gender, username, age)
20
+ uri = new_review_url(review_type, review_content, internal_review_id, gender, username, age)
21
+ http = Net::HTTP.new(uri.host, uri.port)
22
+ http.use_ssl = true
23
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE # Host certificate does not cover the subdomain
24
+ request = Net::HTTP::Get.new(uri.request_uri)
25
+ response = http.request(request)
26
+ ReviewResponse.new(response)
27
+ end
28
+
29
+ def new_review_url(review_type, review_content, internal_review_id, gender, username, age)
30
+ arguments = [{
31
+ reviewType: review_type,
32
+ reviewContent: review_content,
33
+ internalReviewId: internal_review_id,
34
+ gender: gender,
35
+ username: username,
36
+ age: age
37
+ }].to_json
38
+ signature = sign_arguments(arguments)
39
+ query = URI.encode_www_form(client: @client, arguments: arguments, signature: signature)
40
+ URI::HTTPS.build({host: @host, path: NEW_REVIEW_PATH, query: query})
41
+ end
42
+
43
+ private
44
+
45
+ def sign_arguments(arguments)
46
+ digest = OpenSSL::Digest::Digest.new("sha1")
47
+ OpenSSL::HMAC.hexdigest(digest, @key, arguments)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,29 @@
1
+ require 'json'
2
+
3
+ module CRP
4
+ class ReviewResponse
5
+ SUCCESS_STATUS_CODE = 200
6
+ EMPTY_JSON = "{}"
7
+
8
+ def initialize(response)
9
+ @response = response
10
+ end
11
+
12
+ def successful?
13
+ @response.code.to_i == SUCCESS_STATUS_CODE
14
+ end
15
+
16
+ def raw_review
17
+ body = successful? ? @response.body : EMPTY_JSON
18
+ JSON.parse(body)
19
+ end
20
+
21
+ def internal_id
22
+ raw_review.first["internalId"]
23
+ end
24
+
25
+ def external_id
26
+ raw_review.first["externalId"]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module CRP
2
+ VERSION = "0.0.1"
3
+ end
data/lib/crp.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "crp/version"
2
+ require "crp/review_poster"
3
+ require "crp/review_response"
4
+ require "crp/review_callback_response"
5
+ require "crp/result_mapper"
6
+
7
+ module CRP
8
+ end
@@ -0,0 +1 @@
1
+ externalId=4321&result=1&internalId=123
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "internalId": 123,
4
+ "externalId": "4321"
5
+ }
6
+ ]
@@ -0,0 +1,87 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
2
+
3
+ require 'cgi'
4
+
5
+ module CRP
6
+ describe ResultMapper do
7
+ describe :to_message do
8
+ describe "when result code is 1" do
9
+ it "returns the approved message" do
10
+ ResultMapper.to_message(1).must_equal("Approved")
11
+ end
12
+ end
13
+
14
+ describe "when result code is 2" do
15
+ it "returns the updated message" do
16
+ ResultMapper.to_message(2).must_equal("Updated")
17
+ end
18
+ end
19
+
20
+ describe "when result code is 3" do
21
+ it "returns the denied message" do
22
+ ResultMapper.to_message(3).must_equal("Denied")
23
+ end
24
+ end
25
+
26
+ describe "when result code is 31" do
27
+ it "returns the deletion requested message" do
28
+ ResultMapper.to_message(31).must_equal("Deletion requested")
29
+ end
30
+ end
31
+
32
+ describe "when result code is 32" do
33
+ it "returns the underaged message" do
34
+ ResultMapper.to_message(32).must_equal("Underaged")
35
+ end
36
+ end
37
+
38
+ describe "when result code is 33" do
39
+ it "returns the angry customer message" do
40
+ ResultMapper.to_message(33).must_equal("Angry customer")
41
+ end
42
+ end
43
+
44
+ describe "when result code is 34" do
45
+ it "returns the commercial message" do
46
+ ResultMapper.to_message(34).must_equal("Commercial")
47
+ end
48
+ end
49
+
50
+ describe "when result code is 61" do
51
+ it "returns the G-rated message" do
52
+ ResultMapper.to_message(61).must_equal("G-rated")
53
+ end
54
+ end
55
+
56
+ describe "when result code is 62" do
57
+ it "returns the sexual message" do
58
+ ResultMapper.to_message(62).must_equal("Sexual")
59
+ end
60
+ end
61
+
62
+ describe "when result code is 63" do
63
+ it "returns the explicit message" do
64
+ ResultMapper.to_message(63).must_equal("Explicit")
65
+ end
66
+ end
67
+
68
+ describe "when result code is 64" do
69
+ it "returns the hardcore message" do
70
+ ResultMapper.to_message(64).must_equal("Hardcore")
71
+ end
72
+ end
73
+
74
+ describe "when result code is 99" do
75
+ it "returns the irrelevant message" do
76
+ ResultMapper.to_message(99).must_equal("Irrelevant")
77
+ end
78
+ end
79
+
80
+ describe "when no code is given" do
81
+ it "returns an empty string" do
82
+ ResultMapper.to_message(nil).must_equal("")
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,110 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
2
+
3
+ require 'cgi'
4
+
5
+ module CRP
6
+ describe ReviewCallbackResponse do
7
+ before do
8
+ @response = Net::HTTPResponse.new(1.0, 200, "OK")
9
+ end
10
+
11
+ describe :successful? do
12
+ describe "when it succeeded" do
13
+ it "returns true" do
14
+ review_callback_response = ReviewCallbackResponse.new(@response)
15
+ review_callback_response.successful?.must_equal(true)
16
+ end
17
+ end
18
+
19
+ describe "when something went wrong" do
20
+ before do
21
+ @response = Net::HTTPResponse.new(1.0, 500, "Internal Server Error")
22
+ end
23
+
24
+ it "returns false" do
25
+ review_callback_response = ReviewCallbackResponse.new(@response)
26
+ review_callback_response.successful?.must_equal(false)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe :raw_review do
32
+ describe "when it succeeded" do
33
+ before do
34
+ @response = MiniTest::Mock.new # can't set response.body for some reason
35
+ @response.expect(:code, "200")
36
+ @response.expect(:body, valid_callback_review_body)
37
+ end
38
+
39
+ it "returns the raw review" do
40
+ review_callback_response = ReviewCallbackResponse.new(@response)
41
+ parsed_valid_callback_review_body = CGI::parse(valid_callback_review_body)
42
+ review_callback_response.raw_review.must_equal(parsed_valid_callback_review_body)
43
+ end
44
+ end
45
+
46
+ describe "when something went wrong" do
47
+ before do
48
+ @response = Net::HTTPResponse.new(1.0, 500, "Internal Server Error")
49
+ end
50
+
51
+ it "returns an empty raw review" do
52
+ review_callback_response = ReviewCallbackResponse.new(@response)
53
+ review_callback_response.raw_review.must_equal({})
54
+ end
55
+ end
56
+ end
57
+
58
+ describe :internal_id do
59
+ before do
60
+ @response = MiniTest::Mock.new # can't set response.body for some reason
61
+ @response.expect(:code, "200")
62
+ @response.expect(:body, valid_callback_review_body)
63
+ end
64
+
65
+ it "returns the internal id from the callback response" do
66
+ review_callback_response = ReviewCallbackResponse.new(@response)
67
+ review_callback_response.internal_id.must_equal("123")
68
+ end
69
+ end
70
+
71
+ describe :external_id do
72
+ before do
73
+ @response = MiniTest::Mock.new # can't set response.body for some reason
74
+ @response.expect(:code, "200")
75
+ @response.expect(:body, valid_callback_review_body)
76
+ end
77
+
78
+ it "returns the external id from the callback response" do
79
+ review_callback_response = ReviewCallbackResponse.new(@response)
80
+ review_callback_response.external_id.must_equal("4321")
81
+ end
82
+ end
83
+
84
+ describe :result_code do
85
+ before do
86
+ @response = MiniTest::Mock.new # can't set response.body for some reason
87
+ @response.expect(:code, "200")
88
+ @response.expect(:body, valid_callback_review_body)
89
+ end
90
+
91
+ it "returns the result code from the callback response" do
92
+ review_callback_response = ReviewCallbackResponse.new(@response)
93
+ review_callback_response.result_code.must_equal(1)
94
+ end
95
+ end
96
+
97
+ describe :result_message do
98
+ before do
99
+ @response = MiniTest::Mock.new # can't set response.body for some reason
100
+ @response.expect(:code, "200")
101
+ @response.expect(:body, valid_callback_review_body)
102
+ end
103
+
104
+ it "returns the result message from the callback response" do
105
+ review_callback_response = ReviewCallbackResponse.new(@response)
106
+ review_callback_response.result_message.must_equal("Approved")
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,95 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
2
+
3
+ module CRP
4
+ describe ReviewPoster do
5
+ HOST = "crp.example.com"
6
+ CLIENT = "client"
7
+ KEY = "A1B2c3DeFGhi"
8
+ REVIEW_TYPE = 1
9
+ REVIEW_CONTENT = "I am a very cheerful and good-humored."
10
+ INTERNAL_REVIEW_ID = "ABCDE12345"
11
+ GENDER = 1
12
+ USERNAME = "starryheart28"
13
+ AGE = 28
14
+
15
+ before do
16
+ @new_review_request = stub_new_review_request
17
+ end
18
+
19
+ it "accepts a host" do
20
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
21
+ review_poster.instance_variable_get(:@host).must_equal(HOST)
22
+ end
23
+
24
+ it "accepts a client" do
25
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
26
+ review_poster.instance_variable_get(:@client).must_equal(CLIENT)
27
+ end
28
+
29
+ it "accepts a key" do
30
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
31
+ review_poster.instance_variable_get(:@key).must_equal(KEY)
32
+ end
33
+
34
+ it "requires a host" do
35
+ ENV['CRP_HOST'] = nil
36
+ lambda { ReviewPoster.new(nil, CLIENT, KEY) }.must_raise(ArgumentError)
37
+ end
38
+
39
+ it "requires a non empty host" do
40
+ ENV['CRP_HOST'] = nil
41
+ lambda { ReviewPoster.new("", CLIENT, KEY) }.must_raise(ArgumentError)
42
+ end
43
+
44
+ it "requires a client" do
45
+ ENV['CRP_CLIENT'] = nil
46
+ lambda { ReviewPoster.new(HOST, nil, KEY) }.must_raise(ArgumentError)
47
+ end
48
+
49
+ it "requires a non empty client" do
50
+ ENV['CRP_CLIENT'] = nil
51
+ lambda { ReviewPoster.new(HOST, "", KEY) }.must_raise(ArgumentError)
52
+ end
53
+
54
+ it "requires a key" do
55
+ ENV['CRP_KEY'] = nil
56
+ lambda { ReviewPoster.new(HOST, CLIENT, nil) }.must_raise(ArgumentError)
57
+ end
58
+
59
+ it "requires a non empty key" do
60
+ ENV['CRP_KEY'] = nil
61
+ lambda { ReviewPoster.new(HOST, CLIENT, "") }.must_raise(ArgumentError)
62
+ end
63
+
64
+ it "uses the environment variables if the host, client and key are missing" do
65
+ ENV['CRP_HOST'] = HOST
66
+ ENV['CRP_CLIENT'] = CLIENT
67
+ ENV['CRP_KEY'] = KEY
68
+ lambda { ReviewPoster.new }.must_be_silent
69
+ ENV['CRP_HOST'] = nil
70
+ ENV['CRP_CLIENT'] = nil
71
+ ENV['CRP_KEY'] = nil
72
+ end
73
+
74
+ describe :new_review do
75
+ it "sends the review to CRP" do
76
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
77
+ review_poster.new_review(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
78
+ assert_requested(@new_review_request)
79
+ end
80
+
81
+ it "returns a review response" do
82
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
83
+ review_poster.new_review(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE).must_be_instance_of(ReviewResponse)
84
+ end
85
+ end
86
+
87
+ describe :new_review_url do
88
+ it "returns the new review URI" do
89
+ review_poster = ReviewPoster.new(HOST, CLIENT, KEY)
90
+ uri = review_poster.new_review_url(REVIEW_TYPE, REVIEW_CONTENT, INTERNAL_REVIEW_ID, GENDER, USERNAME, AGE)
91
+ 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")
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,84 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/test_helper")
2
+
3
+ require 'json'
4
+
5
+ module CRP
6
+ describe ReviewResponse do
7
+ before do
8
+ @response = Net::HTTPResponse.new(1.0, 200, "OK")
9
+ end
10
+
11
+ describe :successful? do
12
+ describe "when it succeeded" do
13
+ it "returns true" do
14
+ review_response = ReviewResponse.new(@response)
15
+ review_response.successful?.must_equal(true)
16
+ end
17
+ end
18
+
19
+ describe "when something went wrong" do
20
+ before do
21
+ @response = Net::HTTPResponse.new(1.0, 500, "Internal Server Error")
22
+ end
23
+
24
+ it "returns false" do
25
+ review_response = ReviewResponse.new(@response)
26
+ review_response.successful?.must_equal(false)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe :raw_review do
32
+ describe "when it succeeded" do
33
+ before do
34
+ @response = MiniTest::Mock.new # can't set response.body for some reason
35
+ @response.expect(:code, "200")
36
+ @response.expect(:body, valid_review_body)
37
+ end
38
+
39
+ it "returns the raw review" do
40
+ review_response = ReviewResponse.new(@response)
41
+ parsed_valid_review_body = JSON.parse(valid_review_body)
42
+ review_response.raw_review.must_equal(parsed_valid_review_body)
43
+ end
44
+ end
45
+
46
+ describe "when something went wrong" do
47
+ before do
48
+ @response = Net::HTTPResponse.new(1.0, 500, "Internal Server Error")
49
+ end
50
+
51
+ it "returns an empty raw review" do
52
+ review_response = ReviewResponse.new(@response)
53
+ review_response.raw_review.must_equal({})
54
+ end
55
+ end
56
+ end
57
+
58
+ describe :internal_id do
59
+ before do
60
+ @response = MiniTest::Mock.new # can't set response.body for some reason
61
+ @response.expect(:code, "200")
62
+ @response.expect(:body, valid_review_body)
63
+ end
64
+
65
+ it "returns the internal id from the response" do
66
+ review_response = ReviewResponse.new(@response)
67
+ review_response.internal_id.must_equal(123)
68
+ end
69
+ end
70
+
71
+ describe :external_id do
72
+ before do
73
+ @response = MiniTest::Mock.new # can't set response.body for some reason
74
+ @response.expect(:code, "200")
75
+ @response.expect(:body, valid_review_body)
76
+ end
77
+
78
+ it "returns the external id from the response" do
79
+ review_response = ReviewResponse.new(@response)
80
+ review_response.external_id.must_equal("4321")
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,25 @@
1
+ require 'minitest/spec'
2
+ require 'minitest/mock'
3
+ require 'minitest/autorun'
4
+ require 'webmock/minitest'
5
+ require 'crp'
6
+
7
+ FIXTURES_PATH = File.expand_path("#{File.dirname(__FILE__)}/fixtures")
8
+
9
+ def valid_review_body
10
+ @valid_review_body ||= File.read(File.join(FIXTURES_PATH, 'valid_review.json'))
11
+ end
12
+
13
+ def valid_callback_review_body
14
+ @valid_callback_review_body ||= File.read(File.join(FIXTURES_PATH, 'valid_callback_review.txt')).chomp
15
+ end
16
+
17
+ def stub_new_review_request
18
+ request = { :headers => {'Accept' => '*/*', 'User-Agent' => 'Ruby'} }
19
+ response = { :status => 200, :body => {}, :headers => {} }
20
+ stub_request(:get, new_review_url).with(request).to_return(response)
21
+ end
22
+
23
+ def new_review_url
24
+ "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"
25
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: crp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Agile Wings
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: webmock
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.13.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.13.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 10.1.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 10.1.0
41
+ description: Ruby interface for CRP's user uploaded data reviews.
42
+ email:
43
+ - noc@agilewings.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - LICENSE
51
+ - README.md
52
+ - Rakefile
53
+ - crp.gemspec
54
+ - lib/crp.rb
55
+ - lib/crp/result_mapper.rb
56
+ - lib/crp/review_callback_response.rb
57
+ - lib/crp/review_poster.rb
58
+ - lib/crp/review_response.rb
59
+ - lib/crp/version.rb
60
+ - test/fixtures/valid_callback_review.txt
61
+ - test/fixtures/valid_review.json
62
+ - test/result_mapper_test.rb
63
+ - test/review_callback_response_test.rb
64
+ - test/review_poster_test.rb
65
+ - test/review_response_test.rb
66
+ - test/test_helper.rb
67
+ homepage: https://github.com/agilewings/crp_gem
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.1.8
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: The Central Review Platform is a platform to review user uploaded data. This
91
+ gem wraps the CRP API in a more Ruby like syntax.
92
+ test_files:
93
+ - test/fixtures/valid_callback_review.txt
94
+ - test/fixtures/valid_review.json
95
+ - test/result_mapper_test.rb
96
+ - test/review_callback_response_test.rb
97
+ - test/review_poster_test.rb
98
+ - test/review_response_test.rb
99
+ - test/test_helper.rb