steel_wheel 0.6.0 → 0.7.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 (50) 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 +148 -108
  8. data/README.md +627 -224
  9. data/lib/generators/steel_wheel/application_handler/templates/handler_template.rb +4 -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 +54 -0
  25. data/lib/steel_wheel/filters.rb +36 -0
  26. data/lib/steel_wheel/handler.rb +67 -68
  27. data/lib/steel_wheel/params.rb +5 -1
  28. data/lib/steel_wheel/preconditions.rb +36 -0
  29. data/lib/steel_wheel/query/dependency_validator.rb +14 -0
  30. data/lib/steel_wheel/query/exists_validator.rb +15 -0
  31. data/lib/steel_wheel/query/verify_validator.rb +30 -0
  32. data/lib/steel_wheel/railtie.rb +50 -0
  33. data/lib/steel_wheel/shortcuts.rb +28 -0
  34. data/lib/steel_wheel/version.rb +1 -1
  35. data/lib/steel_wheel.rb +35 -6
  36. data/steel_wheel.gemspec +4 -4
  37. metadata +38 -30
  38. data/.github/workflows/ruby.yml +0 -43
  39. data/lib/generators/steel_wheel/command/USAGE +0 -8
  40. data/lib/generators/steel_wheel/command/command_generator.rb +0 -16
  41. data/lib/generators/steel_wheel/command/templates/command_template.rb +0 -5
  42. data/lib/generators/steel_wheel/params/USAGE +0 -8
  43. data/lib/generators/steel_wheel/params/params_generator.rb +0 -16
  44. data/lib/generators/steel_wheel/params/templates/params_template.rb +0 -5
  45. data/lib/generators/steel_wheel/query/USAGE +0 -8
  46. data/lib/generators/steel_wheel/query/query_generator.rb +0 -16
  47. data/lib/generators/steel_wheel/query/templates/query_template.rb +0 -5
  48. data/lib/steel_wheel/command.rb +0 -24
  49. data/lib/steel_wheel/query.rb +0 -20
  50. data/lib/steel_wheel/response.rb +0 -34
@@ -1,106 +1,105 @@
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
+
18
+ attr_reader :input, :form_input
19
+ attr_accessor :http_status, :helpers
20
+
21
+ unless defined?(ActiveModel::Error)
22
+ def self.generic_validation_keys(*keys)
23
+ include SteelWheel::SkipActiveModelErrorsKeys[*keys]
24
+ end
8
25
 
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
26
+ generic_validation_keys(:not_found, :forbidden, :unprocessable_entity, :bad_request, :unauthorized)
16
27
  end
17
28
 
18
- def self.define(flow: :main, &block)
19
- builders[flow].subclass(&block)
29
+ def initialize(params = {})
30
+ @http_status = :ok
31
+ prepare_params(params)
20
32
  end
21
33
 
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)
34
+ class << self
35
+ def handle(input = {}, &block)
36
+ new(input).handle(&block)
36
37
  end
37
38
 
38
- def validate(object)
39
- return if object.valid?
39
+ def name
40
+ to_s.match?(/Class/) ? 'SteelWheel::Handler' : to_s
41
+ end
40
42
 
41
- self.http_status ||= object.http_status
42
- errors.merge!(object.errors) if errors.empty?
43
+ def inherited(subclass)
44
+ super
45
+ subclass.url_params(url_params_definition)
46
+ subclass.form(form_definition)
43
47
  end
44
48
  end
45
49
 
46
- def initialize(&callbacks)
47
- @user_defined_callbacks = callbacks
50
+ def call
51
+ raise SteelWheel::ActionNotImplementedError, 'Subclass must implement #call'
48
52
  end
49
53
 
50
- def on_params_created(params)
51
- # NOOP
52
- end
53
-
54
- def on_query_created(query)
55
- # NOOP
56
- end
54
+ def handle(&block)
55
+ yield(self) if block
56
+ validate_preconditions
57
+ return self unless success?
57
58
 
58
- def on_command_created(command)
59
- # NOOP
59
+ on_validation_success
60
+ errors.empty? ? success_callback : failure_self
61
+ self
60
62
  end
61
63
 
62
- def on_response_created(response)
64
+ def on_validation_success
63
65
  # NOOP
64
66
  end
65
67
 
66
- def on_failure(flow)
67
- # NOOP
68
+ def success?
69
+ http_status == :ok
68
70
  end
69
71
 
70
- def on_success(flow)
71
- # NOOP
72
- end
72
+ def status
73
+ return :ok if errors.empty?
74
+ return errors.keys.first unless defined?(ActiveModel::Error)
73
75
 
74
- def self.base_class_for(factory, flow: :main)
75
- builders[flow].abstract_factory.factories[factory].base_class
76
+ errors.map(&:type).first
76
77
  end
77
78
 
78
- def self.handle(input:, flow: :main, &block)
79
- new.handle(input: input, flow: flow, &block)
80
- end
79
+ private
81
80
 
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
81
+ def current_action
82
+ ActiveSupport::StringInquirer.new(url_params.action)
88
83
  end
89
84
 
90
- private
91
-
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
85
+ def prepare_params(params)
86
+ normalized_params = normalize_params(params)
87
+ @form_scope = self.class.form_definition.scope
88
+ @validate_form = false
89
+ if @form_scope
90
+ @form_input = normalized_params.delete(@form_scope)
91
+ @validate_form = @form_input.present?
92
+ else
93
+ @form_input = normalized_params
94
+ end
95
+ @input = normalized_params
96
96
  end
97
97
 
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) }
98
+ def normalize_params(params)
99
+ if params.is_a?(Hash)
100
+ params.deep_symbolize_keys
101
+ elsif params.is_a?(ActionController::Parameters)
102
+ params.to_unsafe_h.deep_symbolize_keys
104
103
  end
105
104
  end
106
105
  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 = form.with_params(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,50 @@
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.helpers = view_context
17
+ instance_exec(handler_instance, &block)
18
+ failure_callbacks(handler_instance)
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ module InstanceMethods # rubocop:disable Style/Documentation
25
+ def handler_class_for(handler)
26
+ different_namespace = handler.to_s.split('/').size > 1
27
+ return "#{handler.to_s.camelize}Handler".constantize if different_namespace
28
+
29
+ "#{[params[:controller], handler].compact.join('/')}_handler".classify.constantize
30
+ end
31
+
32
+ def failure_callbacks(handler)
33
+ handler.failure(:not_found) do
34
+ render file: Rails.root.join('public', '404.html').to_s, status: handler.http_status
35
+ end
36
+ end
37
+ end
38
+ end
39
+ # Rails integration for SteelWheel handlers
40
+ if defined?(Rails)
41
+ class Railtie < Rails::Railtie # rubocop:disable Style/Documentation
42
+ initializer 'steel_wheel.helpers' do
43
+ ActiveSupport.on_load(:action_controller) do
44
+ ActionController::Base.include RailsHelpers if defined?(ActionController::Base)
45
+ ActionController::API.include RailsHelpers if defined?(ActionController::API)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ 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.0'
4
+ VERSION = '0.7.0'
5
5
  end
data/lib/steel_wheel.rb CHANGED
@@ -1,19 +1,48 @@
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'
9
7
  require 'steel_wheel/skip_active_model_errors_keys'
10
8
  require 'steel_wheel/params'
11
- require 'steel_wheel/query'
12
- require 'steel_wheel/command'
13
- require 'steel_wheel/response'
9
+ require 'steel_wheel/filters'
10
+ require 'steel_wheel/preconditions'
11
+ require 'steel_wheel/callbacks'
12
+ require 'steel_wheel/components'
13
+ require 'steel_wheel/shortcuts'
14
14
  require 'steel_wheel/handler'
15
+ require 'steel_wheel/railtie'
15
16
  require 'steel_wheel/version'
16
17
 
17
18
  module SteelWheel
18
19
  class Error < StandardError; end
20
+ class ActionNotImplementedError < Error; end
21
+
22
+ class FilterNotImplementedError < Error # rubocop:disable Style/Documentation
23
+ def initialize(filter_name)
24
+ super(<<~HEREDOC)
25
+ Filter #{filter_name} is not implemented
26
+
27
+ Example:
28
+ filter :#{filter_name} do |scope, value|
29
+ scope.where(#{filter_name}: value)
30
+ end
31
+
32
+ HEREDOC
33
+ end
34
+ end
35
+
36
+ class FormAttributesNotImplementedError < Error # rubocop:disable Style/Documentation
37
+ def initialize
38
+ super(<<~HEREDOC)
39
+ Subclass must implement form_attributes which returns a hash of attributes for the form
40
+
41
+ Example:
42
+ def form_attributes
43
+ { model: model }
44
+ end
45
+ HEREDOC
46
+ end
47
+ end
19
48
  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.2'
46
+ spec.add_dependency 'easy_params', '~> 0.7'
46
47
  spec.add_dependency 'memery', '~> 1'
47
- spec.add_dependency 'nina', '~> 0.1.2'
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.0
4
+ version: 0.7.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-07-28 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.2'
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.2'
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.7'
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.7'
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.2
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.2
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,33 @@ 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/filters.rb
115
121
  - lib/steel_wheel/handler.rb
116
122
  - lib/steel_wheel/params.rb
117
- - lib/steel_wheel/query.rb
118
- - lib/steel_wheel/response.rb
123
+ - lib/steel_wheel/preconditions.rb
124
+ - lib/steel_wheel/query/dependency_validator.rb
125
+ - lib/steel_wheel/query/exists_validator.rb
126
+ - lib/steel_wheel/query/verify_validator.rb
127
+ - lib/steel_wheel/railtie.rb
128
+ - lib/steel_wheel/shortcuts.rb
119
129
  - lib/steel_wheel/skip_active_model_errors_keys.rb
120
130
  - lib/steel_wheel/version.rb
121
131
  - steel_wheel.gemspec
@@ -126,7 +136,6 @@ metadata:
126
136
  allowed_push_host: https://rubygems.org
127
137
  homepage_uri: https://github.com/andriy-baran/steel_wheel
128
138
  source_code_uri: https://github.com/andriy-baran/steel_wheel
129
- post_install_message:
130
139
  rdoc_options: []
131
140
  require_paths:
132
141
  - lib
@@ -141,8 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
150
  - !ruby/object:Gem::Version
142
151
  version: '0'
143
152
  requirements: []
144
- rubygems_version: 3.2.22
145
- signing_key:
153
+ rubygems_version: 3.7.1
146
154
  specification_version: 4
147
155
  summary: Adds operations to your rails code
148
156
  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