api_hammer 0.14.1 → 0.15.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 +4 -4
- data/.travis.yml +11 -2
- data/CHANGELOG.md +8 -0
- data/README.md +2 -0
- data/api_hammer.gemspec +1 -2
- data/gemfiles/Gemfile_rack_1 +10 -0
- data/gemfiles/Gemfile_rack_2 +10 -0
- data/lib/api_hammer/glob_escape.rb +14 -0
- data/lib/api_hammer/rails/check_required_params.rb +1 -1
- data/lib/api_hammer/sinatra/halt.rb +1 -1
- data/lib/api_hammer/sinatra.rb +30 -6
- data/lib/api_hammer/version.rb +1 -1
- data/lib/api_hammer/ycomb.rb +15 -0
- data/test/check_required_params_test.rb +56 -49
- data/test/public_instance_exec_test.rb +4 -4
- data/test/ycomb_test.rb +13 -0
- metadata +44 -53
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f0d825a6ef8df18cb56a002f9bbe2fbd1e7f752
|
4
|
+
data.tar.gz: c0e45eeca9b5ce3c7fb59093df1fdc3ff12a0d90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e5dbd8d97a96539dccec809fb9a4afdab52cda39e41c9f5436fc9c668eb03ef5fcb42e6d36b8417a513ff663eb7fea974bcc0d3fe14aa96c141afa142680547
|
7
|
+
data.tar.gz: 4949a21c1e0b7dfda1c727660aa5166d1cab974c7b6141ac817509b969a8cf8cfccdffc201f9f78d5a8eaab71a8424a7e83fe46ac415268c9e7d3868e297aba5
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# v0.15.0
|
2
|
+
- fix check_required_params for ActionController::Params (really this time?)
|
3
|
+
- Dir.glob_escape / Pathname#glob_escape
|
4
|
+
- Kernel#ycomb - the y combinator
|
5
|
+
- sinatra helper #check_params_and_object_consistent
|
6
|
+
- fix sinatra #format_response with 204 no content
|
7
|
+
- improve testing with up-to-date ruby (2.3.1), rack (2), actionpack (5), as well as older ones
|
8
|
+
|
1
9
|
# v0.14.1
|
2
10
|
- task cucumber:trailing_whitespace to clean trailing whitespace from cucumber features #54
|
3
11
|
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# ApiHammer
|
2
2
|
|
3
|
+
[](https://travis-ci.org/notEthan/api_hammer)
|
4
|
+
|
3
5
|
a collection of little tools I have used when creating APIs. these are generally too small to have their own
|
4
6
|
library, so have been collected here.
|
5
7
|
|
data/api_hammer.gemspec
CHANGED
@@ -34,6 +34,5 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_development_dependency 'minitest-reporters'
|
35
35
|
spec.add_development_dependency 'yard'
|
36
36
|
spec.add_development_dependency 'simplecov'
|
37
|
-
spec.add_development_dependency '
|
38
|
-
spec.add_development_dependency 'sqlite3'
|
37
|
+
spec.add_development_dependency 'actionpack'
|
39
38
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class << Dir
|
2
|
+
# prefix any glob-special characters in path with backslashes
|
3
|
+
def glob_escape(path)
|
4
|
+
path.gsub(/[*?\[\]{}\\]/) { |match| "\\#{match}" }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'pathname'
|
9
|
+
class Pathname
|
10
|
+
# prefix any glob-special characters in this path with backslashes
|
11
|
+
def glob_escape
|
12
|
+
self.class.new(Dir.glob_escape(self.to_path))
|
13
|
+
end
|
14
|
+
end
|
@@ -47,7 +47,7 @@ module ApiHammer::Rails
|
|
47
47
|
add_error.call(I18n.t(:"errors.required_params.must_be_type", :default => "%{key} must be a %{type}", :key => key, :type => check.name))
|
48
48
|
end
|
49
49
|
else
|
50
|
-
if subparams.is_a?(Hash)
|
50
|
+
if subparams.is_a?(Hash) || (Object.const_defined?('ActionController') && subparams.is_a?(::ActionController::Parameters))
|
51
51
|
check_required_params_helper(nil, subparams[check], errors, parents + [check])
|
52
52
|
else
|
53
53
|
add_error.call(I18n.t(:"errors.required_params.must_be_hash", :default => "%{key} must be a Hash", :key => key))
|
data/lib/api_hammer/sinatra.rb
CHANGED
@@ -97,13 +97,17 @@ module ApiHammer
|
|
97
97
|
# arguments are in the order of what tends to vary most frequently
|
98
98
|
# rather than rack's way, so headers come last
|
99
99
|
def format_response(status, body_object, headers={})
|
100
|
-
|
101
|
-
|
102
|
-
JSON.pretty_generate(body_object)
|
100
|
+
if status == 204
|
101
|
+
body = ''
|
103
102
|
else
|
104
|
-
|
105
|
-
|
106
|
-
|
103
|
+
body = case response_media_type
|
104
|
+
when 'application/json'
|
105
|
+
JSON.pretty_generate(body_object)
|
106
|
+
else
|
107
|
+
# :nocov:
|
108
|
+
raise NotImplementedError, "unsupported response media type #{response_media_type}"
|
109
|
+
# :nocov:
|
110
|
+
end
|
107
111
|
end
|
108
112
|
[status, headers.merge({'Content-Type' => response_media_type}), [body]]
|
109
113
|
end
|
@@ -167,5 +171,25 @@ module ApiHammer
|
|
167
171
|
halt_error(415, errors)
|
168
172
|
end
|
169
173
|
end
|
174
|
+
|
175
|
+
# for methods where parameters which are required in the path may also be specified in the
|
176
|
+
# body, this takes the path_params and the body object and ensures that they are consistent
|
177
|
+
# any place they are specified in the body.
|
178
|
+
def check_params_and_object_consistent(path_params, object)
|
179
|
+
errors = {}
|
180
|
+
path_params.each do |(k, v)|
|
181
|
+
if object.key?(k) && object[k] != v
|
182
|
+
errors[k] = [I18n.t('app.errors.inconsistent_uri_and_entity',
|
183
|
+
:key => k,
|
184
|
+
:uri_value => v,
|
185
|
+
:entity_value => object[k],
|
186
|
+
:default => "Inconsistent data given in the request URI and request entity: %{key} was specified as %{uri_value} in the URI but %{entity_value} in the entity",
|
187
|
+
)]
|
188
|
+
end
|
189
|
+
end
|
190
|
+
if errors.any?
|
191
|
+
halt_error(422, errors)
|
192
|
+
end
|
193
|
+
end
|
170
194
|
end
|
171
195
|
end
|
data/lib/api_hammer/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Kernel
|
2
|
+
# this is the Y-combinator, which allows anonymous recursive functions. for a simple example,
|
3
|
+
# to define a recursive function to return the length of an array:
|
4
|
+
#
|
5
|
+
# length = ycomb do |len|
|
6
|
+
# proc{|list| list == [] ? 0 : 1 + len.call(list[1..-1]) }
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# see https://secure.wikimedia.org/wikipedia/en/wiki/Fixed_point_combinator#Y_combinator
|
10
|
+
# and chapter 9 of the little schemer, available as the sample chapter at http://www.ccs.neu.edu/home/matthias/BTLS/
|
11
|
+
def ycomb
|
12
|
+
proc { |f| f.call(f) }.call(proc { |f| yield proc{|*x| f.call(f).call(*x) } })
|
13
|
+
end
|
14
|
+
module_function :ycomb
|
15
|
+
end
|
@@ -9,65 +9,72 @@ class FakeController
|
|
9
9
|
attr_accessor :params
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
# strong parameters doesn't require its dependencies so good
|
13
|
+
require 'rack/test'
|
14
|
+
require 'active_support/core_ext/module'
|
15
|
+
require 'action_controller/metal/strong_parameters'
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
c = controller_with_params(:id => '99', :person => {:name => 'hammer', :height => '3'}, :lucky_numbers => ['2'])
|
22
|
-
c.check_required_params(checks)
|
17
|
+
[Hash, ActionController::Parameters].each do |params_class|
|
18
|
+
describe "ApiHammer::Rails#check_required_params with #{params_class}" do
|
19
|
+
define_method(:controller_with_params) do |params|
|
20
|
+
FakeController.new.tap { |c| c.params = params_class.new.merge(params) }
|
23
21
|
end
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
28
|
-
assert_equal({'error_message' => 'id is required but was not provided', 'errors' => {'id' => ['id is required but was not provided']}}, err.body)
|
29
|
-
end
|
23
|
+
describe 'a moderately complex set of checks' do
|
24
|
+
let(:checks) { [:id, :person => [:name, :height], :lucky_numbers => Array] }
|
30
25
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
26
|
+
it 'passes with a moderately complex example' do
|
27
|
+
c = controller_with_params(:id => '99', :person => {:name => 'hammer', :height => '3'}, :lucky_numbers => ['2'])
|
28
|
+
c.check_required_params(checks)
|
29
|
+
end
|
36
30
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
31
|
+
it 'is missing id' do
|
32
|
+
c = controller_with_params(:person => {:name => 'hammer', :height => '3'}, :lucky_numbers => ['2'])
|
33
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
34
|
+
assert_equal({'error_message' => 'id is required but was not provided', 'errors' => {'id' => ['id is required but was not provided']}}, err.body)
|
35
|
+
end
|
42
36
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
it 'is missing person' do
|
38
|
+
c = controller_with_params(:id => '99', :lucky_numbers => ['2'])
|
39
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
40
|
+
assert_equal({'error_message' => 'person is required but was not provided', 'errors' => {'person' => ['person is required but was not provided']}}, err.body)
|
41
|
+
end
|
48
42
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
43
|
+
it 'is has the wrong type for person' do
|
44
|
+
c = controller_with_params(:id => '99', :person => ['hammer', '3'], :lucky_numbers => ['2'])
|
45
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
46
|
+
assert_equal({'error_message' => 'person must be a Hash', 'errors' => {'person' => ['person must be a Hash']}}, err.body)
|
47
|
+
end
|
54
48
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
49
|
+
it 'is has the wrong type for person with hash check' do
|
50
|
+
c = controller_with_params(:person => [])
|
51
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(:person => {:id => Fixnum}) }
|
52
|
+
assert_equal({'error_message' => 'person must be a Hash', 'errors' => {'person' => ['person must be a Hash']}}, err.body)
|
53
|
+
end
|
60
54
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
55
|
+
it 'is missing person#name' do
|
56
|
+
c = controller_with_params(:id => '99', :person => {:height => '3'}, :lucky_numbers => ['2'])
|
57
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
58
|
+
assert_equal({'error_message' => 'person#name is required but was not provided', 'errors' => {'person#name' => ['person#name is required but was not provided']}}, err.body)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'is missing lucky_numbers' do
|
62
|
+
c = controller_with_params(:id => '99', :person => {:name => 'hammer', :height => '3'})
|
63
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
64
|
+
assert_equal({'error_message' => 'lucky_numbers is required but was not provided', 'errors' => {'lucky_numbers' => ['lucky_numbers is required but was not provided']}}, err.body)
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'has the wrong type for lucky_numbers' do
|
68
|
+
c = controller_with_params(:id => '99', :person => {:name => 'hammer', :height => '3'}, :lucky_numbers => '2')
|
69
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
70
|
+
assert_equal({'error_message' => 'lucky_numbers must be a Array', 'errors' => {'lucky_numbers' => ['lucky_numbers must be a Array']}}, err.body)
|
71
|
+
end
|
66
72
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
73
|
+
it 'has multiple problems' do
|
74
|
+
c = controller_with_params({})
|
75
|
+
err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
|
76
|
+
assert_equal({'error_message' => 'id is required but was not provided. person is required but was not provided. lucky_numbers is required but was not provided.', 'errors' => {'id' => ['id is required but was not provided'], 'person' => ['person is required but was not provided'], 'lucky_numbers' => ['lucky_numbers is required but was not provided']}}, err.body)
|
77
|
+
end
|
71
78
|
end
|
72
79
|
end
|
73
80
|
end
|
@@ -23,10 +23,10 @@ describe '#public_instance_exec' do
|
|
23
23
|
assert_equal(:public_exec, foo.public_instance_exec(:public_exec) { |arg| public_method(arg) })
|
24
24
|
regularex = (foo.protected_method rescue $!)
|
25
25
|
ex = assert_raises(regularex.class) { foo.public_instance_exec(:protected_exec) { |arg| protected_method(arg) } }
|
26
|
-
|
26
|
+
assert_includes(regularex.message, ex.message)
|
27
27
|
regularex = (foo.private_method rescue $!)
|
28
28
|
ex = assert_raises(regularex.class) { foo.public_instance_exec(:private_exec) { |arg| private_method(arg) } }
|
29
|
-
|
29
|
+
assert_includes(regularex.message, ex.message)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
describe '#public_instance_eval' do
|
@@ -35,9 +35,9 @@ describe '#public_instance_eval' do
|
|
35
35
|
assert_equal(:public, foo.public_instance_eval { public_method })
|
36
36
|
regularex = (foo.protected_method rescue $!)
|
37
37
|
ex = assert_raises(regularex.class) { foo.public_instance_eval { protected_method } }
|
38
|
-
|
38
|
+
assert_includes(regularex.message, ex.message)
|
39
39
|
regularex = (foo.private_method rescue $!)
|
40
40
|
ex = assert_raises(regularex.class) { foo.public_instance_eval { private_method } }
|
41
|
-
|
41
|
+
assert_includes(regularex.message, ex.message)
|
42
42
|
end
|
43
43
|
end
|
data/test/ycomb_test.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
proc { |p| $:.unshift(p) unless $:.any? { |lp| File.expand_path(lp) == p } }.call(File.expand_path('.', File.dirname(__FILE__)))
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
require 'api_hammer/ycomb'
|
5
|
+
describe 'ycomb' do
|
6
|
+
it 'does the needful' do
|
7
|
+
length = ycomb do |len|
|
8
|
+
proc{|list| list == [] ? 0 : 1 + len.call(list[1..-1]) }
|
9
|
+
end
|
10
|
+
assert_equal(0, length.call([]))
|
11
|
+
assert_equal(3, length.call([:a, :b, :c]))
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,223 +1,209 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_hammer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: term-ansicolor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: addressable
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: coderay
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: i18n
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rack-test
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: minitest
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: minitest-reporters
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- -
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0'
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: yard
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
170
170
|
requirements:
|
171
|
-
- -
|
171
|
+
- - ">="
|
172
172
|
- !ruby/object:Gem::Version
|
173
173
|
version: '0'
|
174
174
|
type: :development
|
175
175
|
prerelease: false
|
176
176
|
version_requirements: !ruby/object:Gem::Requirement
|
177
177
|
requirements:
|
178
|
-
- -
|
178
|
+
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: simplecov
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - ">="
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '0'
|
188
188
|
type: :development
|
189
189
|
prerelease: false
|
190
190
|
version_requirements: !ruby/object:Gem::Requirement
|
191
191
|
requirements:
|
192
|
-
- -
|
192
|
+
- - ">="
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
- !ruby/object:Gem::Dependency
|
196
|
-
name:
|
196
|
+
name: actionpack
|
197
197
|
requirement: !ruby/object:Gem::Requirement
|
198
198
|
requirements:
|
199
|
-
- -
|
199
|
+
- - ">="
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: '0'
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
|
-
- -
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
version: '0'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: sqlite3
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - '>='
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: '0'
|
216
|
-
type: :development
|
217
|
-
prerelease: false
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
219
|
-
requirements:
|
220
|
-
- - '>='
|
206
|
+
- - ">="
|
221
207
|
- !ruby/object:Gem::Version
|
222
208
|
version: '0'
|
223
209
|
description: actually a set of small API-related tools. very much unlike a hammer
|
@@ -229,9 +215,9 @@ executables:
|
|
229
215
|
extensions: []
|
230
216
|
extra_rdoc_files: []
|
231
217
|
files:
|
232
|
-
- .simplecov
|
233
|
-
- .travis.yml
|
234
|
-
- .yardopts
|
218
|
+
- ".simplecov"
|
219
|
+
- ".travis.yml"
|
220
|
+
- ".yardopts"
|
235
221
|
- CHANGELOG.md
|
236
222
|
- Gemfile
|
237
223
|
- LICENSE.txt
|
@@ -239,6 +225,8 @@ files:
|
|
239
225
|
- Rakefile.rb
|
240
226
|
- api_hammer.gemspec
|
241
227
|
- bin/hc
|
228
|
+
- gemfiles/Gemfile_rack_1
|
229
|
+
- gemfiles/Gemfile_rack_2
|
242
230
|
- lib/api_hammer.rb
|
243
231
|
- lib/api_hammer/body.rb
|
244
232
|
- lib/api_hammer/content_type_attrs.rb
|
@@ -246,6 +234,7 @@ files:
|
|
246
234
|
- lib/api_hammer/faraday/request_logger.rb
|
247
235
|
- lib/api_hammer/filtration/form_encoded.rb
|
248
236
|
- lib/api_hammer/filtration/json.rb
|
237
|
+
- lib/api_hammer/glob_escape.rb
|
249
238
|
- lib/api_hammer/halt_methods.rb
|
250
239
|
- lib/api_hammer/json_script_escape_helper.rb
|
251
240
|
- lib/api_hammer/public_instance_exec.rb
|
@@ -265,6 +254,7 @@ files:
|
|
265
254
|
- lib/api_hammer/trailing_newline.rb
|
266
255
|
- lib/api_hammer/version.rb
|
267
256
|
- lib/api_hammer/weblink.rb
|
257
|
+
- lib/api_hammer/ycomb.rb
|
268
258
|
- lib/logstash/filters/active_support_tags.rb
|
269
259
|
- lib/logstash/filters/api_hammer_request.rb
|
270
260
|
- lib/logstash/filters/oauthenticator.rb
|
@@ -280,6 +270,7 @@ files:
|
|
280
270
|
- test/show_text_exceptions_test.rb
|
281
271
|
- test/trailing_newline_test.rb
|
282
272
|
- test/weblink_test.rb
|
273
|
+
- test/ycomb_test.rb
|
283
274
|
homepage: https://github.com/notEthan/api_hammer
|
284
275
|
licenses:
|
285
276
|
- MIT
|
@@ -290,17 +281,17 @@ require_paths:
|
|
290
281
|
- lib
|
291
282
|
required_ruby_version: !ruby/object:Gem::Requirement
|
292
283
|
requirements:
|
293
|
-
- -
|
284
|
+
- - ">="
|
294
285
|
- !ruby/object:Gem::Version
|
295
286
|
version: '0'
|
296
287
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
297
288
|
requirements:
|
298
|
-
- -
|
289
|
+
- - ">="
|
299
290
|
- !ruby/object:Gem::Version
|
300
291
|
version: '0'
|
301
292
|
requirements: []
|
302
293
|
rubyforge_project:
|
303
|
-
rubygems_version: 2.
|
294
|
+
rubygems_version: 2.5.1
|
304
295
|
signing_key:
|
305
296
|
specification_version: 4
|
306
297
|
summary: an API tool
|
@@ -314,5 +305,5 @@ test_files:
|
|
314
305
|
- test/show_text_exceptions_test.rb
|
315
306
|
- test/trailing_newline_test.rb
|
316
307
|
- test/weblink_test.rb
|
317
|
-
- .
|
318
|
-
|
308
|
+
- test/ycomb_test.rb
|
309
|
+
- ".simplecov"
|