vg-service_object 0.1.0 → 0.3.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/CHANGELOG.md +9 -0
- data/Gemfile.lock +1 -1
- data/Guardfile +1 -1
- data/README.md +1 -1
- data/lib/vg.rb +0 -2
- data/lib/vg/s_o.rb +7 -5
- data/lib/vg/s_o/generate_camelized_name.rb +13 -0
- data/lib/vg/s_o/generate_includable_module.rb +58 -17
- data/lib/vg/s_o/generate_slug_from_module_name.rb +3 -4
- data/lib/vg/s_o/get_module_name_without_namespace.rb +13 -0
- data/lib/vg/service_object.rb +2 -2
- data/lib/vg/service_object/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7d14fcc5a7c7ed5c137a1a5fb3c34df710d8932d754054c0c36d103915bb544
|
4
|
+
data.tar.gz: 92f749d25319e0668ef74f65c8b3901f7d4eb446977fe8e901b18e1d2f475787
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf6f89954bc8fdf3b881dff4f00c5da278b3a0bcf3880eb09e7d0a6c7eb6c5081c1ffdbe417de5b6fa02f799c9c3a77fd8a660b8ca5a61b901acc805b9ef66d0
|
7
|
+
data.tar.gz: 02a58373f9fb1e6afad81b8dc732c48e8318acbfbcd8df02cdbb3cdc9f601367b64fcd86c5376a29b6092c59a317877c0a8ff3c26047062b545f49e3b96ea2f8
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/Guardfile
CHANGED
@@ -5,7 +5,7 @@ directories %w(lib config spec)
|
|
5
5
|
|
6
6
|
guard :rspec, cmd: "rspec --format d" do
|
7
7
|
watch(%r{^spec/.+_spec\.rb$})
|
8
|
-
watch(%r{^lib/(.+)\.rb$}) { |m| "spec
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
9
9
|
watch("spec/spec_helper.rb") { "spec" }
|
10
10
|
watch("spec/dummy_objects.rb") { "spec" }
|
11
11
|
watch("spec/shared_examples.rb") { "spec" }
|
data/README.md
CHANGED
data/lib/vg.rb
CHANGED
data/lib/vg/s_o.rb
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
module VG
|
4
4
|
module SO
|
5
|
-
autoload(:
|
6
|
-
autoload(:
|
7
|
-
autoload(:
|
8
|
-
autoload(:
|
9
|
-
autoload(:
|
5
|
+
autoload(:GenerateCamelizedName, "vg/s_o/generate_camelized_name")
|
6
|
+
autoload(:GenerateIncludableModule, "vg/s_o/generate_includable_module")
|
7
|
+
autoload(:GenerateSlugFromModuleName, "vg/s_o/generate_slug_from_module_name")
|
8
|
+
autoload(:GetModuleNameWithoutNamespace, "vg/s_o/get_module_name_without_namespace")
|
9
|
+
autoload(:InjectRegistrationMethods, "vg/s_o/inject_registration_methods")
|
10
|
+
autoload(:ServiceObjectModuleInheritance, "vg/s_o/service_object_module_inheritance")
|
11
|
+
autoload(:ServiceObjectRegistrationMethods, "vg/s_o/service_object_registration_methods")
|
10
12
|
end
|
11
13
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VG
|
4
|
+
module SO
|
5
|
+
module GenerateCamelizedName
|
6
|
+
|
7
|
+
def self.call(string)
|
8
|
+
string.to_s.gsub(/(?:_|(^))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
|
9
|
+
end
|
10
|
+
|
11
|
+
end # ... GenerateCamelizedName
|
12
|
+
end # ... SO
|
13
|
+
end # ... VG
|
@@ -4,30 +4,71 @@ module VG
|
|
4
4
|
module SO
|
5
5
|
module GenerateIncludableModule
|
6
6
|
|
7
|
-
def self.call(
|
8
|
-
|
9
|
-
|
10
|
-
class_eval <<~RUBY
|
11
|
-
def self.included(base)
|
12
|
-
InjectRegistrationMethods.call(base)
|
13
|
-
base.register_service_object(:#{method_name}, ::#{so_module_name})
|
14
|
-
end
|
7
|
+
def self.call(...)
|
8
|
+
self::Action.new.call(...)
|
9
|
+
end
|
15
10
|
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
class Action
|
12
|
+
|
13
|
+
def call(so_module_name, as: nil)
|
14
|
+
self.desired_method_name = as
|
15
|
+
self.so_module_name = so_module_name
|
16
|
+
find_or_define_module
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
send("#{method_name}_fn").call(...)
|
22
|
-
end
|
19
|
+
private
|
23
20
|
|
24
|
-
|
25
|
-
|
21
|
+
attr_accessor :so_module_name
|
22
|
+
attr_reader :desired_method_name
|
23
|
+
|
24
|
+
def desired_method_name=(name)
|
25
|
+
# TODO: ensure name is a string in snake case; no bangs;
|
26
|
+
@desired_method_name = name.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
def find_or_define_module
|
30
|
+
return Object.const_get(module_name) if Object.const_defined?(module_name)
|
31
|
+
|
32
|
+
define_module
|
33
|
+
end
|
34
|
+
|
35
|
+
def define_module
|
36
|
+
instance_eval <<~RUBY
|
37
|
+
module #{module_name}
|
38
|
+
def self.included(base)
|
39
|
+
InjectRegistrationMethods.call(base)
|
40
|
+
base.register_service_object(:#{method_name}, ::#{so_module_name})
|
41
|
+
end
|
42
|
+
|
43
|
+
def #{method_name}_fn
|
44
|
+
self.class.registered_service_objects[:#{method_name}].callable
|
45
|
+
end
|
46
|
+
|
47
|
+
def #{method_name}(...)
|
48
|
+
send("#{method_name}_fn").call(...)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.extended(_base)
|
52
|
+
raise "Do not extend ::#{so_module_name}, use include!"
|
53
|
+
end
|
26
54
|
end
|
27
55
|
RUBY
|
56
|
+
Object.const_get(module_name)
|
57
|
+
end
|
58
|
+
|
59
|
+
def method_name
|
60
|
+
@method_name ||= desired_method_name || GenerateSlugFromModuleName.call(so_module_name)
|
61
|
+
end
|
62
|
+
|
63
|
+
def module_name
|
64
|
+
"::#{so_module_name}::IncludableAs%sMethod" % (
|
65
|
+
desired_method_name \
|
66
|
+
? GenerateCamelizedName.call(desired_method_name)
|
67
|
+
: GetModuleNameWithoutNamespace.call(so_module_name)
|
68
|
+
)
|
28
69
|
end
|
29
|
-
end
|
30
70
|
|
71
|
+
end # ... Action
|
31
72
|
end # ... GenerateIncludableModule
|
32
73
|
end # ... SO
|
33
74
|
end # ... VG
|
@@ -5,10 +5,9 @@ module VG
|
|
5
5
|
module GenerateSlugFromModuleName
|
6
6
|
|
7
7
|
def self.call(module_name)
|
8
|
-
|
9
|
-
|
10
|
-
.gsub(/([
|
11
|
-
.gsub(/([a-z\d])([A-Z])/,'\1_\2')
|
8
|
+
GetModuleNameWithoutNamespace.call(module_name)
|
9
|
+
.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
10
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
12
11
|
.downcase.to_sym
|
13
12
|
end
|
14
13
|
|
data/lib/vg/service_object.rb
CHANGED
@@ -9,7 +9,7 @@ module VG
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def callable
|
12
|
-
|
12
|
+
self.new
|
13
13
|
end
|
14
14
|
|
15
15
|
def as_so(method_name = nil)
|
@@ -23,7 +23,7 @@ module VG
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def callable
|
26
|
-
|
26
|
+
self::Action.new
|
27
27
|
end
|
28
28
|
|
29
29
|
def as_so(method_name = nil)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vg-service_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Gorodulin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -71,8 +71,10 @@ files:
|
|
71
71
|
- Rakefile
|
72
72
|
- lib/vg.rb
|
73
73
|
- lib/vg/s_o.rb
|
74
|
+
- lib/vg/s_o/generate_camelized_name.rb
|
74
75
|
- lib/vg/s_o/generate_includable_module.rb
|
75
76
|
- lib/vg/s_o/generate_slug_from_module_name.rb
|
77
|
+
- lib/vg/s_o/get_module_name_without_namespace.rb
|
76
78
|
- lib/vg/s_o/inject_registration_methods.rb
|
77
79
|
- lib/vg/s_o/service_object_module_inheritance.rb
|
78
80
|
- lib/vg/s_o/service_object_registration_methods.rb
|