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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0e1fea1a0c6d0cf6f8804325d01e1d29f0569db7090b659eeaceb5ee00f83cf
4
- data.tar.gz: d428f22186c6d9130ee76245efc58181c708656ef0e7f8e265ba0d817357e9b1
3
+ metadata.gz: e7d14fcc5a7c7ed5c137a1a5fb3c34df710d8932d754054c0c36d103915bb544
4
+ data.tar.gz: 92f749d25319e0668ef74f65c8b3901f7d4eb446977fe8e901b18e1d2f475787
5
5
  SHA512:
6
- metadata.gz: 23103f62225bff2207d1d3a15a06d1da1b64c82491ba0c97c85f72b8ef62c547d83cc817cc6db0a2014b9835e0de94eb73e2d58f8314bf4949b3ece650ee1a8e
7
- data.tar.gz: 7f962005ba8ce5d78304726bfd7ec8c8d8fa28f36fe2363f6246785d44a21fe794322c6c3a62d53901720e85c9066c2165ec6b7c7e0fe7dce278a5774ff03139
6
+ metadata.gz: cf6f89954bc8fdf3b881dff4f00c5da278b3a0bcf3880eb09e7d0a6c7eb6c5081c1ffdbe417de5b6fa02f799c9c3a77fd8a660b8ca5a61b901acc805b9ef66d0
7
+ data.tar.gz: 02a58373f9fb1e6afad81b8dc732c48e8318acbfbcd8df02cdbb3cdc9f601367b64fcd86c5376a29b6092c59a317877c0a8ff3c26047062b545f49e3b96ea2f8
data/CHANGELOG.md CHANGED
@@ -0,0 +1,9 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.2.0 - 2021-08-13
4
+
5
+ Autogenerated includable modules got unique names.
6
+
7
+ ## 0.1.0 - 2021-08-01
8
+
9
+ Initial implementation
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- vg-service_object (0.1.0)
4
+ vg-service_object (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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/lib/#{m[1]}_spec.rb" }
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
@@ -5,7 +5,7 @@
5
5
  Add this line to your application's Gemfile:
6
6
 
7
7
  ```ruby
8
- gem 'vg-service_object'
8
+ gem "vg-service_object"
9
9
  ```
10
10
 
11
11
  And then execute:
data/lib/vg.rb CHANGED
@@ -3,6 +3,4 @@
3
3
  module VG
4
4
  require_relative "vg/service_object"
5
5
  require_relative "vg/s_o"
6
- #autoload(:ServiceObject, 'v_g/service_object')
7
- #autoload(:SO, 'v_g/s_o')
8
6
  end
data/lib/vg/s_o.rb CHANGED
@@ -2,10 +2,12 @@
2
2
 
3
3
  module VG
4
4
  module SO
5
- autoload(:GenerateIncludableModule, 'vg/s_o/generate_includable_module')
6
- autoload(:GenerateSlugFromModuleName, 'vg/s_o/generate_slug_from_module_name')
7
- autoload(:InjectRegistrationMethods, 'vg/s_o/inject_registration_methods')
8
- autoload(:ServiceObjectModuleInheritance, 'vg/s_o/service_object_module_inheritance')
9
- autoload(:ServiceObjectRegistrationMethods, 'vg/s_o/service_object_registration_methods')
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(so_module_name, as: nil)
8
- method_name = as || GenerateSlugFromModuleName.call(so_module_name)
9
- Module.new do
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
- def #{method_name}_fn
17
- self.class.registered_service_objects[:#{method_name}].callable
18
- end
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
- def #{method_name}(...)
21
- send("#{method_name}_fn").call(...)
22
- end
19
+ private
23
20
 
24
- def self.extended(_base)
25
- raise "Do not extend ::#{so_module_name}, use include!"
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
- regex = /(?:::)*([A-Za-z0-9]+)$/
9
- module_name.match(regex)[1]
10
- .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
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
 
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VG
4
+ module SO
5
+ module GetModuleNameWithoutNamespace
6
+
7
+ def self.call(string)
8
+ string.match(/(?:::)*([A-Za-z0-9]+)$/)[1]
9
+ end
10
+
11
+ end # ... GetModuleNameWithoutNamespace
12
+ end # ... SO
13
+ end # ... VG
@@ -9,7 +9,7 @@ module VG
9
9
  end
10
10
 
11
11
  def callable
12
- @callable ||= self.new
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
- @callable ||= self::Action.new
26
+ self::Action.new
27
27
  end
28
28
 
29
29
  def as_so(method_name = nil)
@@ -1,5 +1,5 @@
1
1
  module VG
2
2
  module ServiceObject
3
- VERSION = "0.1.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
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.1.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-04 00:00:00.000000000 Z
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