vg-service_object 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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