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