rolemodel-rails 1.1.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -7
  3. data/lib/generators/rolemodel/all_generator.rb +0 -1
  4. data/lib/generators/rolemodel/optics/icons/README.md +6 -1
  5. data/lib/generators/rolemodel/optics/icons/icons_generator.rb +14 -9
  6. data/lib/generators/rolemodel/optics/icons/templates/app/helpers/icon_helper.rb.tt +4 -2
  7. data/lib/generators/rolemodel/testing/README.md +4 -1
  8. data/lib/generators/rolemodel/testing/all_generator.rb +3 -3
  9. data/lib/generators/rolemodel/testing/jasmine_playwright/jasmine_playwright_generator.rb +1 -1
  10. data/lib/generators/rolemodel/testing/rspec/README.md +1 -1
  11. data/lib/generators/rolemodel/testing/rspec/USAGE +1 -1
  12. data/lib/generators/rolemodel/testing/rspec/rspec_generator.rb +15 -14
  13. data/lib/generators/rolemodel/testing/rspec/templates/spec/support/capybara_config.rb.tt +9 -0
  14. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/custom_icon_builder.rb +1 -1
  15. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/feather_icon_builder.rb +1 -1
  16. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/icon_builder.rb +10 -19
  17. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/lucide_icon_builder.rb +1 -1
  18. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/material_icon_builder.rb +1 -1
  19. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/phosphor_icon_builder.rb +1 -1
  20. data/lib/{generators/rolemodel/optics/icons/templates/app/icon_builders → rolemodel/optics}/tabler_icon_builder.rb +1 -1
  21. data/lib/rolemodel/optics.rb +9 -0
  22. data/lib/rolemodel/utility/task_tools.rb +42 -0
  23. data/lib/rolemodel/utility.rb +3 -0
  24. data/lib/rolemodel/version.rb +1 -1
  25. data/lib/rolemodel-rails.rb +2 -0
  26. metadata +35 -42
  27. data/lib/generators/rolemodel/mcp/README.md +0 -13
  28. data/lib/generators/rolemodel/mcp/USAGE +0 -8
  29. data/lib/generators/rolemodel/mcp/mcp_generator.rb +0 -110
  30. data/lib/generators/rolemodel/mcp/templates/app/assets/stylesheets/components/doorkeeper.css +0 -140
  31. data/lib/generators/rolemodel/mcp/templates/app/controllers/doorkeeper/base_controller.rb +0 -7
  32. data/lib/generators/rolemodel/mcp/templates/app/controllers/mcp_controller.rb.tt +0 -91
  33. data/lib/generators/rolemodel/mcp/templates/app/controllers/oauth_registrations_controller.rb +0 -46
  34. data/lib/generators/rolemodel/mcp/templates/app/controllers/well_known_controller.rb +0 -39
  35. data/lib/generators/rolemodel/mcp/templates/app/mcp/prompts/sample.rb +0 -36
  36. data/lib/generators/rolemodel/mcp/templates/app/mcp/resources/controller.rb +0 -57
  37. data/lib/generators/rolemodel/mcp/templates/app/mcp/resources/docs/SAMPLE_DOC.md +0 -4
  38. data/lib/generators/rolemodel/mcp/templates/app/mcp/resources/docs_controller.rb +0 -46
  39. data/lib/generators/rolemodel/mcp/templates/app/mcp/tools/sample.rb +0 -42
  40. data/lib/generators/rolemodel/mcp/templates/app/views/doorkeeper/authorizations/error.html.slim.tt +0 -13
  41. data/lib/generators/rolemodel/mcp/templates/app/views/doorkeeper/authorizations/new.html.slim.tt +0 -41
  42. data/lib/generators/rolemodel/mcp/templates/app/views/layouts/doorkeeper.html.slim +0 -7
  43. data/lib/generators/rolemodel/mcp/templates/config/initializers/doorkeeper.rb +0 -537
  44. data/lib/generators/rolemodel/mcp/templates/spec/mcp/prompts/sample_spec.rb +0 -15
  45. data/lib/generators/rolemodel/mcp/templates/spec/mcp/resources/controller_spec.rb +0 -16
  46. data/lib/generators/rolemodel/mcp/templates/spec/mcp/resources/docs_controller_spec.rb +0 -55
  47. data/lib/generators/rolemodel/mcp/templates/spec/mcp/tools/sample_spec.rb +0 -15
  48. data/lib/generators/rolemodel/mcp/templates/spec/requests/mcp_controller_spec.rb +0 -84
  49. data/lib/generators/rolemodel/mcp/templates/spec/requests/oauth_registrations_controller_spec.rb +0 -62
  50. data/lib/generators/rolemodel/mcp/templates/spec/requests/well_known_controller_spec.rb +0 -30
  51. data/lib/generators/rolemodel/testing/rspec/templates/support/capybara_testid.rb +0 -5
  52. /data/lib/generators/rolemodel/testing/rspec/templates/{rails_helper.rb → spec/rails_helper.rb.tt} +0 -0
  53. /data/lib/generators/rolemodel/testing/rspec/templates/{spec_helper.rb → spec/spec_helper.rb.tt} +0 -0
  54. /data/lib/generators/rolemodel/testing/rspec/templates/{support/capybara_drivers.rb → spec/support/capybara_drivers.rb.tt} +0 -0
  55. /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/action_cable_helper.rb +0 -0
  56. /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/capybara_helper.rb +0 -0
  57. /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/playwright_helper.rb +0 -0
  58. /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/select_helper.rb +0 -0
  59. /data/lib/generators/rolemodel/testing/rspec/templates/{support → spec/support}/helpers/test_element_helper.rb +0 -0
  60. /data/lib/generators/rolemodel/testing/rspec/templates/{support/helpers.rb → spec/support/helpers.rb.tt} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d3e11cf41b7d9e5afb68a8eaca61a30785b10dcb9032fc327a52f40ea8271a2e
4
- data.tar.gz: 4b4388ba6e3b2608135be47000bc9ba655b32bd4936e096d2e3ba8cafe4904c3
3
+ metadata.gz: 2cbd3c1b81aa62c00354cd5faa3cc5bea47c48c2ede2c86470b391372751db9c
4
+ data.tar.gz: c9bd14d2787122907369daaf9bfa26b63d0cc882449247ae5da26af15de9586f
5
5
  SHA512:
6
- metadata.gz: 173f38c6b5f5f0101a143aaf8a5301afd7a69295d68e1c8eb54a5bd2cf06b57254f658e312a19a3a2605f6920ddab05f6f8941a0797ce7400e83c2e3ff13ac38
7
- data.tar.gz: 77b6be040efd20cd738c14c44c92c57ac84241a75685cc157bfa86ddc3b6b7b6675eec3b2ad8a3b8c6dfb83c7e568aca7420746b6b81ef7d1172d6392c490c47
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,12 +28,15 @@ rails db:create
28
28
  Add this line to your application's Gemfile:
29
29
 
30
30
  ```ruby
31
- gem 'rolemodel-rails', group: :development
31
+ gem 'rolemodel-rails'
32
32
  ```
33
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
+
34
37
  And then execute:
35
38
 
36
- $ bundle
39
+ $ bundle install
37
40
 
38
41
  ## Usage
39
42
 
@@ -116,10 +119,6 @@ bin/new_generator testing/fantasitic_specs 'A Fantastic Testing Framework'
116
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,
117
120
  so you can navigate into one of them and run your generator for immediate feedback while developing.
118
121
 
119
- > [!IMPORTANT]
120
- > 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 />
121
- > For very small changes & bug fixes, prefer `bin/bump_version --patch`.
122
-
123
122
  ## Testing
124
123
 
125
124
  Generator specs should be added to the [spec](./spec) directory.
@@ -24,7 +24,6 @@ module Rolemodel
24
24
  generate 'rolemodel:editors'
25
25
  # generate 'rolemodel:tailored_select' # Not production ready
26
26
  generate 'rolemodel:lograge'
27
- generate 'rolemodel:mcp'
28
27
  end
29
28
  end
30
29
  end
@@ -4,4 +4,9 @@
4
4
 
5
5
  ## What you get
6
6
 
7
- Adds icon helper for handling material icons and custom icons
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.
@@ -4,6 +4,7 @@ module Rolemodel
4
4
  module Optics
5
5
  # Generates the icon helper and icon builders for the chosen icon library
6
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/icon_builders/icon_builder.rb'
33
- template "app/icon_builders/#{@chosen_library}_icon_builder.rb"
34
- template 'app/helpers/icon_helper.rb'
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.except(*%i[skip_namespace skip_collision_check]).invert[true] || ask(
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
- <%= @chosen_library.classify %>IconBuilder.new(name, **).build
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
- <%= @chosen_library.classify %>IconBuilder.flash_icon(type, **).build
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)
@@ -3,11 +3,11 @@ module Rolemodel
3
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
- if yes?('Would you like to add jasmine-playwright-runner for browser testing?')
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'
@@ -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
@@ -29,7 +29,7 @@ it 'saves the form data', :js do
29
29
  end
30
30
  ```
31
31
 
32
- #### Chrome - visible browser
32
+ #### Chrome - visible browser (For debugging only - do not commit headful system specs)
33
33
 
34
34
  ```rb
35
35
  it 'saves the form data', :chrome do
@@ -8,7 +8,7 @@ Example:
8
8
  spec/rails_helper.rb
9
9
  spec/spec_helper.rb
10
10
  spec/support/capybara_drivers.rb
11
- spec/support/capybara_testid.rb
11
+ spec/support/capybara_config.rb
12
12
  spec/support/helpers.rb
13
13
  spec/support/webpacker.rb
14
14
  .rspec
@@ -5,16 +5,24 @@ module Rolemodel
5
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
- run_bundle
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
- gem 'marsh_grass'
17
- gem 'pry'
21
+
22
+ if options.marsh_grass?
23
+ gem 'marsh_grass'
24
+ gem 'pry'
25
+ end
18
26
  end
19
27
  run_bundle
20
28
  end
@@ -27,17 +35,10 @@ module Rolemodel
27
35
  end
28
36
 
29
37
  def add_spec_files
30
- template 'rails_helper.rb', 'spec/rails_helper.rb'
31
- template 'spec_helper.rb', 'spec/spec_helper.rb'
32
- template '.rspec', '.rspec'
33
- template 'support/capybara_drivers.rb', 'spec/support/capybara_drivers.rb'
34
- template 'support/capybara_testid.rb', 'spec/support/capybara_testid.rb'
35
- template 'support/helpers/action_cable_helper.rb', 'spec/support/helpers/action_cable_helper.rb'
36
- template 'support/helpers/capybara_helper.rb', 'spec/support/helpers/capybara_helper.rb'
37
- template 'support/helpers/playwright_helper.rb', 'spec/support/helpers/playwright_helper.rb'
38
- template 'support/helpers/select_helper.rb', 'spec/support/helpers/select_helper.rb'
39
- template 'support/helpers/test_element_helper.rb', 'spec/support/helpers/test_element_helper.rb'
40
- template 'support/helpers.rb', 'spec/support/helpers.rb'
38
+ say 'Adding Support Files', :green
39
+
40
+ directory 'spec'
41
+
41
42
  append_file '.gitignore', 'spec/examples.txt'
42
43
  end
43
44
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ Capybara.configure do |config|
4
+ config.test_id = 'data-testid'
5
+ config.default_normalize_ws = true
6
+ config.save_path = './tmp/screenshots'
7
+ config.automatic_label_click = true
8
+ config.threadsafe = true
9
+ 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
- options[:style] = "#{color_attribute}: var(--op-color-#{color}-base);"
51
- end
49
+ style: ("#{color_attribute}: var(--op-color-#{color}-base);" if color.present?)
50
+ }.compact_blank
52
51
 
53
- tag.send(tag_method, tag_contents, **options)
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
- 'color'
72
- end
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
@@ -0,0 +1,3 @@
1
+ module Rolemodel::Utility
2
+ autoload :TaskTools, 'rolemodel/utility/task_tools'
3
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rolemodel
4
- VERSION = '1.1.0'
4
+ VERSION = '2.0.1'
5
5
  end
@@ -3,6 +3,8 @@
3
3
  module Rolemodel
4
4
  NODE_VERSION = '24.12.0'
5
5
  RUBY_VERSION = '4.0.1'
6
+
7
+ GEM_LIB = File.expand_path(__dir__)
6
8
  end
7
9
 
8
10
  require 'rolemodel/version'
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: 1.1.0
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
@@ -208,30 +222,6 @@ files:
208
222
  - lib/generators/rolemodel/mailers/templates/config/initializers/premailer_rails.rb
209
223
  - lib/generators/rolemodel/mailers/templates/public/logo.png
210
224
  - lib/generators/rolemodel/mailers/templates/spec/mailers/previews/example_mailer_preview.rb
211
- - lib/generators/rolemodel/mcp/README.md
212
- - lib/generators/rolemodel/mcp/USAGE
213
- - lib/generators/rolemodel/mcp/mcp_generator.rb
214
- - lib/generators/rolemodel/mcp/templates/app/assets/stylesheets/components/doorkeeper.css
215
- - lib/generators/rolemodel/mcp/templates/app/controllers/doorkeeper/base_controller.rb
216
- - lib/generators/rolemodel/mcp/templates/app/controllers/mcp_controller.rb.tt
217
- - lib/generators/rolemodel/mcp/templates/app/controllers/oauth_registrations_controller.rb
218
- - lib/generators/rolemodel/mcp/templates/app/controllers/well_known_controller.rb
219
- - lib/generators/rolemodel/mcp/templates/app/mcp/prompts/sample.rb
220
- - lib/generators/rolemodel/mcp/templates/app/mcp/resources/controller.rb
221
- - lib/generators/rolemodel/mcp/templates/app/mcp/resources/docs/SAMPLE_DOC.md
222
- - lib/generators/rolemodel/mcp/templates/app/mcp/resources/docs_controller.rb
223
- - lib/generators/rolemodel/mcp/templates/app/mcp/tools/sample.rb
224
- - lib/generators/rolemodel/mcp/templates/app/views/doorkeeper/authorizations/error.html.slim.tt
225
- - lib/generators/rolemodel/mcp/templates/app/views/doorkeeper/authorizations/new.html.slim.tt
226
- - lib/generators/rolemodel/mcp/templates/app/views/layouts/doorkeeper.html.slim
227
- - lib/generators/rolemodel/mcp/templates/config/initializers/doorkeeper.rb
228
- - lib/generators/rolemodel/mcp/templates/spec/mcp/prompts/sample_spec.rb
229
- - lib/generators/rolemodel/mcp/templates/spec/mcp/resources/controller_spec.rb
230
- - lib/generators/rolemodel/mcp/templates/spec/mcp/resources/docs_controller_spec.rb
231
- - lib/generators/rolemodel/mcp/templates/spec/mcp/tools/sample_spec.rb
232
- - lib/generators/rolemodel/mcp/templates/spec/requests/mcp_controller_spec.rb
233
- - lib/generators/rolemodel/mcp/templates/spec/requests/oauth_registrations_controller_spec.rb
234
- - lib/generators/rolemodel/mcp/templates/spec/requests/well_known_controller_spec.rb
235
225
  - lib/generators/rolemodel/optics/README.md
236
226
  - lib/generators/rolemodel/optics/USAGE
237
227
  - lib/generators/rolemodel/optics/all_generator.rb
@@ -242,13 +232,6 @@ files:
242
232
  - lib/generators/rolemodel/optics/icons/USAGE
243
233
  - lib/generators/rolemodel/optics/icons/icons_generator.rb
244
234
  - lib/generators/rolemodel/optics/icons/templates/app/helpers/icon_helper.rb.tt
245
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/custom_icon_builder.rb
246
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/feather_icon_builder.rb
247
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/icon_builder.rb
248
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/lucide_icon_builder.rb
249
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/material_icon_builder.rb
250
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/phosphor_icon_builder.rb
251
- - lib/generators/rolemodel/optics/icons/templates/app/icon_builders/tabler_icon_builder.rb
252
235
  - lib/generators/rolemodel/react/README.md
253
236
  - lib/generators/rolemodel/react/USAGE
254
237
  - lib/generators/rolemodel/react/react_generator.rb
@@ -360,16 +343,16 @@ files:
360
343
  - lib/generators/rolemodel/testing/rspec/README.md
361
344
  - lib/generators/rolemodel/testing/rspec/USAGE
362
345
  - lib/generators/rolemodel/testing/rspec/rspec_generator.rb
363
- - lib/generators/rolemodel/testing/rspec/templates/rails_helper.rb
364
- - lib/generators/rolemodel/testing/rspec/templates/spec_helper.rb
365
- - lib/generators/rolemodel/testing/rspec/templates/support/capybara_drivers.rb
366
- - lib/generators/rolemodel/testing/rspec/templates/support/capybara_testid.rb
367
- - lib/generators/rolemodel/testing/rspec/templates/support/helpers.rb
368
- - lib/generators/rolemodel/testing/rspec/templates/support/helpers/action_cable_helper.rb
369
- - lib/generators/rolemodel/testing/rspec/templates/support/helpers/capybara_helper.rb
370
- - lib/generators/rolemodel/testing/rspec/templates/support/helpers/playwright_helper.rb
371
- - lib/generators/rolemodel/testing/rspec/templates/support/helpers/select_helper.rb
372
- - 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
373
356
  - lib/generators/rolemodel/testing/test_prof/README.md
374
357
  - lib/generators/rolemodel/testing/test_prof/USAGE
375
358
  - lib/generators/rolemodel/testing/test_prof/test_prof_generator.rb
@@ -415,7 +398,17 @@ files:
415
398
  - lib/rolemodel-rails.rb
416
399
  - lib/rolemodel/engine.rb
417
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
418
409
  - lib/rolemodel/replace_content_helper.rb
410
+ - lib/rolemodel/utility.rb
411
+ - lib/rolemodel/utility/task_tools.rb
419
412
  - lib/rolemodel/version.rb
420
413
  homepage: https://github.com/RoleModel/rolemodel_rails
421
414
  licenses:
@@ -1,13 +0,0 @@
1
- # MCP Generator
2
-
3
- Install boilerplate for your very own MCP server.
4
-
5
- ## What you get
6
-
7
- ### Doorkeeper
8
-
9
- OAuth 2.1-enabled flow with dynamic application registration.
10
-
11
- ### MCP
12
-
13
- A basic MCP controller that you can build on to serve tools, resources, and prompts.
@@ -1,8 +0,0 @@
1
- Description:
2
- Sets up RoleModel MCP support and any required application wiring for the MCP endpoint.
3
-
4
- Example:
5
- rails generate rolemodel:mcp
6
-
7
- This generator adds the files and route updates needed to enable RoleModel MCP
8
- in your Rails application.