api_hammer 0.14.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 97a8509f566dac88fc5177b30cc0c6919f56987d
4
- data.tar.gz: 5fd021da8d0a1c71d0efcb8499300f1449594b7e
3
+ metadata.gz: 1f0d825a6ef8df18cb56a002f9bbe2fbd1e7f752
4
+ data.tar.gz: c0e45eeca9b5ce3c7fb59093df1fdc3ff12a0d90
5
5
  SHA512:
6
- metadata.gz: d02a48d2abfc8161d26b558557c5946f09b1f11f1ae847980ea78c734c898d4cf3a53d754de7a6fa6b60a7fadedcbc7029de83fe1007649c5f1f150b1736299c
7
- data.tar.gz: b54879b4c3b1b339697ce24ea64061aadfcc1f1b9dd5088a0b04fd36e32200e16681ac27671d562fc234793da10f45090894b0439b3fe51c54fea399959c3d7b
6
+ metadata.gz: 2e5dbd8d97a96539dccec809fb9a4afdab52cda39e41c9f5436fc9c668eb03ef5fcb42e6d36b8417a513ff663eb7fea974bcc0d3fe14aa96c141afa142680547
7
+ data.tar.gz: 4949a21c1e0b7dfda1c727660aa5166d1cab974c7b6141ac817509b969a8cf8cfccdffc201f9f78d5a8eaab71a8424a7e83fe46ac415268c9e7d3868e297aba5
data/.travis.yml CHANGED
@@ -1,4 +1,13 @@
1
1
  rvm:
2
- - 2.0.0-p353
3
- - 2.2.4
2
+ - 2.0.0
3
+ - 2.2.5
4
+ - 2.3.1
5
+ gemfile:
6
+ - gemfiles/Gemfile_rack_1
7
+ - gemfiles/Gemfile_rack_2
8
+ matrix:
9
+ fast_finish: true
10
+ exclude:
11
+ - rvm: 2.0.0
12
+ gemfile: gemfiles/Gemfile_rack_2
4
13
  script: rake test
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
+ [![Build Status](https://travis-ci.org/notEthan/api_hammer.svg?branch=master)](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 'activesupport'
38
- spec.add_development_dependency 'sqlite3'
37
+ spec.add_development_dependency 'actionpack'
39
38
  end
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'byebug'
6
+ gem 'wwtd'
7
+
8
+ gem 'rack', '~> 1.0'
9
+ gem 'actionpack', '~> 4.0'
10
+ gem 'json', git: 'https://github.com/flori/json.git', tag: 'v1.8.3'
@@ -0,0 +1,10 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec path: '..'
4
+
5
+ gem 'byebug'
6
+ gem 'wwtd'
7
+
8
+ gem 'rack', '~> 2.0'
9
+ gem 'actionpack', '~> 5.0'
10
+ gem 'json', git: 'https://github.com/flori/json.git', tag: 'v1.8.3'
@@ -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))
@@ -5,7 +5,7 @@ module ApiHammer
5
5
  module Halt
6
6
  # halt and render the given body
7
7
  def halt(status, body, render_options = {})
8
- throw :halt, format_response(status, body, headers)
8
+ throw :halt, format_response(status, body)
9
9
  end
10
10
 
11
11
  include HaltMethods
@@ -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
- body = case response_media_type
101
- when 'application/json'
102
- JSON.pretty_generate(body_object)
100
+ if status == 204
101
+ body = ''
103
102
  else
104
- # :nocov:
105
- raise NotImplementedError, "unsupported response media type #{response_media_type}"
106
- # :nocov:
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
@@ -1,3 +1,3 @@
1
1
  module ApiHammer
2
- VERSION = "0.14.1"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -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
- describe 'ApiHammer::Rails#check_required_params' do
13
- def controller_with_params(params)
14
- FakeController.new.tap { |c| c.params = params }
15
- end
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
- describe 'a moderately complex set of checks' do
18
- let(:checks) { [:id, :person => [:name, :height], :lucky_numbers => Array] }
19
-
20
- it 'passes with a moderately complex example' do
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
- it 'is missing id' do
26
- c = controller_with_params(:person => {:name => 'hammer', :height => '3'}, :lucky_numbers => ['2'])
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
- it 'is missing person' do
32
- c = controller_with_params(:id => '99', :lucky_numbers => ['2'])
33
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
34
- assert_equal({'error_message' => 'person is required but was not provided', 'errors' => {'person' => ['person is required but was not provided']}}, err.body)
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
- it 'is has the wrong type for person' do
38
- c = controller_with_params(:id => '99', :person => ['hammer', '3'], :lucky_numbers => ['2'])
39
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
40
- assert_equal({'error_message' => 'person must be a Hash', 'errors' => {'person' => ['person must be a Hash']}}, err.body)
41
- end
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
- it 'is has the wrong type for person with hash check' do
44
- c = controller_with_params(:person => [])
45
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(:person => {:id => Fixnum}) }
46
- assert_equal({'error_message' => 'person must be a Hash', 'errors' => {'person' => ['person must be a Hash']}}, err.body)
47
- end
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
- it 'is missing person#name' do
50
- c = controller_with_params(:id => '99', :person => {:height => '3'}, :lucky_numbers => ['2'])
51
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
52
- 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)
53
- end
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
- it 'is missing lucky_numbers' do
56
- c = controller_with_params(:id => '99', :person => {:name => 'hammer', :height => '3'})
57
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
58
- 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)
59
- end
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
- it 'has the wrong type for lucky_numbers' do
62
- c = controller_with_params(:id => '99', :person => {:name => 'hammer', :height => '3'}, :lucky_numbers => '2')
63
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
64
- assert_equal({'error_message' => 'lucky_numbers must be a Array', 'errors' => {'lucky_numbers' => ['lucky_numbers must be a Array']}}, err.body)
65
- end
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
- it 'has multiple problems' do
68
- c = controller_with_params({})
69
- err = assert_raises(ApiHammer::Rails::Halt) { c.check_required_params(checks) }
70
- 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)
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
- assert_equal(regularex.message, ex.message)
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
- assert_equal(regularex.message, ex.message)
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
- assert_equal(regularex.message, ex.message)
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
- assert_equal(regularex.message, ex.message)
41
+ assert_includes(regularex.message, ex.message)
42
42
  end
43
43
  end
@@ -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.14.1
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-06-07 00:00:00.000000000 Z
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: activesupport
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.2.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
- - .simplecov
318
- has_rdoc:
308
+ - test/ycomb_test.rb
309
+ - ".simplecov"