batch_api2 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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