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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: fa2b64be89004072d0059f05723151f73a279afb
4
- data.tar.gz: c867ae7f94d6be8d8f42be325f938e093cc7a551
2
+ SHA256:
3
+ metadata.gz: 676696f9b67a870d4a77de337b501f682f63dfd0256ea2d4fbcab2b38e37aaa1
4
+ data.tar.gz: bd4dbb2b8db3cbd2f912735969dbaa89d0e014b1a60ee69a1d49a0ff705b918a
5
5
  SHA512:
6
- metadata.gz: 10de6ad17e986655a2a413a8703e7c1b6d49e63b926759ee3174c189b9c5143c6fdea28f8666f90ab11f4a31095d5b6edc646c0dcb30c5f3ecf176dcdca1d1ca
7
- data.tar.gz: 23fa457d817bde24764c503b217c8b85a87402677aa8b3d536837c8ad59b255de0d51dbf50164d1f00068b54d62b69f927b49a1e3c4f868fb559edba3e59c9e9
6
+ metadata.gz: cbba1007f7c938003e9faf740bb35292a142b8e43f2b71ff17e6eb6650b8ef6dc183aa9b9fec288fe68ce30a971917756da03875928c61f2c790455e0dbe3b55
7
+ data.tar.gz: f55cf1080f1df24bb1350044d52d01d70d24969575a209d851a25aefcf940d82923391916e734b41d8890321dfaca8a01a3e196e317d9350093a27312946905d
@@ -1,3 +1,8 @@
1
+ v0.2.1
2
+ =======
3
+
4
+ * Document using yard
5
+
1
6
  v0.2.0
2
7
  ======
3
8
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2013-2016 Chirantan Mitra
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
@@ -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-2016. All rights reserved
6
+ # Copyright:: Copyright (c) 2013-2020. All rights reserved
5
7
  # License:: MIT
6
8
 
7
- require_relative 'spambust/form_helpers'
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-2016. All rights reserved
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 # :nodoc:
11
+ module Spambust
10
12
  ##
11
13
  # <b>Form helpers for sinatra or similar DSLs/frameworks to block for spams</b>
12
14
  #
13
- # == Examples
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
- # === index.erb
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;' # :nodoc:
64
- BLOCKED_OPTIONS = [:id, :class, :style] # :nodoc:
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="#{user_digest}[#{name_digest}]" />\
77
- # # <input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />
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="#{user_digest}[#{name_digest}]" />\
81
- # # <input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" />
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 type="text" name="#{user_digest}[#{name_digest}]" id="name" class="name" />\
85
- # # <input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[name]" class="name" />
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'.freeze
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
- # submit("Submit", :id => "submit", :class => "submit")
107
- # # => <input type="submit" value="Submit" id="submit" class="submit" />
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'.freeze, value: text)
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
- def namify(paths) # :nodoc:
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('') { |a, e| a << "[#{e}]" }
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
- # decrypt("user", params)
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
- def hash_to_options(hash) # :nodoc:
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) # :nodoc:
177
+ def digest(item)
151
178
  Digest::MD5.hexdigest(item)
152
179
  end
153
- private :digest
154
180
  end
155
181
  end
@@ -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-2016. All rights reserved
6
+ # Copyright:: Copyright (c) 2013-2020. All rights reserved
5
7
  # License:: MIT
6
8
 
7
- module Spambust # :nodoc:
8
- VERSION = '0.2.0' # :nodoc:
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
@@ -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-2016. All rights reserved
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-2016. All rights reserved
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 => 'True last name',
37
- email_digest => 'True email'
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 => 'True last name',
58
- email_digest => 'True email'
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' => 'Fake last name',
63
- 'email' => 'Fake 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-2016. All rights reserved
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(user name)).must_equal %(\
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(user name), type: 'password').must_equal %(\
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(user name), maxlength: '40').must_equal %(\
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(user name), id: 'name').must_equal %(\
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(user name), class: 'name').must_equal %(\
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(user name), style: 'padding-top: 2px;').must_equal %(\
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(user name first)).must_equal 'user[name][first]'
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
@@ -1,3 +1,4 @@
1
+ <!DOCTYPE html>
1
2
  <html>
2
3
  <head>
3
4
  <title>Sample Sinatra application</title>
@@ -1,3 +1,4 @@
1
+ <!DOCTYPE html>
1
2
  <html>
2
3
  <head>
3
4
  <title>Sample Sinatra application</title>
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # spec_helper.rb
2
4
  #
3
5
  # Author:: Chirantan Mitra
4
- # Copyright:: Copyright (c) 2013-2016. All rights reserved
6
+ # Copyright:: Copyright (c) 2013-2020. All rights reserved
5
7
  # License:: MIT
6
8
 
7
9
  ENV['environment'] = 'test'
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.0
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: 2016-01-02 00:00:00.000000000 Z
11
+ date: 2020-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: sinatra
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: rake
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: minitest
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: rack-test
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: simplecov
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: rubocop
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: coveralls
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: rdoc
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
- rubyforge_project: spambust
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/spambust/demo_app.rb
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