answers-ruby-client 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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +2 -0
  3. data/.gitignore +23 -0
  4. data/.rbenv-version +1 -0
  5. data/.travis.yml +3 -0
  6. data/Gemfile +5 -0
  7. data/LICENSE.txt +24 -0
  8. data/README.md +120 -0
  9. data/Rakefile +6 -0
  10. data/answers-ruby-client.gemspec +34 -0
  11. data/lib/answers-ruby-client.rb +14 -0
  12. data/lib/answers/answer.rb +40 -0
  13. data/lib/answers/base_model.rb +79 -0
  14. data/lib/answers/client.rb +111 -0
  15. data/lib/answers/error.rb +4 -0
  16. data/lib/answers/protocol.rb +40 -0
  17. data/lib/answers/question.rb +38 -0
  18. data/lib/answers/version.rb +3 -0
  19. data/spec/answer_spec.rb +115 -0
  20. data/spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/DELETE_destroy/throws_an_Answers_Error.yml +97 -0
  21. data/spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_index/contains_objects_only_of_type_Answer_Answer.yml +90 -0
  22. data/spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_index/retrieves_a_list_of_Answers.yml +90 -0
  23. data/spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_show/retrieves_a_single_object_of_type_Answers_Answer.yml +52 -0
  24. data/spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/POST_create/throws_an_Answers_Error.yml +48 -0
  25. data/spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/PUT_update/throws_an_Answers_Error.yml +97 -0
  26. data/spec/cassettes/Answers_Answer/When_API_keys_are_provided/DELETE_destroy/deletes_an_Answer_Answer.yml +209 -0
  27. data/spec/cassettes/Answers_Answer/When_API_keys_are_provided/POST_create/creates_an_Answer_Answer.yml +54 -0
  28. data/spec/cassettes/Answers_Answer/When_API_keys_are_provided/PUT_update/updates_an_Answer_Answer.yml +107 -0
  29. data/spec/cassettes/Answers_Question/When_API_keys_are_not_provided/DELETE_destroy/throws_an_Answers_Error.yml +97 -0
  30. data/spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_index/contains_objects_only_of_type_Answer_Question.yml +75 -0
  31. data/spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_index/retrieves_a_list_of_Questions.yml +75 -0
  32. data/spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_show/retrieves_a_single_object_of_type_Answers_Question.yml +52 -0
  33. data/spec/cassettes/Answers_Question/When_API_keys_are_not_provided/POST_create/throws_an_Answers_Error.yml +48 -0
  34. data/spec/cassettes/Answers_Question/When_API_keys_are_not_provided/PUT_update/throws_an_Answers_Error.yml +97 -0
  35. data/spec/cassettes/Answers_Question/When_API_keys_are_provided/DELETE_destroy/deletes_an_Answer_Question.yml +209 -0
  36. data/spec/cassettes/Answers_Question/When_API_keys_are_provided/POST_create/creates_an_Answer_Question.yml +54 -0
  37. data/spec/cassettes/Answers_Question/When_API_keys_are_provided/PUT_update/updates_an_Answer_Question.yml +107 -0
  38. data/spec/client_spec.rb +80 -0
  39. data/spec/question_spec.rb +124 -0
  40. data/spec/spec_helper.rb +22 -0
  41. metadata +259 -0
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+ require 'pry'
3
+
4
+ describe Answers::Client do
5
+ context 'When no API keys are provided' do
6
+ before(:all) { Answers.reset! }
7
+ after(:all) { Answers.reset! }
8
+
9
+ it 'creates a Client instance when ::init is called' do
10
+ expect do
11
+ Answers.reset!
12
+ Answers.client
13
+ end.to raise_error(Answers::Error)
14
+
15
+ Answers.init
16
+
17
+ expect(Answers.client).to(be_a(Answers::Client))
18
+ end
19
+ end
20
+
21
+ context 'When API keys are provided' do
22
+ before(:all) { Answers.reset! }
23
+ after(:all) { Answers.reset! }
24
+
25
+ it 'appends those keys to the request header' do
26
+ keys = {
27
+ user_email: 'fake@email.tld',
28
+ user_token: 'fake_token'
29
+ }
30
+ Answers.init keys
31
+
32
+ headers = Answers.client.connection.headers
33
+
34
+ expect(headers).to(include(
35
+ Answers::Protocol::EMAIL_HEADER_KEY => keys[:user_email]),
36
+ Answers::Protocol::TOKEN_HEADER_KEY => keys[:user_token]
37
+ )
38
+ end
39
+ end
40
+
41
+ context 'When the user must supply a non-default URL' do
42
+ before(:all) { Answers.reset! }
43
+ after(:all) { Answers.reset! }
44
+
45
+ it 'accepts a :url param in the constructor' do
46
+ new_url = 'https://my-non-default.url/'
47
+ Answers.init({
48
+ url: new_url
49
+ })
50
+
51
+ expect(Answers.client.connection.build_url.to_s).to(eq(new_url))
52
+ end
53
+ end
54
+
55
+ context 'Regardless of whether or not API keys are provided' do
56
+ before(:all) { Answers.reset! }
57
+ after(:all) { Answers.reset! }
58
+
59
+ let(:client) do
60
+ Answers.init
61
+ Answers.client
62
+ end
63
+
64
+ it 'has a #get method' do
65
+ expect(client).to(respond_to(:get))
66
+ end
67
+
68
+ it 'has a #post method' do
69
+ expect(client).to(respond_to(:post))
70
+ end
71
+
72
+ it 'has a #put method' do
73
+ expect(client).to(respond_to(:put))
74
+ end
75
+
76
+ it 'has a #delete method' do
77
+ expect(client).to(respond_to(:delete))
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,124 @@
1
+ require 'spec_helper'
2
+ require 'pry'
3
+
4
+ describe Answers::Question, :vcr do
5
+ context 'When API keys are not provided' do
6
+
7
+ before(:all) { Answers.reset! }
8
+ after(:all) { Answers.reset! }
9
+ before(:each) { Answers.init }
10
+
11
+ describe "GET index" do
12
+ let(:questions) do
13
+ Answers::Question.all
14
+ end
15
+
16
+ it "retrieves a list of Questions" do
17
+ expect(questions).to(be_a(Array))
18
+ end
19
+
20
+ it "contains objects only of type Answer::Question" do
21
+ types = questions.map {|q| q.class}.uniq
22
+ expect(types.length).to(eq(1))
23
+ expect(types.first).to(eq(Answers::Question))
24
+ end
25
+ end
26
+
27
+ describe "GET show" do
28
+ let(:question) { Answers::Question.find(1) }
29
+
30
+ it "retrieves a single object of type Answers::Question" do
31
+ expect(question).to(be_a(Answers::Question))
32
+ end
33
+ end
34
+
35
+ describe "POST create" do
36
+ it "throws an Answers::Error" do
37
+ question = Answers::Question.new
38
+ question.text = 'sample'
39
+ question.in_language = 'english'
40
+
41
+ expect { question.save }.to raise_error(Answers::Error)
42
+ end
43
+ end
44
+
45
+ describe "PUT update" do
46
+ it "throws an Answers::Error" do
47
+ question = Answers::Question.find(1)
48
+ question.text = 'revised'
49
+
50
+ expect { question.save }.to raise_error(Answers::Error)
51
+ end
52
+ end
53
+
54
+ describe "DELETE destroy" do
55
+ it "throws an Answers::Error" do
56
+ question = Answers::Question.find(1)
57
+
58
+ expect { question.delete }.to raise_error(Answers::Error)
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ context 'When API keys are provided' do
65
+ before(:all) { Answers.reset! }
66
+ after(:all) { Answers.reset! }
67
+
68
+ before(:each) do
69
+ Answers.init({
70
+ user_email: ENV['ANSWERS_USER_EMAIL'],
71
+ user_token: ENV['ANSWERS_USER_TOKEN']
72
+ })
73
+ end
74
+
75
+ describe "POST create" do
76
+ it "creates an Answer::Question" do
77
+ question = Answers::Question.new
78
+ question.text = 'sample'
79
+ question.in_language = 'english'
80
+
81
+ old_created_at = question.created_at
82
+ old_id = question.id
83
+
84
+ question.save
85
+
86
+ new_id = question.id
87
+ new_created_at = question.created_at
88
+
89
+ expect(old_id).to(be(nil))
90
+ expect(old_created_at).to(be(nil))
91
+ expect(new_id).to(be_a(Fixnum))
92
+ expect(new_created_at).to(be_a(String))
93
+ end
94
+ end
95
+
96
+ describe "PUT update" do
97
+ it "updates an Answer::Question" do
98
+ question = Answers::Question.find(1)
99
+
100
+ old_updated_at = question.updated_at
101
+ question.text = 'new_text'
102
+ question.save
103
+
104
+ #expect(question.updated_at).not_to(eq(old_updated_at))
105
+
106
+ end
107
+ end
108
+
109
+ describe "DELETE destroy" do
110
+ it "deletes an Answer::Question" do
111
+ question = Answers::Question.new
112
+ question.text = 'sample'
113
+ question.in_language = 'english'
114
+ question.save
115
+
116
+ question_to_delete = Answers::Question.find(question.id)
117
+ question_to_delete.delete
118
+ query = Answers::Question.find(question.id)
119
+
120
+ expect(query).to(be(nil))
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,22 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'vcr'
5
+
6
+ VCR.configure do |c|
7
+ c.cassette_library_dir = 'spec/cassettes'
8
+ c.hook_into :webmock
9
+ c.configure_rspec_metadata!
10
+ c.default_cassette_options = { record: :new_episodes }
11
+ end
12
+
13
+ require 'dotenv'
14
+ Dotenv.load
15
+
16
+ require 'coveralls'
17
+ Coveralls.wear!
18
+
19
+ require 'answers-ruby-client'
20
+
21
+ RSpec.configure do |config|
22
+ end
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: answers-ruby-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alan deLevie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: dotenv
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: vcr
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: faraday
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: faraday_middleware
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: activesupport
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: Access the the Answers Platform's read/write API in idiomatic Ruby.
168
+ email:
169
+ - alan.delevie@gsa.gov
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files: []
173
+ files:
174
+ - ".env.example"
175
+ - ".gitignore"
176
+ - ".rbenv-version"
177
+ - ".travis.yml"
178
+ - Gemfile
179
+ - LICENSE.txt
180
+ - README.md
181
+ - Rakefile
182
+ - answers-ruby-client.gemspec
183
+ - lib/answers-ruby-client.rb
184
+ - lib/answers/answer.rb
185
+ - lib/answers/base_model.rb
186
+ - lib/answers/client.rb
187
+ - lib/answers/error.rb
188
+ - lib/answers/protocol.rb
189
+ - lib/answers/question.rb
190
+ - lib/answers/version.rb
191
+ - spec/answer_spec.rb
192
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/DELETE_destroy/throws_an_Answers_Error.yml
193
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_index/contains_objects_only_of_type_Answer_Answer.yml
194
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_index/retrieves_a_list_of_Answers.yml
195
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_show/retrieves_a_single_object_of_type_Answers_Answer.yml
196
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/POST_create/throws_an_Answers_Error.yml
197
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/PUT_update/throws_an_Answers_Error.yml
198
+ - spec/cassettes/Answers_Answer/When_API_keys_are_provided/DELETE_destroy/deletes_an_Answer_Answer.yml
199
+ - spec/cassettes/Answers_Answer/When_API_keys_are_provided/POST_create/creates_an_Answer_Answer.yml
200
+ - spec/cassettes/Answers_Answer/When_API_keys_are_provided/PUT_update/updates_an_Answer_Answer.yml
201
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/DELETE_destroy/throws_an_Answers_Error.yml
202
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_index/contains_objects_only_of_type_Answer_Question.yml
203
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_index/retrieves_a_list_of_Questions.yml
204
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_show/retrieves_a_single_object_of_type_Answers_Question.yml
205
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/POST_create/throws_an_Answers_Error.yml
206
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/PUT_update/throws_an_Answers_Error.yml
207
+ - spec/cassettes/Answers_Question/When_API_keys_are_provided/DELETE_destroy/deletes_an_Answer_Question.yml
208
+ - spec/cassettes/Answers_Question/When_API_keys_are_provided/POST_create/creates_an_Answer_Question.yml
209
+ - spec/cassettes/Answers_Question/When_API_keys_are_provided/PUT_update/updates_an_Answer_Question.yml
210
+ - spec/client_spec.rb
211
+ - spec/question_spec.rb
212
+ - spec/spec_helper.rb
213
+ homepage: ''
214
+ licenses:
215
+ - Public Domain (see LICENSE.txt)
216
+ metadata: {}
217
+ post_install_message:
218
+ rdoc_options: []
219
+ require_paths:
220
+ - lib
221
+ required_ruby_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '0'
231
+ requirements: []
232
+ rubyforge_project:
233
+ rubygems_version: 2.2.2
234
+ signing_key:
235
+ specification_version: 4
236
+ summary: Low level Ruby client to access the Answers Platform API.
237
+ test_files:
238
+ - spec/answer_spec.rb
239
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/DELETE_destroy/throws_an_Answers_Error.yml
240
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_index/contains_objects_only_of_type_Answer_Answer.yml
241
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_index/retrieves_a_list_of_Answers.yml
242
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/GET_show/retrieves_a_single_object_of_type_Answers_Answer.yml
243
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/POST_create/throws_an_Answers_Error.yml
244
+ - spec/cassettes/Answers_Answer/When_API_keys_are_not_provided/PUT_update/throws_an_Answers_Error.yml
245
+ - spec/cassettes/Answers_Answer/When_API_keys_are_provided/DELETE_destroy/deletes_an_Answer_Answer.yml
246
+ - spec/cassettes/Answers_Answer/When_API_keys_are_provided/POST_create/creates_an_Answer_Answer.yml
247
+ - spec/cassettes/Answers_Answer/When_API_keys_are_provided/PUT_update/updates_an_Answer_Answer.yml
248
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/DELETE_destroy/throws_an_Answers_Error.yml
249
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_index/contains_objects_only_of_type_Answer_Question.yml
250
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_index/retrieves_a_list_of_Questions.yml
251
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/GET_show/retrieves_a_single_object_of_type_Answers_Question.yml
252
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/POST_create/throws_an_Answers_Error.yml
253
+ - spec/cassettes/Answers_Question/When_API_keys_are_not_provided/PUT_update/throws_an_Answers_Error.yml
254
+ - spec/cassettes/Answers_Question/When_API_keys_are_provided/DELETE_destroy/deletes_an_Answer_Question.yml
255
+ - spec/cassettes/Answers_Question/When_API_keys_are_provided/POST_create/creates_an_Answer_Question.yml
256
+ - spec/cassettes/Answers_Question/When_API_keys_are_provided/PUT_update/updates_an_Answer_Question.yml
257
+ - spec/client_spec.rb
258
+ - spec/question_spec.rb
259
+ - spec/spec_helper.rb