sliders 0.1.2 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 92e334f7082b4b266da898f0d116abeb4aed0f62ac1e7a1103aaeb336a40a025
4
- data.tar.gz: f87cc0934a9da7fe46da857b1938f224f173d1274e10c7512eb81e43861e09b0
3
+ metadata.gz: 3b733addcf7127778b4c2133e774a5bf4353b7cfd938e220ae237cdb39c83728
4
+ data.tar.gz: 151a841d645cafd167295b08991603d5ed382f7f5ce9bc6123eb228c677fd027
5
5
  SHA512:
6
- metadata.gz: 0326d5f40aba0722bbf72da10879b04353abbc64d81d2af0ec8b975ee6a2161bd2a7ac7c8ff29430bed9cccfd04b6994bf2755fd88e3162bb5dced50cfe96bf7
7
- data.tar.gz: 60e293a699f2d1d7b30727a4a10aac8839357ed70f42d7aea9488da9ec4f58eb00190395ff0040cb94e3db8ca112facbbf352785ef748574cc5acc068669b2f7
6
+ metadata.gz: d36018593a31a9c4091ea9cf80c3049d3d7063477c8574e2e8278145c232af159858cffaf004db65fca0dc4caff33adfd03aed34704b3fb20b9ee4d111a427e3
7
+ data.tar.gz: 30290c6d3318698f30f1a6cb4b3793998c981364f33252b614b27811a466131a5729d9d61009ee3b5f8115704563a63db15e9b1573cc2e153095a468fbb9ff47
data/README.md CHANGED
@@ -70,38 +70,16 @@ This creates the `app/sliders/` folder and a module and folder for your feature.
70
70
 
71
71
  Now you can just use regular generators to create thing in `MyFeature` namespace and *sliders* will create the files in your slider folder.
72
72
 
73
- Generators that will now create files in slider folder:
74
- - controllers
75
- - scaffold
76
- - helpers
77
- - mailers
78
- - jobs
79
- - active record model
73
+ The folder *sliders* is not used for namespace, just like the folders in your slider is not used. So a file in `app/sliders/my_feature/models/admin.rb` will be for the constant `MyFeature::Admin`.
74
+
75
+ ### Fixtures
76
+ Load fixtures from slides by adding `Sliders.add_fixtures` before `module ActiveSupport` in `test_helper.rb`
80
77
 
81
78
  ## Contributing
82
- Feel free to open PR with fixes for generators for that creates files outside of sliders folder.
83
-
84
- Known generators that will not do what you expect:
85
- - view
86
- - controller
87
- - mailer
88
- - scaffold
89
- - action cable
90
- - action mailbox
91
- - tests
92
- - controller
93
- - model
94
- - scaffold
95
- - mailer
96
- - job
97
- - integration
98
- - helper
99
- - system?
100
- - fixtures (part of model tests)
101
- - components?
102
-
103
- Other things we need to fix:
104
- - loading fixtures from slider fixture foldeer
79
+ PR with fixes or improvements are most welcome.
80
+
81
+ We have tested *sliders* with most of Rails built-in generators, only a few of them have actual test cases.
82
+ PR with tests for more generators are very welcome - also generators for often used gems like eg. ViewComponent or Rspec.
105
83
 
106
84
  ## License
107
85
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,99 @@
1
+ module SlidersCopyInvoke
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ class << self
6
+ alias_method :original_invoke, :invoke
7
+ alias_method :original_run_after_generate_callback, :run_after_generate_callback
8
+ end
9
+ end
10
+ end
11
+ Rails::Generators.include SlidersCopyInvoke
12
+
13
+ module SlidersInvoke
14
+ extend ActiveSupport::Concern
15
+
16
+ class_methods do
17
+ def invoke(namespace, args = ARGV, config = {})
18
+ # warn "SLIDERS INVOKE: #{namespace} #{args} #{config}"
19
+ original_invoke(namespace, args, config)
20
+
21
+ names = namespace.to_s.split(":")
22
+ if find_by_namespace(names.pop, names.any? && names.join(":"))
23
+ sliders_cleanup if config[:behavior] == :revoke
24
+ sliders_move if config[:behavior] == :invoke
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def sliders_cleanup
31
+ loop_files(class_variable_get(:@@generated_files)) do |source_file, destination_file|
32
+ File.unlink destination_file if File.exist?(destination_file)
33
+ end
34
+ end
35
+
36
+ def sliders_move
37
+ loop_files(class_variable_get(:@@sliders_generated_files)) do |source_file, destination_file|
38
+ source_file = Rails.root.join(source_file)
39
+ FileUtils.mkdir_p(File.dirname(destination_file))
40
+ FileUtils.mv(source_file, destination_file)
41
+ end
42
+
43
+ class_variable_set(:@@sliders_generated_files, [])
44
+ end
45
+
46
+ def loop_files(source_files)
47
+ source_files.each do |source_file|
48
+ slider = Sliders.sliders.find { |slider| source_file.include? slider }
49
+ next unless slider
50
+
51
+ destination_file = file_in_slider_path(source_file, slider)
52
+ next unless destination_file
53
+
54
+ yield source_file, destination_file
55
+ end
56
+ end
57
+
58
+ def file_in_slider_path(source_file, slider)
59
+ path_parts = source_file.split("/")
60
+ return unless path_parts.include?(slider) || path_parts.include?("#{slider}.rb")
61
+ return unless path_parts.include?("app") || path_parts.include?("test")
62
+ return if path_parts.include?("sliders") && path_parts.include?("#{slider}.rb")
63
+
64
+ if path_parts.include?("#{slider}.rb")
65
+ # creating a file named like the slider should go to sliders folder
66
+ # overwriting our empty slider namespace file
67
+ return Rails.root.join("app", "sliders", path_parts.last)
68
+ end
69
+
70
+ # add sliders after app or test
71
+ path_parts.insert(path_parts.index("app") + 1, "sliders") if path_parts.include?("app")
72
+ path_parts.insert(path_parts.index("test") + 1, "sliders") if path_parts.include?("test")
73
+
74
+ # move slider namespace up or
75
+ slider_namespace_index = path_parts.index(slider)
76
+ path_parts[slider_namespace_index], path_parts[slider_namespace_index - 1] = path_parts[slider_namespace_index - 1], path_parts[slider_namespace_index]
77
+
78
+ # add slider name to filename if fixture
79
+ if path_parts.include?("fixtures") && !path_parts.last.include?("#{slider}_")
80
+ path_parts.insert(-2, slider)
81
+ end
82
+
83
+ Rails.root.join(path_parts.join("/"))
84
+ rescue StandardError => e
85
+ warn "===== Sliders Error ====="
86
+ warn "Error moving file: #{source_file} for slider: #{slider}"
87
+ warn "Error: #{e.message}"
88
+ warn "========================="
89
+ raise
90
+ end
91
+
92
+ def run_after_generate_callback
93
+ class_variable_set(:@@sliders_generated_files, [])
94
+ class_variable_set(:@@sliders_generated_files, class_variable_get(:@@generated_files)) if class_variable_defined?(:@@generated_files)
95
+ original_run_after_generate_callback
96
+ end
97
+ end
98
+ end
99
+ Rails::Generators.prepend SlidersInvoke
@@ -3,7 +3,7 @@ class SliderGenerator < Rails::Generators::NamedBase
3
3
 
4
4
  def create_slider_file
5
5
  template "module.rb", File.join("app/sliders", "#{file_name}.rb")
6
- template ".keep", File.join("app/sliders", "#{file_name}", ".keep")
7
- template ".keep", File.join("test/sliders", "#{file_name}", ".keep")
6
+ create_file File.join("app/sliders", "#{file_name}", ".keep"), ""
7
+ create_file File.join("test/sliders", "#{file_name}", ".keep"), ""
8
8
  end
9
9
  end
@@ -1,3 +1,3 @@
1
1
  module Sliders
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.4"
3
3
  end
data/lib/sliders.rb CHANGED
@@ -1,16 +1,8 @@
1
1
  require "sliders/version"
2
2
  require "sliders/engine"
3
3
  require "rails/generators"
4
- require "rails_ext/controller_generator"
5
- require "rails_ext/scaffold_controller_generator"
6
- require "rails_ext/helper_generator"
7
- require "rails_ext/job_generator"
8
- require "rails_ext/mailer_generator"
9
- require "rails_ext/active_record_model_generator"
10
4
 
11
5
  module Sliders
12
- # Your code goes here...
13
-
14
6
  def self.sliders
15
7
  @sliders ||= []
16
8
  end
@@ -26,4 +18,13 @@ module Sliders
26
18
  end
27
19
  end
28
20
  end
21
+
22
+ def self.add_fixtures
23
+ sliders.each do |slider|
24
+ slider_path = Rails.root.join("test", "sliders", slider, "fixtures")
25
+ next unless Dir.exist?(slider_path)
26
+
27
+ ActiveSupport::TestCase.fixture_paths << slider_path
28
+ end
29
+ end
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sliders
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Træls Ravn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-27 00:00:00.000000000 Z
11
+ date: 2025-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -37,16 +37,11 @@ files:
37
37
  - app/assets/config/sliders_manifest.js
38
38
  - app/controllers/concerns/fix_sliders_view_path.rb
39
39
  - config/initializers/autoloader.rb
40
+ - config/initializers/generators.rb
40
41
  - config/routes.rb
41
42
  - lib/generators/slider/USAGE
42
43
  - lib/generators/slider/slider_generator.rb
43
44
  - lib/generators/slider/templates/module.rb
44
- - lib/rails_ext/active_record_model_generator.rb
45
- - lib/rails_ext/controller_generator.rb
46
- - lib/rails_ext/helper_generator.rb
47
- - lib/rails_ext/job_generator.rb
48
- - lib/rails_ext/mailer_generator.rb
49
- - lib/rails_ext/scaffold_controller_generator.rb
50
45
  - lib/sliders.rb
51
46
  - lib/sliders/engine.rb
52
47
  - lib/sliders/version.rb
@@ -1,18 +0,0 @@
1
- require "rails/generators/active_record/model/model_generator"
2
- module SlidersActiveRecordModelGenerator
3
- extend ActiveSupport::Concern
4
-
5
- def create_model_file
6
- return super unless (class_path & Sliders.sliders).any?
7
-
8
- template "model.rb", File.join("app/sliders/", class_path[0], "models", class_path[1..], "#{file_name}.rb")
9
- end
10
-
11
- def create_module_file
12
- return super unless (class_path & Sliders.sliders).any?
13
-
14
- return if regular_class_path.empty? || regular_class_path.one?
15
- template "module.rb", File.join("app/sliders/", class_path[0], "models", "#{class_path[1..].join('/')}.rb") if behavior == :invoke
16
- end
17
- end
18
- ActiveRecord::Generators::ModelGenerator.prepend SlidersActiveRecordModelGenerator
@@ -1,11 +0,0 @@
1
- require "rails/generators/rails/controller/controller_generator"
2
- module SlidersControllerGenerator
3
- extend ActiveSupport::Concern
4
-
5
- def create_controller_files
6
- return super unless (class_path & Sliders.sliders).any?
7
-
8
- template "controller.rb", File.join("app/sliders/", class_path[0], "controllers", class_path[1..], "#{file_name}_controller.rb")
9
- end
10
- end
11
- Rails::Generators::ControllerGenerator.prepend SlidersControllerGenerator
@@ -1,11 +0,0 @@
1
- require "rails/generators/rails/helper/helper_generator"
2
- module SlidersHelperGenerator
3
- extend ActiveSupport::Concern
4
-
5
- def create_helper_files
6
- return super unless (class_path & Sliders.sliders).any?
7
-
8
- template "helper.rb", File.join("app/sliders/", class_path[0], "helpers", class_path[1..], "#{file_name}_helper.rb")
9
- end
10
- end
11
- Rails::Generators::HelperGenerator.prepend SlidersHelperGenerator
@@ -1,11 +0,0 @@
1
- require "rails/generators/job/job_generator"
2
- module SlidersJobGenerator
3
- extend ActiveSupport::Concern
4
-
5
- def create_job_file
6
- return super unless (class_path & Sliders.sliders).any?
7
-
8
- template "job.rb", File.join("app/sliders/", class_path[0], "jobs", class_path[1..], "#{file_name}_job.rb")
9
- end
10
- end
11
- Rails::Generators::JobGenerator.prepend SlidersJobGenerator
@@ -1,11 +0,0 @@
1
- require "rails/generators/mailer/mailer_generator"
2
- module SlidersMailerGenerator
3
- extend ActiveSupport::Concern
4
-
5
- def create_mailer_file
6
- return super unless (class_path & Sliders.sliders).any?
7
-
8
- template "mailer.rb", File.join("app/sliders/", class_path[0], "mailers", class_path[1..], "#{file_name}_mailer.rb")
9
- end
10
- end
11
- Rails::Generators::MailerGenerator.prepend SlidersMailerGenerator
@@ -1,12 +0,0 @@
1
- require "rails/generators/rails/scaffold_controller/scaffold_controller_generator"
2
- module SlidersScaffoldControllerGenerator
3
- extend ActiveSupport::Concern
4
-
5
- def create_controller_files
6
- return super unless (controller_class_path & Sliders.sliders).any?
7
-
8
- template_file = options.api? ? "api_controller.rb" : "controller.rb"
9
- template template_file, File.join("app/sliders/", controller_class_path[0], "controllers", controller_class_path[1..], "#{controller_file_name}_controller.rb")
10
- end
11
- end
12
- Rails::Generators::ScaffoldControllerGenerator.prepend SlidersScaffoldControllerGenerator