evt-initializer 0.1.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
+ 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: []