steel_wheel 0.6.1 → 0.8.0

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +39 -0
  3. data/.qlty/.gitignore +7 -0
  4. data/.qlty/qlty.toml +82 -0
  5. data/.ruby-version +1 -1
  6. data/Gemfile +2 -1
  7. data/Gemfile.lock +145 -109
  8. data/README.md +627 -224
  9. data/lib/generators/steel_wheel/application_handler/templates/handler_template.rb +5 -0
  10. data/lib/generators/steel_wheel/form/USAGE +8 -0
  11. data/lib/generators/steel_wheel/form/form_generator.rb +16 -0
  12. data/lib/generators/steel_wheel/form/templates/form_template.rb +3 -0
  13. data/lib/generators/steel_wheel/handler/templates/handler_template.rb +5 -16
  14. data/lib/generators/steel_wheel/scaffold_controller/USAGE +14 -0
  15. data/lib/generators/steel_wheel/scaffold_controller/scaffold_controller_generator.rb +100 -0
  16. data/lib/generators/steel_wheel/scaffold_controller/templates/controller.rb +65 -0
  17. data/lib/generators/steel_wheel/scaffold_controller/templates/create.rb +23 -0
  18. data/lib/generators/steel_wheel/scaffold_controller/templates/form.tt +12 -0
  19. data/lib/generators/steel_wheel/scaffold_controller/templates/index.rb +17 -0
  20. data/lib/generators/steel_wheel/scaffold_controller/templates/model_form.rb +32 -0
  21. data/lib/generators/steel_wheel/scaffold_controller/templates/search_form.rb +31 -0
  22. data/lib/generators/steel_wheel/scaffold_controller/templates/update.rb +31 -0
  23. data/lib/steel_wheel/callbacks.rb +34 -0
  24. data/lib/steel_wheel/components.rb +72 -0
  25. data/lib/steel_wheel/composition.rb +47 -0
  26. data/lib/steel_wheel/filters.rb +36 -0
  27. data/lib/steel_wheel/handler.rb +67 -67
  28. data/lib/steel_wheel/params.rb +5 -1
  29. data/lib/steel_wheel/preconditions.rb +36 -0
  30. data/lib/steel_wheel/query/dependency_validator.rb +14 -0
  31. data/lib/steel_wheel/query/exists_validator.rb +15 -0
  32. data/lib/steel_wheel/query/verify_validator.rb +30 -0
  33. data/lib/steel_wheel/railtie.rb +51 -0
  34. data/lib/steel_wheel/shortcuts.rb +28 -0
  35. data/lib/steel_wheel/version.rb +1 -1
  36. data/lib/steel_wheel.rb +36 -6
  37. data/steel_wheel.gemspec +4 -4
  38. metadata +39 -30
  39. data/.github/workflows/ruby.yml +0 -43
  40. data/lib/generators/steel_wheel/command/USAGE +0 -8
  41. data/lib/generators/steel_wheel/command/command_generator.rb +0 -16
  42. data/lib/generators/steel_wheel/command/templates/command_template.rb +0 -5
  43. data/lib/generators/steel_wheel/params/USAGE +0 -8
  44. data/lib/generators/steel_wheel/params/params_generator.rb +0 -16
  45. data/lib/generators/steel_wheel/params/templates/params_template.rb +0 -5
  46. data/lib/generators/steel_wheel/query/USAGE +0 -8
  47. data/lib/generators/steel_wheel/query/query_generator.rb +0 -16
  48. data/lib/generators/steel_wheel/query/templates/query_template.rb +0 -5
  49. data/lib/steel_wheel/command.rb +0 -24
  50. data/lib/steel_wheel/query.rb +0 -20
  51. data/lib/steel_wheel/response.rb +0 -34
@@ -1,106 +1,106 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'steel_wheel/query/dependency_validator'
4
+ require 'steel_wheel/query/verify_validator'
5
+ require 'steel_wheel/query/exists_validator'
6
+
3
7
  module SteelWheel
4
8
  # Base class that defines main flow
5
9
  class Handler
6
- include Nina
10
+ include Memery
7
11
  include ActiveModel::Validations
12
+ include SteelWheel::Filters
13
+ include SteelWheel::Components
14
+ include SteelWheel::Shortcuts
15
+ include SteelWheel::Callbacks
16
+ include SteelWheel::Preconditions
17
+ include SteelWheel::Composition
18
+
19
+ attr_reader :input, :form_input
20
+ attr_accessor :http_status, :helpers
21
+
22
+ unless defined?(ActiveModel::Error)
23
+ def self.generic_validation_keys(*keys)
24
+ include SteelWheel::SkipActiveModelErrorsKeys[*keys]
25
+ end
8
26
 
9
- attr_reader :user_defined_callbacks
10
-
11
- builder :main do
12
- factory :params, produces: SteelWheel::Params
13
- factory :query, produces: SteelWheel::Query
14
- factory :command, produces: SteelWheel::Command
15
- factory :response, produces: SteelWheel::Response
27
+ generic_validation_keys(:not_found, :forbidden, :unprocessable_entity, :bad_request, :unauthorized)
16
28
  end
17
29
 
18
- def self.define(flow: :main, &block)
19
- builders[flow].subclass(&block)
30
+ def initialize(params = {})
31
+ @http_status = :ok
32
+ prepare_params(params)
20
33
  end
21
34
 
22
- # Runs validation on objects
23
- class Validator
24
- include ActiveModel::Validations
25
- attr_accessor :http_status
26
-
27
- def self.run(flow)
28
- validator = new
29
- [flow.params, flow.query, flow.command].each do |obj|
30
- break if validator.errors.any?
31
-
32
- validator.validate(obj)
33
- end
34
- flow.status = validator.http_status || :ok
35
- flow.errors.merge!(validator.errors)
35
+ class << self
36
+ def handle(input = {}, &block)
37
+ new(input).handle(&block)
36
38
  end
37
39
 
38
- def validate(object)
39
- return if object.valid?
40
-
41
- self.http_status ||= object.http_status
42
- errors.merge!(object.errors) if errors.empty?
40
+ def name
41
+ to_s.match?(/Class/) ? 'SteelWheel::Handler' : to_s
43
42
  end
44
- end
45
-
46
- def initialize(&callbacks)
47
- @user_defined_callbacks = callbacks
48
- end
49
43
 
50
- def on_params_created(params)
51
- # NOOP
44
+ def inherited(subclass)
45
+ super
46
+ subclass.url_params(url_params_definition)
47
+ subclass.form(form_definition)
48
+ end
52
49
  end
53
50
 
54
- def on_query_created(query)
55
- # NOOP
51
+ def call
52
+ raise SteelWheel::ActionNotImplementedError, 'Subclass must implement #call'
56
53
  end
57
54
 
58
- def on_command_created(command)
59
- # NOOP
60
- end
55
+ def handle(&block)
56
+ yield(self) if block
57
+ validate_preconditions
58
+ return self unless success?
61
59
 
62
- def on_response_created(response)
63
- # NOOP
60
+ on_validation_success
61
+ errors.empty? ? success_callback : failure_self
62
+ self
64
63
  end
65
64
 
66
- def on_failure(flow)
65
+ def on_validation_success
67
66
  # NOOP
68
67
  end
69
68
 
70
- def on_success(flow)
71
- # NOOP
69
+ def success?
70
+ http_status == :ok
72
71
  end
73
72
 
74
- def self.base_class_for(factory, flow: :main)
75
- builders[flow].abstract_factory.factories[factory].instance_variable_get(:@base_class)
76
- end
73
+ def status
74
+ return :ok if errors.empty?
75
+ return errors.keys.first unless defined?(ActiveModel::Error)
77
76
 
78
- def self.handle(input:, flow: :main, &block)
79
- new.handle(input: input, flow: flow, &block)
77
+ errors.map(&:type).first
80
78
  end
81
79
 
82
- def handle(input:, flow: :main, &block)
83
- object = configure_builder(flow).wrap(delegate: true) { |i| i.params(input) }
84
- yield(object) if block
85
- Validator.run(object)
86
- object.success? ? on_success(object) : on_failure(object)
87
- object
80
+ def current_action
81
+ ActiveSupport::StringInquirer.new(url_params.action)
88
82
  end
89
83
 
90
84
  private
91
85
 
92
- def configure_builder(flow)
93
- builder = self.class.builders[flow].with_callbacks(&required_callbacks)
94
- builder = builder.with_callbacks(&user_defined_callbacks) if user_defined_callbacks
95
- builder
86
+ def prepare_params(params)
87
+ normalized_params = normalize_params(params)
88
+ @form_scope = self.class.form_definition.scope
89
+ @validate_form = false
90
+ if @form_scope
91
+ @form_input = normalized_params.delete(@form_scope)
92
+ @validate_form = @form_input.present?
93
+ else
94
+ @form_input = normalized_params.except(*self.class.url_params_definition.schema.keys)
95
+ end
96
+ @input = normalized_params
96
97
  end
97
98
 
98
- def required_callbacks
99
- lambda do |c|
100
- c.params { |o| on_params_created(o) }
101
- c.query { |o| on_query_created(o) }
102
- c.command { |o| on_command_created(o) }
103
- c.response { |o| on_response_created(o) }
99
+ def normalize_params(params)
100
+ if params.is_a?(Hash)
101
+ params.deep_symbolize_keys
102
+ elsif params.is_a?(ActionController::Parameters)
103
+ params.to_unsafe_h.deep_symbolize_keys
104
104
  end
105
105
  end
106
106
  end
@@ -3,7 +3,11 @@
3
3
  module SteelWheel
4
4
  # Base class for params
5
5
  class Params < EasyParams::Base
6
- def http_status
6
+ def self.name
7
+ 'SteelWheel::Params'
8
+ end
9
+
10
+ def status
7
11
  return :ok if errors.empty?
8
12
 
9
13
  :bad_request
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SteelWheel
4
+ # Provides precondition validation functionality for handlers
5
+ module Preconditions
6
+ private
7
+
8
+ def validate_preconditions
9
+ if url_params.invalid?
10
+ failure_params
11
+ elsif @validate_form && form_params.invalid?
12
+ failure_form
13
+ elsif invalid?
14
+ failure_self
15
+ end
16
+ end
17
+
18
+ def failure_params
19
+ self.http_status = url_params.status
20
+ errors.merge!(url_params.errors)
21
+ failure_callback
22
+ end
23
+
24
+ def failure_form
25
+ self.http_status = :unprocessable_entity
26
+ @form = create_form_from_form_params
27
+ failure_callback
28
+ end
29
+
30
+ def failure_self
31
+ self.http_status = status
32
+ errors.delete(@form_scope) if @form_scope
33
+ failure_callback
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SteelWheel
4
+ class Query
5
+ # Presence validation for dependencies
6
+ class DependencyValidator < ActiveModel::EachValidator
7
+ def validate_each(record, attribute, value)
8
+ return if value
9
+
10
+ record.errors.add :base, :not_found, message: options.fetch(:message, "#{attribute.to_s.humanize} is missing")
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SteelWheel
4
+ class Query
5
+ # Presence validation for loaders
6
+ class ExistsValidator < ActiveModel::EachValidator
7
+ def validate_each(record, attribute, value)
8
+ return unless value.blank?
9
+
10
+ error_key = options[:base] ? :base : attribute
11
+ record.errors.add(error_key, :not_found, message: options.fetch(:message, 'not found'))
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SteelWheel
4
+ class Query
5
+ # Verify validation for objects
6
+ class VerifyValidator < ActiveModel::EachValidator
7
+ def validate_each(record, attribute, value)
8
+ return if value.nil? || value.valid?
9
+
10
+ value.errors.each { |error| add_error_to_record(record, attribute, error) }
11
+ end
12
+
13
+ private
14
+
15
+ def add_error_to_record(record, attribute, error)
16
+ error_key = options[:base] ? :base : attribute
17
+ message = build_error_message(error)
18
+ record.errors.add(error_key, :unprocessable_entity, message: message)
19
+ end
20
+
21
+ def build_error_message(error)
22
+ if options[:message]
23
+ options.fetch(:message).fetch(error.attribute.to_sym, "#{error.attribute} #{error.message}")
24
+ else
25
+ "#{error.attribute} #{error.message}"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SteelWheel # rubocop:disable Style/Documentation
4
+ # Rails integration for SteelWheel handlers
5
+ module RailsHelpers
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ base.include(InstanceMethods)
9
+ end
10
+
11
+ module ClassMethods # rubocop:disable Style/Documentation
12
+ def action(action_name, handler: action_name, &block)
13
+ define_method(action_name) do
14
+ handler_klass = handler_class_for(handler)
15
+ handler_klass.handle(params) do |handler_instance|
16
+ handler_instance.owner = self
17
+ handler_instance.helpers = view_context
18
+ instance_exec(handler_instance, &block)
19
+ failure_callbacks(handler_instance)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ module InstanceMethods # rubocop:disable Style/Documentation
26
+ def handler_class_for(handler)
27
+ different_namespace = handler.to_s.split('/').size > 1
28
+ return "#{handler.to_s.camelize}Handler".constantize if different_namespace
29
+
30
+ "#{[params[:controller], handler].compact.join('/')}_handler".classify.constantize
31
+ end
32
+
33
+ def failure_callbacks(handler)
34
+ handler.failure(:not_found) do
35
+ render file: Rails.root.join('public', '404.html').to_s, status: handler.http_status
36
+ end
37
+ end
38
+ end
39
+ end
40
+ # Rails integration for SteelWheel handlers
41
+ if defined?(Rails)
42
+ class Railtie < Rails::Railtie # rubocop:disable Style/Documentation
43
+ initializer 'steel_wheel.helpers' do
44
+ ActiveSupport.on_load(:action_controller) do
45
+ ActionController::Base.include RailsHelpers if defined?(ActionController::Base)
46
+ ActionController::API.include RailsHelpers if defined?(ActionController::API)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SteelWheel
4
+ # Provides shortcuts methods for handlers
5
+ module Shortcuts
6
+ def self.included(base)
7
+ base.extend(self)
8
+ end
9
+
10
+ def depends_on(*attrs, validate_provided: true)
11
+ attr_accessor(*attrs)
12
+
13
+ validates(*attrs, 'steel_wheel/query/dependency': validate_provided)
14
+ end
15
+
16
+ def verify(*attrs, valid: true)
17
+ validates(*attrs, 'steel_wheel/query/verify': valid)
18
+ end
19
+
20
+ def finder(name, scope, validate_existence: false)
21
+ define_method(name) do
22
+ instance_exec(&scope)
23
+ end
24
+ memoize name
25
+ validates name, 'steel_wheel/query/exists': validate_existence
26
+ end
27
+ end
28
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SteelWheel
4
- VERSION = '0.6.1'
4
+ VERSION = '0.8.0'
5
5
  end
data/lib/steel_wheel.rb CHANGED
@@ -1,19 +1,49 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'ostruct'
4
3
  require 'easy_params'
5
- require 'nina'
6
- require 'json'
7
4
  require 'active_model'
8
5
  require 'memery'
6
+ require 'action_form'
7
+ require 'steel_wheel/composition'
9
8
  require 'steel_wheel/skip_active_model_errors_keys'
10
9
  require 'steel_wheel/params'
11
- require 'steel_wheel/query'
12
- require 'steel_wheel/command'
13
- require 'steel_wheel/response'
10
+ require 'steel_wheel/filters'
11
+ require 'steel_wheel/preconditions'
12
+ require 'steel_wheel/callbacks'
13
+ require 'steel_wheel/components'
14
+ require 'steel_wheel/shortcuts'
14
15
  require 'steel_wheel/handler'
16
+ require 'steel_wheel/railtie'
15
17
  require 'steel_wheel/version'
16
18
 
17
19
  module SteelWheel
18
20
  class Error < StandardError; end
21
+ class ActionNotImplementedError < Error; end
22
+
23
+ class FilterNotImplementedError < Error # rubocop:disable Style/Documentation
24
+ def initialize(filter_name)
25
+ super(<<~HEREDOC)
26
+ Filter #{filter_name} is not implemented
27
+
28
+ Example:
29
+ filter :#{filter_name} do |scope, value|
30
+ scope.where(#{filter_name}: value)
31
+ end
32
+
33
+ HEREDOC
34
+ end
35
+ end
36
+
37
+ class FormAttributesNotImplementedError < Error # rubocop:disable Style/Documentation
38
+ def initialize
39
+ super(<<~HEREDOC)
40
+ Subclass must implement form_attributes which returns a hash of attributes for the form
41
+
42
+ Example:
43
+ def form_attributes
44
+ { model: model }
45
+ end
46
+ HEREDOC
47
+ end
48
+ end
19
49
  end
data/steel_wheel.gemspec CHANGED
@@ -38,11 +38,11 @@ Gem::Specification.new do |spec|
38
38
  spec.require_paths = ['lib']
39
39
  spec.required_ruby_version = '>= 2.6'
40
40
 
41
- version_string = ['>= 3.2', '< 8']
41
+ version_string = ['>= 3.2', '< 9']
42
42
 
43
- spec.add_runtime_dependency 'railties', version_string
43
+ spec.add_dependency 'railties', version_string
44
44
 
45
- spec.add_dependency 'easy_params', '~> 0.3'
45
+ spec.add_dependency 'action_form', '~> 0.6.6'
46
+ spec.add_dependency 'easy_params', '~> 0.9.1'
46
47
  spec.add_dependency 'memery', '~> 1'
47
- spec.add_dependency 'nina', '~> 0.1.3'
48
48
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steel_wheel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrii Baran
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-09-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: railties
@@ -19,7 +18,7 @@ dependencies:
19
18
  version: '3.2'
20
19
  - - "<"
21
20
  - !ruby/object:Gem::Version
22
- version: '8'
21
+ version: '9'
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,49 +28,49 @@ dependencies:
29
28
  version: '3.2'
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
- version: '8'
31
+ version: '9'
33
32
  - !ruby/object:Gem::Dependency
34
- name: easy_params
33
+ name: action_form
35
34
  requirement: !ruby/object:Gem::Requirement
36
35
  requirements:
37
36
  - - "~>"
38
37
  - !ruby/object:Gem::Version
39
- version: '0.3'
38
+ version: 0.6.6
40
39
  type: :runtime
41
40
  prerelease: false
42
41
  version_requirements: !ruby/object:Gem::Requirement
43
42
  requirements:
44
43
  - - "~>"
45
44
  - !ruby/object:Gem::Version
46
- version: '0.3'
45
+ version: 0.6.6
47
46
  - !ruby/object:Gem::Dependency
48
- name: memery
47
+ name: easy_params
49
48
  requirement: !ruby/object:Gem::Requirement
50
49
  requirements:
51
50
  - - "~>"
52
51
  - !ruby/object:Gem::Version
53
- version: '1'
52
+ version: 0.9.1
54
53
  type: :runtime
55
54
  prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - "~>"
59
58
  - !ruby/object:Gem::Version
60
- version: '1'
59
+ version: 0.9.1
61
60
  - !ruby/object:Gem::Dependency
62
- name: nina
61
+ name: memery
63
62
  requirement: !ruby/object:Gem::Requirement
64
63
  requirements:
65
64
  - - "~>"
66
65
  - !ruby/object:Gem::Version
67
- version: 0.1.3
66
+ version: '1'
68
67
  type: :runtime
69
68
  prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - "~>"
73
72
  - !ruby/object:Gem::Version
74
- version: 0.1.3
73
+ version: '1'
75
74
  description: Tiny DSL for code in controllers
76
75
  email:
77
76
  - andriy.baran.v@gmail.com
@@ -80,8 +79,10 @@ extensions: []
80
79
  extra_rdoc_files: []
81
80
  files:
82
81
  - ".codeclimate.yml"
83
- - ".github/workflows/ruby.yml"
82
+ - ".github/workflows/main.yml"
84
83
  - ".gitignore"
84
+ - ".qlty/.gitignore"
85
+ - ".qlty/qlty.toml"
85
86
  - ".rspec"
86
87
  - ".rubocop.yml"
87
88
  - ".ruby-version"
@@ -98,24 +99,34 @@ files:
98
99
  - lib/generators/steel_wheel/application_handler/USAGE
99
100
  - lib/generators/steel_wheel/application_handler/application_handler_generator.rb
100
101
  - lib/generators/steel_wheel/application_handler/templates/handler_template.rb
101
- - lib/generators/steel_wheel/command/USAGE
102
- - lib/generators/steel_wheel/command/command_generator.rb
103
- - lib/generators/steel_wheel/command/templates/command_template.rb
102
+ - lib/generators/steel_wheel/form/USAGE
103
+ - lib/generators/steel_wheel/form/form_generator.rb
104
+ - lib/generators/steel_wheel/form/templates/form_template.rb
104
105
  - lib/generators/steel_wheel/handler/USAGE
105
106
  - lib/generators/steel_wheel/handler/handler_generator.rb
106
107
  - lib/generators/steel_wheel/handler/templates/handler_template.rb
107
- - lib/generators/steel_wheel/params/USAGE
108
- - lib/generators/steel_wheel/params/params_generator.rb
109
- - lib/generators/steel_wheel/params/templates/params_template.rb
110
- - lib/generators/steel_wheel/query/USAGE
111
- - lib/generators/steel_wheel/query/query_generator.rb
112
- - lib/generators/steel_wheel/query/templates/query_template.rb
108
+ - lib/generators/steel_wheel/scaffold_controller/USAGE
109
+ - lib/generators/steel_wheel/scaffold_controller/scaffold_controller_generator.rb
110
+ - lib/generators/steel_wheel/scaffold_controller/templates/controller.rb
111
+ - lib/generators/steel_wheel/scaffold_controller/templates/create.rb
112
+ - lib/generators/steel_wheel/scaffold_controller/templates/form.tt
113
+ - lib/generators/steel_wheel/scaffold_controller/templates/index.rb
114
+ - lib/generators/steel_wheel/scaffold_controller/templates/model_form.rb
115
+ - lib/generators/steel_wheel/scaffold_controller/templates/search_form.rb
116
+ - lib/generators/steel_wheel/scaffold_controller/templates/update.rb
113
117
  - lib/steel_wheel.rb
114
- - lib/steel_wheel/command.rb
118
+ - lib/steel_wheel/callbacks.rb
119
+ - lib/steel_wheel/components.rb
120
+ - lib/steel_wheel/composition.rb
121
+ - lib/steel_wheel/filters.rb
115
122
  - lib/steel_wheel/handler.rb
116
123
  - lib/steel_wheel/params.rb
117
- - lib/steel_wheel/query.rb
118
- - lib/steel_wheel/response.rb
124
+ - lib/steel_wheel/preconditions.rb
125
+ - lib/steel_wheel/query/dependency_validator.rb
126
+ - lib/steel_wheel/query/exists_validator.rb
127
+ - lib/steel_wheel/query/verify_validator.rb
128
+ - lib/steel_wheel/railtie.rb
129
+ - lib/steel_wheel/shortcuts.rb
119
130
  - lib/steel_wheel/skip_active_model_errors_keys.rb
120
131
  - lib/steel_wheel/version.rb
121
132
  - steel_wheel.gemspec
@@ -126,7 +137,6 @@ metadata:
126
137
  allowed_push_host: https://rubygems.org
127
138
  homepage_uri: https://github.com/andriy-baran/steel_wheel
128
139
  source_code_uri: https://github.com/andriy-baran/steel_wheel
129
- post_install_message:
130
140
  rdoc_options: []
131
141
  require_paths:
132
142
  - lib
@@ -141,8 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
151
  - !ruby/object:Gem::Version
142
152
  version: '0'
143
153
  requirements: []
144
- rubygems_version: 3.2.22
145
- signing_key:
154
+ rubygems_version: 3.7.1
146
155
  specification_version: 4
147
156
  summary: Adds operations to your rails code
148
157
  test_files: []
@@ -1,43 +0,0 @@
1
- name: Ruby
2
-
3
- on:
4
- push:
5
- branches:
6
- - master
7
-
8
- pull_request:
9
-
10
- jobs:
11
- build:
12
- runs-on: ubuntu-latest
13
- name: Ruby ${{ matrix.ruby }}
14
- strategy:
15
- matrix:
16
- ruby:
17
- - '3.1.3'
18
-
19
- steps:
20
- - uses: actions/checkout@v2
21
- - name: Set up Ruby
22
- uses: ruby/setup-ruby@v1
23
- with:
24
- ruby-version: 3.0.0
25
- - name: Install dependencies
26
- run: |
27
- gem install bundler -v 2.2.3
28
- bundle install
29
- - name: Setup Code Climate test-reporter
30
- run: |
31
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
32
- chmod +x ./cc-test-reporter
33
- ./cc-test-reporter before-build
34
- - name: Run the default task
35
- env:
36
- CC_TEST_REPORTER_ID: 4bb114295e4e80ad0f42b2f30b7611f0459c1cbdc7a74a0fe6fa437a543796d9
37
- run: bundle exec rake
38
- - name: Publish code coverage
39
- run: |
40
- export GIT_BRANCH="master"
41
- pwd
42
- ls -l coverage
43
- ./cc-test-reporter after-build -d -t simplecov -r 4bb114295e4e80ad0f42b2f30b7611f0459c1cbdc7a74a0fe6fa437a543796d9
@@ -1,8 +0,0 @@
1
- Description:
2
- Generates commands files
3
-
4
- Example:
5
- rails generate steel_wheel:command Thing
6
-
7
- This will create:
8
- app/commands/thing_command.rb
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SteelWheel
4
- class CommandGenerator < Rails::Generators::NamedBase
5
- source_root File.expand_path('templates', __dir__)
6
-
7
- def copy_files
8
- if behavior == :revoke
9
- template 'command_template.rb', "app/handlers/#{file_path}_handler/command.rb"
10
- elsif behavior == :invoke
11
- empty_directory Pathname.new('app/commands').join(*class_path)
12
- template 'command_template.rb', "app/handlers/#{file_path}_handler/command.rb"
13
- end
14
- end
15
- end
16
- end