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 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
@@ -0,0 +1,8 @@
1
+ require 'attribute'
2
+
3
+ require 'initializer/parameter'
4
+ require 'initializer/generator'
5
+ require 'initializer/visibility'
6
+ require 'initializer/macro'
7
+ require 'initializer/activate'
8
+
@@ -0,0 +1,11 @@
1
+ module Initializer
2
+ def self.activate(target_class=nil)
3
+ target_class ||= Object
4
+
5
+ macro_module = Initializer::Macro
6
+
7
+ return if target_class.is_a? macro_module
8
+
9
+ target_class.extend(macro_module)
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ require 'initializer/controls/proof'
2
+ require 'initializer/controls/attributes'
3
+ require 'initializer/controls/initialized'
4
+ require 'initializer/controls/visibility'
5
+ require 'initializer/controls/default_values'
@@ -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: []