hot-glue 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +172 -86
- data/app/views/layouts/_flash_notices.erb +12 -0
- data/lib/generators/hot_glue/install_generator.rb +34 -11
- data/lib/generators/hot_glue/templates/capybara_login.rb +8 -0
- data/lib/generators/hot_glue/templates/controller.rb.erb +2 -0
- data/lib/hotglue/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2000db5bcae078cadbe8afc0bc3d53750d0baa453ca5e627962b3a6b2b6615e1
|
4
|
+
data.tar.gz: 6ce4745eb0e6a67cd37ede9db75eca2d7bddee4bb241c236aebd12c7d0a30502
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 126bb570bf44f4a2d3fd36731bf5eca31d416f74eda2b8e1e60ff9ceec0cfc1cff5c03cc2f185b37a354f7c7a6e7c4812fa5187286c731d5702b0d77dadc5103
|
7
|
+
data.tar.gz: 91cd67558e8910b5369886634eadc6b98a7be6d6b629e829f1cd81656579e86b015fa671f5636848f69be3af36aa0be551b19fef86117a45563d9ba35e49c2ab
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -54,119 +54,163 @@ Instantly get a simple CRUD interface
|
|
54
54
|
|
55
55
|
![hot-glue-4](https://user-images.githubusercontent.com/59002/116405517-c2b2e300-a7fd-11eb-8423-d43e3afc9fa6.gif)
|
56
56
|
|
57
|
-
## TO INSTALL (RAILS 7)
|
58
57
|
|
59
|
-
|
60
|
-
|
61
|
-
- Add `gem 'hot-glue'` to your Gemfile
|
62
|
-
- `bundle install`
|
63
|
-
- `rails generate hot_glue:install --markup=erb` for ERB
|
64
|
-
- or `rails generate hot_glue:install --markup=haml` for HAML
|
65
|
-
|
66
|
-
- Add to your `application.html.erb`
|
58
|
+
## ADD HOTWIRE
|
67
59
|
```
|
68
|
-
|
60
|
+
yarn add @hotwired/turbo-rails
|
69
61
|
```
|
70
|
-
|
62
|
+
or `npm install @hotwired/turbo-rails`
|
63
|
+
|
64
|
+
## ADD HOT-GLUE GEM
|
65
|
+
- Add `gem 'hot-glue'` to your Gemfile & `bundle install`
|
66
|
+
|
67
|
+
## ADD RSPEC, FACTORY-BOT, AND FFAKER
|
68
|
+
|
69
|
+
add these 3 gems to your gemfile inside :development and :test groups
|
71
70
|
```
|
72
|
-
|
71
|
+
gem 'rspec-rails'
|
72
|
+
gem 'factory_bot_rails'
|
73
|
+
gem 'ffaker'
|
73
74
|
```
|
74
75
|
|
75
|
-
## TO INSTALL (RAILS 6)
|
76
76
|
|
77
|
+
## RUN THE RSPEC INSTALLER
|
78
|
+
- run `rails generate rspec:install`
|
79
|
+
|
80
|
+
## RUN HOT-GLUE INSTALL
|
81
|
+
### FOR ERB:
|
82
|
+
`rails generate hot_glue:install --markup=erb`
|
83
|
+
|
84
|
+
### FOR HAML:
|
85
|
+
`rails generate hot_glue:install --markup=haml`
|
86
|
+
|
87
|
+
|
88
|
+
## FOR RAILS 6 ONLY: SWITCH FROM TurblLinks to Turbo-Rails (SKIP THIS STEP FOR RAILS 7)
|
89
|
+
(THIS WAS AUTOMATICALLY DONE BY THE HOT GLUE INSTALLATION -- CONFIRM CHANGES ONLY)
|
77
90
|
- Add `gem 'turbo-rails'` to your Gemfile & `bundle install`
|
78
|
-
|
79
91
|
- Then install it with `rails turbo:install`
|
80
|
-
|
81
92
|
- The Turbo install has switched your action cable settings from 'async' to Redis, so be sure to start a redis server
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
93
|
+
- in `app/javascript/packs/application.js` remove this line
|
94
|
+
```
|
95
|
+
import Turbolinks from "turbolinks"
|
96
|
+
```
|
97
|
+
and replace it with
|
98
|
+
```
|
99
|
+
import { Turbo } from "@hotwired/turbo-rails"
|
100
|
+
```
|
87
101
|
|
88
|
-
- in the same file (`javascript/packs/application.js`) add this line:
|
89
|
-
`import { Turbo } from "@hotwired/turbo-rails"`
|
90
102
|
|
91
|
-
|
103
|
+
Also replace
|
104
|
+
```
|
105
|
+
Turbolinks.start()
|
106
|
+
```
|
107
|
+
with:
|
108
|
+
```
|
109
|
+
Turbo.start()
|
110
|
+
```
|
92
111
|
|
93
|
-
FOR ERB:
|
94
|
-
`rails generate hot_glue:install --markup=erb`
|
95
112
|
|
96
|
-
|
97
|
-
|
113
|
+
## Modify `application.html.erb`
|
114
|
+
(THIS WAS AUTOMATICALLY DONE BY THE HOT GLUE INSTALLATION -- CONFIRM CHANGES ONLY)
|
115
|
+
Note: if you have some kind of non-standard application layout, like one at a different file
|
116
|
+
or if you have modified your opening <body> tag, this may not have been automatically applied by the installer.
|
98
117
|
|
99
|
-
-
|
118
|
+
- This was added to your `application.html.erb`
|
100
119
|
```
|
101
120
|
<%= render partial: 'layouts/flash_notices' %>
|
102
121
|
```
|
103
122
|
|
123
|
+
## Modify `rails_helper.rb`
|
124
|
+
(THIS WAS AUTOMATICALLY DONE BY THE HOT GLUE INSTALLATION)
|
125
|
+
Note: if you have some kind of non-standard rails_helper.rb, like one that does not use the standard ` do |config|` syntax after your `RSpec.configure`
|
126
|
+
this may not have been automatically applied by the installer.
|
104
127
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
128
|
+
- configure Rspec to work with Factory Bot inside of `rails_helper.rb`
|
129
|
+
```
|
130
|
+
RSpec.configure do |config|
|
131
|
+
// ... more rspec configuration (not shown)
|
132
|
+
config.include FactoryBot::Syntax::Methods
|
133
|
+
end
|
134
|
+
```
|
110
135
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
136
|
+
|
137
|
+
## CAPYBARA: SWITCH FROM RACK-TEST TO HEADLESS CHROME
|
138
|
+
(THIS WAS AUTOMATICALLY DONE BY THE HOT GLUE INSTALLATION)
|
139
|
+
|
140
|
+
- By default Capybara is installed with :rack_test as its driver.
|
141
|
+
- This does not support Javascript, and the code from Hot Glue IS NOT fallback compatible-- it will not work on non-Javascript browsers.
|
142
|
+
- From the [Capybara docs](https://github.com/teamcapybara/capybara#drivers):
|
143
|
+
```
|
144
|
+
By default, Capybara uses the :rack_test driver, which is fast but limited: it does not support JavaScript
|
145
|
+
```
|
146
|
+
|
147
|
+
- To fix this, you must switch to a Javascript-supporting Capybara driver. You can choose one of:
|
148
|
+
-
|
149
|
+
```
|
150
|
+
Capybara.default_driver = :selenium
|
151
|
+
```
|
152
|
+
|
153
|
+
```
|
154
|
+
Capybara.default_driver = :selenium_chrome
|
155
|
+
```
|
156
|
+
By default, the installer should have added this option to your `rails_helper.rb` file:
|
157
|
+
|
158
|
+
```
|
159
|
+
Capybara.default_driver = :selenium_chrome_headless
|
160
|
+
```
|
161
|
+
|
162
|
+
Alternatively, can define your own driver like so:
|
163
|
+
|
164
|
+
```
|
165
|
+
Capybara.register_driver :my_headless_chrome_desktop do |app|
|
166
|
+
options = Selenium::WebDriver::Chrome::Options.new
|
167
|
+
options.add_argument('--headless')
|
168
|
+
options.add_argument('--disable-gpu')
|
169
|
+
options.add_argument('--window-size=1280,1200')
|
133
170
|
|
134
|
-
|
135
|
-
|
136
|
-
|
171
|
+
driver = Capybara::Selenium::Driver.new(app,
|
172
|
+
browser: :chrome,
|
173
|
+
options: options)
|
137
174
|
|
138
|
-
|
139
|
-
|
140
|
-
|
175
|
+
driver
|
176
|
+
end
|
177
|
+
Capybara.default_driver = :my_headless_chrome_desktop
|
141
178
|
|
142
|
-
|
179
|
+
```
|
143
180
|
|
181
|
+
## Add User Authentication if you are using Access Control
|
182
|
+
(THIS WAS AUTOMATICALLY DONE BY THE HOT GLUE INSTALLATION)
|
144
183
|
|
145
184
|
- for a quick Capybara login, create a support helper in `spec/support/` and log-in as your user
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
185
|
+
- in the default code, the devise login would be for an object called account and lives at the route `/accounts/sign_in`
|
186
|
+
- modify the generated code (it was installed by the installed) for your devise login
|
187
|
+
```
|
188
|
+
def login_as(account)
|
189
|
+
visit '/accounts/sign_in'
|
190
|
+
within("#new_account") do
|
191
|
+
fill_in 'Email', with: account.email
|
192
|
+
fill_in 'Password', with: 'password'
|
193
|
+
end
|
194
|
+
click_button 'Log in'
|
195
|
+
end
|
196
|
+
```
|
197
|
+
|
198
|
+
## Install Bootstrap using Sprockets (IMPORTANT: YOU DO NOT NEED JQUERY)
|
156
199
|
|
157
|
-
## Install Bootstrap using Sprockets (IMPORTANT: YOU DO NOT NEED JQUERY*)
|
158
200
|
Bootstrap with Sprockets for Rails 5 or 7 default — Rails 6 custom
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
-
|
201
|
+
- add `gem 'bootstrap-rubygem'` to your gemfile
|
202
|
+
- replace `application.css` with a new file (delete old contents) `application.scss`
|
203
|
+
```
|
204
|
+
@import "bootstrap";
|
205
|
+
```
|
206
|
+
- see README at github.com/twbs/bootstrap-rubygem to install
|
165
207
|
|
166
208
|
|
209
|
+
## Bootstrap with Webpack for FOR RAILS 7 ONLY :
|
210
|
+
- add to Gemfile
|
211
|
+
- gem 'bootstrap', '~> 5.1.0'
|
167
212
|
- completely delete the file `app/assets/application.css`
|
168
213
|
- create new file where it was `app/assets/application.scss` with this contents (do not keep the contents of the old application.css file):
|
169
|
-
|
170
214
|
```
|
171
215
|
// Custom bootstrap variables must be set or imported *before* bootstrap.
|
172
216
|
@import "bootstrap";
|
@@ -174,7 +218,7 @@ Bootstrap with Webpack for FOR RAILS 7 :
|
|
174
218
|
|
175
219
|
* You do not need jQuery for HotGlue to work *
|
176
220
|
|
177
|
-
|
221
|
+
## Bootstrap with Webpack RAILS 6 ONLY:
|
178
222
|
- change `stylesheet_link_tag` to `stylesheet_pack_tag` in your application layout
|
179
223
|
- run `yarn add bootstrap`
|
180
224
|
- create a new file at `app/javascript/require_bootstrap.scss` with this content
|
@@ -186,14 +230,53 @@ Bootstrap with Webpack for FOR RAILS 7 :
|
|
186
230
|
```
|
187
231
|
import 'require_bootstrap'
|
188
232
|
```
|
189
|
-
|
190
233
|
|
234
|
+
## RAILS 6 ONLY : Install Devise or implement your own authentication
|
235
|
+
(or only use --gd mode, see below)
|
191
236
|
|
237
|
+
Add to your Gemfile `gem 'devise'`
|
238
|
+
|
239
|
+
```
|
240
|
+
rails generate devise:install
|
241
|
+
```
|
242
|
+
|
243
|
+
IMPORTNAT: Follow the instructions the Devise installer gives you, *Except Step 3*, you can skip this step:
|
244
|
+
```
|
245
|
+
3. Ensure you have flash messages in app/views/layouts/application.html.erb.
|
246
|
+
For example:
|
247
|
+
|
248
|
+
<p class="notice"><%= notice %></p>
|
249
|
+
<p class="alert"><%= alert %></p>
|
250
|
+
|
251
|
+
```
|
252
|
+
|
253
|
+
|
254
|
+
You can also skip Devise Step 4, which is optional:
|
255
|
+
```
|
256
|
+
4. You can copy Devise views (for customization) to your app by running:
|
257
|
+
|
258
|
+
rails g devise:views
|
259
|
+
|
260
|
+
* Not required *
|
261
|
+
```
|
262
|
+
|
263
|
+
|
264
|
+
## RAILS 7: Devise is not yet supported on Rails 7
|
265
|
+
|
266
|
+
|
267
|
+
## install font-awesome
|
268
|
+
|
269
|
+
I recommend https://github.com/tomkra/font_awesome5_rails
|
270
|
+
or https://github.com/FortAwesome/font-awesome-sass
|
271
|
+
|
272
|
+
|
273
|
+
|
274
|
+
## For Enum support, I recommend activerecord-pgenum
|
275
|
+
|
276
|
+
Instructions for Rails are here:
|
277
|
+
https://jasonfleetwoodboldt.com/courses/stepping-up-rails/enumerated-types-in-rails-and-postgres/
|
192
278
|
|
193
|
-
## Install Devise or implement your own authentication
|
194
|
-
(or only use --gd mode, see below)
|
195
279
|
|
196
|
-
## install font-awesome. I recommend https://github.com/tomkra/font_awesome5_rails or https://github.com/FortAwesome/font-awesome-sass
|
197
280
|
|
198
281
|
|
199
282
|
### First Argument
|
@@ -492,7 +575,10 @@ Obviously, the created controller will always have this base controller as its s
|
|
492
575
|
|
493
576
|
# VERSION HISTORY
|
494
577
|
|
495
|
-
#### 2021-10-
|
578
|
+
#### 2021-10-11 - v0.2.6 - many additional automatic fixes for default Rails installation 6 or 7 for the generate hot_glue:install command
|
579
|
+
|
580
|
+
|
581
|
+
#### 2021-10-10 - v0.2.5 - this version is all about developer happyness:
|
496
582
|
- significant fixes for the behavioral (system) specs. they now create new & update interactions
|
497
583
|
for (almost) all field types
|
498
584
|
- the install generator now checks your layouts/application.html.erb for `render partial: 'layouts/flash_messages' ` and adds it if it isn't there already
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= turbo_frame_tag "flash_notices" do %>
|
2
|
+
<% unless notice.nil? %>
|
3
|
+
<div class="alert alert-notice alert-dismissible">
|
4
|
+
<%= notice %>
|
5
|
+
</div>
|
6
|
+
<% end %>
|
7
|
+
<% unless alert.nil? %>
|
8
|
+
<div class="alert alert-danger alert-dismissible">
|
9
|
+
<%= alert %>
|
10
|
+
</div>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -23,33 +23,56 @@ module HotGlue
|
|
23
23
|
copy_file "confirmable.js", "#{'spec/dummy/' if Rails.env.test?}app/javascript/controllers/confirmable.js"
|
24
24
|
end
|
25
25
|
|
26
|
+
if Rails.version.split(".")[0].to_i == 6
|
27
|
+
app_js_contents = File.read("app/javascript/packs/application.js")
|
28
|
+
if app_js_contents.include?("import Turbolinks from \"turbolinks\"")
|
29
|
+
app_js_contents.gsub!("import Turbolinks from \"turbolinks\"", "import { Turbo } from \"@hotwired/turbo-rails\"")
|
30
|
+
puts " HOTGLUE --> fixed packs/application.js: swapping old Turbolinks syntas for new Turbo-Rails syntax [ import { Turbo } from \"@hotwired/turbo-rails\" ] "
|
31
|
+
end
|
32
|
+
|
33
|
+
if app_js_contents.include?("Turbolinks.start()")
|
34
|
+
app_js_contents.gsub!("Turbolinks.start()", "Turbo.start()")
|
35
|
+
puts " HOTGLUE --> fixed packs/application.js: swapping old Turbolinks syntas for new Turbo-Rails syntax[ Turbolinks.start() ] "
|
36
|
+
end
|
37
|
+
File.write("app/javascript/packs/application.js", app_js_contents)
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
|
26
42
|
rails_helper_contents = File.read("spec/rails_helper.rb")
|
43
|
+
if !rails_helper_contents.include?("Capybara.default_driver =")
|
44
|
+
rails_helper_contents << "\nCapybara.default_driver = :selenium_chrome_headless "
|
45
|
+
puts " HOTGLUE --> added to spec/rails_helper.rb: `Capybara.default_driver = :selenium_chrome_headless` "
|
46
|
+
end
|
47
|
+
|
27
48
|
if !rails_helper_contents.include?("include FactoryBot::Syntax::Methods")
|
28
49
|
rails_helper_contents.gsub!("RSpec.configure do |config|", "RSpec.configure do |config| \n
|
29
50
|
config.include FactoryBot::Syntax::Methods
|
30
51
|
")
|
31
|
-
|
32
|
-
|
52
|
+
puts " HOTGLUE --> added to spec/rails_helper.rb: `config.include FactoryBot::Syntax::Methods` "
|
53
|
+
end
|
54
|
+
|
55
|
+
if ! rails_helper_contents.include?("require 'support/capybara_login.rb'")
|
56
|
+
rails_helper_contents.gsub!("require 'rspec/rails'","require 'rspec/rails' \nrequire 'support/capybara_login.rb'")
|
57
|
+
puts " HOTGLUE --> added to spec/rails_helper.rb: `require 'support/capybara_login.rb'` "
|
33
58
|
end
|
59
|
+
File.write("spec/rails_helper.rb", rails_helper_contents)
|
60
|
+
|
34
61
|
|
35
62
|
application_layout_contents = File.read("app/views/layouts/application.html.erb")
|
36
63
|
|
37
64
|
if !application_layout_contents.include?("render partial: 'layouts/flash_notices'")
|
38
65
|
application_layout_contents.gsub!("<body>", "<body>\n
|
39
|
-
<%= render partial: 'flash_notices' %>
|
66
|
+
<%= render partial: 'layouts/flash_notices' %>
|
40
67
|
")
|
41
68
|
File.write("app/views/layouts/application.html.erb", application_layout_contents)
|
42
|
-
puts " HOTGLUE -->
|
69
|
+
puts " HOTGLUE --> added to app/views/layouts/application.html.erb: `<%= render partial: 'layouts/flash_notices' %>` "
|
43
70
|
end
|
44
71
|
|
45
|
-
#
|
46
|
-
|
47
|
-
# TODO>: look for config.include FactoryBot::Syntax::Methods
|
48
|
-
# inside of spec/rails_Helper.rb and inject it if it is not there
|
49
|
-
# rspec_file = File.read("spec/rails_helper.rb")
|
50
|
-
#
|
51
|
-
# "RSpec.configure do |config|"
|
52
72
|
|
73
|
+
if !File.exists?("spec/support/capybara_login.rb")
|
74
|
+
copy_file "capybara_login.rb", "#{'spec/dummy/' if Rails.env.test?}spec/support/capybara_login.rb"
|
75
|
+
end
|
53
76
|
end
|
54
77
|
end
|
55
78
|
end
|
@@ -7,6 +7,8 @@ class <%= controller_class_name %> < <%= controller_descends_from %>
|
|
7
7
|
before_action :<%= arg %>
|
8
8
|
<% } %><% end %>
|
9
9
|
before_action :load_<%= singular_name %>, only: [:show, :edit, :update, :destroy]
|
10
|
+
after_action -> { flash.discard }, if: -> { request.format.symbol == :turbo_stream }
|
11
|
+
|
10
12
|
helper :hot_glue
|
11
13
|
include HotGlue::ControllerHelper
|
12
14
|
|
data/lib/hotglue/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hot-glue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Fleetwood-Boldt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- app/assets/config/manifest.js
|
119
119
|
- app/helpers/hot_glue/controller_helper.rb
|
120
120
|
- app/helpers/hot_glue_helper.rb
|
121
|
+
- app/views/layouts/_flash_notices.erb
|
121
122
|
- bin/rails
|
122
123
|
- config/database.yml
|
123
124
|
- db/migrate/20210306212711_create_abcs.rb
|
@@ -134,6 +135,7 @@ files:
|
|
134
135
|
- lib/generators/hot_glue/markup_templates/slim.rb
|
135
136
|
- lib/generators/hot_glue/scaffold_generator.rb
|
136
137
|
- lib/generators/hot_glue/templates/base_controller.rb.erb
|
138
|
+
- lib/generators/hot_glue/templates/capybara_login.rb
|
137
139
|
- lib/generators/hot_glue/templates/confirmable.js
|
138
140
|
- lib/generators/hot_glue/templates/controller.rb.erb
|
139
141
|
- lib/generators/hot_glue/templates/erb/_errors.erb
|