convenient_service 0.5.0 → 0.6.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 (114) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +1 -1
  5. data/ROADMAP.md +14 -3
  6. data/Taskfile.yml +30 -0
  7. data/convenient_service.gemspec +3 -1
  8. data/lib/convenient_service/aliases.rb +1 -0
  9. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_active_model_attribute_assignment/concern.rb +0 -2
  10. data/lib/convenient_service/common/plugins/assigns_attributes_in_constructor/using_dry_initializer/concern.rb +0 -2
  11. data/lib/convenient_service/core/entities/config/entities/method_middlewares/entities/container/commands/resolve_methods_middlewares_callers.rb +1 -24
  12. data/lib/convenient_service/dependencies.rb +7 -0
  13. data/lib/convenient_service/examples/dry/gemfile/dry_service/config.rb +3 -1
  14. data/lib/convenient_service/examples/rails/gemfile/rails_service/config.rb +3 -1
  15. data/lib/convenient_service/examples/standard/request_params/constants.rb +15 -0
  16. data/lib/convenient_service/examples/standard/request_params/entities/description.rb +40 -0
  17. data/lib/convenient_service/examples/standard/request_params/entities/format.rb +40 -0
  18. data/lib/convenient_service/examples/standard/request_params/entities/id.rb +47 -0
  19. data/lib/convenient_service/examples/standard/request_params/entities/logger.rb +21 -0
  20. data/lib/convenient_service/examples/standard/request_params/entities/request.rb +23 -0
  21. data/lib/convenient_service/examples/standard/request_params/entities/source.rb +40 -0
  22. data/lib/convenient_service/examples/standard/request_params/entities/tag.rb +40 -0
  23. data/lib/convenient_service/examples/standard/request_params/entities/title.rb +40 -0
  24. data/lib/convenient_service/examples/standard/request_params/entities.rb +11 -0
  25. data/lib/convenient_service/examples/standard/request_params/services/apply_default_param_values.rb +26 -0
  26. data/lib/convenient_service/examples/standard/request_params/services/cast_params.rb +38 -0
  27. data/lib/convenient_service/examples/standard/request_params/services/extract_params_from_body.rb +70 -0
  28. data/lib/convenient_service/examples/standard/request_params/services/extract_params_from_path.rb +62 -0
  29. data/lib/convenient_service/examples/standard/request_params/services/filter_out_unpermitted_params.rb +26 -0
  30. data/lib/convenient_service/examples/standard/request_params/services/log_request_params.rb +54 -0
  31. data/lib/convenient_service/examples/standard/request_params/services/merge_params.rb +26 -0
  32. data/lib/convenient_service/examples/standard/request_params/services/prepare.rb +65 -0
  33. data/lib/convenient_service/examples/standard/request_params/services/validate_casted_params.rb +94 -0
  34. data/lib/convenient_service/examples/standard/request_params/services/validate_uncasted_params.rb +72 -0
  35. data/lib/convenient_service/examples/standard/request_params/services.rb +13 -0
  36. data/lib/convenient_service/examples/standard/request_params/utils/array/wrap.rb +46 -0
  37. data/lib/convenient_service/examples/standard/request_params/utils/array.rb +21 -0
  38. data/lib/convenient_service/examples/standard/request_params/utils/http/request/parse_body.rb +42 -0
  39. data/lib/convenient_service/examples/standard/request_params/utils/http/request/parse_path.rb +40 -0
  40. data/lib/convenient_service/examples/standard/request_params/utils/http/request.rb +28 -0
  41. data/lib/convenient_service/examples/standard/request_params/utils/http.rb +3 -0
  42. data/lib/convenient_service/examples/standard/request_params/utils/integer/safe_parse.rb +31 -0
  43. data/lib/convenient_service/examples/standard/request_params/utils/integer.rb +25 -0
  44. data/lib/convenient_service/examples/standard/request_params/utils/json/safe_parse.rb +40 -0
  45. data/lib/convenient_service/examples/standard/request_params/utils/json.rb +21 -0
  46. data/lib/convenient_service/examples/standard/request_params/utils/object/blank.rb +34 -0
  47. data/lib/convenient_service/examples/standard/request_params/utils/object/present.rb +31 -0
  48. data/lib/convenient_service/examples/standard/request_params/utils/object.rb +26 -0
  49. data/lib/convenient_service/examples/standard/request_params/utils.rb +7 -0
  50. data/lib/convenient_service/examples/standard/request_params.rb +48 -0
  51. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/commands/generate_printable_method.rb +50 -0
  52. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/commands.rb +3 -0
  53. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments/commands/apply_stub_to_track_delegations.rb +78 -0
  54. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments/commands/generate_printable_arguments.rb +100 -0
  55. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments/commands.rb +4 -0
  56. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/arguments.rb +95 -0
  57. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/base.rb +87 -0
  58. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/return_its_value.rb +129 -0
  59. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/with_any_arguments.rb +37 -0
  60. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/with_concrete_arguments.rb +37 -0
  61. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/sub_matchers/without_arguments.rb +37 -0
  62. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/values/base.rb +41 -0
  63. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/values/with_calling_original.rb +30 -0
  64. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings/values/without_calling_original.rb +30 -0
  65. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings.rb +12 -0
  66. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings_collection/errors.rb +57 -0
  67. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/chainings_collection.rb +171 -0
  68. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities/delegation.rb +79 -0
  69. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher/entities.rb +5 -0
  70. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities/matcher.rb +276 -0
  71. data/lib/convenient_service/rspec/matchers/custom/delegate_to/entities.rb +3 -0
  72. data/lib/convenient_service/rspec/matchers/custom/delegate_to.rb +58 -234
  73. data/lib/convenient_service/rspec/matchers/custom/singleton_prepend_module.rb +79 -0
  74. data/lib/convenient_service/rspec/matchers/custom.rb +1 -0
  75. data/lib/convenient_service/rspec/matchers/singleton_prepend_module.rb +13 -0
  76. data/lib/convenient_service/rspec/matchers.rb +2 -0
  77. data/lib/convenient_service/service/plugins/has_result_steps/concern.rb +25 -0
  78. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method.rb +3 -0
  79. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_caller.rb +8 -1
  80. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_direction.rb +3 -0
  81. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_key.rb +8 -1
  82. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/commands/cast_method_name.rb +9 -5
  83. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/concern/instance_methods.rb +4 -0
  84. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/base.rb +4 -0
  85. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/reassignment/commands/define_method_in_container.rb +74 -0
  86. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/reassignment/commands.rb +3 -0
  87. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers/reassignment.rb +50 -0
  88. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/callers.rb +1 -0
  89. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/values/reassignment.rb +43 -0
  90. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities/values.rb +3 -0
  91. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/entities.rb +1 -0
  92. data/lib/convenient_service/service/plugins/has_result_steps/entities/method/errors.rb +22 -0
  93. data/lib/convenient_service/service/plugins/has_result_steps/entities/step/concern/instance_methods.rb +13 -2
  94. data/lib/convenient_service/support/arguments/null_arguments.rb +28 -0
  95. data/lib/convenient_service/support/arguments.rb +87 -0
  96. data/lib/convenient_service/support/dependency_container/commands/assert_valid_scope.rb +32 -0
  97. data/lib/convenient_service/support/dependency_container/commands/import_method.rb +13 -23
  98. data/lib/convenient_service/support/dependency_container/commands.rb +1 -0
  99. data/lib/convenient_service/support/dependency_container/constants.rb +4 -2
  100. data/lib/convenient_service/support/dependency_container/entities/method.rb +2 -9
  101. data/lib/convenient_service/support/dependency_container/entities/namespace_collection.rb +0 -9
  102. data/lib/convenient_service/support/dependency_container/errors.rb +25 -0
  103. data/lib/convenient_service/support/dependency_container/export.rb +8 -0
  104. data/lib/convenient_service/support/dependency_container/import.rb +3 -1
  105. data/lib/convenient_service/support/version/null_version.rb +7 -0
  106. data/lib/convenient_service/support/version.rb +11 -1
  107. data/lib/convenient_service/support.rb +1 -0
  108. data/lib/convenient_service/utils/object/instance_variable_delete.rb +41 -0
  109. data/lib/convenient_service/utils/object/instance_variable_fetch.rb +4 -0
  110. data/lib/convenient_service/utils/object.rb +9 -0
  111. data/lib/convenient_service/utils/proc/display.rb +43 -0
  112. data/lib/convenient_service/utils/proc.rb +5 -0
  113. data/lib/convenient_service/version.rb +1 -1
  114. metadata +101 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7655bb52a95f02a3f973c4f26e8e881ebf2dec66e056de3e085515b8e1c9b8f9
4
- data.tar.gz: 440d3e574c167e88ca942e98eb022665faf918933d20789d4acc50f90bd0e9e8
3
+ metadata.gz: 7ec5188e0830cb8a97b589ff6985d4aa1e361bce486dba86a1a1f697924d0be7
4
+ data.tar.gz: ab763a1c604849509f5557938768bf019b5d962dd5d6fa62771b17e3c524025d
5
5
  SHA512:
6
- metadata.gz: 2f76c7d18d8dbe51157e07c575718383148fc070cd85705450f9ea7d5bd4c3837d459b1da3125c4a1eb6188d14ce5e5d10c1b501104949f6c609e6a0f724e820
7
- data.tar.gz: fb0f1e875261f71a01fefba836b45e6c8995ea94f9aa906050f9bebdf5b4690bafda699c624a9405cec65c14928ba1956d6c3a193f434ab471ceceb4635baef6
6
+ metadata.gz: 32cf7296bf8a5ff16d7bfed6c20a855831e27b0300edede75ba7c737f357ed6ddf462641d7cacc9c5f7a65c64c3a4e59b04a60cee0ad9793f173fca7e9c0ad24
7
+ data.tar.gz: 71aadf20b54f0f507eb6721999b2192630eb2265d660d40ecc461de311fb930376883d1546c9c030c03f15e90e0c02e172066adc2213cb61140cc3f8b45b5137
data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.6.0](https://github.com/marian13/convenient_service/compare/v0.5.0...v0.6.0) (2023-01-22)
4
+
5
+
6
+ ### Features
7
+
8
+ * **dependency_container:** assert valid scope ([5d75f59](https://github.com/marian13/convenient_service/commit/5d75f593c01baa695e75fe49af6b4c6b80d7d9b1))
9
+ * **singleton_prepend_module:** introduce singleton_prepend_module custom RSpec matcher ([6636b8d](https://github.com/marian13/convenient_service/commit/6636b8d030329e4a6216a934748a70ef4bae6ff3))
10
+ * **has_result_steps:** introduce reassign ([75855be](https://github.com/marian13/convenient_service/commit/75855be7fd9115d01d5cfad99d35319486332bd2))
11
+
3
12
  ## [0.5.0](https://github.com/marian13/convenient_service/compare/v0.4.0...v0.5.0) (2023-01-19)
4
13
 
5
14
 
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2022 Marian Kostyk
3
+ Copyright (c) 2022-2023 Marian Kostyk
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -60,5 +60,5 @@ This library is under heavy development. Public API may be subject to change. Th
60
60
  ---
61
61
 
62
62
  <!-- author:start -->
63
- Copyright (c) 2022 [Marian Kostyk](http://mariankostyk.com).
63
+ Copyright (c) 2022-2023 [Marian Kostyk](http://mariankostyk.com).
64
64
  <!-- author:end -->
data/ROADMAP.md CHANGED
@@ -44,14 +44,25 @@
44
44
  | High | 🚧 | `included_once` for `Support::Concern` |
45
45
  | Medium | 🚧 | Custom YARD type for service instance, service class as return values |
46
46
  | Medium | 🚧 | Heredoc for error messages |
47
- | Medium | 🚧 | Specs for `be_success`, `be_error`, `be_failure` matchers | |
48
- | Low | 🚧 | [Receive Counts](https://relishapp.com/rspec/rspec-mocks/docs/setting-constraints/receive-counts) for `delegate_to` | |
47
+ | Medium | 🚧 | Specs for `be_success`, `be_error`, `be_failure` matchers | |
48
+ | Low | 🚧 | [Receive Counts](https://relishapp.com/rspec/rspec-mocks/docs/setting-constraints/receive-counts) for `delegate_to` | |
49
49
  | Low | 🚧 | Prefer versioning instead of modification plugin | |
50
50
  | Low | 🚧 | Consider to move `__steps__` and `__callbacks__` to `internals_class` | Benefit? |
51
51
  | Medium | 🚧 | User friendly `raise` that removes lib backtrace from caller | Should have a `debug` mode. Should work well with examples. Check RSpec `CallerFilter.first_non_rspec_line` |
52
52
  | High | 🚧 | A plugin that catches `StandardError` and returns `failure` | Should be the lowest in the stack |
53
53
  | High | 🚧 | `Support::Command` alias | Should be visible to the end user |
54
54
  | Low | 🚧 | Parallel steps | A killer feature |
55
- | Medium | 🚧 | Add Ruby 3.2 support to Docker and CI | |
55
+ | Medium | 🚧 | Add `Ruby 3.2` support to `Docker` and `CI` | |
56
+ | Low | 🚧 | `overload do` | |
57
+ | Low | 🚧 | Same spec example group organization | |
58
+ | Medium | 🚧 | `Support::Arguments` | |
59
+ | Low | 🚧 | Null object to Nil object? | |
60
+ | High | 🚧 | Do not use Testing Toolkit in the Primitives layer | See [Components Diagram](https://marian13.github.io/static_content/convenient_service/diagrams/components_graph.html) + it should take the minimal amount of efforts to extract and reuse `Utils`, `Suppport` in the different projects |
61
+ | Medium | 🚧 | Perfromance testing | [rspec-benchmark](https://github.com/piotrmurach/rspec-benchmark), [Testing object allocations](https://www.honeybadger.io/blog/testing-object-allocations/), [allocation_stats](https://github.com/srawlins/allocation_stats) |
62
+ | Medium | 🚧 | Mutant testing | [mutant](https://github.com/mbj/mutant) |
63
+ | Low | 🚧 | Add `JRuby` support | [jruby](https://www.jruby.org/) |
64
+ | Medium | 🚧 | Add `shoulda-context` to test conditionals when `RSpec` is not loaded | [shoulda-context](https://github.com/thoughtbot/shoulda-context) |
65
+ | High | 🚧 | Abstract factory for `CastMethod` | |
66
+ | Medium | 🚧 | `delegate_to` - option to specify of how to compare blocks | |
56
67
 
57
68
  Search for `TODO`s in the codebase for more tasks.
data/Taskfile.yml CHANGED
@@ -78,6 +78,16 @@ tasks:
78
78
 
79
79
  docker:build:ruby_2.7:
80
80
  cmds:
81
+ ##
82
+ # NOTE: Meaning of `|| 2> /dev/null`.
83
+ # https://stackoverflow.com/a/10250395/12201472
84
+ #
85
+ # NOTE: Meaning of `|| true`.
86
+ # https://superuser.com/a/887349/1180656
87
+ #
88
+ - rm Gemfile.2.7 2> /dev/null || true
89
+ - rm Gemfile.2.7.lock 2> /dev/null || true
90
+ - cp Gemfile Gemfile.2.7
81
91
  - docker build . -f docker/2.7/Dockerfile -t convenient_service:2.7
82
92
  preconditions:
83
93
  - sh: '[ "${IN_DOCKER_CONTAINER}" != "true" ]'
@@ -85,6 +95,16 @@ tasks:
85
95
 
86
96
  docker:build:ruby_3.0:
87
97
  cmds:
98
+ ##
99
+ # NOTE: Meaning of `|| 2> /dev/null`.
100
+ # https://stackoverflow.com/a/10250395/12201472
101
+ #
102
+ # NOTE: Meaning of `|| true`.
103
+ # https://superuser.com/a/887349/1180656
104
+ #
105
+ - rm Gemfile.3.0 2> /dev/null || true
106
+ - rm Gemfile.3.0.lock 2> /dev/null || true
107
+ - cp Gemfile Gemfile.3.0
88
108
  - docker build . -f docker/3.0/Dockerfile -t convenient_service:3.0
89
109
  preconditions:
90
110
  - sh: '[ "${IN_DOCKER_CONTAINER}" != "true" ]'
@@ -92,6 +112,16 @@ tasks:
92
112
 
93
113
  docker:build:ruby_3.1:
94
114
  cmds:
115
+ ##
116
+ # NOTE: Meaning of `|| 2> /dev/null`.
117
+ # https://stackoverflow.com/a/10250395/12201472
118
+ #
119
+ # NOTE: Meaning of `|| true`.
120
+ # https://superuser.com/a/887349/1180656
121
+ #
122
+ - rm Gemfile.3.1 2> /dev/null || true
123
+ - rm Gemfile.3.1.lock 2> /dev/null || true
124
+ - cp Gemfile Gemfile.3.1
95
125
  - docker build . -f docker/3.1/Dockerfile -t convenient_service:3.1
96
126
  preconditions:
97
127
  - sh: '[ "${IN_DOCKER_CONTAINER}" != "true" ]'
@@ -35,18 +35,20 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency "commonmarker"
36
36
  spec.add_development_dependency "gem-release"
37
37
  spec.add_development_dependency "inch"
38
+ spec.add_development_dependency "json"
38
39
  spec.add_development_dependency "paint"
39
40
  spec.add_development_dependency "progressbar"
40
41
  spec.add_development_dependency "rake", "~> 12.0"
41
42
  spec.add_development_dependency "rerun"
42
43
  spec.add_development_dependency "rouge"
43
- spec.add_development_dependency "rspec", "~> 3.0"
44
+ spec.add_development_dependency "rspec", "~> 3.11.0"
44
45
  spec.add_development_dependency "rubocop", "~> 1.40.0"
45
46
  spec.add_development_dependency "rubocop-rspec"
46
47
  spec.add_development_dependency "tty-prompt"
47
48
  spec.add_development_dependency "standard"
48
49
  spec.add_development_dependency "simplecov"
49
50
  spec.add_development_dependency "simplecov-lcov"
51
+ spec.add_development_dependency "webrick"
50
52
  spec.add_development_dependency "yard"
51
53
  spec.add_development_dependency "yard-junk"
52
54
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ConvenientService
4
+ Concern = ::ConvenientService::Support::Concern
4
5
  DependencyContainer = ::ConvenientService::Support::DependencyContainer
5
6
  end
@@ -9,8 +9,6 @@ module ConvenientService
9
9
  include Support::Concern
10
10
 
11
11
  included do |service_class|
12
- require "active_model"
13
-
14
12
  service_class.include ::ActiveModel::AttributeAssignment
15
13
  end
16
14
  end
@@ -9,8 +9,6 @@ module ConvenientService
9
9
  include Support::Concern
10
10
 
11
11
  included do |service_class|
12
- require "dry-initializer"
13
-
14
12
  service_class.extend ::Dry::Initializer
15
13
  end
16
14
  end
@@ -35,30 +35,7 @@ module ConvenientService
35
35
  # @return [Module]
36
36
  #
37
37
  def call
38
- get_methods_middlewares_callers || set_methods_middlewares_callers
39
- end
40
-
41
- private
42
-
43
- ##
44
- # @return [Module, nil]
45
- #
46
- def get_methods_middlewares_callers
47
- Utils::Module.get_own_const(klass, module_name)
48
- end
49
-
50
- ##
51
- # @return [Module]
52
- #
53
- def set_methods_middlewares_callers
54
- klass.const_set(module_name, ::Module.new)
55
- end
56
-
57
- ##
58
- # @return [Symbol]
59
- #
60
- def module_name
61
- @module_name ||= :MethodsMiddlewaresCallers
38
+ Utils::Module.fetch_own_const(klass, :MethodsMiddlewaresCallers) { ::Module.new }
62
39
  end
63
40
  end
64
41
  end
@@ -113,9 +113,12 @@ module ConvenientService
113
113
  # @api private
114
114
  #
115
115
  def require_standard_examples
116
+ require "json"
116
117
  require "progressbar"
118
+ require "webrick"
117
119
 
118
120
  require_relative "examples/standard/cowsay"
121
+ require_relative "examples/standard/request_params"
119
122
  require_relative "examples/standard/gemfile"
120
123
  end
121
124
 
@@ -126,7 +129,9 @@ module ConvenientService
126
129
  # @api private
127
130
  #
128
131
  def require_rails_examples
132
+ require "json"
129
133
  require "progressbar"
134
+ require "webrick"
130
135
 
131
136
  require_relative "examples/rails/gemfile"
132
137
  end
@@ -138,7 +143,9 @@ module ConvenientService
138
143
  # @api private
139
144
  #
140
145
  def require_dry_examples
146
+ require "json"
141
147
  require "progressbar"
148
+ require "webrick"
142
149
 
143
150
  require_relative "examples/dry/gemfile"
144
151
  end
@@ -12,7 +12,9 @@ module ConvenientService
12
12
  module Gemfile
13
13
  class DryService
14
14
  module Config
15
- def self.included(service_class)
15
+ include Support::Concern
16
+
17
+ included do |service_class|
16
18
  service_class.class_exec do
17
19
  include Configs::Standard
18
20
 
@@ -12,7 +12,9 @@ module ConvenientService
12
12
  module Gemfile
13
13
  class RailsService
14
14
  module Config
15
- def self.included(service_class)
15
+ include Support::Concern
16
+
17
+ included do |service_class|
16
18
  service_class.class_exec do
17
19
  include Configs::Standard
18
20
 
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Constants
8
+ module Tags
9
+ EMPTY = ""
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Description
9
+ def initialize(value:)
10
+ @value = value
11
+ end
12
+
13
+ class << self
14
+ def cast(value)
15
+ case value
16
+ when ::String
17
+ new(value: value.to_s)
18
+ end
19
+ end
20
+ end
21
+
22
+ def ==(other)
23
+ return unless other.instance_of?(self.class)
24
+
25
+ value == other.value
26
+ end
27
+
28
+ def to_s
29
+ value
30
+ end
31
+
32
+ protected
33
+
34
+ attr_reader :value
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Format
9
+ def initialize(value:)
10
+ @value = value
11
+ end
12
+
13
+ class << self
14
+ def cast(value)
15
+ case value
16
+ when ::String
17
+ new(value: value.to_s)
18
+ end
19
+ end
20
+ end
21
+
22
+ def ==(other)
23
+ return unless other.instance_of?(self.class)
24
+
25
+ value == other.value
26
+ end
27
+
28
+ def to_s
29
+ value
30
+ end
31
+
32
+ protected
33
+
34
+ attr_reader :value
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ ##
9
+ # TODO: https://ruby-doc.org/3.1.3/stdlibs/yaml/YAML/DBM.html
10
+ #
11
+ class ID
12
+ def initialize(value:)
13
+ @value = value
14
+ end
15
+
16
+ class << self
17
+ def cast(value)
18
+ case value
19
+ when ::String, ::Integer
20
+ new(value: value.to_s)
21
+ end
22
+ end
23
+ end
24
+
25
+ def ==(other)
26
+ return unless other.instance_of?(self.class)
27
+
28
+ value == other.value
29
+ end
30
+
31
+ def to_i
32
+ value.to_i
33
+ end
34
+
35
+ def to_s
36
+ value
37
+ end
38
+
39
+ protected
40
+
41
+ attr_reader :value
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Logger
9
+ class << self
10
+ def log(message, out: $stdout)
11
+ out.puts message
12
+
13
+ message
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Request
9
+ attr_reader :http_string
10
+
11
+ def initialize(http_string:)
12
+ @http_string = http_string
13
+ end
14
+
15
+ def to_s
16
+ http_string
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Source
9
+ def initialize(value:)
10
+ @value = value
11
+ end
12
+
13
+ class << self
14
+ def cast(value)
15
+ case value
16
+ when ::String
17
+ new(value: value.to_s)
18
+ end
19
+ end
20
+ end
21
+
22
+ def ==(other)
23
+ return unless other.instance_of?(self.class)
24
+
25
+ value == other.value
26
+ end
27
+
28
+ def to_s
29
+ value
30
+ end
31
+
32
+ protected
33
+
34
+ attr_reader :value
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Tag
9
+ def initialize(value:)
10
+ @value = value
11
+ end
12
+
13
+ class << self
14
+ def cast(value)
15
+ case value
16
+ when ::String
17
+ new(value: value.to_s)
18
+ end
19
+ end
20
+ end
21
+
22
+ def ==(other)
23
+ return unless other.instance_of?(self.class)
24
+
25
+ value == other.value
26
+ end
27
+
28
+ def to_s
29
+ value
30
+ end
31
+
32
+ protected
33
+
34
+ attr_reader :value
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Entities
8
+ class Title
9
+ def initialize(value:)
10
+ @value = value
11
+ end
12
+
13
+ class << self
14
+ def cast(value)
15
+ case value
16
+ when ::String
17
+ new(value: value.to_s)
18
+ end
19
+ end
20
+ end
21
+
22
+ def ==(other)
23
+ return unless other.instance_of?(self.class)
24
+
25
+ value == other.value
26
+ end
27
+
28
+ def to_s
29
+ value
30
+ end
31
+
32
+ protected
33
+
34
+ attr_reader :value
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "entities/logger"
4
+ require_relative "entities/request"
5
+
6
+ require_relative "entities/description"
7
+ require_relative "entities/format"
8
+ require_relative "entities/id"
9
+ require_relative "entities/source"
10
+ require_relative "entities/tag"
11
+ require_relative "entities/title"
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Services
8
+ class ApplyDefaultParamValues
9
+ include ConvenientService::Standard::Config
10
+
11
+ attr_reader :params, :defaults
12
+
13
+ def initialize(params:, defaults:)
14
+ @params = params
15
+ @defaults = defaults
16
+ end
17
+
18
+ def result
19
+ success(params: defaults.merge(params))
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ConvenientService
4
+ module Examples
5
+ module Standard
6
+ module RequestParams
7
+ module Services
8
+ class CastParams
9
+ include ConvenientService::Standard::Config
10
+
11
+ attr_reader :params
12
+
13
+ def initialize(params:)
14
+ @params = params
15
+ end
16
+
17
+ def result
18
+ success(original_params: params, casted_params: casted_params)
19
+ end
20
+
21
+ private
22
+
23
+ def casted_params
24
+ {
25
+ id: Entities::ID.cast(params[:id]),
26
+ format: Entities::Format.cast(params[:format]),
27
+ title: Entities::Title.cast(params[:title]),
28
+ description: Entities::Description.cast(params[:description]),
29
+ tags: Utils::Array.wrap(params[:tags]).map { |tag| Entities::Tag.cast(tag) },
30
+ sources: Utils::Array.wrap(params[:sources]).map { |source| Entities::Source.cast(source) }
31
+ }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end