hobby-signup 0.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5cbf9e2e97a22780fc0fbf95adb66ef97a3040d48adea0d2dbda6116d1c03c6b
4
+ data.tar.gz: 483533c5b3824c0c18b181f3585b6bc13f34b529f9755b5bc59983aadd4daf39
5
+ SHA512:
6
+ metadata.gz: 478b58a075e4f92c9bb16e14fa3209a15c7c59f45f09c6c2c73231135d47639948fb740b2b94024726d7b8041566538d0fb847ca268b61c450d469860d5a9480
7
+ data.tar.gz: 305a68eebcfa2081451b13c5a9187882b663cc725b030bffdc17dd48bdf41964990da3a2d5dde9d2af3ca4c6d6eb895feb8be70f5248ba40c3e65e32d7b5cdc6
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'rspec'
6
+ gem 'rspec-power_assert'
7
+ gem 'puma'
8
+ gem 'watir'
9
+ gem 'activerecord'
10
+ gem 'sqlite3'
11
+ gem 'bcrypt'
12
+
13
+ gem 'pry'
14
+ gem 'awesome_print'
@@ -0,0 +1,91 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hobby-signup (0.0.0)
5
+ hobby
6
+ slim
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activemodel (5.1.5)
12
+ activesupport (= 5.1.5)
13
+ activerecord (5.1.5)
14
+ activemodel (= 5.1.5)
15
+ activesupport (= 5.1.5)
16
+ arel (~> 8.0)
17
+ activesupport (5.1.5)
18
+ concurrent-ruby (~> 1.0, >= 1.0.2)
19
+ i18n (~> 0.7)
20
+ minitest (~> 5.1)
21
+ tzinfo (~> 1.1)
22
+ arel (8.0.0)
23
+ awesome_print (1.8.0)
24
+ bcrypt (3.1.11)
25
+ childprocess (0.8.0)
26
+ ffi (~> 1.0, >= 1.0.11)
27
+ coderay (1.1.2)
28
+ concurrent-ruby (1.0.5)
29
+ diff-lcs (1.3)
30
+ ffi (1.9.23)
31
+ hobby (0.1.2)
32
+ rack
33
+ i18n (0.9.5)
34
+ concurrent-ruby (~> 1.0)
35
+ method_source (0.9.0)
36
+ minitest (5.11.3)
37
+ power_assert (1.1.1)
38
+ pry (0.11.3)
39
+ coderay (~> 1.1.0)
40
+ method_source (~> 0.9.0)
41
+ puma (3.11.2)
42
+ rack (2.0.4)
43
+ rspec (3.7.0)
44
+ rspec-core (~> 3.7.0)
45
+ rspec-expectations (~> 3.7.0)
46
+ rspec-mocks (~> 3.7.0)
47
+ rspec-core (3.7.1)
48
+ rspec-support (~> 3.7.0)
49
+ rspec-expectations (3.7.0)
50
+ diff-lcs (>= 1.2.0, < 2.0)
51
+ rspec-support (~> 3.7.0)
52
+ rspec-mocks (3.7.0)
53
+ diff-lcs (>= 1.2.0, < 2.0)
54
+ rspec-support (~> 3.7.0)
55
+ rspec-power_assert (1.1.0)
56
+ power_assert (~> 1.1.0)
57
+ rspec (>= 2.14)
58
+ rspec-support (3.7.1)
59
+ rubyzip (1.2.1)
60
+ selenium-webdriver (3.9.0)
61
+ childprocess (~> 0.5)
62
+ rubyzip (~> 1.2)
63
+ slim (3.0.9)
64
+ temple (>= 0.7.6, < 0.9)
65
+ tilt (>= 1.3.3, < 2.1)
66
+ sqlite3 (1.3.13)
67
+ temple (0.8.0)
68
+ thread_safe (0.3.6)
69
+ tilt (2.0.8)
70
+ tzinfo (1.2.5)
71
+ thread_safe (~> 0.1)
72
+ watir (6.10.3)
73
+ selenium-webdriver (~> 3.4, >= 3.4.1)
74
+
75
+ PLATFORMS
76
+ ruby
77
+
78
+ DEPENDENCIES
79
+ activerecord
80
+ awesome_print
81
+ bcrypt
82
+ hobby-signup!
83
+ pry
84
+ puma
85
+ rspec
86
+ rspec-power_assert
87
+ sqlite3
88
+ watir
89
+
90
+ BUNDLED WITH
91
+ 1.16.1
@@ -0,0 +1,10 @@
1
+ Gem::Specification.new do |g|
2
+ g.name = 'hobby-signup'
3
+ g.files = `git ls-files`.split($/)
4
+ g.version = '0.0.0'
5
+ g.summary = 'A Rack application for signing up.'
6
+ g.authors = ['Anatoly Chernow']
7
+
8
+ g.add_dependency 'hobby'
9
+ g.add_dependency 'slim'
10
+ end
@@ -0,0 +1,32 @@
1
+ require 'hobby'
2
+ require 'slim'
3
+
4
+ module Hobby
5
+ class Signup
6
+ include Hobby
7
+
8
+ use Rack::ContentType, 'text/html'
9
+
10
+ def initialize model, template = Slim::Template.new("#{__dir__}/template.slim")
11
+ @model, @template = model, template
12
+ end
13
+
14
+ get {
15
+ @template.render self
16
+ }
17
+
18
+ post {
19
+ @user = @model.new request.params
20
+ @user.save ? success : failure
21
+ }
22
+
23
+ def success
24
+ response.redirect '/signin'
25
+ end
26
+
27
+ def failure
28
+ @errors = @user.errors.to_a
29
+ @template.render self
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ doctype 5
2
+ html
3
+ head
4
+ title Sign up
5
+ body
6
+ form(action=script_name method='post')
7
+ input(type='email' placeholder='Name' name='email' required)
8
+ input(type='password' placeholder='Password' name='password' required)
9
+ input(type='password' placeholder='Password Confirmation' name='password_confirmation' required)
10
+ button(type='submit') Submit
11
+
12
+ - if @errors
13
+ ul
14
+ - for error in @errors
15
+ li= error
@@ -0,0 +1,62 @@
1
+ require_relative 'test_app/app'
2
+
3
+ require 'puma'
4
+ require 'watir'
5
+
6
+ require 'rspec/power_assert'
7
+ RSpec::PowerAssert.example_assertion_alias :assert
8
+ RSpec::PowerAssert.example_group_assertion_alias :assert
9
+
10
+ class Signup
11
+ def initialize
12
+ @browser = Watir::Browser.new
13
+ @browser.goto '127.0.0.1:8080/signup'
14
+ end
15
+
16
+ attr_accessor :browser
17
+ attr_accessor :email, :password, :password_confirmation
18
+
19
+ def submit
20
+ form = @browser.form
21
+ form.text_field(name: 'email').set @name
22
+ form.text_field(name: 'password').set @password
23
+ form.text_field(name: 'password_confirmation').set @password_confirmation
24
+ form.submit
25
+ end
26
+ end
27
+
28
+ describe do
29
+ before do
30
+ @pid = fork do
31
+ server = Puma::Server.new App.new
32
+ server.add_tcp_listener '127.0.0.1', 8080
33
+ server.run
34
+ sleep
35
+ end
36
+ end
37
+
38
+ context 'when it succeeds' do
39
+ it "redirects to '/signin'" do
40
+ signup = Signup.new
41
+ signup.email, signup.password, signup.password_confirmation = 'a', '123', '123'
42
+ signup.submit
43
+
44
+ assert { signup.browser.text.include? 'Sign in.' }
45
+ end
46
+ end
47
+
48
+ context 'when it fails' do
49
+ it 'stays on the same page and shows the errors' do
50
+ signup = Signup.new
51
+ signup.email, signup.password, signup.password_confirmation = 'a', '123', '1234'
52
+ signup.submit
53
+
54
+ assert { signup.browser.url == 'http://127.0.0.1:8080/signup' }
55
+ assert { signup.browser.text.include? "Password confirmation doesn't match Password" }
56
+ end
57
+ end
58
+
59
+ after do
60
+ `kill -9 #{@pid}`
61
+ end
62
+ end
@@ -0,0 +1,13 @@
1
+ require 'hobby/signup'
2
+
3
+ require_relative 'user'
4
+
5
+ class App
6
+ include Hobby
7
+
8
+ get '/signin' do
9
+ 'Sign in.'
10
+ end
11
+
12
+ map '/signup', Hobby::Signup.new(User)
13
+ end
@@ -0,0 +1,17 @@
1
+ require 'logger'
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.logger = Logger.new(STDOUT)
5
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3',
6
+ database: "/tmp/#{$$}.sqlite"
7
+
8
+ ActiveRecord::Schema.define do
9
+ create_table :users, force: true do |t|
10
+ t.string :email, null: false
11
+ t.string :password_digest, null: false
12
+ end
13
+ end
14
+
15
+ class User < ActiveRecord::Base
16
+ has_secure_password
17
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hobby-signup
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Anatoly Chernow
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hobby
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: slim
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description:
42
+ email:
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - Gemfile
48
+ - Gemfile.lock
49
+ - hobby-signup.gemspec
50
+ - lib/hobby/signup.rb
51
+ - lib/hobby/template.slim
52
+ - spec/main_spec.rb
53
+ - spec/test_app/app.rb
54
+ - spec/test_app/user.rb
55
+ homepage:
56
+ licenses: []
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.7.6
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: A Rack application for signing up.
78
+ test_files: []