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.
- checksums.yaml +4 -4
- data/.github/workflows/main.yml +39 -0
- data/.qlty/.gitignore +7 -0
- data/.qlty/qlty.toml +82 -0
- data/.ruby-version +1 -1
- data/Gemfile +2 -1
- data/Gemfile.lock +148 -108
- data/README.md +627 -224
- data/lib/generators/steel_wheel/application_handler/templates/handler_template.rb +4 -0
- data/lib/generators/steel_wheel/form/USAGE +8 -0
- data/lib/generators/steel_wheel/form/form_generator.rb +16 -0
- data/lib/generators/steel_wheel/form/templates/form_template.rb +3 -0
- data/lib/generators/steel_wheel/handler/templates/handler_template.rb +5 -16
- data/lib/generators/steel_wheel/scaffold_controller/USAGE +14 -0
- data/lib/generators/steel_wheel/scaffold_controller/scaffold_controller_generator.rb +100 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/controller.rb +65 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/create.rb +23 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/form.tt +12 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/index.rb +17 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/model_form.rb +32 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/search_form.rb +31 -0
- data/lib/generators/steel_wheel/scaffold_controller/templates/update.rb +31 -0
- data/lib/steel_wheel/callbacks.rb +34 -0
- data/lib/steel_wheel/components.rb +54 -0
- data/lib/steel_wheel/filters.rb +36 -0
- data/lib/steel_wheel/handler.rb +67 -68
- data/lib/steel_wheel/params.rb +5 -1
- data/lib/steel_wheel/preconditions.rb +36 -0
- data/lib/steel_wheel/query/dependency_validator.rb +14 -0
- data/lib/steel_wheel/query/exists_validator.rb +15 -0
- data/lib/steel_wheel/query/verify_validator.rb +30 -0
- data/lib/steel_wheel/railtie.rb +50 -0
- data/lib/steel_wheel/shortcuts.rb +28 -0
- data/lib/steel_wheel/version.rb +1 -1
- data/lib/steel_wheel.rb +35 -6
- data/steel_wheel.gemspec +4 -4
- metadata +38 -30
- data/.github/workflows/ruby.yml +0 -43
- data/lib/generators/steel_wheel/command/USAGE +0 -8
- data/lib/generators/steel_wheel/command/command_generator.rb +0 -16
- data/lib/generators/steel_wheel/command/templates/command_template.rb +0 -5
- data/lib/generators/steel_wheel/params/USAGE +0 -8
- data/lib/generators/steel_wheel/params/params_generator.rb +0 -16
- data/lib/generators/steel_wheel/params/templates/params_template.rb +0 -5
- data/lib/generators/steel_wheel/query/USAGE +0 -8
- data/lib/generators/steel_wheel/query/query_generator.rb +0 -16
- data/lib/generators/steel_wheel/query/templates/query_template.rb +0 -5
- data/lib/steel_wheel/command.rb +0 -24
- data/lib/steel_wheel/query.rb +0 -20
- data/lib/steel_wheel/response.rb +0 -34
data/lib/steel_wheel/handler.rb
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
|
19
|
-
|
|
29
|
+
def initialize(params = {})
|
|
30
|
+
@http_status = :ok
|
|
31
|
+
prepare_params(params)
|
|
20
32
|
end
|
|
21
33
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
39
|
-
|
|
39
|
+
def name
|
|
40
|
+
to_s.match?(/Class/) ? 'SteelWheel::Handler' : to_s
|
|
41
|
+
end
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
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
|
|
47
|
-
|
|
50
|
+
def call
|
|
51
|
+
raise SteelWheel::ActionNotImplementedError, 'Subclass must implement #call'
|
|
48
52
|
end
|
|
49
53
|
|
|
50
|
-
def
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
59
|
-
|
|
59
|
+
on_validation_success
|
|
60
|
+
errors.empty? ? success_callback : failure_self
|
|
61
|
+
self
|
|
60
62
|
end
|
|
61
63
|
|
|
62
|
-
def
|
|
64
|
+
def on_validation_success
|
|
63
65
|
# NOOP
|
|
64
66
|
end
|
|
65
67
|
|
|
66
|
-
def
|
|
67
|
-
|
|
68
|
+
def success?
|
|
69
|
+
http_status == :ok
|
|
68
70
|
end
|
|
69
71
|
|
|
70
|
-
def
|
|
71
|
-
|
|
72
|
-
|
|
72
|
+
def status
|
|
73
|
+
return :ok if errors.empty?
|
|
74
|
+
return errors.keys.first unless defined?(ActiveModel::Error)
|
|
73
75
|
|
|
74
|
-
|
|
75
|
-
builders[flow].abstract_factory.factories[factory].base_class
|
|
76
|
+
errors.map(&:type).first
|
|
76
77
|
end
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
new.handle(input: input, flow: flow, &block)
|
|
80
|
-
end
|
|
79
|
+
private
|
|
81
80
|
|
|
82
|
-
def
|
|
83
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
data/lib/steel_wheel/params.rb
CHANGED
|
@@ -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
|
data/lib/steel_wheel/version.rb
CHANGED
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/
|
|
12
|
-
require 'steel_wheel/
|
|
13
|
-
require 'steel_wheel/
|
|
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', '<
|
|
41
|
+
version_string = ['>= 3.2', '< 9']
|
|
42
42
|
|
|
43
|
-
spec.
|
|
43
|
+
spec.add_dependency 'railties', version_string
|
|
44
44
|
|
|
45
|
-
spec.add_dependency '
|
|
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.
|
|
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:
|
|
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: '
|
|
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: '
|
|
31
|
+
version: '9'
|
|
33
32
|
- !ruby/object:Gem::Dependency
|
|
34
|
-
name:
|
|
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.
|
|
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.
|
|
45
|
+
version: '0.2'
|
|
47
46
|
- !ruby/object:Gem::Dependency
|
|
48
|
-
name:
|
|
47
|
+
name: easy_params
|
|
49
48
|
requirement: !ruby/object:Gem::Requirement
|
|
50
49
|
requirements:
|
|
51
50
|
- - "~>"
|
|
52
51
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
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: '
|
|
59
|
+
version: '0.7'
|
|
61
60
|
- !ruby/object:Gem::Dependency
|
|
62
|
-
name:
|
|
61
|
+
name: memery
|
|
63
62
|
requirement: !ruby/object:Gem::Requirement
|
|
64
63
|
requirements:
|
|
65
64
|
- - "~>"
|
|
66
65
|
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
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:
|
|
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/
|
|
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/
|
|
102
|
-
- lib/generators/steel_wheel/
|
|
103
|
-
- lib/generators/steel_wheel/
|
|
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/
|
|
108
|
-
- lib/generators/steel_wheel/
|
|
109
|
-
- lib/generators/steel_wheel/
|
|
110
|
-
- lib/generators/steel_wheel/
|
|
111
|
-
- lib/generators/steel_wheel/
|
|
112
|
-
- lib/generators/steel_wheel/
|
|
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/
|
|
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/
|
|
118
|
-
- lib/steel_wheel/
|
|
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.
|
|
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: []
|
data/.github/workflows/ruby.yml
DELETED
|
@@ -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,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
|