evt-initializer 0.1.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 +7 -0
- data/lib/initializer.rb +8 -0
- data/lib/initializer/activate.rb +11 -0
- data/lib/initializer/controls.rb +5 -0
- data/lib/initializer/controls/attributes.rb +21 -0
- data/lib/initializer/controls/default_values.rb +20 -0
- data/lib/initializer/controls/initialized.rb +15 -0
- data/lib/initializer/controls/proof.rb +49 -0
- data/lib/initializer/controls/visibility.rb +27 -0
- data/lib/initializer/generator.rb +137 -0
- data/lib/initializer/macro.rb +18 -0
- data/lib/initializer/parameter.rb +88 -0
- data/lib/initializer/visibility.rb +26 -0
- metadata +83 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7a78fde206a2e6b100a1ebae3c94065a0fe7c012
|
4
|
+
data.tar.gz: 4798658ec4dc8fbb223a58915b7d7b8dcaef444c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0fb78ff7bc02791fcc4e68509314c2ed75d9cacad044462c14fc13dc6786f4df15f066cd9724747b13a951536dd4f8dd7a5c2650d0a94faa16d6f277f5777004
|
7
|
+
data.tar.gz: a41f3c190d13616fdb8ca6a47ea9a43686d305e6beb4396af588b80be3066c486202db789b290e8140343473cd56bdcf34439bd51a04b863153b29ffc7cd0430
|
data/lib/initializer.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Initializer
|
2
|
+
module Controls
|
3
|
+
module Attributes
|
4
|
+
def self.some_attr
|
5
|
+
'some value'
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.some_other_attr
|
9
|
+
'some other value'
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.another_attr
|
13
|
+
'another value'
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.no_attr
|
17
|
+
'no attr'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Initializer
|
2
|
+
module Controls
|
3
|
+
module DefaultValues
|
4
|
+
class Example
|
5
|
+
include Initializer::Controls::Proof
|
6
|
+
|
7
|
+
initializer r(:some_attr, Attributes.some_attr),
|
8
|
+
w(:some_other_attr, Attributes.some_other_attr),
|
9
|
+
rw(:another_attr, Attributes.another_attr),
|
10
|
+
na(:no_attr, Attributes.no_attr),
|
11
|
+
rw(:lazy_attr, lazy('1 + 1')),
|
12
|
+
r(:symbol_attr, :some_symbol)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.example
|
16
|
+
Example.new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Initializer
|
2
|
+
module Controls
|
3
|
+
module Initialized
|
4
|
+
class Example
|
5
|
+
include Initializer::Controls::Proof
|
6
|
+
|
7
|
+
initializer :some_attr, :some_other_attr, :another_attr
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.example
|
11
|
+
Example.new(Attributes.some_attr, Attributes.some_other_attr, Attributes.another_attr)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Initializer
|
2
|
+
module Controls
|
3
|
+
module Proof
|
4
|
+
def self.included(cls)
|
5
|
+
cls.extend ClassProof
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassProof
|
9
|
+
def reader?(attr_name)
|
10
|
+
reads?(attr_name) && !writes?(attr_name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def writer?(attr_name)
|
14
|
+
writes?(attr_name) && !reads?(attr_name)
|
15
|
+
end
|
16
|
+
|
17
|
+
def accessor?(attr_name)
|
18
|
+
reads?(attr_name) && writes?(attr_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def no_attr?(attr_name)
|
22
|
+
!accessor?(attr_name)
|
23
|
+
end
|
24
|
+
|
25
|
+
def reads?(attr_name)
|
26
|
+
method_defined? attr_name
|
27
|
+
end
|
28
|
+
|
29
|
+
def writes?(attr_name)
|
30
|
+
method_defined? :"#{attr_name}="
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialized?(check_no_attr: nil)
|
35
|
+
check_no_attr ||= false
|
36
|
+
|
37
|
+
attrs_equal = @some_attr == Attributes.some_attr &&
|
38
|
+
@some_other_attr == Attributes.some_other_attr &&
|
39
|
+
@another_attr == Attributes.another_attr
|
40
|
+
|
41
|
+
unless check_no_attr
|
42
|
+
return attrs_equal
|
43
|
+
else
|
44
|
+
return attrs_equal && (@no_attr == Attributes.no_attr)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Initializer
|
2
|
+
module Controls
|
3
|
+
module Visibility
|
4
|
+
class Example
|
5
|
+
include Initializer::Controls::Proof
|
6
|
+
|
7
|
+
initializer r(:some_attr), w(:some_other_attr), rw(:another_attr), na(:no_attr)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.example
|
11
|
+
Example.new(Attributes.some_attr, Attributes.some_other_attr, Attributes.another_attr, Attributes.no_attr)
|
12
|
+
end
|
13
|
+
|
14
|
+
module Override
|
15
|
+
class Example
|
16
|
+
include Initializer::Controls::Proof
|
17
|
+
|
18
|
+
initializer :some_attr, rw(:some_other_attr), :another_attr, :visibility => :writer
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.example
|
22
|
+
Example.new(Attributes.some_attr, Attributes.some_other_attr, Attributes.another_attr)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
module Initializer
|
2
|
+
class Generator
|
3
|
+
DEFAULT_VISIBILITY = :reader
|
4
|
+
|
5
|
+
attr_reader :target_class
|
6
|
+
attr_reader :parameters
|
7
|
+
|
8
|
+
def initialize(target_class, parameters)
|
9
|
+
@target_class = target_class
|
10
|
+
@parameters = parameters
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.build(target_class, parameters)
|
14
|
+
parameters, options = separate_parameters(parameters)
|
15
|
+
parameters = NormalizeParameters.(parameters, options.visibility)
|
16
|
+
instance = new target_class, parameters
|
17
|
+
instance
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.call(target_class, parameters)
|
21
|
+
instance = build target_class, parameters
|
22
|
+
instance.call
|
23
|
+
end
|
24
|
+
|
25
|
+
def call
|
26
|
+
define_attributes
|
27
|
+
Define.(target_class, parameters)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.separate_parameters(parameters)
|
31
|
+
options = { :visibility => DEFAULT_VISIBILITY }
|
32
|
+
options = parameters.pop if options?(parameters)
|
33
|
+
options.extend InitializerOptions
|
34
|
+
|
35
|
+
return parameters, options
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.options?(parameters)
|
39
|
+
parameters.last.is_a? Hash
|
40
|
+
end
|
41
|
+
|
42
|
+
def define_attributes
|
43
|
+
parameters.each do |p|
|
44
|
+
::Attribute::Define.(target_class, p.name, p.visibility)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Define
|
49
|
+
attr_reader :target_class
|
50
|
+
attr_reader :parameters
|
51
|
+
|
52
|
+
def initialize(target_class, parameters)
|
53
|
+
@target_class = target_class
|
54
|
+
@parameters = parameters
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.call(target_class, parameters)
|
58
|
+
parameters = parameters.map do |parameter|
|
59
|
+
parameter.extend InitializerParameter
|
60
|
+
end
|
61
|
+
instance = new target_class, parameters
|
62
|
+
instance.()
|
63
|
+
end
|
64
|
+
|
65
|
+
def call
|
66
|
+
target_class.class_eval(initializer_definition)
|
67
|
+
end
|
68
|
+
|
69
|
+
def variable_assignment_statements
|
70
|
+
variable_assignments = parameters.inject("") do |assignments, parameter|
|
71
|
+
"#{assignments}#{parameter.assignment_statement}\n"
|
72
|
+
end
|
73
|
+
variable_assignments
|
74
|
+
end
|
75
|
+
|
76
|
+
def parameter_list
|
77
|
+
parameter_names = parameters.map{ |p| p.definition }.to_a
|
78
|
+
parameter_names = parameter_names.join(", ")
|
79
|
+
parameter_names
|
80
|
+
end
|
81
|
+
|
82
|
+
def initializer_definition
|
83
|
+
"
|
84
|
+
def initialize(#{parameter_list})
|
85
|
+
#{variable_assignment_statements}
|
86
|
+
end
|
87
|
+
"
|
88
|
+
end
|
89
|
+
|
90
|
+
module InitializerParameter
|
91
|
+
def variable_name
|
92
|
+
"@#{name}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def assignment_statement
|
96
|
+
"#{variable_name} = #{name}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class NormalizeParameters
|
102
|
+
attr_reader :parameters
|
103
|
+
attr_reader :default_visibility
|
104
|
+
|
105
|
+
def initialize(parameters, default_visibility)
|
106
|
+
@parameters = parameters
|
107
|
+
@default_visibility = default_visibility
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.call(parameters, default_visibility)
|
111
|
+
instance = new parameters, default_visibility
|
112
|
+
instance.()
|
113
|
+
end
|
114
|
+
|
115
|
+
def call
|
116
|
+
@parameters = parameters.map do |p|
|
117
|
+
normalize p
|
118
|
+
end
|
119
|
+
parameters
|
120
|
+
end
|
121
|
+
|
122
|
+
def normalize(parameter)
|
123
|
+
if parameter.is_a? Symbol
|
124
|
+
return Parameter.new parameter, default_visibility
|
125
|
+
else
|
126
|
+
return parameter
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
module InitializerOptions
|
132
|
+
def visibility
|
133
|
+
self[:visibility]
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Initializer
|
2
|
+
def self.included(base)
|
3
|
+
base.extend Macro
|
4
|
+
end
|
5
|
+
|
6
|
+
module Macro
|
7
|
+
extend self
|
8
|
+
|
9
|
+
def self.extended(obj)
|
10
|
+
obj.extend Visibility
|
11
|
+
end
|
12
|
+
|
13
|
+
def initializer_macro(*parameters)
|
14
|
+
Generator.(self, parameters)
|
15
|
+
end
|
16
|
+
alias :initializer :initializer_macro
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Initializer
|
2
|
+
class Parameter
|
3
|
+
attr_reader :name
|
4
|
+
attr_reader :visibility
|
5
|
+
attr_reader :default
|
6
|
+
|
7
|
+
def initialize(name, visibility)
|
8
|
+
@name = name
|
9
|
+
@visibility = visibility
|
10
|
+
end
|
11
|
+
|
12
|
+
def default_value(value)
|
13
|
+
@default = value
|
14
|
+
end
|
15
|
+
|
16
|
+
def definition
|
17
|
+
if default
|
18
|
+
return "#{name}=#{default.code_fragment}"
|
19
|
+
else
|
20
|
+
return name
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.build(name, visibility, default=nil)
|
25
|
+
instance = new(name, visibility)
|
26
|
+
|
27
|
+
default ||= :no_default_value
|
28
|
+
|
29
|
+
unless default == :no_default_value
|
30
|
+
default = build_default_value(default)
|
31
|
+
instance.default_value(default)
|
32
|
+
end
|
33
|
+
|
34
|
+
instance
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.build_default_value(default_value)
|
38
|
+
result = default_value
|
39
|
+
|
40
|
+
unless default_value.respond_to?(:code_fragment)
|
41
|
+
if [String, Symbol].include?(result.class)
|
42
|
+
result = StringDefaultValue.new(result.to_s)
|
43
|
+
else
|
44
|
+
result = Statement.new(result)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
result
|
48
|
+
end
|
49
|
+
|
50
|
+
def visibility?(visibility)
|
51
|
+
self.visibility == visibility
|
52
|
+
end
|
53
|
+
|
54
|
+
def reader?
|
55
|
+
visibility? :reader
|
56
|
+
end
|
57
|
+
|
58
|
+
def writer?
|
59
|
+
visibility? :writer
|
60
|
+
end
|
61
|
+
|
62
|
+
def accessor?
|
63
|
+
visibility? :accessor
|
64
|
+
end
|
65
|
+
|
66
|
+
def no_accessor?
|
67
|
+
visibility? :no_accessor
|
68
|
+
end
|
69
|
+
|
70
|
+
class StringDefaultValue
|
71
|
+
def initialize(value)
|
72
|
+
@value = value
|
73
|
+
end
|
74
|
+
|
75
|
+
def code_fragment
|
76
|
+
"'#{@value}'"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class Statement
|
81
|
+
attr_reader :code_fragment
|
82
|
+
|
83
|
+
def initialize(code_fragment)
|
84
|
+
@code_fragment = code_fragment
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Initializer
|
2
|
+
module Visibility
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def r(parameter_name, default=:no_default_value)
|
6
|
+
return Parameter.build(parameter_name, :reader, default)
|
7
|
+
end
|
8
|
+
|
9
|
+
def w(parameter_name, default=:no_default_value)
|
10
|
+
return Parameter.build(parameter_name, :writer, default)
|
11
|
+
end
|
12
|
+
|
13
|
+
def a(parameter_name, default=:no_default_value)
|
14
|
+
return Parameter.build(parameter_name, :accessor, default)
|
15
|
+
end
|
16
|
+
alias :rw :a
|
17
|
+
|
18
|
+
def na(parameter_name, default=:no_default_value)
|
19
|
+
return Parameter.build(parameter_name, :no_accessor, default)
|
20
|
+
end
|
21
|
+
|
22
|
+
def lazy(statement)
|
23
|
+
Parameter::Statement.new(statement)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: evt-initializer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- The Eventide Project
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: evt-attribute
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ntl-test_bench
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: " "
|
42
|
+
email: opensource@eventide-project.org
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- lib/initializer.rb
|
48
|
+
- lib/initializer/activate.rb
|
49
|
+
- lib/initializer/controls.rb
|
50
|
+
- lib/initializer/controls/attributes.rb
|
51
|
+
- lib/initializer/controls/default_values.rb
|
52
|
+
- lib/initializer/controls/initialized.rb
|
53
|
+
- lib/initializer/controls/proof.rb
|
54
|
+
- lib/initializer/controls/visibility.rb
|
55
|
+
- lib/initializer/generator.rb
|
56
|
+
- lib/initializer/macro.rb
|
57
|
+
- lib/initializer/parameter.rb
|
58
|
+
- lib/initializer/visibility.rb
|
59
|
+
homepage: https://github.com/eventide-project/error-data
|
60
|
+
licenses:
|
61
|
+
- MIT
|
62
|
+
metadata: {}
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 2.3.3
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
requirements: []
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 2.5.2
|
80
|
+
signing_key:
|
81
|
+
specification_version: 4
|
82
|
+
summary: Generates initializers and attributes
|
83
|
+
test_files: []
|