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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +30 -0
- data/changelog.md +74 -0
- data/lib/batch_api.rb +28 -0
- data/lib/batch_api/batch_error.rb +41 -0
- data/lib/batch_api/configuration.rb +36 -0
- data/lib/batch_api/error_wrapper.rb +44 -0
- data/lib/batch_api/internal_middleware.rb +87 -0
- data/lib/batch_api/internal_middleware/decode_json_body.rb +28 -0
- data/lib/batch_api/internal_middleware/response_filter.rb +27 -0
- data/lib/batch_api/operation.rb +2 -0
- data/lib/batch_api/operation/rack.rb +76 -0
- data/lib/batch_api/operation/rails.rb +42 -0
- data/lib/batch_api/processor.rb +113 -0
- data/lib/batch_api/processor/executor.rb +18 -0
- data/lib/batch_api/processor/sequential.rb +29 -0
- data/lib/batch_api/rack_middleware.rb +37 -0
- data/lib/batch_api/response.rb +38 -0
- data/lib/batch_api/utils.rb +17 -0
- data/lib/batch_api/version.rb +3 -0
- data/lib/tasks/batch_api_tasks.rake +4 -0
- data/readme.md +243 -0
- data/spec/dummy/Gemfile +1 -0
- data/spec/dummy/Gemfile.lock +8 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +15 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/javascripts/endpoints.js +2 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/assets/stylesheets/endpoints.css +4 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/endpoints_controller.rb +36 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/helpers/endpoints_helper.rb +2 -0
- data/spec/dummy/app/views/endpoints/get.html.erb +2 -0
- data/spec/dummy/app/views/endpoints/post.html.erb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +32 -0
- data/spec/dummy/config/boot.rb +3 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +64 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/test/functional/endpoints_controller_test.rb +14 -0
- data/spec/dummy/test/unit/helpers/endpoints_helper_test.rb +4 -0
- data/spec/lib/batch_api_spec.rb +20 -0
- data/spec/lib/batch_error_spec.rb +23 -0
- data/spec/lib/configuration_spec.rb +30 -0
- data/spec/lib/error_wrapper_spec.rb +68 -0
- data/spec/lib/internal_middleware/decode_json_body_spec.rb +44 -0
- data/spec/lib/internal_middleware/response_filter_spec.rb +61 -0
- data/spec/lib/internal_middleware_spec.rb +93 -0
- data/spec/lib/operation/rack_spec.rb +246 -0
- data/spec/lib/operation/rails_spec.rb +100 -0
- data/spec/lib/processor/executor_spec.rb +22 -0
- data/spec/lib/processor/sequential_spec.rb +39 -0
- data/spec/lib/processor_spec.rb +136 -0
- data/spec/lib/rack_middleware_spec.rb +103 -0
- data/spec/lib/response_spec.rb +53 -0
- data/spec/rack-integration/rails_spec.rb +10 -0
- data/spec/rack-integration/shared_examples.rb +273 -0
- data/spec/rack-integration/sinatra_integration_spec.rb +19 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/sinatra_app.rb +54 -0
- data/spec/support/sinatra_xhr.rb +13 -0
- metadata +214 -0
@@ -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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|