hot-glue 0.4.9.2 → 0.5.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 +4 -4
- data/.github/FUNDING.yml +1 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +1 -1
- data/README.md +106 -15
- data/app/helpers/hot_glue/controller_helper.rb +36 -46
- data/config/database.yml +4 -4
- data/lib/generators/hot_glue/install_generator.rb +0 -5
- data/lib/generators/hot_glue/markup_templates/erb.rb +142 -91
- data/lib/generators/hot_glue/scaffold_generator.rb +190 -141
- data/lib/generators/hot_glue/templates/capybara_login.rb +1 -1
- data/lib/generators/hot_glue/templates/controller.rb.erb +22 -21
- data/lib/generators/hot_glue/templates/erb/_new_button.erb +1 -1
- data/lib/generators/hot_glue/templates/erb/_show.erb +1 -1
- data/lib/generators/hot_glue/templates/system_spec.rb.erb +1 -1
- data/lib/hotglue/version.rb +1 -1
- metadata +2 -3
- data/lib/generators/hot_glue/templates/confirmable.js +0 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f420219d9ff451f6fa20c743bef94003726a86c452fba51c8487f4d537d3c258
|
|
4
|
+
data.tar.gz: c031f7ffe2fb832a17ce13bd78051296baec30ed279de3d6b7b73c04dfdfd3c3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f72f3d5376e8b2ca6c50e3a7c8044b83ed6b62b550a91d1c2e76cf6a4b33eeab882ea760f67ee744e6d8e5c844ba1019a51368325eab5d5f4de56bd2edcbd768
|
|
7
|
+
data.tar.gz: 3299ae7f5aff59f94b65b7fae3af98f31dc935e7aa3c3b132e41c05057ae790c1ee10e8888ef34ebe9d6e8ddf221f5dac7a3d1ce4a8261968bca2b5b59761739
|
data/.github/FUNDING.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
custom: ["https://jfbcodes.com/p/hot-glue-in-depth-tutorial?utm_source=github.com&utm_campaign=github_hot_glue_repo_funding_link"]
|
|
1
|
+
custom: ["https://heliosdev.shop/p/hot-glue/","https://jfbcodes.com/p/hot-glue-in-depth-tutorial?utm_source=github.com&utm_campaign=github_hot_glue_repo_funding_link"]
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -34,12 +34,23 @@ Hot Glue generates functionality that is quick and dirty. It lets you be crafty.
|
|
|
34
34
|
|
|
35
35
|
| | |
|
|
36
36
|
| ------------- | ------------- |
|
|
37
|
-
|  | Now avaiale on [Teachable](https://
|
|
37
|
+
|  | Now avaiale on [Teachable](https://jfbcodes.com/courses/hot-glue-in-depth-tutorial/?utm_source=github.com&utm_campaign=github_hot_glue_readme_page) |
|
|
38
38
|
|
|
39
39
|
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
## NEW GETTING STARTED VIDEO
|
|
44
|
+
The getting started video is newly updated with an explanation of the options for **`jsbundling-rails`/`cssbudling-rails`** when creating a new Rails 7 app.
|
|
45
|
+
|
|
46
|
+
Check it out on Youtube at https://www.youtube.com/watch?v=bKjKHMTvzZc
|
|
40
47
|
|
|
48
|
+
While you're over there could you give my Youtube channel a 'Subscribe'? (look for the RED SUBSCRIBE BUTTON) Thanks so much!
|
|
41
49
|
|
|
42
50
|
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
|
|
43
54
|
## HOW EASY?
|
|
44
55
|
|
|
45
56
|
```
|
|
@@ -60,13 +71,13 @@ _If you are on Rails 6, see [LEGACY SETUP FOR RAILS 6](https://github.com/jasonf
|
|
|
60
71
|
|
|
61
72
|
## 1. Rails 7 New App
|
|
62
73
|
|
|
63
|
-
There are two ways to create new apps on Rails 7: With or
|
|
74
|
+
There are two ways to create new apps on Rails 7: With or Without ImportMap. These instructions prefer the **without Importmap** method using ESBuild as the bundler, but to help you choose [see this post](https://jasonfleetwoodboldt.com/courses/stepping-up-rails/rails-7-do-i-need-importmap-rails/)
|
|
64
75
|
|
|
65
|
-
`rails new --css=bootstrap --javascript=
|
|
76
|
+
`rails new --css=bootstrap --javascript=esbuild --database=postgresql`
|
|
66
77
|
|
|
67
|
-
|
|
78
|
+
**If using JSBundling, make sure to use the new `./bin/dev` to start your server instead of the old `rails server` or else your Turbo interactions will not work correctly.**
|
|
68
79
|
|
|
69
|
-
|
|
80
|
+
Confirm that both Stimulus and Turbo are working.
|
|
70
81
|
|
|
71
82
|
For the quick step-by-step guide to help you confirm that both Stimulus and Turbo are working for your new JSBundling-Rails/CSSBunlding-Rails setup [see this post](https://jasonfleetwoodboldt.com/courses/stepping-up-rails/rails-7-new-app-with-js-bundling-css-bundling/).
|
|
72
83
|
|
|
@@ -138,18 +149,13 @@ https://github.com/FortAwesome/font-awesome-sass
|
|
|
138
149
|
|
|
139
150
|
|
|
140
151
|
## 5. Devise
|
|
152
|
+
!!! Warning: as of 2022-03-22, Devise is still not compatible out-of-the-box with Rails 7.
|
|
141
153
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Add to your Gemfile
|
|
145
|
-
|
|
146
|
-
As of now, Devise for Rails 7 is still not released so you must use **main branch**, like so:
|
|
154
|
+
please see https://github.com/heartcombo/devise/issues/5478 or check this README for updated information.
|
|
147
155
|
|
|
148
|
-
`gem 'devise', branch: 'main', git: 'https://github.com/heartcombo/devise.git'`
|
|
149
156
|
|
|
150
157
|
(If you are on Rails 6, you must do ALL of the steps in the Legacy Setup steps. Be sure not to skip **Legacy Step #5** below)
|
|
151
158
|
|
|
152
|
-
For Rails 7, be sure you are on the main branch of devise above and your logins should work. (The previously necessary step of disabling turbo shown in Legacy Step #5 is no longer needed. )
|
|
153
159
|
|
|
154
160
|
You MUST run the installer FIRST or else you will put your app into a non-workable state:
|
|
155
161
|
```
|
|
@@ -467,9 +473,49 @@ In this case a controller would be generated that would have NO before_action to
|
|
|
467
473
|
Please note that this example would produce non-functional code, so you would need to manually fix your controllers to make sure `current_account` is available to the controller.
|
|
468
474
|
|
|
469
475
|
|
|
476
|
+
### `--hawk=`
|
|
477
|
+
|
|
478
|
+
Hawk a foreign key that is not the object's owner to within a specified scope.
|
|
479
|
+
|
|
480
|
+
Assuming a Pet belong_to a :human, when building an Appointments scaffold, you can hawk the `pet_id` to the current human's pets. (Whoever is the authentication object.)
|
|
481
|
+
|
|
482
|
+
`--hawk=pet_id`
|
|
483
|
+
|
|
484
|
+
This is covered in [Example #3 in the Hot Glue Tutorial](https://jfb.teachable.com/courses/hot-glue-in-depth-tutorial/lectures/38584014)
|
|
485
|
+
|
|
486
|
+
To hawk to a scope that is not the currently authenticated user, use curly braces `{...}` to specify the scope.
|
|
487
|
+
|
|
488
|
+
`--hawk=user_id{current_user.family}`
|
|
489
|
+
|
|
490
|
+
This would hawk the Appointment's `user_id` key to any users who are within the scope of the current_user's family.
|
|
491
|
+
|
|
492
|
+
This is covered in [Example #4 in the Hot Glue Tutorial](https://jfb.teachable.com/courses/hot-glue-in-depth-tutorial/lectures/38787505)
|
|
493
|
+
|
|
494
|
+
|
|
470
495
|
### `--plural=`
|
|
471
496
|
|
|
472
|
-
You don't need this if the pluralized version is just + "s" of the singular version.
|
|
497
|
+
You don't need this if the pluralized version is just + "s" of the singular version.
|
|
498
|
+
Only use for non-standard plurlizations, and be sure to pass it as TitleCase (as if you pluralized the model name which is non-standard for Rails)
|
|
499
|
+
|
|
500
|
+
An better alternative is to define the non-standard plurlizations globally in your app.
|
|
501
|
+
|
|
502
|
+
Make a file at `config/initializers/inflections.rb`
|
|
503
|
+
|
|
504
|
+
# Add new inflection rules using the following format
|
|
505
|
+
ActiveSupport::Inflector.inflections do |inflect|
|
|
506
|
+
inflect.irregular 'clothing', 'clothes'
|
|
507
|
+
inflect.irregular 'human', 'humans'
|
|
508
|
+
|
|
509
|
+
|
|
510
|
+
# the standard pluralization is pretty sexist and will pluralize `human` to `humen`
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
### `--form-labels-position` (default: `after`; options are **before**, **after**, and **omit**)
|
|
515
|
+
By default form labels appear after the form inputs. To make them appear before or omit them, use this flag.
|
|
516
|
+
|
|
517
|
+
See also `--form-placeholder-labels` to use placeolder labels.
|
|
518
|
+
|
|
473
519
|
|
|
474
520
|
|
|
475
521
|
### `--exclude=`
|
|
@@ -673,13 +719,29 @@ Omits list action. Only makes sense to use this if want to create a view where y
|
|
|
673
719
|
|
|
674
720
|
### `--no-list-label`
|
|
675
721
|
|
|
676
|
-
Omits list LABEL itself above the list. (Do not confuse with the field labels.)
|
|
722
|
+
Omits list LABEL itself above the list. (Do not confuse with the list heading which contains the field labels.)
|
|
677
723
|
|
|
678
724
|
(Note that on a per model basis, you can also globally omit the label or set a unique label value using
|
|
679
725
|
`@@table_label_singular` and `@@table_label_plural` on your model objects.)
|
|
680
726
|
|
|
681
727
|
Note that list labels may be automatically omitted on downnested scaffolds.
|
|
682
728
|
|
|
729
|
+
### `--form-placeholder-labels` (default: false)
|
|
730
|
+
|
|
731
|
+
When set to true, fields, numbers, and text areas will have placeholder labels.
|
|
732
|
+
Will not apply to dates, times, datetimes, dropdowns (enums + foreign keys), or booleans.
|
|
733
|
+
|
|
734
|
+
See also setting `--form-labels-position` to control position or omit normal labels.
|
|
735
|
+
|
|
736
|
+
### `--inline-list-labels` (before, after, omit; default: omit)
|
|
737
|
+
|
|
738
|
+
Determines if field label will appear on the LIST VIEW. Note that because Hot Glue has no separate show route or page, this affects the `_show` template which is rendered as a partial from the LIST view.
|
|
739
|
+
|
|
740
|
+
Because the labels are already in the heading, this is `omit` by default. (Use with `--no-list-heading` to omit the labels in the list heading.)
|
|
741
|
+
|
|
742
|
+
Use `before` to make the labels come before or `after` to make them come after. See Version 0.5.1 release notes for an example.
|
|
743
|
+
|
|
744
|
+
|
|
683
745
|
### `--no-list-heading`
|
|
684
746
|
|
|
685
747
|
Omits the heading of column names that appears above the 1st row of data.
|
|
@@ -738,12 +800,41 @@ Child portals have the headings omitted automatically (there is a heading identi
|
|
|
738
800
|
- Date: displayed as HTML5 date picker
|
|
739
801
|
- Time: displayed as HTML5 time picker
|
|
740
802
|
- Boolean: displayed radio buttons yes/ no
|
|
741
|
-
- Enum - displayed as a drop-down list (defined the enum values on your model).
|
|
803
|
+
- Enum - displayed as a drop-down list (defined the enum values on your model).
|
|
804
|
+
- For Rails 6 see https://jasonfleetwoodboldt.com/courses/stepping-up-rails/enumerated-types-in-rails-and-postgres/
|
|
742
805
|
- AFAIK, you must specify the enum definition both in your model and also in your database migration for both Rails 6 + Rails 7
|
|
743
806
|
|
|
744
807
|
|
|
745
808
|
# VERSION HISTORY
|
|
746
809
|
|
|
810
|
+
#### ???? - v0.5.2 - Hawked Foreign Keys
|
|
811
|
+
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
|
|
816
|
+
#### 2022-03-12 - v0.5.1 - Inline List Labels
|
|
817
|
+
|
|
818
|
+
`--inline-list-labels` (default: `after`; options are **before**, **after**, and **omit**)
|
|
819
|
+
|
|
820
|
+
Determines if field label will appear on the LIST VIEW. Note that because Hot Glue has no separate show route or page, this affects the `_show` template which is rendered as a partial from the LIST view.
|
|
821
|
+
|
|
822
|
+
Because the labels are already in the heading, this `omit` by default. (Use with `--no-list-heading` to omit the labels in the list heading.)
|
|
823
|
+
|
|
824
|
+
Use `before` to make the labels come before or `after` to make them come after. See Version 0.5.1 release notes for an example.
|
|
825
|
+
|
|
826
|
+
#### 2022-03-06 - v0.5.0 - Label options before or after or with placeholder labels
|
|
827
|
+
`--form-labels-position` (default: `after`; options are **before**, **after**, and **omit**)
|
|
828
|
+
By default, form labels appear after the form inputs. To make them appear before or omit them, use this flag.
|
|
829
|
+
|
|
830
|
+
`--form-placeholder-labels` (default: false)
|
|
831
|
+
|
|
832
|
+
When this flag is set, fields, numbers, and text areas will have placeholder labels.
|
|
833
|
+
Will not apply to dates, times, datetimes, dropdowns (enums + foreign keys), or booleans.
|
|
834
|
+
|
|
835
|
+
For example see the [release notes](https://github.com/jasonfb/hot-glue/releases/tag/v0.5.0)
|
|
836
|
+
|
|
837
|
+
|
|
747
838
|
#### 2022-02-14 - v0.4.9
|
|
748
839
|
• Fixed issue building models with namespaced class names (e.g. `Fruits::Apple` and `Fruits::Bannana`).
|
|
749
840
|
You can now build against these kinds of models natively (be sure to pass the full model name, with double-colon syntax).
|
|
@@ -1,50 +1,28 @@
|
|
|
1
1
|
module HotGlue
|
|
2
2
|
module ControllerHelper
|
|
3
|
-
|
|
4
3
|
def timezonize(tz)
|
|
5
4
|
tz = tz.to_i
|
|
6
5
|
(tz >= 0 ? "+" : "-") + sprintf('%02d',tz.abs) + ":00"
|
|
7
6
|
end
|
|
8
7
|
|
|
9
|
-
|
|
10
8
|
def datetime_field_localized(form_object, field_name, value, label, timezone = nil )
|
|
11
|
-
|
|
12
|
-
field_name,
|
|
13
|
-
class: 'small form-text text-muted')
|
|
14
|
-
|
|
15
|
-
res << form_object.text_field(field_name, class: 'form-control',
|
|
9
|
+
form_object.text_field(field_name, class: 'form-control',
|
|
16
10
|
type: 'datetime-local',
|
|
17
|
-
value: date_to_current_timezone(value, timezone))
|
|
18
|
-
|
|
19
|
-
res << timezonize(timezone)
|
|
20
|
-
res
|
|
11
|
+
value: date_to_current_timezone(value, timezone)) + timezonize(timezone)
|
|
21
12
|
end
|
|
22
13
|
|
|
23
14
|
|
|
24
15
|
def date_field_localized(form_object, field_name, value, label, timezone = nil )
|
|
25
|
-
|
|
26
|
-
res = form_object.label(label,
|
|
27
|
-
field_name,
|
|
28
|
-
class: 'small form-text text-muted')
|
|
29
|
-
|
|
30
|
-
res << form_object.text_field(field_name, class: 'form-control',
|
|
16
|
+
form_object.text_field(field_name, class: 'form-control',
|
|
31
17
|
type: 'date',
|
|
32
18
|
value: value )
|
|
33
|
-
|
|
34
|
-
res
|
|
35
19
|
end
|
|
36
20
|
|
|
37
21
|
def time_field_localized(form_object, field_name, value, label, timezone = nil )
|
|
38
|
-
|
|
39
|
-
field_name,
|
|
40
|
-
class: 'small form-text text-muted')
|
|
41
|
-
|
|
42
|
-
res << form_object.text_field(field_name, class: 'form-control',
|
|
22
|
+
form_object.text_field(field_name, class: 'form-control',
|
|
43
23
|
type: 'time',
|
|
44
|
-
value: date_to_current_timezone(value, timezone))
|
|
24
|
+
value: date_to_current_timezone(value, timezone)) + timezonize(timezone)
|
|
45
25
|
|
|
46
|
-
res << timezonize(timezone)
|
|
47
|
-
res
|
|
48
26
|
end
|
|
49
27
|
|
|
50
28
|
def current_timezone
|
|
@@ -54,40 +32,30 @@ module HotGlue
|
|
|
54
32
|
else
|
|
55
33
|
server_timezone
|
|
56
34
|
end
|
|
57
|
-
elsif true
|
|
58
|
-
server_timezone
|
|
59
|
-
# elsif defined?(controller) == "method"
|
|
60
|
-
# # controller.try(:current_timezone)
|
|
61
|
-
# elsif self.class.ancestors.include?(ApplicationController)
|
|
62
|
-
# self.try(:current_timezone)
|
|
63
35
|
else
|
|
64
|
-
|
|
65
|
-
exit
|
|
36
|
+
server_timezone
|
|
66
37
|
end
|
|
67
38
|
end
|
|
68
39
|
|
|
69
|
-
def server_timezone
|
|
70
|
-
Time.now.strftime("%z").to_i/100
|
|
71
|
-
end
|
|
72
|
-
|
|
73
40
|
def date_to_current_timezone(date, timezone = nil)
|
|
74
41
|
# if the timezone is nil, use the server date'
|
|
42
|
+
|
|
75
43
|
if timezone.nil?
|
|
76
44
|
timezone = Time.now.strftime("%z").to_i/100
|
|
77
45
|
end
|
|
78
46
|
|
|
79
47
|
return nil if date.nil?
|
|
80
48
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
49
|
+
return date.in_time_zone(timezone).strftime("%Y-%m-%dT%H:%M")
|
|
50
|
+
# begin
|
|
51
|
+
#
|
|
52
|
+
# rescue
|
|
53
|
+
# return nil
|
|
54
|
+
# end
|
|
86
55
|
end
|
|
87
56
|
|
|
88
|
-
|
|
89
|
-
|
|
90
57
|
def modify_date_inputs_on_params(modified_params, current_user_object = nil)
|
|
58
|
+
|
|
91
59
|
use_timezone = (current_user_object.try(:timezone)) || Time.now.strftime("%z")
|
|
92
60
|
|
|
93
61
|
modified_params = modified_params.tap do |params|
|
|
@@ -104,5 +72,27 @@ module HotGlue
|
|
|
104
72
|
end
|
|
105
73
|
modified_params
|
|
106
74
|
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def hawk_params(hawk_schema, modified_params)
|
|
78
|
+
@hawk_alarm = ""
|
|
79
|
+
hawk_schema.each do |hawk_key,hawk_definition|
|
|
80
|
+
hawk_root = hawk_definition[0]
|
|
81
|
+
hawk_scope = hawk_definition[1]
|
|
82
|
+
begin
|
|
83
|
+
eval("hawk_root.#{hawk_scope}").find(modified_params[hawk_key.to_s])
|
|
84
|
+
rescue ActiveRecord::RecordNotFound => e
|
|
85
|
+
@hawk_alarm << "You aren't allowed to set #{hawk_key.to_s} to #{modified_params[hawk_key.to_s]}. "
|
|
86
|
+
modified_params.tap { |hs| hs.delete(hawk_key.to_s) }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
modified_params
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
private
|
|
93
|
+
|
|
94
|
+
def server_timezone
|
|
95
|
+
Time.now.strftime("%z").to_i/100
|
|
96
|
+
end
|
|
107
97
|
end
|
|
108
98
|
end
|
data/config/database.yml
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
development:
|
|
2
|
-
adapter:
|
|
3
|
-
database:
|
|
2
|
+
adapter: postgresql
|
|
3
|
+
database: dummy_dev
|
|
4
4
|
pool: 5
|
|
5
5
|
timeout: 5000
|
|
6
6
|
|
|
7
7
|
test:
|
|
8
|
-
adapter:
|
|
9
|
-
database:
|
|
8
|
+
adapter: postgresql
|
|
9
|
+
database: dummy_test
|
|
10
10
|
pool: 5
|
|
11
11
|
timeout: 5000
|
|
@@ -87,11 +87,6 @@ module HotGlue
|
|
|
87
87
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
-
if Rails.version.split(".")[0].to_i >= 7
|
|
91
|
-
copy_file "confirmable.js", "#{'spec/dummy/' if Rails.env.test?}app/javascript/controllers/confirmable.js"
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
|
|
95
90
|
begin
|
|
96
91
|
if Rails.version.split(".")[0].to_i == 6
|
|
97
92
|
app_js_contents = File.read("app/javascript/packs/application.js")
|