evt-template_method 2.0.0.0

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