railg 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/lib/generators/railg/bulma/bulma_generator.rb +15 -0
- data/lib/generators/railg/default/default_generator.rb +25 -0
- data/lib/generators/railg/login/login_generator.rb +226 -0
- data/lib/generators/railg/pry/pry_generator.rb +8 -0
- data/lib/generators/railg/slim/slim_generator.rb +12 -0
- data/lib/generators/railg/test_gen.txt +17 -0
- data/lib/railg/version.rb +1 -1
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1c10daee459881fc58275367eca4336dd9016942adbcdc845feca9ebab8e0f5
|
4
|
+
data.tar.gz: 1c8a2ede1197a95a208ae7d23d0e4a75a1c0ac9c2702e0eecb6780e3bc3da406
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afdda81daf225e32bda9c711bc60b30ed3692df420f5404b5f774666b965eb9e9e1010adafcb91eab91a6e2681c0adce123e96f9f134e069e07a4746d3fe0be6
|
7
|
+
data.tar.gz: e44db8aa4708fae85e31ed85663d591c7d3610a7b2d23b03ece5afd8ace1cc70a6df1da635718df7e3e6b9e49d60dd13d4d8b562b52f8b2f984de21c349f5b99
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Railg
|
2
|
+
class BulmaGenerator < ::Rails::Generators::Base
|
3
|
+
def insert_bulma_link_tag
|
4
|
+
insert_into_file 'app/views/layouts/application.html.erb', <<-TAG, before: " </head>\n"
|
5
|
+
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css'>
|
6
|
+
TAG
|
7
|
+
end
|
8
|
+
|
9
|
+
def insert_fontawesome_script_tag
|
10
|
+
insert_into_file 'app/views/layouts/application.html.erb', <<-TAG, before: " </head>\n"
|
11
|
+
<script defer src='https://use.fontawesome.com/releases/v5.3.1/js/all.js'></script>
|
12
|
+
TAG
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Railg
|
2
|
+
class DefaultGenerator < ::Rails::Generators::Base
|
3
|
+
def configure_generator
|
4
|
+
environment <<-EOT, env: 'development'
|
5
|
+
config.generators do |g|
|
6
|
+
g.assets false
|
7
|
+
g.helper false
|
8
|
+
g.jbuilder false
|
9
|
+
g.test_framework false
|
10
|
+
end
|
11
|
+
EOT
|
12
|
+
end
|
13
|
+
|
14
|
+
def insert_meta_tag
|
15
|
+
insert_into_file 'app/views/layouts/application.html.erb', <<-EOT, after: " <head>\n"
|
16
|
+
<meta charset='UTF-8'>
|
17
|
+
<meta name='viewport' content='width=device-width,initial-scale=1'>
|
18
|
+
EOT
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_db
|
22
|
+
rake 'db:create'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
module Railg
|
2
|
+
class LoginGenerator < ::Rails::Generators::Base
|
3
|
+
source_root File.expand_path('templates', __dir__)
|
4
|
+
|
5
|
+
def gem_bcrypt
|
6
|
+
gem 'bcrypt'
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_route
|
10
|
+
route 'resource :session, only: %i[new create destroy]'
|
11
|
+
route 'resources :accounts, only: %i[new create]'
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_account_model
|
15
|
+
create_file 'app/models/account.rb', <<-EOT
|
16
|
+
# frozen_string_literal: true
|
17
|
+
|
18
|
+
class Account < ApplicationRecord
|
19
|
+
has_secure_password
|
20
|
+
|
21
|
+
validates :identifier, presence: true, uniqueness: true
|
22
|
+
end
|
23
|
+
EOT
|
24
|
+
|
25
|
+
create_file 'db/migrate/20181105044958_create_accounts.rb', <<-EOT
|
26
|
+
class CreateAccounts < ActiveRecord::Migration[5.2]
|
27
|
+
def change
|
28
|
+
create_table :accounts do |t|
|
29
|
+
t.string :identifier, null: false
|
30
|
+
t.string :password_digest, null: false
|
31
|
+
t.index :identifier, unique: true
|
32
|
+
|
33
|
+
t.timestamps
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
EOT
|
38
|
+
end
|
39
|
+
|
40
|
+
def create_view_files
|
41
|
+
create_file 'app/views/application/_header.html.slim', <<-EOT
|
42
|
+
nav.navbar
|
43
|
+
.container
|
44
|
+
.navbar-menu
|
45
|
+
.navbar-end
|
46
|
+
.navbar-item
|
47
|
+
= form_with url: session_url, method: :delete do |f|
|
48
|
+
.buttons
|
49
|
+
- unless signed_in?
|
50
|
+
= link_to 'sign in', new_session_path, class: 'button is-text'
|
51
|
+
= link_to 'sign up', new_account_path, class: 'button is-text'
|
52
|
+
- else
|
53
|
+
= f.submit 'sign out', class: 'button is-text'
|
54
|
+
EOT
|
55
|
+
|
56
|
+
create_file 'app/views/accounts/new.html.slim', <<-EOT
|
57
|
+
section.section
|
58
|
+
.container
|
59
|
+
= form_with model: @account do |f|
|
60
|
+
.field
|
61
|
+
.control
|
62
|
+
= f.text_field :identifier, class: 'input'
|
63
|
+
.field
|
64
|
+
.control
|
65
|
+
= f.password_field :password, class: 'input'
|
66
|
+
.field
|
67
|
+
.control
|
68
|
+
= f.password_field :password_confirmation, class: 'input'
|
69
|
+
.field
|
70
|
+
.control
|
71
|
+
= f.submit class: 'button'
|
72
|
+
EOT
|
73
|
+
|
74
|
+
create_file 'app/views/sessions/new.html.slim', <<-EOT
|
75
|
+
section.section
|
76
|
+
.container
|
77
|
+
= form_with url: session_url do |f|
|
78
|
+
.field
|
79
|
+
.control
|
80
|
+
= f.text_field :identifier, class: 'input'
|
81
|
+
.field
|
82
|
+
.control
|
83
|
+
= f.password_field :password, class: 'input'
|
84
|
+
.field
|
85
|
+
.control
|
86
|
+
label.checkbox
|
87
|
+
= f.check_box :remember, {}, true, false
|
88
|
+
| Remember me?
|
89
|
+
.field
|
90
|
+
.control
|
91
|
+
= f.submit class: 'button'
|
92
|
+
= form_with url: session_url, method: :delete do |f|
|
93
|
+
.field
|
94
|
+
.control
|
95
|
+
= f.submit
|
96
|
+
EOT
|
97
|
+
end
|
98
|
+
|
99
|
+
def create_controller_files
|
100
|
+
create_file 'app/controllers/accounts_controller.rb', <<-EOT
|
101
|
+
# frozen_string_literal: true
|
102
|
+
|
103
|
+
class AccountsController < ApplicationController
|
104
|
+
def new
|
105
|
+
@account = Account.new
|
106
|
+
end
|
107
|
+
|
108
|
+
def create
|
109
|
+
@account = Account.new(account_params)
|
110
|
+
|
111
|
+
if @account.save
|
112
|
+
redirect_to new_session_path
|
113
|
+
else
|
114
|
+
render :new
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def account_params
|
121
|
+
params.require(:account).permit(:identifier, :password, :password_confirmation)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
EOT
|
125
|
+
|
126
|
+
create_file 'app/controllers/auth_controller.rb', <<-EOT
|
127
|
+
# frozen_string_literal: true
|
128
|
+
|
129
|
+
class AuthController < ApplicationController
|
130
|
+
rescue_from 'SessionManager::NoSigninError', with: -> { redirect_to new_session_path }
|
131
|
+
|
132
|
+
before_action :current_account # require signin by raising SessionManager::NoSigninError
|
133
|
+
end
|
134
|
+
EOT
|
135
|
+
|
136
|
+
create_file 'app/controllers/sessions_controller.rb', <<-EOT
|
137
|
+
# frozen_string_literal: true
|
138
|
+
|
139
|
+
class SessionsController < ApplicationController
|
140
|
+
def new
|
141
|
+
end
|
142
|
+
|
143
|
+
def create
|
144
|
+
account = Account.find_by(identifier: params[:identifier])
|
145
|
+
|
146
|
+
if account && account.authenticate(params[:password])
|
147
|
+
retain_session(account, remember: params[:remember])
|
148
|
+
redirect_to root_path
|
149
|
+
else
|
150
|
+
render :new
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def destroy
|
155
|
+
free_session
|
156
|
+
end
|
157
|
+
end
|
158
|
+
EOT
|
159
|
+
|
160
|
+
create_file 'app/controllers/session_manager.rb', <<-EOT
|
161
|
+
# frozen_string_literal: true
|
162
|
+
|
163
|
+
module SessionManager
|
164
|
+
extend ActiveSupport::Concern
|
165
|
+
|
166
|
+
SESSION_KEY = :account_id
|
167
|
+
NoSigninError = Class.new(StandardError)
|
168
|
+
|
169
|
+
included do
|
170
|
+
helper_method :signed_in?
|
171
|
+
end
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
def retain_session(account, remember: false)
|
176
|
+
session[SESSION_KEY] = account.id
|
177
|
+
|
178
|
+
if remember
|
179
|
+
# TODO: impl
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def free_session
|
184
|
+
session[SESSION_KEY] = nil
|
185
|
+
end
|
186
|
+
|
187
|
+
# TODO: refact
|
188
|
+
def current_account
|
189
|
+
if (id = session[SESSION_KEY])
|
190
|
+
Account.find(id)
|
191
|
+
elsif (id = cookies.signed[SESSION_KEY])
|
192
|
+
account = Account.find(id)
|
193
|
+
raise NoSigninError unless account.authenticated?(cookies[:remember_token])
|
194
|
+
|
195
|
+
sign_in(account) # sessionにも保存
|
196
|
+
account
|
197
|
+
else
|
198
|
+
raise NoSigninError
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
def signed_in?
|
203
|
+
current_account
|
204
|
+
true
|
205
|
+
rescue NoSigninError
|
206
|
+
false
|
207
|
+
end
|
208
|
+
end
|
209
|
+
EOT
|
210
|
+
|
211
|
+
insert_into_file 'app/controllers/application_controller.rb', <<-EOT, after: "class ApplicationController < ActionController::Base\n"
|
212
|
+
include SessionManager
|
213
|
+
EOT
|
214
|
+
end
|
215
|
+
|
216
|
+
def insert_header
|
217
|
+
insert_into_file 'app/views/layouts/application.html.erb', <<-EOT, after: " <body>\n"
|
218
|
+
<%= render 'header' %>
|
219
|
+
EOT
|
220
|
+
end
|
221
|
+
|
222
|
+
def after_bundle_callback
|
223
|
+
rake 'db:migrate'
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
gem_group :development, :test do
|
2
|
+
gem 'rspec-rails'
|
3
|
+
gem 'factory_bot_rails'
|
4
|
+
end
|
5
|
+
|
6
|
+
after_bundle do
|
7
|
+
generate(:'rspec:install')
|
8
|
+
file 'spec/support/factory_bot.rb', <<~CODE
|
9
|
+
# frozen_string_literal: true
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.include FactoryBot::Syntax::Methods
|
12
|
+
end
|
13
|
+
CODE
|
14
|
+
insert_into_file 'spec/rails_helper.rb', <<~EOT, after: "# Add additional requires below this line. Rails is not loaded until this point!\n"
|
15
|
+
require_relative 'support/factory_bot.rb'
|
16
|
+
EOT
|
17
|
+
end
|
data/lib/railg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: railg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- nishisuke
|
@@ -69,6 +69,12 @@ files:
|
|
69
69
|
- Rakefile
|
70
70
|
- bin/console
|
71
71
|
- bin/setup
|
72
|
+
- lib/generators/railg/bulma/bulma_generator.rb
|
73
|
+
- lib/generators/railg/default/default_generator.rb
|
74
|
+
- lib/generators/railg/login/login_generator.rb
|
75
|
+
- lib/generators/railg/pry/pry_generator.rb
|
76
|
+
- lib/generators/railg/slim/slim_generator.rb
|
77
|
+
- lib/generators/railg/test_gen.txt
|
72
78
|
- lib/railg.rb
|
73
79
|
- lib/railg/version.rb
|
74
80
|
- railg.gemspec
|