light-services 2.2.1 → 3.1.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/config/rubocop_linter_action.yml +4 -4
- data/.github/workflows/ci.yml +12 -12
- data/.gitignore +1 -0
- data/.rubocop.yml +83 -7
- data/CHANGELOG.md +38 -0
- data/CLAUDE.md +139 -0
- data/Gemfile +16 -11
- data/Gemfile.lock +53 -27
- data/README.md +84 -21
- data/docs/arguments.md +290 -0
- data/docs/best-practices.md +153 -0
- data/docs/callbacks.md +476 -0
- data/docs/concepts.md +80 -0
- data/docs/configuration.md +204 -0
- data/docs/context.md +128 -0
- data/docs/crud.md +525 -0
- data/docs/errors.md +280 -0
- data/docs/generators.md +250 -0
- data/docs/outputs.md +158 -0
- data/docs/pundit-authorization.md +320 -0
- data/docs/quickstart.md +134 -0
- data/docs/readme.md +101 -0
- data/docs/recipes.md +14 -0
- data/docs/rubocop.md +285 -0
- data/docs/ruby-lsp.md +133 -0
- data/docs/service-rendering.md +222 -0
- data/docs/steps.md +391 -0
- data/docs/summary.md +21 -0
- data/docs/testing.md +549 -0
- data/lib/generators/light_services/install/USAGE +15 -0
- data/lib/generators/light_services/install/install_generator.rb +41 -0
- data/lib/generators/light_services/install/templates/application_service.rb.tt +8 -0
- data/lib/generators/light_services/install/templates/application_service_spec.rb.tt +7 -0
- data/lib/generators/light_services/install/templates/initializer.rb.tt +30 -0
- data/lib/generators/light_services/service/USAGE +21 -0
- data/lib/generators/light_services/service/service_generator.rb +68 -0
- data/lib/generators/light_services/service/templates/service.rb.tt +48 -0
- data/lib/generators/light_services/service/templates/service_spec.rb.tt +40 -0
- data/lib/light/services/base.rb +134 -122
- data/lib/light/services/base_with_context.rb +23 -1
- data/lib/light/services/callbacks.rb +157 -0
- data/lib/light/services/collection.rb +145 -0
- data/lib/light/services/concerns/execution.rb +79 -0
- data/lib/light/services/concerns/parent_service.rb +34 -0
- data/lib/light/services/concerns/state_management.rb +30 -0
- data/lib/light/services/config.rb +82 -16
- data/lib/light/services/constants.rb +100 -0
- data/lib/light/services/dsl/arguments_dsl.rb +85 -0
- data/lib/light/services/dsl/outputs_dsl.rb +81 -0
- data/lib/light/services/dsl/steps_dsl.rb +205 -0
- data/lib/light/services/dsl/validation.rb +162 -0
- data/lib/light/services/exceptions.rb +25 -2
- data/lib/light/services/message.rb +28 -3
- data/lib/light/services/messages.rb +92 -32
- data/lib/light/services/rspec/matchers/define_argument.rb +174 -0
- data/lib/light/services/rspec/matchers/define_output.rb +147 -0
- data/lib/light/services/rspec/matchers/define_step.rb +225 -0
- data/lib/light/services/rspec/matchers/execute_step.rb +230 -0
- data/lib/light/services/rspec/matchers/have_error_on.rb +148 -0
- data/lib/light/services/rspec/matchers/have_warning_on.rb +148 -0
- data/lib/light/services/rspec/matchers/trigger_callback.rb +138 -0
- data/lib/light/services/rspec.rb +15 -0
- data/lib/light/services/rubocop/cop/light_services/argument_type_required.rb +52 -0
- data/lib/light/services/rubocop/cop/light_services/condition_method_exists.rb +173 -0
- data/lib/light/services/rubocop/cop/light_services/deprecated_methods.rb +113 -0
- data/lib/light/services/rubocop/cop/light_services/dsl_order.rb +176 -0
- data/lib/light/services/rubocop/cop/light_services/missing_private_keyword.rb +102 -0
- data/lib/light/services/rubocop/cop/light_services/no_direct_instantiation.rb +66 -0
- data/lib/light/services/rubocop/cop/light_services/output_type_required.rb +52 -0
- data/lib/light/services/rubocop/cop/light_services/step_method_exists.rb +109 -0
- data/lib/light/services/rubocop.rb +12 -0
- data/lib/light/services/settings/field.rb +114 -0
- data/lib/light/services/settings/step.rb +53 -20
- data/lib/light/services/utils.rb +38 -0
- data/lib/light/services/version.rb +1 -1
- data/lib/light/services.rb +2 -0
- data/lib/ruby_lsp/light_services/addon.rb +36 -0
- data/lib/ruby_lsp/light_services/definition.rb +132 -0
- data/lib/ruby_lsp/light_services/indexing_enhancement.rb +263 -0
- data/light-services.gemspec +6 -8
- metadata +68 -26
- data/lib/light/services/class_based_collection/base.rb +0 -86
- data/lib/light/services/class_based_collection/mount.rb +0 -33
- data/lib/light/services/collection/arguments.rb +0 -34
- data/lib/light/services/collection/base.rb +0 -59
- data/lib/light/services/collection/outputs.rb +0 -16
- data/lib/light/services/settings/argument.rb +0 -68
- data/lib/light/services/settings/output.rb +0 -34
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# This class defines settings for argument
|
|
4
|
-
module Light
|
|
5
|
-
module Services
|
|
6
|
-
module Settings
|
|
7
|
-
class Argument
|
|
8
|
-
# Getters
|
|
9
|
-
attr_reader :name, :default_exists, :default, :context, :optional, :arg_types_cache
|
|
10
|
-
|
|
11
|
-
def initialize(name, service_class, opts = {})
|
|
12
|
-
@name = name
|
|
13
|
-
@service_class = service_class
|
|
14
|
-
|
|
15
|
-
@type = opts.delete(:type)
|
|
16
|
-
@context = opts.delete(:context)
|
|
17
|
-
@default_exists = opts.key?(:default)
|
|
18
|
-
@default = opts.delete(:default)
|
|
19
|
-
@optional = opts.delete(:optional)
|
|
20
|
-
|
|
21
|
-
@arg_types_cache = {}
|
|
22
|
-
|
|
23
|
-
define_methods
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def validate_type!(value)
|
|
27
|
-
return if !@type || [*@type].any? do |type|
|
|
28
|
-
case type
|
|
29
|
-
when :boolean
|
|
30
|
-
value.is_a?(TrueClass) || value.is_a?(FalseClass)
|
|
31
|
-
when Symbol
|
|
32
|
-
arg_type(value) == type
|
|
33
|
-
else
|
|
34
|
-
value.is_a?(type)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
raise Light::Services::ArgTypeError, "#{@service_class} argument `#{name}` must be " \
|
|
39
|
-
"a #{[*@type].join(', ')} (currently: #{value.class})"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def arg_type(value)
|
|
45
|
-
klass = value.class
|
|
46
|
-
|
|
47
|
-
@arg_types_cache[klass] ||= klass
|
|
48
|
-
.name
|
|
49
|
-
.gsub("::", "/")
|
|
50
|
-
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
|
51
|
-
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
52
|
-
.tr("-", "_")
|
|
53
|
-
.downcase
|
|
54
|
-
.to_sym
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def define_methods
|
|
58
|
-
name = @name
|
|
59
|
-
|
|
60
|
-
@service_class.define_method(@name) { @arguments.get(name) }
|
|
61
|
-
@service_class.define_method(:"#{@name}?") { !!@arguments.get(name) }
|
|
62
|
-
@service_class.define_method(:"#{@name}=") { |value| @arguments.set(name, value) }
|
|
63
|
-
@service_class.send(:private, "#{@name}=")
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# This class defines settings for output
|
|
4
|
-
module Light
|
|
5
|
-
module Services
|
|
6
|
-
module Settings
|
|
7
|
-
class Output
|
|
8
|
-
# Getters
|
|
9
|
-
attr_reader :name, :default_exists, :default
|
|
10
|
-
|
|
11
|
-
def initialize(name, service_class, opts = {})
|
|
12
|
-
@name = name
|
|
13
|
-
@service_class = service_class
|
|
14
|
-
|
|
15
|
-
@default_exists = opts.key?(:default)
|
|
16
|
-
@default = opts.delete(:default)
|
|
17
|
-
|
|
18
|
-
define_methods
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
private
|
|
22
|
-
|
|
23
|
-
def define_methods
|
|
24
|
-
name = @name
|
|
25
|
-
|
|
26
|
-
@service_class.define_method(@name) { @outputs.get(name) }
|
|
27
|
-
@service_class.define_method(:"#{@name}?") { !!@outputs.get(name) }
|
|
28
|
-
@service_class.define_method(:"#{@name}=") { |value| @outputs.set(name, value) }
|
|
29
|
-
@service_class.send(:private, "#{@name}=")
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|