spambust 0.2.1 → 0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 676696f9b67a870d4a77de337b501f682f63dfd0256ea2d4fbcab2b38e37aaa1
4
- data.tar.gz: bd4dbb2b8db3cbd2f912735969dbaa89d0e014b1a60ee69a1d49a0ff705b918a
3
+ metadata.gz: 7a4a76c9da41d3cdf4a7954bc24a336802be30b7527fd03e651aa6b68d3f8d98
4
+ data.tar.gz: 66caf1c10bf2219b81c7faee5176479f683d8d672bd6e0643a7e5354f448d81d
5
5
  SHA512:
6
- metadata.gz: cbba1007f7c938003e9faf740bb35292a142b8e43f2b71ff17e6eb6650b8ef6dc183aa9b9fec288fe68ce30a971917756da03875928c61f2c790455e0dbe3b55
7
- data.tar.gz: f55cf1080f1df24bb1350044d52d01d70d24969575a209d851a25aefcf940d82923391916e734b41d8890321dfaca8a01a3e196e317d9350093a27312946905d
6
+ metadata.gz: 51d144acf81df166cc545507772bfc7dca2aa92a1fafe351087ae6b4c2fce5fa81e6ec4949518f6c4cde48aff93ba56b52d24f1de4bfb07c0f0bfd7eccca6c4f
7
+ data.tar.gz: 262e1871a85945d78660dc17ea3ad46cb73ac83f17e3e577d51d50de1b7637ff7e8dcc9459b1da9a0da26afd1bc49c0732e121c08dd73a72d33b8b90c6ba6a03
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
+ v0.2.2
2
+ ======
3
+
4
+ * Set minimum supported ruby version to 3.2.0
5
+
1
6
  v0.2.1
2
- =======
7
+ ======
3
8
 
4
9
  * Document using yard
5
10
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2013-2020 Chirantan Mitra
3
+ Copyright (c) 2013-2025 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/README.md CHANGED
@@ -1,6 +1,5 @@
1
- [![Build Status](https://secure.travis-ci.org/chiku/spambust.png?branch=master)](https://travis-ci.org/chiku/spambust)
1
+ [![Build Status](https://github.com/chiku/spambust/actions/workflows/build.yml/badge.svg)](https://github.com/chiku/spambust/actions/workflows/build.yml)
2
2
  [![Gem Version](https://badge.fury.io/rb/spambust.svg)](http://badge.fury.io/rb/spambust)
3
- [![Code Climate](https://codeclimate.com/github/chiku/spambust.png)](https://codeclimate.com/github/chiku/spambust)
4
3
 
5
4
  spambust
6
5
  ========
@@ -8,22 +7,22 @@ spambust
8
7
  Overview
9
8
  --------
10
9
 
11
- Prevent spams bots from attacking your website.
10
+ Prevent spam bots from attacking your website.
12
11
 
13
12
  Dependencies
14
13
  ------------
15
14
 
16
- These are no runtime dependencies for this gem.
15
+ There are no runtime dependencies for this gem.
17
16
 
18
17
  Installation
19
18
  ------------
20
19
 
21
- ``` script
20
+ ```bash
22
21
  gem install spambust
23
22
  ```
24
23
 
25
24
  Usage
26
- ------
25
+ -----
27
26
 
28
27
  **app.rb**
29
28
 
@@ -42,19 +41,19 @@ class TestApp < Sinatra::Base
42
41
  end
43
42
 
44
43
  get "/" do
45
- erb :index, :locals => { :result => "..." }
44
+ erb :index, locals: { result: "..." }
46
45
  end
47
46
 
48
47
  post '/' do
49
- result = valid?("user", params) ? "Users is #{decrypt("user", params)}" : "Faking is bad"
50
- erb :index, :locals => { :result => result }
48
+ result = valid?("user", params) ? "User is #{decrypt("user", params)}" : "Faking is bad"
49
+ erb :index, locals: { result: result }
51
50
  end
52
51
 
53
52
  start_app if direct_script_execution?
54
53
  end
55
54
  ```
56
55
 
57
- **index.erb**
56
+ index.erb
58
57
 
59
58
  ```erb
60
59
  <html>
@@ -66,23 +65,23 @@ end
66
65
 
67
66
  <form method="post" action="/">
68
67
  <label for="user-first-name">First name</label>
69
- <%= input ["user", "first_name"], :id => "user-first-name" %>
68
+ <%= input ["user", "first_name"], id: "user-first-name" %>
70
69
 
71
70
  <label for="user-last-name">Last name</label>
72
- <%= input ["user", "last_name"], :id => "user-last-name" %>
71
+ <%= input ["user", "last_name"], id: "user-last-name" %>
73
72
 
74
73
  <label for="user-email">Email</label>
75
- <%= input ["user", "email"], :size => 40, :id => "user-email" %>
74
+ <%= input ["user", "email"], size: 40, id: "user-email" %>
76
75
 
77
- <%= submit "Create account", :id => "user-submit" %>
76
+ <%= submit "Create account", id: "user-submit" %>
78
77
  </form>
79
78
  </body>
80
79
  </html>
81
80
  ```
82
81
 
83
- **output**
82
+ output
84
83
 
85
- ``` html
84
+ ```html
86
85
  <input type="text" name="ee11cbb19052e40b07aac0ca060c23ee[2a034e9d9e2601c21191cca53760eaaf]" id="user-first-name" />
87
86
  <input type="text" style="position:absolute;top:-10000px;left:-10000px;" name="user[first_name]" />
88
87
  ```
@@ -90,14 +89,14 @@ end
90
89
  How does it work?
91
90
  -----------------
92
91
 
93
- The server will render obfuscated input tags for the user to fill. The input tags for the user will be hidden. A spam bot would see the input tags will meaningful names and fill it in. The server will figure out that this response came from a bot and take approriate action.
92
+ The server renders obfuscated input tags for users to fill. The input tags for the user are hidden. A spam bot will see input tags with meaningful names and fill them in. The server detects this and takes appropriate action.
94
93
 
95
94
  Running tests
96
95
  -------------
97
96
 
98
97
  1. Clone the repository.
99
- 2. run `bundle` from the root directory.
100
- 3. run `rake` from the root directory.
98
+ 2. Run `bundle` from the root directory.
99
+ 3. Run `rake` from the root directory.
101
100
 
102
101
  Contributing
103
102
  ------------
@@ -91,7 +91,7 @@ module Spambust
91
91
  # @return [String]
92
92
  def input(paths, options = {})
93
93
  type = options.delete(:type) || 'text'
94
- sanitized_options = options.reject { |key, _value| BLOCKED_OPTIONS.include?(key) }
94
+ sanitized_options = options.except(*BLOCKED_OPTIONS)
95
95
  digested_paths = paths.map { |path| digest(path) }
96
96
  visible_tag_options = options.merge(type: type, name: namify(digested_paths))
97
97
  hidden_tag_options = sanitized_options.merge(type: 'text', name: namify(paths), style: HIDING)
@@ -130,7 +130,7 @@ module Spambust
130
130
  # @return [String]
131
131
  def namify(paths)
132
132
  first = paths[0]
133
- rest = paths[1..-1].reduce([]) { |a, e| a << "[#{e}]" }.join('')
133
+ rest = paths[1..].reduce([]) { |a, e| a << "[#{e}]" }.join
134
134
  "#{first}#{rest}"
135
135
  end
136
136
 
@@ -9,5 +9,5 @@
9
9
  ##
10
10
  # <b>Form helpers for sinatra or similar DSLs/frameworks to block for spams</b>
11
11
  module Spambust
12
- VERSION = '0.2.1' # version
12
+ VERSION = '0.2.2' # version
13
13
  end
metadata CHANGED
@@ -1,131 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spambust
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chirantan Mitra
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2020-01-19 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: coveralls
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: minitest
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rack-test
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rake
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: simplecov
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: sinatra
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: yard
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
10
+ date: 2025-05-17 00:00:00.000000000 Z
11
+ dependencies: []
125
12
  description: |
126
- Render input tags with a masked name. The original input names names are
127
- hidden. A spam bot would fill the incorrect but visible input tags. The server
128
- would identify this and respond appropriately.
13
+ Render input tags with masked names. The original input names are hidden.
14
+ A spam bot would fill the incorrect but visible input tags. The server
15
+ detects this and responds appropriately.
129
16
  email:
130
17
  - chirantan.mitra@gmail.com
131
18
  executables: []
@@ -138,17 +25,11 @@ files:
138
25
  - lib/spambust.rb
139
26
  - lib/spambust/form_helpers.rb
140
27
  - lib/spambust/version.rb
141
- - spec/spambust/demo_app.rb
142
- - spec/spambust/form_helpers_integration_spec.rb
143
- - spec/spambust/form_helpers_spec.rb
144
- - spec/spambust/views/index.erb
145
- - spec/spambust/views/layout.erb
146
- - spec/spec_helper.rb
147
28
  homepage: https://github.com/chiku/spambust
148
29
  licenses:
149
30
  - MIT
150
- metadata: {}
151
- post_install_message:
31
+ metadata:
32
+ rubygems_mfa_required: 'true'
152
33
  rdoc_options: []
153
34
  require_paths:
154
35
  - lib
@@ -156,21 +37,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
156
37
  requirements:
157
38
  - - ">="
158
39
  - !ruby/object:Gem::Version
159
- version: '0'
40
+ version: 3.2.0
160
41
  required_rubygems_version: !ruby/object:Gem::Requirement
161
42
  requirements:
162
43
  - - ">="
163
44
  - !ruby/object:Gem::Version
164
45
  version: '0'
165
46
  requirements: []
166
- rubygems_version: 3.0.6
167
- signing_key:
47
+ rubygems_version: 3.6.2
168
48
  specification_version: 4
169
49
  summary: Sinatra form helper to reduce spams
170
- test_files:
171
- - spec/spec_helper.rb
172
- - spec/spambust/form_helpers_integration_spec.rb
173
- - spec/spambust/demo_app.rb
174
- - spec/spambust/form_helpers_spec.rb
175
- - spec/spambust/views/layout.erb
176
- - spec/spambust/views/index.erb
50
+ test_files: []
@@ -1,41 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- # demo_app.rb
5
- #
6
- # Author:: Chirantan Mitra
7
- # Copyright:: Copyright (c) 2013-2020. All rights reserved
8
- # License:: MIT
9
-
10
- require 'tilt/erb'
11
- require 'sinatra'
12
-
13
- require_relative '../../lib/spambust/form_helpers'
14
-
15
- module Spambust
16
- class TestApp < Sinatra::Base
17
- helpers Spambust::FormHelpers
18
-
19
- class << self
20
- def start_app
21
- run!
22
- end
23
-
24
- def direct_script_execution?
25
- app_file == $PROGRAM_NAME
26
- end
27
- end
28
-
29
- get '/' do
30
- erb :index, locals: { result: '...' }
31
- end
32
-
33
- post '/' do
34
- valid = valid?('user', params)
35
- result = valid ? "User is #{decrypt('user', params)}" : 'Faking is bad'
36
- erb :index, locals: { result: result }
37
- end
38
-
39
- start_app if direct_script_execution? && ENV['environment'] != 'test'
40
- end
41
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # form_helpers_integration_spec.rb
4
- #
5
- # Author:: Chirantan Mitra
6
- # Copyright:: Copyright (c) 2013-2020. All rights reserved
7
- # License:: MIT
8
-
9
- require_relative '../spec_helper'
10
- require_relative 'demo_app'
11
-
12
- describe 'Test application' do
13
- include Rack::Test::Methods
14
-
15
- let(:app) { Spambust::TestApp }
16
-
17
- let(:user_digest) { Digest::MD5.hexdigest('user') }
18
- let(:first_name_digest) { Digest::MD5.hexdigest('first_name') }
19
- let(:last_name_digest) { Digest::MD5.hexdigest('last_name') }
20
- let(:email_digest) { Digest::MD5.hexdigest('email') }
21
- let(:hiding) { 'position:absolute;top:-10000px;left:-10000px;' }
22
-
23
- describe 'when loading a form' do
24
- it 'contains hidden input fields' do
25
- get '/'
26
-
27
- value(last_response.body).must_include %(<input size="40" type="text" \
28
- name="user[email]" style="#{hiding}" />)
29
- end
30
- end
31
-
32
- describe 'when posting a form' do
33
- describe "when hidden fields aren't filled" do
34
- it 'is accepted' do
35
- params = {
36
- user_digest => {
37
- first_name_digest => 'True first name',
38
- last_name_digest => 'True last name',
39
- email_digest => 'True email'
40
- },
41
- 'user' => {
42
- 'first_name' => '',
43
- 'last_name' => '',
44
- 'email' => ''
45
- }
46
- }
47
-
48
- post '/', params
49
- value(last_response.body).must_include %({"first_name"=>"True first name", \
50
- "last_name"=>"True last name", "email"=>"True email"})
51
- end
52
- end
53
-
54
- describe 'when hidden fields are filled' do
55
- it 'is identified as fake' do
56
- params = {
57
- user_digest => {
58
- first_name_digest => 'True first name',
59
- last_name_digest => 'True last name',
60
- email_digest => 'True email'
61
- },
62
- 'user' => {
63
- 'first_name' => 'Fake first name',
64
- 'last_name' => 'Fake last name',
65
- 'email' => 'Fake email'
66
- }
67
- }
68
-
69
- post '/', params
70
- value(last_response.body).must_include 'Faking is bad'
71
- end
72
- end
73
- end
74
- end
@@ -1,170 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # form_helpers_spec.rb
4
- #
5
- # Author:: Chirantan Mitra
6
- # Copyright:: Copyright (c) 2013-2020. All rights reserved
7
- # License:: MIT
8
-
9
- require 'digest/md5'
10
-
11
- require_relative '../spec_helper'
12
- require_relative '../../lib/spambust/form_helpers'
13
-
14
- class TestApp
15
- include Spambust::FormHelpers
16
- end
17
-
18
- describe 'Spambust::FormHelpers' do
19
- subject { TestApp.new }
20
-
21
- let(:user_digest) { Digest::MD5.hexdigest('user') }
22
- let(:name_digest) { Digest::MD5.hexdigest('name') }
23
- let(:hiding) { 'position:absolute;top:-10000px;left:-10000px;' }
24
-
25
- describe '#input' do
26
- describe 'when type is not mentioned' do
27
- it "renders an input tag of type 'text'" do
28
- value(subject.input(%w[user name])).must_equal %(\
29
- <input type="text" name="#{user_digest}[#{name_digest}]" />\
30
- <input type="text" name="user[name]" style="#{hiding}" />)
31
- end
32
- end
33
-
34
- describe 'when type is mentioned' do
35
- it 'renders an input tag of specified type' do
36
- value(subject.input(%w[user name], type: 'password')).must_equal %(\
37
- <input type="password" name="#{user_digest}[#{name_digest}]" />\
38
- <input type="text" name="user[name]" style="#{hiding}" />)
39
- end
40
- end
41
-
42
- describe 'when CSS options are mentioned' do
43
- it 'renders the options' do
44
- value(subject.input(%w[user name], maxlength: '40')).must_equal %(\
45
- <input maxlength="40" type="text" name="#{user_digest}[#{name_digest}]" />\
46
- <input maxlength="40" type="text" name="user[name]" style="#{hiding}" />)
47
- end
48
- end
49
-
50
- describe "when CSS options include 'id'" do
51
- it "doesn't repeat the 'id'" do
52
- value(subject.input(%w[user name], id: 'name')).must_equal %(\
53
- <input id="name" type="text" name="#{user_digest}[#{name_digest}]" />\
54
- <input type="text" name="user[name]" style="#{hiding}" />)
55
- end
56
- end
57
-
58
- describe "when CSS options include 'class'" do
59
- it "doesn't repeat the 'class'" do
60
- value(subject.input(%w[user name], class: 'name')).must_equal %(\
61
- <input class="name" type="text" name="#{user_digest}[#{name_digest}]" />\
62
- <input type="text" name="user[name]" style="#{hiding}" />)
63
- end
64
- end
65
-
66
- describe "when CSS options include 'style'" do
67
- it "uses the 'style' to hide the fake input tag" do
68
- value(subject.input(%w[user name], style: 'padding-top: 2px;')).must_equal %(\
69
- <input style="padding-top: 2px;" type="text" name="#{user_digest}[#{name_digest}]" />\
70
- <input type="text" name="user[name]" style="#{hiding}" />)
71
- end
72
- end
73
- end
74
-
75
- describe '#submit' do
76
- describe 'when type is mentioned' do
77
- it "renders an input tag of specified 'submit" do
78
- tag = %(<input type="submit" value="Submit" />)
79
- value(subject.submit('Submit')).must_equal tag
80
- end
81
- end
82
-
83
- describe 'when CSS options are mentioned' do
84
- it 'renders the options' do
85
- value(subject.submit('Submit', id: 'submit', class: 'submit')).must_equal %(\
86
- <input id="submit" class="submit" type="submit" value="Submit" />)
87
- end
88
- end
89
- end
90
-
91
- describe '#namify' do
92
- describe 'when size is one' do
93
- it 'is the word itself' do
94
- value(subject.namify(['user'])).must_equal 'user'
95
- end
96
- end
97
-
98
- describe 'when size is more than one' do
99
- it 'nests the items in successive square brackets' do
100
- value(subject.namify(%w[user name first])).must_equal 'user[name][first]'
101
- end
102
- end
103
- end
104
-
105
- describe '#decrypt' do
106
- it 'fetches the actual value of the lookup up key' do
107
- params = {
108
- 'user' => { 'name' => 'spam value' },
109
- user_digest => { name_digest => 'true value' }
110
- }
111
-
112
- value(subject.decrypt('user', params)).must_equal('name' => 'true value')
113
- end
114
-
115
- describe "when lookup doesn't exist" do
116
- it 'is empty' do
117
- params = {
118
- 'user' => { 'name' => 'spam value' },
119
- user_digest => { name_digest => 'true value' }
120
- }
121
- value(subject.decrypt('missing_user', params)).must_equal({})
122
- end
123
- end
124
-
125
- describe "when fake keys don't conform to the decrypted keys" do
126
- it 'populates the key with a nil value' do
127
- params = {
128
- 'user' => { 'name' => 'spam value' },
129
- user_digest.succ => { name_digest => 'true value' }
130
- }
131
- value(subject.decrypt('user', params)).must_equal('name' => nil)
132
- end
133
- end
134
- end
135
-
136
- describe '#valid?' do
137
- describe 'when none of the paths under lookup are populated' do
138
- it 'is true' do
139
- params = {
140
- 'user' => { 'name' => '' },
141
- user_digest => { name_digest => 'true value' }
142
- }
143
-
144
- value(subject.valid?('user', params)).must_equal true
145
- end
146
- end
147
-
148
- describe 'when one of the paths under lookup is populated' do
149
- it 'is false' do
150
- params = {
151
- 'user' => { 'name' => 'spam value' },
152
- user_digest => { name_digest => 'true value' }
153
- }
154
-
155
- value(subject.valid?('user', params)).must_equal false
156
- end
157
- end
158
-
159
- describe "when lookup doesn't exist" do
160
- it 'is true' do
161
- params = {
162
- 'user' => { 'name' => 'spam value' },
163
- user_digest => { name_digest => 'true value' }
164
- }
165
-
166
- value(subject.valid?('user_missing', params)).must_equal true
167
- end
168
- end
169
- end
170
- end
@@ -1,22 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Sample Sinatra application</title>
5
- </head>
6
- <body>
7
- <div id="result"><%= result %></div>
8
-
9
- <form method="post" action="/">
10
- <label for="user-first-name">First name</label>
11
- <%= input ["user", "first_name"], :id => "user-first-name" %>
12
-
13
- <label for="user-last-name">Last name</label>
14
- <%= input ["user", "last_name"], :id => "user-last-name" %>
15
-
16
- <label for="user-email">Email</label>
17
- <%= input ["user", "email"], :size => 40, :id => "user-email" %>
18
-
19
- <%= submit "Create account", :id => "user-submit" %>
20
- </form>
21
- </body>
22
- </html>
@@ -1,9 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Sample Sinatra application</title>
5
- </head>
6
- <body>
7
- <%= yield %>
8
- </body>
9
- </html>
data/spec/spec_helper.rb DELETED
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # spec_helper.rb
4
- #
5
- # Author:: Chirantan Mitra
6
- # Copyright:: Copyright (c) 2013-2020. All rights reserved
7
- # License:: MIT
8
-
9
- ENV['environment'] = 'test'
10
-
11
- begin
12
- require 'simplecov'
13
- require 'coveralls'
14
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new [
15
- SimpleCov::Formatter::HTMLFormatter,
16
- Coveralls::SimpleCov::Formatter
17
- ]
18
- SimpleCov.start do
19
- add_filter '/spec|test|vendor/'
20
- end
21
- rescue LoadError
22
- puts "\nPlease install simplecov & coveralls to generate coverage report!\n\n"
23
- end
24
-
25
- gem 'minitest'
26
-
27
- require 'minitest/autorun'
28
- require 'minitest/spec'
29
- require 'rack/test'
30
- require 'sinatra/base'