spambust 0.2.0 → 0.2.1
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 +5 -5
- data/CHANGELOG.md +5 -0
- data/LICENSE +1 -1
- data/lib/spambust.rb +4 -2
- data/lib/spambust/form_helpers.rb +53 -27
- data/lib/spambust/version.rb +7 -3
- data/spec/spambust/demo_app.rb +2 -1
- data/spec/spambust/form_helpers_integration_spec.rb +14 -12
- data/spec/spambust/form_helpers_spec.rb +19 -17
- data/spec/spambust/views/index.erb +1 -0
- data/spec/spambust/views/layout.erb +1 -0
- data/spec/spec_helper.rb +3 -1
- metadata +13 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 676696f9b67a870d4a77de337b501f682f63dfd0256ea2d4fbcab2b38e37aaa1
|
4
|
+
data.tar.gz: bd4dbb2b8db3cbd2f912735969dbaa89d0e014b1a60ee69a1d49a0ff705b918a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbba1007f7c938003e9faf740bb35292a142b8e43f2b71ff17e6eb6650b8ef6dc183aa9b9fec288fe68ce30a971917756da03875928c61f2c790455e0dbe3b55
|
7
|
+
data.tar.gz: f55cf1080f1df24bb1350044d52d01d70d24969575a209d851a25aefcf940d82923391916e734b41d8890321dfaca8a01a3e196e317d9350093a27312946905d
|
data/CHANGELOG.md
CHANGED
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2013-
|
3
|
+
Copyright (c) 2013-2020 Chirantan Mitra
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
6
|
this software and associated documentation files (the "Software"), to deal in
|
data/lib/spambust.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# spambust.rb
|
2
4
|
#
|
3
5
|
# Author:: Chirantan Mitra
|
4
|
-
# Copyright:: Copyright (c) 2013-
|
6
|
+
# Copyright:: Copyright (c) 2013-2020. All rights reserved
|
5
7
|
# License:: MIT
|
6
8
|
|
7
|
-
|
9
|
+
require 'spambust/form_helpers'
|
@@ -1,19 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# form_helpers.rb
|
2
4
|
#
|
3
5
|
# Author:: Chirantan Mitra
|
4
|
-
# Copyright:: Copyright (c) 2013-
|
6
|
+
# Copyright:: Copyright (c) 2013-2020. All rights reserved
|
5
7
|
# License:: MIT
|
6
8
|
|
7
9
|
require 'digest/md5'
|
8
10
|
|
9
|
-
module Spambust
|
11
|
+
module Spambust
|
10
12
|
##
|
11
13
|
# <b>Form helpers for sinatra or similar DSLs/frameworks to block for spams</b>
|
12
14
|
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
# === app.rb
|
16
|
-
#
|
15
|
+
# @example app.rb
|
17
16
|
# class TestApp < Sinatra::Base
|
18
17
|
# helpers Spambust::FormHelpers
|
19
18
|
#
|
@@ -40,8 +39,7 @@ module Spambust # :nodoc:
|
|
40
39
|
# start_app if direct_script_execution? && ENV['environment'] != 'test'
|
41
40
|
# end
|
42
41
|
#
|
43
|
-
#
|
44
|
-
#
|
42
|
+
# @example index.erb
|
45
43
|
# <html>
|
46
44
|
# <head>
|
47
45
|
# <title>Sample Sinatra application</title>
|
@@ -60,8 +58,8 @@ module Spambust # :nodoc:
|
|
60
58
|
# </body>
|
61
59
|
# </html>
|
62
60
|
module FormHelpers
|
63
|
-
HIDING = 'position:absolute;top:-10000px;left:-10000px;' #
|
64
|
-
BLOCKED_OPTIONS = [
|
61
|
+
HIDING = 'position:absolute;top:-10000px;left:-10000px;' # @api private
|
62
|
+
BLOCKED_OPTIONS = %i[id class style].freeze # @api private
|
65
63
|
|
66
64
|
##
|
67
65
|
# Returns obfuscated input tags together with its fake input tags that are
|
@@ -72,19 +70,27 @@ module Spambust # :nodoc:
|
|
72
70
|
# original names are filled, the server should assume it be be a spam.
|
73
71
|
# It also accepts options for input type and other CSS properties.
|
74
72
|
#
|
73
|
+
# @example
|
75
74
|
# input(['user', 'name'])
|
76
|
-
# # => <input type="text" name="
|
77
|
-
# # <input type="text" style="position:absolute;top:-10000px;left:-10000px;"
|
75
|
+
# # => <input type="text" name="ee11cbb19052e40b07aac0ca060c23ee[b068931cc450442b63f5b3d276ea4297]" />\
|
76
|
+
# # <input type="text" name="user[name]" style="position:absolute;top:-10000px;left:-10000px;" />
|
78
77
|
#
|
78
|
+
# @example
|
79
79
|
# input(['user', 'name'], type: 'password')
|
80
|
-
# # => <input type="password" name="
|
81
|
-
# # <input type="text" style="position:absolute;top:-10000px;left:-10000px;"
|
80
|
+
# # => <input type="password" name="ee11cbb19052e40b07aac0ca060c23ee[b068931cc450442b63f5b3d276ea4297]" />\
|
81
|
+
# # <input type="text" name="user[name]" style="position:absolute;top:-10000px;left:-10000px;" />
|
82
82
|
#
|
83
|
+
# @example
|
83
84
|
# input(['user', 'name'], id: 'name', class: 'name')
|
84
|
-
# # => <input
|
85
|
-
# #
|
85
|
+
# # => <input id="name" class="name" type="text" \
|
86
|
+
# # name="ee11cbb19052e40b07aac0ca060c23ee[b068931cc450442b63f5b3d276ea4297]" />\
|
87
|
+
# # <input type="text" name="user[name]" style="position:absolute;top:-10000px;left:-10000px;" />
|
88
|
+
#
|
89
|
+
# @param paths [Array<String>]
|
90
|
+
# @param options [Hash]
|
91
|
+
# @return [String]
|
86
92
|
def input(paths, options = {})
|
87
|
-
type = options.delete(:type) || 'text'
|
93
|
+
type = options.delete(:type) || 'text'
|
88
94
|
sanitized_options = options.reject { |key, _value| BLOCKED_OPTIONS.include?(key) }
|
89
95
|
digested_paths = paths.map { |path| digest(path) }
|
90
96
|
visible_tag_options = options.merge(type: type, name: namify(digested_paths))
|
@@ -100,19 +106,31 @@ module Spambust # :nodoc:
|
|
100
106
|
# Use inside your templates to generate a submit tag.
|
101
107
|
# It also accepts for CSS options.
|
102
108
|
#
|
109
|
+
# @example
|
103
110
|
# submit('Submit')
|
104
111
|
# # => <input type="submit" value="Submit" />
|
105
112
|
#
|
106
|
-
#
|
107
|
-
#
|
113
|
+
# @example
|
114
|
+
# submit('Submit', id: 'submit', class: 'submit')
|
115
|
+
# # => <input id="submit" class="submit" type="submit" value="Submit" />
|
116
|
+
#
|
117
|
+
# @param text [String]
|
118
|
+
# @param options [Hash]
|
119
|
+
# @return [String]
|
108
120
|
def submit(text, options = {})
|
109
|
-
visible_tag_options = options.merge(type: 'submit'
|
121
|
+
visible_tag_options = options.merge(type: 'submit', value: text)
|
110
122
|
%(<input #{hash_to_options visible_tag_options} />).gsub(' ', ' ')
|
111
123
|
end
|
112
124
|
|
113
|
-
|
125
|
+
##
|
126
|
+
# Returns a nested input name
|
127
|
+
#
|
128
|
+
# @api private
|
129
|
+
# @param paths [Array<String>]
|
130
|
+
# @return [String]
|
131
|
+
def namify(paths)
|
114
132
|
first = paths[0]
|
115
|
-
rest = paths[1..-1].reduce(
|
133
|
+
rest = paths[1..-1].reduce([]) { |a, e| a << "[#{e}]" }.join('')
|
116
134
|
"#{first}#{rest}"
|
117
135
|
end
|
118
136
|
|
@@ -120,7 +138,11 @@ module Spambust # :nodoc:
|
|
120
138
|
# Returns decrypted hash of user submitted POST parameters
|
121
139
|
# Use inside your application.
|
122
140
|
#
|
123
|
-
#
|
141
|
+
# @example
|
142
|
+
# decrypt('user', params)
|
143
|
+
#
|
144
|
+
# @param lookup [String]
|
145
|
+
# @param global [Hash]
|
124
146
|
def decrypt(lookup, global)
|
125
147
|
fake = global[lookup] || {}
|
126
148
|
hashed_lookup = digest(lookup)
|
@@ -136,20 +158,24 @@ module Spambust # :nodoc:
|
|
136
158
|
#
|
137
159
|
# Use inside your application.
|
138
160
|
#
|
161
|
+
# @example
|
139
162
|
# valid?('user', params)
|
163
|
+
#
|
164
|
+
# @param lookup [String]
|
165
|
+
# @param global [Hash]
|
140
166
|
def valid?(lookup, global)
|
141
167
|
fake = global[lookup] || {}
|
142
168
|
fake.values.all?(&:empty?)
|
143
169
|
end
|
144
170
|
|
145
|
-
|
171
|
+
private
|
172
|
+
|
173
|
+
def hash_to_options(hash)
|
146
174
|
hash.map { |key, value| %(#{key}="#{value}") }.join(' ')
|
147
175
|
end
|
148
|
-
private :hash_to_options
|
149
176
|
|
150
|
-
def digest(item)
|
177
|
+
def digest(item)
|
151
178
|
Digest::MD5.hexdigest(item)
|
152
179
|
end
|
153
|
-
private :digest
|
154
180
|
end
|
155
181
|
end
|
data/lib/spambust/version.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# version.rb
|
2
4
|
#
|
3
5
|
# Author:: Chirantan Mitra
|
4
|
-
# Copyright:: Copyright (c) 2013-
|
6
|
+
# Copyright:: Copyright (c) 2013-2020. All rights reserved
|
5
7
|
# License:: MIT
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
##
|
10
|
+
# <b>Form helpers for sinatra or similar DSLs/frameworks to block for spams</b>
|
11
|
+
module Spambust
|
12
|
+
VERSION = '0.2.1' # version
|
9
13
|
end
|
data/spec/spambust/demo_app.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
# demo_app.rb
|
4
5
|
#
|
5
6
|
# Author:: Chirantan Mitra
|
6
|
-
# Copyright:: Copyright (c) 2013-
|
7
|
+
# Copyright:: Copyright (c) 2013-2020. All rights reserved
|
7
8
|
# License:: MIT
|
8
9
|
|
9
10
|
require 'tilt/erb'
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# form_helpers_integration_spec.rb
|
2
4
|
#
|
3
5
|
# Author:: Chirantan Mitra
|
4
|
-
# Copyright:: Copyright (c) 2013-
|
6
|
+
# Copyright:: Copyright (c) 2013-2020. All rights reserved
|
5
7
|
# License:: MIT
|
6
8
|
|
7
9
|
require_relative '../spec_helper'
|
@@ -22,7 +24,7 @@ describe 'Test application' do
|
|
22
24
|
it 'contains hidden input fields' do
|
23
25
|
get '/'
|
24
26
|
|
25
|
-
last_response.body.must_include %(<input size="40" type="text" \
|
27
|
+
value(last_response.body).must_include %(<input size="40" type="text" \
|
26
28
|
name="user[email]" style="#{hiding}" />)
|
27
29
|
end
|
28
30
|
end
|
@@ -33,18 +35,18 @@ name="user[email]" style="#{hiding}" />)
|
|
33
35
|
params = {
|
34
36
|
user_digest => {
|
35
37
|
first_name_digest => 'True first name',
|
36
|
-
last_name_digest
|
37
|
-
email_digest
|
38
|
+
last_name_digest => 'True last name',
|
39
|
+
email_digest => 'True email'
|
38
40
|
},
|
39
41
|
'user' => {
|
40
42
|
'first_name' => '',
|
41
|
-
'last_name'
|
42
|
-
'email'
|
43
|
+
'last_name' => '',
|
44
|
+
'email' => ''
|
43
45
|
}
|
44
46
|
}
|
45
47
|
|
46
48
|
post '/', params
|
47
|
-
last_response.body.must_include %({"first_name"=>"True first name", \
|
49
|
+
value(last_response.body).must_include %({"first_name"=>"True first name", \
|
48
50
|
"last_name"=>"True last name", "email"=>"True email"})
|
49
51
|
end
|
50
52
|
end
|
@@ -54,18 +56,18 @@ name="user[email]" style="#{hiding}" />)
|
|
54
56
|
params = {
|
55
57
|
user_digest => {
|
56
58
|
first_name_digest => 'True first name',
|
57
|
-
last_name_digest
|
58
|
-
email_digest
|
59
|
+
last_name_digest => 'True last name',
|
60
|
+
email_digest => 'True email'
|
59
61
|
},
|
60
62
|
'user' => {
|
61
63
|
'first_name' => 'Fake first name',
|
62
|
-
'last_name'
|
63
|
-
'email'
|
64
|
+
'last_name' => 'Fake last name',
|
65
|
+
'email' => 'Fake email'
|
64
66
|
}
|
65
67
|
}
|
66
68
|
|
67
69
|
post '/', params
|
68
|
-
last_response.body.must_include 'Faking is bad'
|
70
|
+
value(last_response.body).must_include 'Faking is bad'
|
69
71
|
end
|
70
72
|
end
|
71
73
|
end
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# form_helpers_spec.rb
|
2
4
|
#
|
3
5
|
# Author:: Chirantan Mitra
|
4
|
-
# Copyright:: Copyright (c) 2013-
|
6
|
+
# Copyright:: Copyright (c) 2013-2020. All rights reserved
|
5
7
|
# License:: MIT
|
6
8
|
|
7
9
|
require 'digest/md5'
|
@@ -23,7 +25,7 @@ describe 'Spambust::FormHelpers' do
|
|
23
25
|
describe '#input' do
|
24
26
|
describe 'when type is not mentioned' do
|
25
27
|
it "renders an input tag of type 'text'" do
|
26
|
-
subject.input(%w
|
28
|
+
value(subject.input(%w[user name])).must_equal %(\
|
27
29
|
<input type="text" name="#{user_digest}[#{name_digest}]" />\
|
28
30
|
<input type="text" name="user[name]" style="#{hiding}" />)
|
29
31
|
end
|
@@ -31,7 +33,7 @@ describe 'Spambust::FormHelpers' do
|
|
31
33
|
|
32
34
|
describe 'when type is mentioned' do
|
33
35
|
it 'renders an input tag of specified type' do
|
34
|
-
subject.input(%w
|
36
|
+
value(subject.input(%w[user name], type: 'password')).must_equal %(\
|
35
37
|
<input type="password" name="#{user_digest}[#{name_digest}]" />\
|
36
38
|
<input type="text" name="user[name]" style="#{hiding}" />)
|
37
39
|
end
|
@@ -39,7 +41,7 @@ describe 'Spambust::FormHelpers' do
|
|
39
41
|
|
40
42
|
describe 'when CSS options are mentioned' do
|
41
43
|
it 'renders the options' do
|
42
|
-
subject.input(%w
|
44
|
+
value(subject.input(%w[user name], maxlength: '40')).must_equal %(\
|
43
45
|
<input maxlength="40" type="text" name="#{user_digest}[#{name_digest}]" />\
|
44
46
|
<input maxlength="40" type="text" name="user[name]" style="#{hiding}" />)
|
45
47
|
end
|
@@ -47,7 +49,7 @@ describe 'Spambust::FormHelpers' do
|
|
47
49
|
|
48
50
|
describe "when CSS options include 'id'" do
|
49
51
|
it "doesn't repeat the 'id'" do
|
50
|
-
subject.input(%w
|
52
|
+
value(subject.input(%w[user name], id: 'name')).must_equal %(\
|
51
53
|
<input id="name" type="text" name="#{user_digest}[#{name_digest}]" />\
|
52
54
|
<input type="text" name="user[name]" style="#{hiding}" />)
|
53
55
|
end
|
@@ -55,7 +57,7 @@ describe 'Spambust::FormHelpers' do
|
|
55
57
|
|
56
58
|
describe "when CSS options include 'class'" do
|
57
59
|
it "doesn't repeat the 'class'" do
|
58
|
-
subject.input(%w
|
60
|
+
value(subject.input(%w[user name], class: 'name')).must_equal %(\
|
59
61
|
<input class="name" type="text" name="#{user_digest}[#{name_digest}]" />\
|
60
62
|
<input type="text" name="user[name]" style="#{hiding}" />)
|
61
63
|
end
|
@@ -63,7 +65,7 @@ describe 'Spambust::FormHelpers' do
|
|
63
65
|
|
64
66
|
describe "when CSS options include 'style'" do
|
65
67
|
it "uses the 'style' to hide the fake input tag" do
|
66
|
-
subject.input(%w
|
68
|
+
value(subject.input(%w[user name], style: 'padding-top: 2px;')).must_equal %(\
|
67
69
|
<input style="padding-top: 2px;" type="text" name="#{user_digest}[#{name_digest}]" />\
|
68
70
|
<input type="text" name="user[name]" style="#{hiding}" />)
|
69
71
|
end
|
@@ -74,13 +76,13 @@ describe 'Spambust::FormHelpers' do
|
|
74
76
|
describe 'when type is mentioned' do
|
75
77
|
it "renders an input tag of specified 'submit" do
|
76
78
|
tag = %(<input type="submit" value="Submit" />)
|
77
|
-
subject.submit('Submit').must_equal tag
|
79
|
+
value(subject.submit('Submit')).must_equal tag
|
78
80
|
end
|
79
81
|
end
|
80
82
|
|
81
83
|
describe 'when CSS options are mentioned' do
|
82
84
|
it 'renders the options' do
|
83
|
-
subject.submit('Submit', id: 'submit', class: 'submit').must_equal %(\
|
85
|
+
value(subject.submit('Submit', id: 'submit', class: 'submit')).must_equal %(\
|
84
86
|
<input id="submit" class="submit" type="submit" value="Submit" />)
|
85
87
|
end
|
86
88
|
end
|
@@ -89,13 +91,13 @@ describe 'Spambust::FormHelpers' do
|
|
89
91
|
describe '#namify' do
|
90
92
|
describe 'when size is one' do
|
91
93
|
it 'is the word itself' do
|
92
|
-
subject.namify(['user']).must_equal 'user'
|
94
|
+
value(subject.namify(['user'])).must_equal 'user'
|
93
95
|
end
|
94
96
|
end
|
95
97
|
|
96
98
|
describe 'when size is more than one' do
|
97
99
|
it 'nests the items in successive square brackets' do
|
98
|
-
subject.namify(%w
|
100
|
+
value(subject.namify(%w[user name first])).must_equal 'user[name][first]'
|
99
101
|
end
|
100
102
|
end
|
101
103
|
end
|
@@ -107,7 +109,7 @@ describe 'Spambust::FormHelpers' do
|
|
107
109
|
user_digest => { name_digest => 'true value' }
|
108
110
|
}
|
109
111
|
|
110
|
-
subject.decrypt('user', params).must_equal('name' => 'true value')
|
112
|
+
value(subject.decrypt('user', params)).must_equal('name' => 'true value')
|
111
113
|
end
|
112
114
|
|
113
115
|
describe "when lookup doesn't exist" do
|
@@ -116,7 +118,7 @@ describe 'Spambust::FormHelpers' do
|
|
116
118
|
'user' => { 'name' => 'spam value' },
|
117
119
|
user_digest => { name_digest => 'true value' }
|
118
120
|
}
|
119
|
-
subject.decrypt('missing_user', params).must_equal({})
|
121
|
+
value(subject.decrypt('missing_user', params)).must_equal({})
|
120
122
|
end
|
121
123
|
end
|
122
124
|
|
@@ -126,7 +128,7 @@ describe 'Spambust::FormHelpers' do
|
|
126
128
|
'user' => { 'name' => 'spam value' },
|
127
129
|
user_digest.succ => { name_digest => 'true value' }
|
128
130
|
}
|
129
|
-
subject.decrypt('user', params).must_equal('name' => nil)
|
131
|
+
value(subject.decrypt('user', params)).must_equal('name' => nil)
|
130
132
|
end
|
131
133
|
end
|
132
134
|
end
|
@@ -139,7 +141,7 @@ describe 'Spambust::FormHelpers' do
|
|
139
141
|
user_digest => { name_digest => 'true value' }
|
140
142
|
}
|
141
143
|
|
142
|
-
subject.valid?('user', params).must_equal true
|
144
|
+
value(subject.valid?('user', params)).must_equal true
|
143
145
|
end
|
144
146
|
end
|
145
147
|
|
@@ -150,7 +152,7 @@ describe 'Spambust::FormHelpers' do
|
|
150
152
|
user_digest => { name_digest => 'true value' }
|
151
153
|
}
|
152
154
|
|
153
|
-
subject.valid?('user', params).must_equal false
|
155
|
+
value(subject.valid?('user', params)).must_equal false
|
154
156
|
end
|
155
157
|
end
|
156
158
|
|
@@ -161,7 +163,7 @@ describe 'Spambust::FormHelpers' do
|
|
161
163
|
user_digest => { name_digest => 'true value' }
|
162
164
|
}
|
163
165
|
|
164
|
-
subject.valid?('user_missing', params).must_equal true
|
166
|
+
value(subject.valid?('user_missing', params)).must_equal true
|
165
167
|
end
|
166
168
|
end
|
167
169
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spambust
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chirantan Mitra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: coveralls
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: minitest
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rack-test
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rubocop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: simplecov
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: sinatra
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: yard
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -163,15 +163,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: '0'
|
165
165
|
requirements: []
|
166
|
-
|
167
|
-
rubygems_version: 2.5.1
|
166
|
+
rubygems_version: 3.0.6
|
168
167
|
signing_key:
|
169
168
|
specification_version: 4
|
170
169
|
summary: Sinatra form helper to reduce spams
|
171
170
|
test_files:
|
172
|
-
- spec/
|
171
|
+
- spec/spec_helper.rb
|
173
172
|
- spec/spambust/form_helpers_integration_spec.rb
|
173
|
+
- spec/spambust/demo_app.rb
|
174
174
|
- spec/spambust/form_helpers_spec.rb
|
175
175
|
- spec/spambust/views/layout.erb
|
176
176
|
- spec/spambust/views/index.erb
|
177
|
-
- spec/spec_helper.rb
|