evt-template_method 2.0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7df86eec2be2b5378f682b6c8b32b5f80c41d20b28ce0f99559e5c584d047b68
4
+ data.tar.gz: bdc177a975ef3948d23d1593247066c3e5bcaefbc52ab482333ffa62b77e9e65
5
+ SHA512:
6
+ metadata.gz: 3f29692f4c50d16bcbaeb1d717ad40a578be5506281d99e462efc3902e52482ae6fa2230022778288b803a0d92da8ae2d07363c49680af7cf94705f4b0b34070
7
+ data.tar.gz: 9cdee8a69ff9a491c3de205413911fd0803670dd5018177fda206fc479bc487e891eca785cf9f04ad70a30e65230842403e5824f08e9b7d3df40ca8776cad8df
@@ -0,0 +1,31 @@
1
+ module TemplateMethod
2
+ def self.activate(target_class=nil)
3
+ target_class ||= Object
4
+
5
+ return if target_class.ancestors.include?(TemplateMethod::Macro)
6
+
7
+ target_class.extend(TemplateMethod::Macro)
8
+ end
9
+
10
+ def self.activated?(target_class=nil)
11
+ target_class ||= Object
12
+
13
+ subject = subject_class(target_class)
14
+
15
+ Macro.macro_methods.each do |mthd|
16
+ if not subject.respond_to?(mthd)
17
+ return false
18
+ end
19
+ end
20
+
21
+ true
22
+ end
23
+
24
+ def self.subject_class(subject)
25
+ if [Module, Class].include?(subject)
26
+ return subject
27
+ else
28
+ return subject.class
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ module TemplateMethod
2
+ module Controls
3
+ module Clean
4
+ class Example
5
+ end
6
+
7
+ def self.example
8
+ Example.new
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module TemplateMethod
2
+ module Controls
3
+ module Extended
4
+ def self.example
5
+ Example.new
6
+ end
7
+
8
+ class Example
9
+ extend ::TemplateMethod
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,13 @@
1
+ module TemplateMethod
2
+ module Controls
3
+ module Included
4
+ def self.example
5
+ Example.new
6
+ end
7
+
8
+ class Example
9
+ include ::TemplateMethod
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,101 @@
1
+ module TemplateMethod
2
+ module Controls
3
+ module TemplateMethod
4
+ def self.example
5
+ Example.new
6
+ end
7
+
8
+ class Example
9
+ include ::TemplateMethod
10
+ template_method :some_method
11
+ end
12
+
13
+ module Body
14
+ def self.example
15
+ Example.new
16
+ end
17
+
18
+ class Example
19
+ include ::TemplateMethod
20
+ template_method :some_method do |*|
21
+ :something
22
+ end
23
+ end
24
+ end
25
+
26
+ module Implemented
27
+ def self.example
28
+ Example.new
29
+ end
30
+
31
+ class Example
32
+ include ::TemplateMethod
33
+ template_method :some_method
34
+
35
+ def some_method
36
+ "some concrete result"
37
+ end
38
+ end
39
+
40
+ module AlreadyImplemented
41
+ def self.example
42
+ Example.new
43
+ end
44
+
45
+ class Example
46
+ def some_method
47
+ "some concrete result"
48
+ end
49
+
50
+ include ::TemplateMethod
51
+ template_method :some_method
52
+ end
53
+ end
54
+
55
+ module Module
56
+ def self.example
57
+ Example.new
58
+ end
59
+
60
+ class Example
61
+ include ::TemplateMethod
62
+ template_method :some_method
63
+
64
+ module SomeModule
65
+ def some_method
66
+ "some module concrete result"
67
+ end
68
+ end
69
+ include SomeModule
70
+ end
71
+ end
72
+ end
73
+
74
+ module Variant
75
+ def self.example
76
+ Example.new
77
+ end
78
+
79
+ class Example
80
+ include ::TemplateMethod
81
+ template_method! :some_method
82
+
83
+ def some_method
84
+ 'some concrete result'
85
+ end
86
+ end
87
+
88
+ module NotImplemented
89
+ def self.example
90
+ Example.new
91
+ end
92
+
93
+ class Example
94
+ include ::TemplateMethod
95
+ template_method! :some_method
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,4 @@
1
+ require 'template_method/controls/template_method'
2
+ require 'template_method/controls/clean'
3
+ require 'template_method/controls/extended'
4
+ require 'template_method/controls/included'
@@ -0,0 +1,3 @@
1
+ module TemplateMethod
2
+ Error = Class.new(RuntimeError)
3
+ end
@@ -0,0 +1,40 @@
1
+ module TemplateMethod
2
+ module Macro
3
+ def template_method_module
4
+ @template_method_module ||= include_template_method_module
5
+ end
6
+
7
+ def include_template_method_module
8
+ mod = Module.new
9
+ include mod
10
+ mod
11
+ end
12
+
13
+ def template_method_macro(method_name, &implementation)
14
+ implementation ||= proc { |*| nil }
15
+
16
+ inherit = true
17
+ concrete_implementation_exists = method_defined?(method_name, inherit)
18
+ if concrete_implementation_exists
19
+ return
20
+ end
21
+
22
+ template_method_module.define_method(method_name, &implementation)
23
+ end
24
+ alias :template_method :template_method_macro
25
+
26
+ def template_method_variant_macro(method_name)
27
+ template_method_macro(method_name) do
28
+ raise TemplateMethod::Error, "Implementation is required (Method name: #{method_name})"
29
+ end
30
+ end
31
+ alias :template_method! :template_method_variant_macro
32
+
33
+ def self.macro_methods
34
+ [
35
+ 'template_method',
36
+ 'template_method!'
37
+ ]
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,9 @@
1
+ module TemplateMethod
2
+ def self.included(cls)
3
+ activate(cls)
4
+ end
5
+
6
+ def self.extended(cls)
7
+ activate(cls)
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'template_method/error'
2
+ require 'template_method/macro'
3
+ require 'template_method/activate'
4
+ require 'template_method/template_method'
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-template_method
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-03-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: test_bench
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: " "
28
+ email: opensource@eventide-project.org
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/template_method.rb
34
+ - lib/template_method/activate.rb
35
+ - lib/template_method/controls.rb
36
+ - lib/template_method/controls/clean.rb
37
+ - lib/template_method/controls/extended.rb
38
+ - lib/template_method/controls/included.rb
39
+ - lib/template_method/controls/template_method.rb
40
+ - lib/template_method/error.rb
41
+ - lib/template_method/macro.rb
42
+ - lib/template_method/template_method.rb
43
+ homepage: https://github.com/eventide-project/template-method
44
+ licenses:
45
+ - MIT
46
+ metadata: {}
47
+ post_install_message:
48
+ rdoc_options: []
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 2.7.0
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubygems_version: 3.5.6
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: Template method declaration
66
+ test_files: []