batch_api2 0.3.0

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 (91) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +30 -0
  4. data/changelog.md +74 -0
  5. data/lib/batch_api.rb +28 -0
  6. data/lib/batch_api/batch_error.rb +41 -0
  7. data/lib/batch_api/configuration.rb +36 -0
  8. data/lib/batch_api/error_wrapper.rb +44 -0
  9. data/lib/batch_api/internal_middleware.rb +87 -0
  10. data/lib/batch_api/internal_middleware/decode_json_body.rb +28 -0
  11. data/lib/batch_api/internal_middleware/response_filter.rb +27 -0
  12. data/lib/batch_api/operation.rb +2 -0
  13. data/lib/batch_api/operation/rack.rb +76 -0
  14. data/lib/batch_api/operation/rails.rb +42 -0
  15. data/lib/batch_api/processor.rb +113 -0
  16. data/lib/batch_api/processor/executor.rb +18 -0
  17. data/lib/batch_api/processor/sequential.rb +29 -0
  18. data/lib/batch_api/rack_middleware.rb +37 -0
  19. data/lib/batch_api/response.rb +38 -0
  20. data/lib/batch_api/utils.rb +17 -0
  21. data/lib/batch_api/version.rb +3 -0
  22. data/lib/tasks/batch_api_tasks.rake +4 -0
  23. data/readme.md +243 -0
  24. data/spec/dummy/Gemfile +1 -0
  25. data/spec/dummy/Gemfile.lock +8 -0
  26. data/spec/dummy/README.rdoc +261 -0
  27. data/spec/dummy/Rakefile +15 -0
  28. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  29. data/spec/dummy/app/assets/javascripts/endpoints.js +2 -0
  30. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  31. data/spec/dummy/app/assets/stylesheets/endpoints.css +4 -0
  32. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  33. data/spec/dummy/app/controllers/endpoints_controller.rb +36 -0
  34. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  35. data/spec/dummy/app/helpers/endpoints_helper.rb +2 -0
  36. data/spec/dummy/app/views/endpoints/get.html.erb +2 -0
  37. data/spec/dummy/app/views/endpoints/post.html.erb +2 -0
  38. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  39. data/spec/dummy/bin/bundle +3 -0
  40. data/spec/dummy/bin/rails +4 -0
  41. data/spec/dummy/bin/rake +4 -0
  42. data/spec/dummy/bin/setup +29 -0
  43. data/spec/dummy/config.ru +4 -0
  44. data/spec/dummy/config/application.rb +32 -0
  45. data/spec/dummy/config/boot.rb +3 -0
  46. data/spec/dummy/config/database.yml +25 -0
  47. data/spec/dummy/config/environment.rb +5 -0
  48. data/spec/dummy/config/environments/development.rb +41 -0
  49. data/spec/dummy/config/environments/production.rb +79 -0
  50. data/spec/dummy/config/environments/test.rb +42 -0
  51. data/spec/dummy/config/initializers/assets.rb +11 -0
  52. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  53. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  54. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  55. data/spec/dummy/config/initializers/inflections.rb +16 -0
  56. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  57. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  58. data/spec/dummy/config/initializers/session_store.rb +3 -0
  59. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  60. data/spec/dummy/config/locales/en.yml +23 -0
  61. data/spec/dummy/config/routes.rb +64 -0
  62. data/spec/dummy/config/secrets.yml +22 -0
  63. data/spec/dummy/db/test.sqlite3 +0 -0
  64. data/spec/dummy/public/404.html +26 -0
  65. data/spec/dummy/public/422.html +26 -0
  66. data/spec/dummy/public/500.html +25 -0
  67. data/spec/dummy/public/favicon.ico +0 -0
  68. data/spec/dummy/script/rails +6 -0
  69. data/spec/dummy/test/functional/endpoints_controller_test.rb +14 -0
  70. data/spec/dummy/test/unit/helpers/endpoints_helper_test.rb +4 -0
  71. data/spec/lib/batch_api_spec.rb +20 -0
  72. data/spec/lib/batch_error_spec.rb +23 -0
  73. data/spec/lib/configuration_spec.rb +30 -0
  74. data/spec/lib/error_wrapper_spec.rb +68 -0
  75. data/spec/lib/internal_middleware/decode_json_body_spec.rb +44 -0
  76. data/spec/lib/internal_middleware/response_filter_spec.rb +61 -0
  77. data/spec/lib/internal_middleware_spec.rb +93 -0
  78. data/spec/lib/operation/rack_spec.rb +246 -0
  79. data/spec/lib/operation/rails_spec.rb +100 -0
  80. data/spec/lib/processor/executor_spec.rb +22 -0
  81. data/spec/lib/processor/sequential_spec.rb +39 -0
  82. data/spec/lib/processor_spec.rb +136 -0
  83. data/spec/lib/rack_middleware_spec.rb +103 -0
  84. data/spec/lib/response_spec.rb +53 -0
  85. data/spec/rack-integration/rails_spec.rb +10 -0
  86. data/spec/rack-integration/shared_examples.rb +273 -0
  87. data/spec/rack-integration/sinatra_integration_spec.rb +19 -0
  88. data/spec/spec_helper.rb +42 -0
  89. data/spec/support/sinatra_app.rb +54 -0
  90. data/spec/support/sinatra_xhr.rb +13 -0
  91. metadata +214 -0
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+ require_relative './shared_examples'
3
+
4
+ describe "Rails integration specs", type: :request do
5
+ before :each do
6
+ allow(BatchApi).to receive(:rails?).and_return(true)
7
+ end
8
+
9
+ it_should_behave_like "integrating with a server"
10
+ end
@@ -0,0 +1,273 @@
1
+ shared_examples_for "a get request" do
2
+ it "returns the body as objects" do
3
+ @result = JSON.parse(response.body)["results"][0]
4
+ expect(@result["body"]).to eq(get_result[:body])
5
+ end
6
+
7
+ it "returns the expected status" do
8
+ expect(@result["status"]).to eq(get_result[:status])
9
+ end
10
+
11
+ it "returns the expected headers" do
12
+ expect(@result["headers"]).to include(get_result[:headers])
13
+ end
14
+
15
+ it "verifies that the right headers were received" do
16
+ expect(@result["headers"]["REQUEST_HEADERS"]).to include(
17
+ headerize(get_headers)
18
+ )
19
+ end
20
+ end
21
+
22
+ shared_examples_for "integrating with a server" do
23
+ def headerize(hash)
24
+ Hash[hash.map do |k, v|
25
+ ["HTTP_#{k.to_s.upcase}", v.to_s]
26
+ end]
27
+ end
28
+
29
+ before :all do
30
+ BatchApi.config.endpoint = "/batch"
31
+ BatchApi.config.verb = :post
32
+ end
33
+
34
+ before :each do
35
+ allow(BatchApi::ErrorWrapper).to receive(:expose_backtrace?).and_return(false)
36
+ end
37
+
38
+ # these are defined in the dummy app's endpoints controller
39
+ let(:get_headers) { {"foo" => "bar"} }
40
+ let(:get_params) { {"other" => "value" } }
41
+
42
+ let(:get_request) { {
43
+ url: "/endpoint",
44
+ method: "get",
45
+ headers: get_headers,
46
+ params: get_params
47
+ } }
48
+
49
+ let(:get_by_default_request) { {
50
+ url: "/endpoint",
51
+ headers: get_headers,
52
+ params: get_params
53
+ } }
54
+
55
+ let(:get_result) { {
56
+ status: 422,
57
+ body: {
58
+ "result" => "GET OK",
59
+ "params" => get_params.merge(
60
+ BatchApi.rails? ? {
61
+ "controller" => "endpoints",
62
+ "action" => "get"
63
+ } : {}
64
+ )
65
+ },
66
+ headers: { "GET" => "hello" }
67
+ } }
68
+
69
+ # these are defined in the dummy app's endpoints controller
70
+ let(:post_headers) { {"foo" => "bar"} }
71
+ let(:post_params) { {"other" => "value"} }
72
+
73
+ let(:post_request) { {
74
+ url: "/endpoint",
75
+ method: "post",
76
+ headers: post_headers,
77
+ params: post_params
78
+ } }
79
+
80
+ let(:post_result) { {
81
+ status: 203,
82
+ body: {
83
+ "result" => "POST OK",
84
+ "params" => post_params.merge(
85
+ BatchApi.rails? ? {
86
+ "controller" => "endpoints",
87
+ "action" => "post"
88
+ } : {}
89
+ )
90
+ },
91
+ headers: { "POST" => "guten tag" }
92
+ } }
93
+
94
+ let(:error_request) { {
95
+ url: "/endpoint/error",
96
+ method: "get"
97
+ } }
98
+
99
+ let(:error_response) { {
100
+ status: 500,
101
+ body: { "error" => { "message" => "StandardError" } }
102
+ } }
103
+
104
+ let(:missing_request) { {
105
+ url: "/dont/work",
106
+ method: "delete"
107
+ } }
108
+
109
+ let(:missing_response) { {
110
+ status: 404,
111
+ body: {}
112
+ } }
113
+
114
+ let(:parameter) {
115
+ (rand * 10000).to_i
116
+ }
117
+
118
+ let(:parameter_request) { {
119
+ url: "/endpoint/capture/#{parameter}",
120
+ method: "get"
121
+ } }
122
+
123
+ let(:parameter_result) { {
124
+ body: {
125
+ "result" => parameter.to_s
126
+ }
127
+ } }
128
+
129
+ let(:silent_request) { {
130
+ url: "/endpoint",
131
+ method: "post",
132
+ silent: true
133
+ } }
134
+
135
+ let(:failed_silent_request) {
136
+ error_request.merge(silent: true)
137
+ }
138
+
139
+ let(:failed_silent_result) {
140
+ error_response
141
+ }
142
+
143
+ before :each do
144
+ @t = Time.now
145
+ begin
146
+ post "/batch", {
147
+ ops: [
148
+ get_request,
149
+ post_request,
150
+ error_request,
151
+ missing_request,
152
+ parameter_request,
153
+ silent_request,
154
+ failed_silent_request,
155
+ get_by_default_request
156
+ ],
157
+ sequential: true
158
+ }.to_json, "CONTENT_TYPE" => "application/json"
159
+ rescue => err
160
+ puts err.message
161
+ puts err.backtrace.join("\n")
162
+ raise
163
+ end
164
+ end
165
+
166
+ it "returns a 200" do
167
+ expect(response.status).to eq(200)
168
+ end
169
+
170
+ it "includes results" do
171
+ expect(JSON.parse(response.body)["results"]).to be_a(Array)
172
+ end
173
+
174
+ context "for a get request" do
175
+ describe "with an explicit get" do
176
+ before :each do
177
+ @result = JSON.parse(response.body)["results"][0]
178
+ end
179
+
180
+ it_should_behave_like "a get request"
181
+ end
182
+
183
+ describe "with no method" do
184
+ before :each do
185
+ @result = JSON.parse(response.body)["results"][7]
186
+ end
187
+
188
+ it_should_behave_like "a get request"
189
+ end
190
+ end
191
+
192
+ context "for a request with parameters" do
193
+ describe "the response" do
194
+ before :each do
195
+ @result = JSON.parse(response.body)["results"][4]
196
+ end
197
+
198
+ it "properly parses the URL segment as a paramer" do
199
+ expect(@result["body"]).to eq(parameter_result[:body])
200
+ end
201
+ end
202
+ end
203
+
204
+ context "for a post request" do
205
+ describe "the response" do
206
+ before :each do
207
+ @result = JSON.parse(response.body)["results"][1]
208
+ end
209
+
210
+ it "returns the body as objects (since DecodeJsonBody is default)" do
211
+ expect(@result["body"]).to eq(post_result[:body])
212
+ end
213
+
214
+ it "returns the expected status" do
215
+ expect(@result["status"]).to eq(post_result[:status])
216
+ end
217
+
218
+ it "returns the expected headers" do
219
+ expect(@result["headers"]).to include(post_result[:headers])
220
+ end
221
+
222
+ it "verifies that the right headers were received" do
223
+ expect(@result["headers"]["REQUEST_HEADERS"]).to include(headerize(post_headers))
224
+ end
225
+ end
226
+ end
227
+
228
+ context "for a request that returns an error" do
229
+ before :each do
230
+ @result = JSON.parse(response.body)["results"][2]
231
+ end
232
+
233
+ it "returns the right status" do
234
+ expect(@result["status"]).to eq(error_response[:status])
235
+ end
236
+
237
+ it "returns the right error information" do
238
+ # we don't care about the backtrace,
239
+ # the main thing is that the messsage arrives
240
+ expect(@result["body"]["error"]).to include(error_response[:body]["error"])
241
+ end
242
+ end
243
+
244
+ context "for a request that returns error" do
245
+ before :each do
246
+ @result = JSON.parse(response.body)["results"][3]
247
+ end
248
+
249
+ it "returns the right status" do
250
+ expect(@result["status"]).to eq(404)
251
+ end
252
+ end
253
+
254
+ context "for a silent request" do
255
+ before :each do
256
+ @result = JSON.parse(response.body)["results"][5]
257
+ end
258
+
259
+ it "returns nothing" do
260
+ expect(@result).to eq({})
261
+ end
262
+ end
263
+
264
+ context "for a silent request that causes an error" do
265
+ before :each do
266
+ @result = JSON.parse(response.body)["results"][6]
267
+ end
268
+
269
+ it "returns a regular result" do
270
+ expect(@result.keys).not_to be_empty
271
+ end
272
+ end
273
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'support/sinatra_app'
3
+ require 'rack/test'
4
+ require_relative './shared_examples'
5
+
6
+ describe "Sinatra integration" do
7
+ include Rack::Test::Methods
8
+
9
+ def app
10
+ SinatraApp
11
+ end
12
+
13
+ # for compatibility with the Rails specs, which expect response
14
+ def response
15
+ last_response
16
+ end
17
+
18
+ it_should_behave_like "integrating with a server"
19
+ end
@@ -0,0 +1,42 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require 'rspec'
6
+ require "rails/test_help"
7
+ require 'rspec/rails'
8
+ require 'faker'
9
+ require 'timecop'
10
+
11
+ Rails.backtrace_cleaner.remove_silencers!
12
+
13
+ # Load support files
14
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
15
+
16
+ # Load fixtures from the engine
17
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
18
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
19
+ end
20
+
21
+ RSpec.configure do |config|
22
+ config.color = true
23
+
24
+ config.before :each do
25
+ BatchApi.config.limit = 20
26
+ BatchApi.config.endpoint = "/batch"
27
+ BatchApi.config.verb = :post
28
+
29
+ allow(BatchApi).to receive(:rails?).and_return(false)
30
+ end
31
+
32
+ # rspec-rails 3 will no longer automatically infer an example group's spec type
33
+ # from the file location. You can explicitly opt-in to the feature using this
34
+ # config option.
35
+ # To explicitly tag specs without using automatic inference, set the `:type`
36
+ # metadata manually:
37
+ #
38
+ # describe ThingsController, :type => :controller do
39
+ # # Equivalent to being in spec/controllers
40
+ # end
41
+ config.infer_spec_type_from_file_location!
42
+ end
@@ -0,0 +1,54 @@
1
+ require 'sinatra/base'
2
+ require 'rack/contrib'
3
+
4
+ class SinatraApp < Sinatra::Base
5
+ use Rack::PostBodyContentTypeParser
6
+ use BatchApi::RackMiddleware
7
+
8
+ get "/endpoint" do
9
+ headers["GET"] = "hello"
10
+ # including this in the body would mess the body up
11
+ # due to the other headers inserted
12
+ headers["REQUEST_HEADERS"] = header_output
13
+ content_type :json
14
+
15
+ status 422
16
+ {
17
+ result: "GET OK",
18
+ params: params.except(:endpoint)
19
+ }.to_json
20
+ end
21
+
22
+ get "/endpoint/capture/:captured" do
23
+ content_type :json
24
+ {result: params[:captured]}.to_json
25
+ end
26
+
27
+ post "/endpoint" do
28
+ headers["POST"] = "guten tag"
29
+ headers["REQUEST_HEADERS"] = header_output
30
+ content_type :json
31
+ status 203
32
+ {
33
+ result: "POST OK",
34
+ params: params.except(:endpoint)
35
+ }.to_json
36
+ end
37
+
38
+ get "/endpoint/error" do
39
+ raise StandardError
40
+ end
41
+
42
+ private
43
+
44
+ def header_output
45
+ # we only want the headers that were sent by the client
46
+ # headers in sinatra are just read directly from env
47
+ # env has a ton of additional information we don't want
48
+ # and that reference the request itself, causing an infinite loop
49
+ env.inject({}) do |h, (k, v)|
50
+ h.tap {|hash| hash[k.to_s] = v.to_s if k =~ /HTTP_/}
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,13 @@
1
+ module SinatraXhr
2
+ # add xhr method to specs for the Sinatra app
3
+ # modeled on Rails
4
+ # see
5
+ def xhr(request_method, action, parameters = nil, session = nil, flash = nil)
6
+ @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
7
+ @request.env['HTTP_ACCEPT'] ||= [Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
8
+ __send__(request_method, action, parameters, session, flash).tap do
9
+ @request.env.delete 'HTTP_X_REQUESTED_WITH'
10
+ @request.env.delete 'HTTP_ACCEPT'
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: batch_api2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Koppel, Arvind, Sandhiya
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: middleware
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: A Batch API plugin that provides a RESTful syntax, allowing clients to
28
+ make any number of REST calls with a single HTTP request. Removing use for MultiJson
29
+ email:
30
+ - dnivra26@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - MIT-LICENSE
36
+ - Rakefile
37
+ - changelog.md
38
+ - lib/batch_api.rb
39
+ - lib/batch_api/batch_error.rb
40
+ - lib/batch_api/configuration.rb
41
+ - lib/batch_api/error_wrapper.rb
42
+ - lib/batch_api/internal_middleware.rb
43
+ - lib/batch_api/internal_middleware/decode_json_body.rb
44
+ - lib/batch_api/internal_middleware/response_filter.rb
45
+ - lib/batch_api/operation.rb
46
+ - lib/batch_api/operation/rack.rb
47
+ - lib/batch_api/operation/rails.rb
48
+ - lib/batch_api/processor.rb
49
+ - lib/batch_api/processor/executor.rb
50
+ - lib/batch_api/processor/sequential.rb
51
+ - lib/batch_api/rack_middleware.rb
52
+ - lib/batch_api/response.rb
53
+ - lib/batch_api/utils.rb
54
+ - lib/batch_api/version.rb
55
+ - lib/tasks/batch_api_tasks.rake
56
+ - readme.md
57
+ - spec/dummy/Gemfile
58
+ - spec/dummy/Gemfile.lock
59
+ - spec/dummy/README.rdoc
60
+ - spec/dummy/Rakefile
61
+ - spec/dummy/app/assets/javascripts/application.js
62
+ - spec/dummy/app/assets/javascripts/endpoints.js
63
+ - spec/dummy/app/assets/stylesheets/application.css
64
+ - spec/dummy/app/assets/stylesheets/endpoints.css
65
+ - spec/dummy/app/controllers/application_controller.rb
66
+ - spec/dummy/app/controllers/endpoints_controller.rb
67
+ - spec/dummy/app/helpers/application_helper.rb
68
+ - spec/dummy/app/helpers/endpoints_helper.rb
69
+ - spec/dummy/app/views/endpoints/get.html.erb
70
+ - spec/dummy/app/views/endpoints/post.html.erb
71
+ - spec/dummy/app/views/layouts/application.html.erb
72
+ - spec/dummy/bin/bundle
73
+ - spec/dummy/bin/rails
74
+ - spec/dummy/bin/rake
75
+ - spec/dummy/bin/setup
76
+ - spec/dummy/config.ru
77
+ - spec/dummy/config/application.rb
78
+ - spec/dummy/config/boot.rb
79
+ - spec/dummy/config/database.yml
80
+ - spec/dummy/config/environment.rb
81
+ - spec/dummy/config/environments/development.rb
82
+ - spec/dummy/config/environments/production.rb
83
+ - spec/dummy/config/environments/test.rb
84
+ - spec/dummy/config/initializers/assets.rb
85
+ - spec/dummy/config/initializers/backtrace_silencers.rb
86
+ - spec/dummy/config/initializers/cookies_serializer.rb
87
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
88
+ - spec/dummy/config/initializers/inflections.rb
89
+ - spec/dummy/config/initializers/mime_types.rb
90
+ - spec/dummy/config/initializers/secret_token.rb
91
+ - spec/dummy/config/initializers/session_store.rb
92
+ - spec/dummy/config/initializers/wrap_parameters.rb
93
+ - spec/dummy/config/locales/en.yml
94
+ - spec/dummy/config/routes.rb
95
+ - spec/dummy/config/secrets.yml
96
+ - spec/dummy/db/test.sqlite3
97
+ - spec/dummy/public/404.html
98
+ - spec/dummy/public/422.html
99
+ - spec/dummy/public/500.html
100
+ - spec/dummy/public/favicon.ico
101
+ - spec/dummy/script/rails
102
+ - spec/dummy/test/functional/endpoints_controller_test.rb
103
+ - spec/dummy/test/unit/helpers/endpoints_helper_test.rb
104
+ - spec/lib/batch_api_spec.rb
105
+ - spec/lib/batch_error_spec.rb
106
+ - spec/lib/configuration_spec.rb
107
+ - spec/lib/error_wrapper_spec.rb
108
+ - spec/lib/internal_middleware/decode_json_body_spec.rb
109
+ - spec/lib/internal_middleware/response_filter_spec.rb
110
+ - spec/lib/internal_middleware_spec.rb
111
+ - spec/lib/operation/rack_spec.rb
112
+ - spec/lib/operation/rails_spec.rb
113
+ - spec/lib/processor/executor_spec.rb
114
+ - spec/lib/processor/sequential_spec.rb
115
+ - spec/lib/processor_spec.rb
116
+ - spec/lib/rack_middleware_spec.rb
117
+ - spec/lib/response_spec.rb
118
+ - spec/rack-integration/rails_spec.rb
119
+ - spec/rack-integration/shared_examples.rb
120
+ - spec/rack-integration/sinatra_integration_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/support/sinatra_app.rb
123
+ - spec/support/sinatra_xhr.rb
124
+ homepage: http://github.com/dnivra26/batch_api
125
+ licenses: []
126
+ metadata: {}
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 2.5.1
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: A RESTful Batch API for Rails
147
+ test_files:
148
+ - spec/dummy/app/assets/javascripts/application.js
149
+ - spec/dummy/app/assets/javascripts/endpoints.js
150
+ - spec/dummy/app/assets/stylesheets/application.css
151
+ - spec/dummy/app/assets/stylesheets/endpoints.css
152
+ - spec/dummy/app/controllers/application_controller.rb
153
+ - spec/dummy/app/controllers/endpoints_controller.rb
154
+ - spec/dummy/app/helpers/application_helper.rb
155
+ - spec/dummy/app/helpers/endpoints_helper.rb
156
+ - spec/dummy/app/views/endpoints/get.html.erb
157
+ - spec/dummy/app/views/endpoints/post.html.erb
158
+ - spec/dummy/app/views/layouts/application.html.erb
159
+ - spec/dummy/bin/bundle
160
+ - spec/dummy/bin/rails
161
+ - spec/dummy/bin/rake
162
+ - spec/dummy/bin/setup
163
+ - spec/dummy/config/application.rb
164
+ - spec/dummy/config/boot.rb
165
+ - spec/dummy/config/database.yml
166
+ - spec/dummy/config/environment.rb
167
+ - spec/dummy/config/environments/development.rb
168
+ - spec/dummy/config/environments/production.rb
169
+ - spec/dummy/config/environments/test.rb
170
+ - spec/dummy/config/initializers/assets.rb
171
+ - spec/dummy/config/initializers/backtrace_silencers.rb
172
+ - spec/dummy/config/initializers/cookies_serializer.rb
173
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
174
+ - spec/dummy/config/initializers/inflections.rb
175
+ - spec/dummy/config/initializers/mime_types.rb
176
+ - spec/dummy/config/initializers/secret_token.rb
177
+ - spec/dummy/config/initializers/session_store.rb
178
+ - spec/dummy/config/initializers/wrap_parameters.rb
179
+ - spec/dummy/config/locales/en.yml
180
+ - spec/dummy/config/routes.rb
181
+ - spec/dummy/config/secrets.yml
182
+ - spec/dummy/config.ru
183
+ - spec/dummy/db/test.sqlite3
184
+ - spec/dummy/Gemfile
185
+ - spec/dummy/Gemfile.lock
186
+ - spec/dummy/public/404.html
187
+ - spec/dummy/public/422.html
188
+ - spec/dummy/public/500.html
189
+ - spec/dummy/public/favicon.ico
190
+ - spec/dummy/Rakefile
191
+ - spec/dummy/README.rdoc
192
+ - spec/dummy/script/rails
193
+ - spec/dummy/test/functional/endpoints_controller_test.rb
194
+ - spec/dummy/test/unit/helpers/endpoints_helper_test.rb
195
+ - spec/lib/batch_api_spec.rb
196
+ - spec/lib/batch_error_spec.rb
197
+ - spec/lib/configuration_spec.rb
198
+ - spec/lib/error_wrapper_spec.rb
199
+ - spec/lib/internal_middleware/decode_json_body_spec.rb
200
+ - spec/lib/internal_middleware/response_filter_spec.rb
201
+ - spec/lib/internal_middleware_spec.rb
202
+ - spec/lib/operation/rack_spec.rb
203
+ - spec/lib/operation/rails_spec.rb
204
+ - spec/lib/processor/executor_spec.rb
205
+ - spec/lib/processor/sequential_spec.rb
206
+ - spec/lib/processor_spec.rb
207
+ - spec/lib/rack_middleware_spec.rb
208
+ - spec/lib/response_spec.rb
209
+ - spec/rack-integration/rails_spec.rb
210
+ - spec/rack-integration/shared_examples.rb
211
+ - spec/rack-integration/sinatra_integration_spec.rb
212
+ - spec/spec_helper.rb
213
+ - spec/support/sinatra_app.rb
214
+ - spec/support/sinatra_xhr.rb