rolemodel-rails 1.0.0 → 2.0.1
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/README.md +20 -10
- data/lib/generators/rolemodel/all_generator.rb +1 -1
- data/lib/generators/rolemodel/editors/editors_generator.rb +1 -1
- data/lib/generators/rolemodel/github/github_generator.rb +1 -1
- data/lib/generators/rolemodel/good_job/good_job_generator.rb +1 -1
- data/lib/generators/rolemodel/heroku/heroku_generator.rb +1 -1
- data/lib/generators/rolemodel/kaminari/kaminari_generator.rb +1 -1
- data/lib/generators/rolemodel/linters/all_generator.rb +1 -1
- data/lib/generators/rolemodel/linters/eslint/eslint_generator.rb +1 -1
- data/lib/generators/rolemodel/linters/rubocop/rubocop_generator.rb +1 -1
- data/lib/generators/rolemodel/lograge/lograge_generator.rb +1 -1
- data/lib/generators/rolemodel/mailers/mailers_generator.rb +1 -1
- data/lib/generators/rolemodel/optics/all_generator.rb +1 -1
- data/lib/generators/rolemodel/optics/base/base_generator.rb +2 -2
- data/lib/generators/rolemodel/optics/icons/README.md +6 -1
- data/lib/generators/rolemodel/optics/icons/icons_generator.rb +15 -10
- data/lib/generators/rolemodel/optics/icons/templates/app/helpers/icon_helper.rb.tt +4 -2
- data/lib/generators/rolemodel/react/react_generator.rb +1 -1
- data/lib/generators/rolemodel/readme/readme_generator.rb +1 -1
- data/lib/generators/rolemodel/saas/all_generator.rb +1 -1
- data/lib/generators/rolemodel/saas/devise/devise_generator.rb +1 -1
- data/lib/generators/rolemodel/semaphore/semaphore_generator.rb +1 -1
- data/lib/generators/rolemodel/simple_form/simple_form_generator.rb +1 -1
- data/lib/generators/rolemodel/slim/slim_generator.rb +1 -1
- data/lib/generators/rolemodel/soft_destroyable/soft_destroyable_generator.rb +1 -1
- data/lib/generators/rolemodel/source_map/source_map_generator.rb +1 -1
- data/lib/generators/rolemodel/tailored_select/tailored_select_generator.rb +1 -1
- data/lib/generators/rolemodel/testing/README.md +4 -1
- data/lib/generators/rolemodel/testing/all_generator.rb +4 -4
- data/lib/generators/rolemodel/testing/factory_bot/factory_bot_generator.rb +1 -1
- data/lib/generators/rolemodel/testing/jasmine_playwright/jasmine_playwright_generator.rb +2 -2
- data/lib/generators/rolemodel/testing/parallel_tests/parallel_tests_generator.rb +1 -1
- data/lib/generators/rolemodel/testing/rspec/README.md +1 -1
- data/lib/generators/rolemodel/testing/rspec/USAGE +1 -1
- data/lib/generators/rolemodel/testing/rspec/rspec_generator.rb +16 -16
- data/lib/generators/rolemodel/testing/rspec/templates/{rails_helper.rb → spec/rails_helper.rb.tt} +4 -0
- data/lib/generators/rolemodel/testing/rspec/templates/spec/support/capybara_config.rb.tt +9 -0
- data/lib/generators/rolemodel/testing/rspec/templates/{support/capybara_drivers.rb → spec/support/capybara_drivers.rb.tt} +0 -2
- data/lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb +1 -1
- data/lib/generators/rolemodel/testing/vitest/vitest_generator.rb +1 -1
- data/lib/generators/rolemodel/ui_components/all_generator.rb +1 -1
- data/lib/generators/rolemodel/ui_components/flash/flash_generator.rb +1 -1
- data/lib/generators/rolemodel/ui_components/modals/modals_generator.rb +1 -1
- data/lib/generators/rolemodel/ui_components/navbar/navbar_generator.rb +1 -1
- data/lib/generators/rolemodel/webpack/webpack_generator.rb +1 -1
- data/lib/rolemodel/engine.rb +3 -1
- data/lib/rolemodel/generator_base.rb +17 -0
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/custom_icon_builder.rb +1 -1
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/feather_icon_builder.rb +1 -1
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/icon_builder.rb +10 -19
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/lucide_icon_builder.rb +1 -1
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/material_icon_builder.rb +1 -1
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/phosphor_icon_builder.rb +1 -1
- data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/tabler_icon_builder.rb +1 -1
- data/lib/rolemodel/optics.rb +9 -0
- data/lib/rolemodel/utility/task_tools.rb +42 -0
- data/lib/rolemodel/utility.rb +3 -0
- data/lib/rolemodel/version.rb +1 -1
- data/lib/rolemodel-rails.rb +2 -0
- metadata +37 -24
- data/lib/generators/rolemodel/base_generator.rb +0 -16
- data/lib/generators/rolemodel/testing/rspec/templates/support/capybara_testid.rb +0 -5
- data/lib/generators/templates/generator/%filename%.rb.tt +0 -11
- data/lib/generators/templates/generator/README.md.tt +0 -11
- data/lib/generators/templates/generator/USAGE.tt +0 -5
- data/lib/generators/templates/generator_spec/%filename%_spec.rb.tt +0 -5
- /data/lib/generators/rolemodel/testing/rspec/templates/{spec_helper.rb → spec/spec_helper.rb.tt} +0 -0
- /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/action_cable_helper.rb +0 -0
- /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/capybara_helper.rb +0 -0
- /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/playwright_helper.rb +0 -0
- /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/select_helper.rb +0 -0
- /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/test_element_helper.rb +0 -0
- /data/lib/generators/rolemodel/testing/rspec/templates/{support/helpers.rb → spec/support/helpers.rb.tt} +0 -0
- /data/lib/{generators/rolemodel → rolemodel}/replace_content_helper.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2cbd3c1b81aa62c00354cd5faa3cc5bea47c48c2ede2c86470b391372751db9c
|
|
4
|
+
data.tar.gz: c9bd14d2787122907369daaf9bfa26b63d0cc882449247ae5da26af15de9586f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d79a388d4221587a777dddeddaea260f389924272c49299fed129b7f5e364df154fa09161217b0087d975168fda59ce6c75e7fd36468c0b0a5b5767cddecea28
|
|
7
|
+
data.tar.gz: 960b18a4e997a18092a6bacd69f0833da0154a54717d41215b401f4f8c9cf08034ba8aa10f4daf0fef560a7bd54154a470d650e4427122b3db6c47ac687087ee
|
data/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Attempts to solve the pain of:
|
|
|
14
14
|
The rolemodel-rails gem expects to be added to an existing Rails project. Typically those are started with:
|
|
15
15
|
|
|
16
16
|
```shell
|
|
17
|
-
rails new <app-name> --javascript=webpack --database=postgresql --skip-test
|
|
17
|
+
rails new <app-name> --javascript=webpack --database=postgresql --skip-test --skip-solid
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
The Devise generator requires your database to exist before running.
|
|
@@ -28,14 +28,15 @@ rails db:create
|
|
|
28
28
|
Add this line to your application's Gemfile:
|
|
29
29
|
|
|
30
30
|
```ruby
|
|
31
|
-
|
|
32
|
-
gem 'rolemodel-rails', github: 'RoleModel/rolemodel_rails'
|
|
33
|
-
end
|
|
31
|
+
gem 'rolemodel-rails'
|
|
34
32
|
```
|
|
35
33
|
|
|
34
|
+
> [!IMPORTANT]
|
|
35
|
+
> We used to recommend putting rolemodel-rails in the development gem group. This is no longer supported, because some Rolemodel namespaced utility modules and classes are expected to be available at runtime.
|
|
36
|
+
|
|
36
37
|
And then execute:
|
|
37
38
|
|
|
38
|
-
$ bundle
|
|
39
|
+
$ bundle install
|
|
39
40
|
|
|
40
41
|
## Usage
|
|
41
42
|
|
|
@@ -115,13 +116,9 @@ e.g.
|
|
|
115
116
|
bin/new_generator testing/fantasitic_specs 'A Fantastic Testing Framework'
|
|
116
117
|
```
|
|
117
118
|
|
|
118
|
-
We use the embeded Rails apps (`
|
|
119
|
+
We use the embeded Rails apps (`example_rails_current` & `example_rails_legacy`) to test generators against. They reference the rolemodel-rails gem by local path,
|
|
119
120
|
so you can navigate into one of them and run your generator for immediate feedback while developing.
|
|
120
121
|
|
|
121
|
-
> [!IMPORTANT]
|
|
122
|
-
> Before submitting a PR, run `bin/bump_version` to ensure the Gem builds successfully & that everything continues to stay in sync & up-to-date.<br /><br />
|
|
123
|
-
> For very small changes & bug fixes, prefer `bin/bump_version --patch`.
|
|
124
|
-
|
|
125
122
|
## Testing
|
|
126
123
|
|
|
127
124
|
Generator specs should be added to the [spec](./spec) directory.
|
|
@@ -146,6 +143,19 @@ RSpec.describe Rolemodel::Testing::JasminePlaywrightGenerator, type: :generator
|
|
|
146
143
|
end
|
|
147
144
|
```
|
|
148
145
|
|
|
146
|
+
If the generator you're testing depends on being run after another generator, you should run that one first.
|
|
147
|
+
|
|
148
|
+
e.g.
|
|
149
|
+
|
|
150
|
+
```ruby
|
|
151
|
+
RSpec.describe Rolemodel::MyGenerator, type: :generator do
|
|
152
|
+
before do
|
|
153
|
+
run_generator_against_test_app(generator: ::Rolemodel::PrereqGenerator)
|
|
154
|
+
run_generator_against_test_app
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
```
|
|
158
|
+
|
|
149
159
|
Additional information about testing generators and the available assertions & matchers can be found at the following resources.
|
|
150
160
|
|
|
151
161
|
* [Rails Guide](https://guides.rubyonrails.org/generators.html#testing-generators)
|
|
@@ -4,7 +4,7 @@ require_relative 'vscode_helpers'
|
|
|
4
4
|
|
|
5
5
|
module Rolemodel
|
|
6
6
|
# Add standard editorconfig and any extensions to enable it
|
|
7
|
-
class EditorsGenerator <
|
|
7
|
+
class EditorsGenerator < GeneratorBase
|
|
8
8
|
include Rolemodel::VSCodeHelpers
|
|
9
9
|
|
|
10
10
|
# This is bringing in the root from this gem, so we only modify
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Rolemodel
|
|
4
|
-
class GithubGenerator <
|
|
4
|
+
class GithubGenerator < GeneratorBase
|
|
5
5
|
GITHUB_ACTIONS_REPO = 'https://github.com/RoleModel/actions.git'
|
|
6
6
|
# Files which are both used by the gem source and copied to the target app without modification
|
|
7
7
|
# are placed in the `.github` folder at the top level of this repository. This folder is then
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Rolemodel
|
|
2
2
|
module Optics
|
|
3
|
-
class BaseGenerator < Rolemodel::
|
|
3
|
+
class BaseGenerator < Rolemodel::GeneratorBase
|
|
4
4
|
source_root File.expand_path('templates', __dir__)
|
|
5
5
|
|
|
6
6
|
def add_optics_package
|
|
@@ -12,7 +12,7 @@ module Rolemodel
|
|
|
12
12
|
def copy_templates
|
|
13
13
|
say 'importing stylesheet', :green
|
|
14
14
|
|
|
15
|
-
prepend_to_file 'app/assets/stylesheets/application.
|
|
15
|
+
prepend_to_file Dir.glob('app/assets/stylesheets/application.*').first, <<~SCSS
|
|
16
16
|
@import '@rolemodel/optics/dist/css/optics';
|
|
17
17
|
SCSS
|
|
18
18
|
end
|
|
@@ -4,4 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
## What you get
|
|
6
6
|
|
|
7
|
-
Adds icon helper for handling
|
|
7
|
+
Adds icon helper for handling icon generation using the provider of your choice.
|
|
8
|
+
|
|
9
|
+
## Icon Builder Customization
|
|
10
|
+
|
|
11
|
+
Run the generator with the `-i` option to install the IconBuilders themselves in your
|
|
12
|
+
application's `lib/rolemodel/optics` directory.
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
module Rolemodel
|
|
4
4
|
module Optics
|
|
5
5
|
# Generates the icon helper and icon builders for the chosen icon library
|
|
6
|
-
class IconsGenerator < Rolemodel::
|
|
6
|
+
class IconsGenerator < Rolemodel::GeneratorBase
|
|
7
|
+
BUILDER_DIR = 'rolemodel/optics'
|
|
7
8
|
SUPPORTED_LIBRARIES = HashWithIndifferentAccess.new(
|
|
8
9
|
material: 'filled, size, weight, emphasis, additional_classes, color, hover_text',
|
|
9
10
|
phosphor: 'duotone, filled, size, weight, additional_classes, color, hover_text',
|
|
@@ -14,30 +15,34 @@ module Rolemodel
|
|
|
14
15
|
).freeze
|
|
15
16
|
|
|
16
17
|
source_root File.expand_path('templates', __dir__)
|
|
18
|
+
class_option :install_builders, aliases: '-i', type: :boolean, default: false,
|
|
19
|
+
desc: "Install IconBuilder classes for customization"
|
|
20
|
+
|
|
17
21
|
class_exclusive do
|
|
18
22
|
SUPPORTED_LIBRARIES.keys.each do |library|
|
|
19
23
|
class_option library, type: :boolean, lazy_default: false, desc: "Use #{library} icon library"
|
|
20
24
|
end
|
|
21
25
|
end
|
|
22
26
|
|
|
23
|
-
def remove_existing_icon_helper_and_builders
|
|
24
|
-
remove_dir 'app/icon_builders'
|
|
25
|
-
remove_file 'app/helpers/icon_helper.rb'
|
|
26
|
-
end
|
|
27
|
-
|
|
28
27
|
def add_view_helper
|
|
29
28
|
@chosen_library = capture_user_selection
|
|
30
29
|
@supported_properties = SUPPORTED_LIBRARIES.fetch(@chosen_library)
|
|
31
30
|
|
|
32
|
-
template 'app/
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
template 'app/helpers/icon_helper.rb', force: true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def install_builders
|
|
35
|
+
return unless options.install_builders?
|
|
36
|
+
|
|
37
|
+
source_paths << File.expand_path(BUILDER_DIR, Rolemodel::GEM_LIB)
|
|
38
|
+
copy_file 'icon_builder.rb', "lib/#{BUILDER_DIR}/icon_builder.rb", force: true
|
|
39
|
+
copy_file "#{@chosen_library}_icon_builder.rb", "lib/#{BUILDER_DIR}/#{@chosen_library}_icon_builder.rb", force: true
|
|
35
40
|
end
|
|
36
41
|
|
|
37
42
|
private
|
|
38
43
|
|
|
39
44
|
def capture_user_selection
|
|
40
|
-
options.
|
|
45
|
+
options.slice(*SUPPORTED_LIBRARIES.keys).invert[true] || ask(
|
|
41
46
|
'What icon library would you like to add?',
|
|
42
47
|
default: SUPPORTED_LIBRARIES.keys.first.to_s,
|
|
43
48
|
limited_to: SUPPORTED_LIBRARIES.keys.map(&:to_s)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'rolemodel/optics'
|
|
4
|
+
|
|
3
5
|
# Helper method that renders icons from your icon library of choice.
|
|
4
6
|
#
|
|
5
7
|
# Usage:
|
|
@@ -14,11 +16,11 @@
|
|
|
14
16
|
module IconHelper
|
|
15
17
|
# <%= @supported_properties %>
|
|
16
18
|
def icon(name, **)
|
|
17
|
-
|
|
19
|
+
Rolemodel::Optics::<%= @chosen_library.classify %>IconBuilder.new(name, **).build
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
# <%= @supported_properties %>
|
|
21
23
|
def flash_icon(type, **)
|
|
22
|
-
|
|
24
|
+
Rolemodel::Optics::<%= @chosen_library.classify %>IconBuilder.flash_icon(type, **).build
|
|
23
25
|
end
|
|
24
26
|
end
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
## What you get
|
|
6
6
|
|
|
7
7
|
* [RSpec](./rspec)
|
|
8
|
-
* [JasminePlaywright](./jasmine_playwright)
|
|
9
8
|
* [FactoryBot](./factory_bot)
|
|
10
9
|
* [TestProf](./test_prof)
|
|
11
10
|
* [ParallelTests](./parallel_tests)
|
|
11
|
+
|
|
12
|
+
Include the `--js-runner` flag (off by default) to also install the private `@rolemodel/jasmine-playwright-runner` package.
|
|
13
|
+
|
|
14
|
+
* [JasminePlaywright](./jasmine_playwright)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module Rolemodel
|
|
2
2
|
module Testing
|
|
3
|
-
class AllGenerator <
|
|
3
|
+
class AllGenerator < GeneratorBase
|
|
4
4
|
source_root File.expand_path('templates', __dir__)
|
|
5
5
|
|
|
6
|
+
class_option :js_runner, type: :boolean, default: false, desc: 'Include jasmine-playwright-runner for browser testing'
|
|
7
|
+
|
|
6
8
|
def run_all_the_generators
|
|
7
9
|
generate 'rolemodel:testing:factory_bot'
|
|
8
|
-
|
|
9
|
-
generate 'rolemodel:testing:jasmine_playwright'
|
|
10
|
-
end
|
|
10
|
+
generate 'rolemodel:testing:jasmine_playwright' if options.js_runner?
|
|
11
11
|
generate 'rolemodel:testing:parallel_tests'
|
|
12
12
|
generate 'rolemodel:testing:rspec'
|
|
13
13
|
generate 'rolemodel:testing:test_prof'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Rolemodel
|
|
4
4
|
module Testing
|
|
5
|
-
class JasminePlaywrightGenerator <
|
|
5
|
+
class JasminePlaywrightGenerator < GeneratorBase
|
|
6
6
|
include ReplaceContentHelper
|
|
7
7
|
source_root File.expand_path('templates', __dir__)
|
|
8
8
|
class_option :github_package_token, type: :string, default: ENV['GITHUB_PACKAGES_TOKEN'], desc: 'GitHub Packages token with access to @rolemodel packages'
|
|
@@ -15,7 +15,7 @@ module Rolemodel
|
|
|
15
15
|
].freeze
|
|
16
16
|
|
|
17
17
|
def fail_without_github_token
|
|
18
|
-
raise 'a --github_package_token option or GITHUB_PACKAGES_TOKEN environment variable is required' if options[:github_package_token].blank?
|
|
18
|
+
raise Thor::InvocationError, 'a --github_package_token option or GITHUB_PACKAGES_TOKEN environment variable is required' if options[:github_package_token].blank?
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def yarn_init_unless_package_json_exists
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Rolemodel
|
|
4
4
|
module Testing
|
|
5
|
-
class ParallelTestsGenerator <
|
|
5
|
+
class ParallelTestsGenerator < GeneratorBase # rubocop:disable Style/Documentation
|
|
6
6
|
source_root File.expand_path('templates', __dir__)
|
|
7
7
|
|
|
8
8
|
def install_parallel_tests
|
|
@@ -2,20 +2,27 @@
|
|
|
2
2
|
|
|
3
3
|
module Rolemodel
|
|
4
4
|
module Testing
|
|
5
|
-
class RspecGenerator <
|
|
5
|
+
class RspecGenerator < GeneratorBase
|
|
6
6
|
source_root File.expand_path('templates', __dir__)
|
|
7
7
|
|
|
8
|
+
class_option :marsh_grass, type: :boolean, default: false, desc: 'Include marsh_grass for debugging RSpec tests'
|
|
9
|
+
|
|
8
10
|
def install_rspec
|
|
11
|
+
say 'Installing RSpec-rails', :green
|
|
12
|
+
|
|
9
13
|
gem_group :development, :test do
|
|
10
14
|
gem 'rspec-rails'
|
|
11
15
|
end
|
|
12
|
-
|
|
16
|
+
|
|
17
|
+
say 'Installing capybara-playwright-driver for system tests', :green
|
|
13
18
|
|
|
14
19
|
gem_group :test do
|
|
15
20
|
gem 'capybara-playwright-driver'
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
21
|
+
|
|
22
|
+
if options.marsh_grass?
|
|
23
|
+
gem 'marsh_grass'
|
|
24
|
+
gem 'pry'
|
|
25
|
+
end
|
|
19
26
|
end
|
|
20
27
|
run_bundle
|
|
21
28
|
end
|
|
@@ -28,17 +35,10 @@ module Rolemodel
|
|
|
28
35
|
end
|
|
29
36
|
|
|
30
37
|
def add_spec_files
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
template 'support/capybara_testid.rb', 'spec/support/capybara_testid.rb'
|
|
36
|
-
template 'support/helpers/action_cable_helper.rb', 'spec/support/helpers/action_cable_helper.rb'
|
|
37
|
-
template 'support/helpers/capybara_helper.rb', 'spec/support/helpers/capybara_helper.rb'
|
|
38
|
-
template 'support/helpers/playwright_helper.rb', 'spec/support/helpers/playwright_helper.rb'
|
|
39
|
-
template 'support/helpers/select_helper.rb', 'spec/support/helpers/select_helper.rb'
|
|
40
|
-
template 'support/helpers/test_element_helper.rb', 'spec/support/helpers/test_element_helper.rb'
|
|
41
|
-
template 'support/helpers.rb', 'spec/support/helpers.rb'
|
|
38
|
+
say 'Adding Support Files', :green
|
|
39
|
+
|
|
40
|
+
directory 'spec'
|
|
41
|
+
|
|
42
42
|
append_file '.gitignore', 'spec/examples.txt'
|
|
43
43
|
end
|
|
44
44
|
end
|
data/lib/generators/rolemodel/testing/rspec/templates/{rails_helper.rb → spec/rails_helper.rb.tt}
RENAMED
|
@@ -9,6 +9,10 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ
|
|
|
9
9
|
require 'rspec/rails'
|
|
10
10
|
# Add additional requires below this line. Rails is not loaded until this point!
|
|
11
11
|
|
|
12
|
+
ActiveSupport::Inflector.inflections(:en) do |inflect|
|
|
13
|
+
inflect.acronym "MCP"
|
|
14
|
+
end
|
|
15
|
+
|
|
12
16
|
# Requires supporting ruby files with custom matchers and macros, etc, in
|
|
13
17
|
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
|
|
14
18
|
# run as spec files by default. This means that files in spec/support that end
|
data/lib/rolemodel/engine.rb
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'rails/generators'
|
|
4
|
+
require 'rails/generators/bundle_helper'
|
|
5
|
+
require_relative 'replace_content_helper'
|
|
6
|
+
|
|
7
|
+
module Rolemodel
|
|
8
|
+
class GeneratorBase < ::Rails::Generators::Base
|
|
9
|
+
include ::Rails::Generators::BundleHelper, ReplaceContentHelper
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
# based on https://github.com/rails/rails/blob/main/railties/lib/rails/generators/app_base.rb#L713
|
|
13
|
+
def run_bundle
|
|
14
|
+
bundle_command("install --quiet", "BUNDLE_IGNORE_MESSAGES" => "1")
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
# CustomIconBuilder is an IconBuilder that allows for custom SVG icons to be used in the application.
|
|
4
|
-
class CustomIconBuilder < IconBuilder
|
|
4
|
+
class Rolemodel::Optics::CustomIconBuilder < Rolemodel::Optics::IconBuilder
|
|
5
5
|
def self.flash_icons
|
|
6
6
|
{
|
|
7
7
|
notice: 'circle-check',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# FeatherIconBuilder is an IconBuilder that allows for Feather icons to be used in the application.
|
|
4
4
|
# https://feathericons.com/
|
|
5
|
-
class FeatherIconBuilder < IconBuilder
|
|
5
|
+
class Rolemodel::Optics::FeatherIconBuilder < Rolemodel::Optics::IconBuilder
|
|
6
6
|
def self.flash_icons
|
|
7
7
|
{
|
|
8
8
|
notice: 'check-circle',
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
class IconBuilder
|
|
3
|
+
class Rolemodel::Optics::IconBuilder
|
|
4
4
|
include ActionView::Helpers::TagHelper
|
|
5
5
|
|
|
6
6
|
attr_reader :name, :filled, :size, :weight, :emphasis, :duotone, :additional_classes, :color, :hover_text
|
|
7
|
+
alias title hover_text
|
|
7
8
|
|
|
8
9
|
DEFAULT_SIZE = 'medium'
|
|
9
10
|
DEFAULT_WEIGHT = 'normal'
|
|
10
11
|
DEFAULT_EMPHASIS = 'normal'
|
|
11
12
|
|
|
13
|
+
# TODO: consider Data.define a custom options object if all of these parameters are indeed necessary.
|
|
12
14
|
def initialize( # rubocop:disable Metrics/ParameterLists
|
|
13
15
|
name,
|
|
14
16
|
filled: false,
|
|
@@ -42,32 +44,21 @@ class IconBuilder
|
|
|
42
44
|
def build
|
|
43
45
|
options = {
|
|
44
46
|
class: tag_classes.compact_blank.join(' '),
|
|
45
|
-
title: hover_text
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if color.present?
|
|
47
|
+
title: hover_text,
|
|
49
48
|
# color: primary, neutral, alerts-notice, alerts-warning, alerts-danger, alerts-info
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
style: ("#{color_attribute}: var(--op-color-#{color}-base);" if color.present?)
|
|
50
|
+
}.compact_blank
|
|
52
51
|
|
|
53
|
-
tag.
|
|
52
|
+
tag.public_send(tag_method, tag_contents, **options)
|
|
54
53
|
end
|
|
55
54
|
|
|
56
55
|
private
|
|
57
56
|
|
|
58
|
-
def tag_method
|
|
59
|
-
raise NotImplementedError
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def tag_contents
|
|
63
|
-
''
|
|
64
|
-
end
|
|
65
|
-
|
|
66
57
|
def tag_classes
|
|
67
58
|
['icon', size == DEFAULT_SIZE ? '' : "icon--#{size}", additional_classes]
|
|
68
59
|
end
|
|
69
60
|
|
|
70
|
-
def color_attribute
|
|
71
|
-
|
|
72
|
-
|
|
61
|
+
def color_attribute = 'color'
|
|
62
|
+
def tag_contents = ''
|
|
63
|
+
def tag_method = :i
|
|
73
64
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# LucideIconBuilder is an IconBuilder that allows for Lucide icons to be used in the application.
|
|
4
4
|
# https://lucide.dev/icons/
|
|
5
|
-
class LucideIconBuilder < IconBuilder
|
|
5
|
+
class Rolemodel::Optics::LucideIconBuilder < Rolemodel::Optics::IconBuilder
|
|
6
6
|
def self.flash_icons
|
|
7
7
|
{
|
|
8
8
|
notice: 'circle-check',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# MaterialIconBuilder is an IconBuilder that allows for Material icons to be used in the application.
|
|
4
4
|
# https://fonts.google.com/icons
|
|
5
|
-
class MaterialIconBuilder < IconBuilder
|
|
5
|
+
class Rolemodel::Optics::MaterialIconBuilder < Rolemodel::Optics::IconBuilder
|
|
6
6
|
def self.flash_icons
|
|
7
7
|
{
|
|
8
8
|
notice: 'check_circle',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# PhosphorIconBuilder is an IconBuilder that allows for Phosphor icons to be used in the application.
|
|
4
4
|
# https://phosphoricons.com/
|
|
5
|
-
class PhosphorIconBuilder < IconBuilder
|
|
5
|
+
class Rolemodel::Optics::PhosphorIconBuilder < Rolemodel::Optics::IconBuilder
|
|
6
6
|
def self.flash_icons
|
|
7
7
|
{
|
|
8
8
|
notice: 'check-circle',
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# TablerIconBuilder is an IconBuilder that allows for Tabler icons to be used in the application.
|
|
4
4
|
# https://tablericons.com/
|
|
5
|
-
class TablerIconBuilder < IconBuilder
|
|
5
|
+
class Rolemodel::Optics::TablerIconBuilder < Rolemodel::Optics::IconBuilder
|
|
6
6
|
def self.flash_icons
|
|
7
7
|
{
|
|
8
8
|
notice: 'circle-check',
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Rolemodel::Optics
|
|
2
|
+
autoload :IconBuilder, 'rolemodel/optics/icon_builder'
|
|
3
|
+
autoload :CustomIconBuilder, 'rolemodel/optics/custom_icon_builder'
|
|
4
|
+
autoload :FeatherIconBuilder, 'rolemodel/optics/feather_icon_builder'
|
|
5
|
+
autoload :LucideIconBuilder, 'rolemodel/optics/lucide_icon_builder'
|
|
6
|
+
autoload :MaterialIconBuilder, 'rolemodel/optics/material_icon_builder'
|
|
7
|
+
autoload :PhosphorIconBuilder, 'rolemodel/optics/phosphor_icon_builder'
|
|
8
|
+
autoload :TablerIconBuilder, 'rolemodel/optics/tabler_icon_builder'
|
|
9
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'benchmark'
|
|
2
|
+
|
|
3
|
+
module Rolemodel
|
|
4
|
+
module Utility
|
|
5
|
+
module TaskTools
|
|
6
|
+
PROGRESS = %w[⠏ ⠇ ⠧ ⠦ ⠴ ⠼ ⠸ ⠹ ⠙ ⠋].cycle
|
|
7
|
+
|
|
8
|
+
# based on the migration helper of the same name
|
|
9
|
+
def say_with_time(message, &)
|
|
10
|
+
say message
|
|
11
|
+
time = Benchmark.measure(&)
|
|
12
|
+
say '%.4fs' % time.real, subitem: true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def say(message, subitem: false)
|
|
16
|
+
puts "#{subitem ? ' ->' : '--'} #{message}" # rubocop:disable Rails/Output
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Indicate the progress of a long-running process
|
|
21
|
+
#
|
|
22
|
+
# Usage (with a known total):
|
|
23
|
+
# 100.times do |i|
|
|
24
|
+
# indicate_progress(i, 100)
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# Only update every 'report_interval' iteration for eye-trackable animation speed
|
|
28
|
+
# Also displays a completion percentage if a total is provided
|
|
29
|
+
def indicate_progress(index, total = nil, report_interval: 9)
|
|
30
|
+
return unless (index % report_interval).zero?
|
|
31
|
+
|
|
32
|
+
print("#{PROGRESS.next} #{to_percent(index, total) if total}\r") # rubocop:disable Rails/Output
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def to_percent(index, total)
|
|
38
|
+
'%3.f%%' % (index / total.to_f * 100.0)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
data/lib/rolemodel/version.rb
CHANGED
data/lib/rolemodel-rails.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rolemodel-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- RoleModel Software Inc
|
|
@@ -23,6 +23,20 @@ dependencies:
|
|
|
23
23
|
- - ">"
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
25
|
version: '7.1'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: benchmark
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: bundler
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -149,7 +163,6 @@ files:
|
|
|
149
163
|
- lib/generators/rolemodel/README.md
|
|
150
164
|
- lib/generators/rolemodel/USAGE
|
|
151
165
|
- lib/generators/rolemodel/all_generator.rb
|
|
152
|
-
- lib/generators/rolemodel/base_generator.rb
|
|
153
166
|
- lib/generators/rolemodel/editors/README.md
|
|
154
167
|
- lib/generators/rolemodel/editors/USAGE
|
|
155
168
|
- lib/generators/rolemodel/editors/editors_generator.rb
|
|
@@ -219,13 +232,6 @@ files:
|
|
|
219
232
|
- lib/generators/rolemodel/optics/icons/USAGE
|
|
220
233
|
- lib/generators/rolemodel/optics/icons/icons_generator.rb
|
|
221
234
|
- lib/generators/rolemodel/optics/icons/templates/app/helpers/icon_helper.rb.tt
|
|
222
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/custom_icon_builder.rb
|
|
223
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/feather_icon_builder.rb
|
|
224
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/icon_builder.rb
|
|
225
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/lucide_icon_builder.rb
|
|
226
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/material_icon_builder.rb
|
|
227
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/phosphor_icon_builder.rb
|
|
228
|
-
- lib/generators/rolemodel/optics/icons/templates/app/icon_builders/tabler_icon_builder.rb
|
|
229
235
|
- lib/generators/rolemodel/react/README.md
|
|
230
236
|
- lib/generators/rolemodel/react/USAGE
|
|
231
237
|
- lib/generators/rolemodel/react/react_generator.rb
|
|
@@ -236,7 +242,6 @@ files:
|
|
|
236
242
|
- lib/generators/rolemodel/readme/USAGE
|
|
237
243
|
- lib/generators/rolemodel/readme/readme_generator.rb
|
|
238
244
|
- lib/generators/rolemodel/readme/templates/README.md.erb
|
|
239
|
-
- lib/generators/rolemodel/replace_content_helper.rb
|
|
240
245
|
- lib/generators/rolemodel/saas/README.md
|
|
241
246
|
- lib/generators/rolemodel/saas/USAGE
|
|
242
247
|
- lib/generators/rolemodel/saas/all_generator.rb
|
|
@@ -338,16 +343,16 @@ files:
|
|
|
338
343
|
- lib/generators/rolemodel/testing/rspec/README.md
|
|
339
344
|
- lib/generators/rolemodel/testing/rspec/USAGE
|
|
340
345
|
- lib/generators/rolemodel/testing/rspec/rspec_generator.rb
|
|
341
|
-
- lib/generators/rolemodel/testing/rspec/templates/rails_helper.rb
|
|
342
|
-
- lib/generators/rolemodel/testing/rspec/templates/spec_helper.rb
|
|
343
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/
|
|
344
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/
|
|
345
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/helpers.rb
|
|
346
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/helpers/action_cable_helper.rb
|
|
347
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/helpers/capybara_helper.rb
|
|
348
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/helpers/playwright_helper.rb
|
|
349
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/helpers/select_helper.rb
|
|
350
|
-
- lib/generators/rolemodel/testing/rspec/templates/support/helpers/test_element_helper.rb
|
|
346
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/rails_helper.rb.tt
|
|
347
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/spec_helper.rb.tt
|
|
348
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/capybara_config.rb.tt
|
|
349
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/capybara_drivers.rb.tt
|
|
350
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/helpers.rb.tt
|
|
351
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/helpers/action_cable_helper.rb
|
|
352
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/helpers/capybara_helper.rb
|
|
353
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/helpers/playwright_helper.rb
|
|
354
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/helpers/select_helper.rb
|
|
355
|
+
- lib/generators/rolemodel/testing/rspec/templates/spec/support/helpers/test_element_helper.rb
|
|
351
356
|
- lib/generators/rolemodel/testing/test_prof/README.md
|
|
352
357
|
- lib/generators/rolemodel/testing/test_prof/USAGE
|
|
353
358
|
- lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb
|
|
@@ -390,12 +395,20 @@ files:
|
|
|
390
395
|
- lib/generators/rolemodel/webpack/templates/postcss.config.cjs
|
|
391
396
|
- lib/generators/rolemodel/webpack/templates/webpack.config.js
|
|
392
397
|
- lib/generators/rolemodel/webpack/webpack_generator.rb
|
|
393
|
-
- lib/generators/templates/generator/%filename%.rb.tt
|
|
394
|
-
- lib/generators/templates/generator/README.md.tt
|
|
395
|
-
- lib/generators/templates/generator/USAGE.tt
|
|
396
|
-
- lib/generators/templates/generator_spec/%filename%_spec.rb.tt
|
|
397
398
|
- lib/rolemodel-rails.rb
|
|
398
399
|
- lib/rolemodel/engine.rb
|
|
400
|
+
- lib/rolemodel/generator_base.rb
|
|
401
|
+
- lib/rolemodel/optics.rb
|
|
402
|
+
- lib/rolemodel/optics/custom_icon_builder.rb
|
|
403
|
+
- lib/rolemodel/optics/feather_icon_builder.rb
|
|
404
|
+
- lib/rolemodel/optics/icon_builder.rb
|
|
405
|
+
- lib/rolemodel/optics/lucide_icon_builder.rb
|
|
406
|
+
- lib/rolemodel/optics/material_icon_builder.rb
|
|
407
|
+
- lib/rolemodel/optics/phosphor_icon_builder.rb
|
|
408
|
+
- lib/rolemodel/optics/tabler_icon_builder.rb
|
|
409
|
+
- lib/rolemodel/replace_content_helper.rb
|
|
410
|
+
- lib/rolemodel/utility.rb
|
|
411
|
+
- lib/rolemodel/utility/task_tools.rb
|
|
399
412
|
- lib/rolemodel/version.rb
|
|
400
413
|
homepage: https://github.com/RoleModel/rolemodel_rails
|
|
401
414
|
licenses:
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'rails/generators/base'
|
|
4
|
-
require 'rails/generators/bundle_helper'
|
|
5
|
-
require_relative 'replace_content_helper'
|
|
6
|
-
|
|
7
|
-
class Rolemodel::BaseGenerator < Rails::Generators::Base
|
|
8
|
-
include Rails::Generators::BundleHelper,
|
|
9
|
-
Rolemodel::ReplaceContentHelper
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
# based on https://github.com/rails/rails/blob/main/railties/lib/rails/generators/app_base.rb#L713
|
|
13
|
-
def run_bundle
|
|
14
|
-
bundle_command("install --quiet", "BUNDLE_IGNORE_MESSAGES" => "1")
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
module Rolemodel
|
|
2
|
-
<%= "module #{module_name}" if module_name %>
|
|
3
|
-
class <%= class_name %> < BaseGenerator
|
|
4
|
-
source_root File.expand_path('templates', __dir__)
|
|
5
|
-
|
|
6
|
-
def generate_stuff
|
|
7
|
-
say 'generating stuff', :green
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
<%= 'end' if module_name %>
|
|
11
|
-
end
|
/data/lib/generators/rolemodel/testing/rspec/templates/{spec_helper.rb → spec/spec_helper.rb.tt}
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|