smart_initializer 0.2.0 → 0.5.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.
@@ -33,17 +33,19 @@ module SmartCore::Initializer::DSL
33
33
  #
34
34
  # @api private
35
35
  # @since 0.1.0
36
+ # @version 0.3.2
36
37
  def inherited(child_klass)
37
- child_klass.instance_eval do
38
+ child_klass.instance_exec(__initializer_settings__) do |init_settings|
38
39
  instance_variable_set(:@__params__, SmartCore::Initializer::Attribute::List.new)
39
40
  instance_variable_set(:@__options__, SmartCore::Initializer::Attribute::List.new)
40
41
  instance_variable_set(:@__init_extensions__, SmartCore::Initializer::Extensions::List.new)
41
42
  instance_variable_set(:@__definer__, SmartCore::Initializer::Constructor::Definer.new(self))
42
43
  instance_variable_set(:@__deflock__, SmartCore::Engine::Lock.new)
43
- instance_variable_set(:@__initializer_settings__, __initializer_settings__.dup)
44
+ instance_variable_set(:@__initializer_settings__, init_settings.dup)
44
45
  end
45
46
  child_klass.extend(ClassMethods)
46
47
  SmartCore::Initializer::DSL::Inheritance.inherit(base: self, child: child_klass)
48
+ child_klass.singleton_class.prepend(ClassInheritance)
47
49
  super
48
50
  end
49
51
  end
@@ -75,7 +77,7 @@ module SmartCore::Initializer::DSL
75
77
  @__init_extensions__
76
78
  end
77
79
 
78
- # @return [SmartCore::Initializer::Attribute::Definer]
80
+ # @return [SmartCore::Initializer::Constructor::Definer]
79
81
  #
80
82
  # @api private
81
83
  # @since 0.1.0
@@ -106,11 +108,14 @@ module SmartCore::Initializer::DSL
106
108
  # @option cast [Boolean]
107
109
  # @option privacy [String, Symbol]
108
110
  # @option finalize [String, Symbol, Proc]
111
+ # @option read_only [Boolean]
112
+ # @option as [NilClass, String, Symbol]
109
113
  # @param dynamic_options [Hash<Symbol,Any>]
110
114
  # @return [void]
111
115
  #
112
116
  # @api public
113
117
  # @since 0.1.0
118
+ # @version 0.4.0
114
119
  def param(
115
120
  name,
116
121
  type = __initializer_settings__.generic_type_object,
@@ -118,10 +123,12 @@ module SmartCore::Initializer::DSL
118
123
  finalize: SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
119
124
  cast: SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
120
125
  type_system: __initializer_settings__.type_system,
126
+ read_only: SmartCore::Initializer::Attribute::Parameters::DEFAULT_READ_ONLY,
127
+ as: SmartCore::Initializer::Attribute::Parameters::DEFAULT_AS,
121
128
  **dynamic_options
122
129
  )
123
130
  __definer__.define_parameter(
124
- name, type, type_system, privacy, finalize, cast, dynamic_options
131
+ name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options
125
132
  )
126
133
  end
127
134
 
@@ -140,11 +147,14 @@ module SmartCore::Initializer::DSL
140
147
  # @option privacy [String, Symbol]
141
148
  # @option finalize [String, Symbol, Proc]
142
149
  # @option type_system [String, Symbol]
150
+ # @option read_only [Boolean]
151
+ # @option as [NilClass, String, Symbol]
143
152
  # @param dynamic_options [Hash<Symbol,Any>]
144
153
  # @return [void]
145
154
  #
146
155
  # @api public
147
156
  # @since 0.1.0
157
+ # @version 0.4.0
148
158
  def option(
149
159
  name,
150
160
  type = __initializer_settings__.generic_type_object,
@@ -152,10 +162,12 @@ module SmartCore::Initializer::DSL
152
162
  finalize: SmartCore::Initializer::Attribute::Parameters::DEFAULT_FINALIZER,
153
163
  cast: SmartCore::Initializer::Attribute::Parameters::DEFAULT_CAST_BEHAVIOUR,
154
164
  type_system: __initializer_settings__.type_system,
165
+ read_only: SmartCore::Initializer::Attribute::Parameters::DEFAULT_READ_ONLY,
166
+ as: SmartCore::Initializer::Attribute::Parameters::DEFAULT_AS,
155
167
  **dynamic_options
156
168
  )
157
169
  __definer__.define_option(
158
- name, type, type_system, privacy, finalize, cast, dynamic_options
170
+ name, type, type_system, privacy, finalize, cast, read_only, as, dynamic_options
159
171
  )
160
172
  end
161
173
 
@@ -176,5 +188,6 @@ module SmartCore::Initializer::DSL
176
188
  def ext_init(&block)
177
189
  __definer__.define_init_extension(block)
178
190
  end
191
+ alias_method :extend_initialization_flow, :ext_init
179
192
  end
180
193
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.3.0
5
+ module SmartCore::Initializer::Functionality
6
+ # @return [NilClass]
7
+ #
8
+ # @api private
9
+ # @since 0.3.0
10
+ INITIAL_TYPE_SYSTEM = nil
11
+
12
+ class << self
13
+ # @option type_system [String, Symbol, NilClass]
14
+ # @return [Module]
15
+ #
16
+ # @api private
17
+ # @since 0.3.0
18
+ def includable_module(type_system: INITIAL_TYPE_SYSTEM)
19
+ Module.new.tap do |extension|
20
+ extension.singleton_class.define_method(:included) do |base_klass|
21
+ base_klass.include(::SmartCore::Initializer)
22
+ base_klass.__initializer_settings__.type_system = type_system
23
+ end
24
+ end
25
+ end
26
+
27
+ # @param base_klass [Class]
28
+ # @return [void]
29
+ #
30
+ # @api private
31
+ # @since 0.3.0
32
+ def seed_to(base_klass)
33
+ base_klass.extend(SmartCore::Initializer::DSL)
34
+ base_klass.include(SmartCore::Initializer::InstanceAttributeAccessing)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @api private
4
+ # @since 0.3.0
5
+ module SmartCore::Initializer::InstanceAttributeAccessing
6
+ # @return [Hash<Symbol,Any>]
7
+ #
8
+ # @api public
9
+ # @since 0.3.0
10
+ def __params__
11
+ __collect_params__
12
+ end
13
+
14
+ # @return [Hash<Symbol,Any>]
15
+ #
16
+ # @api public
17
+ # @since 0.3.0
18
+ def __options__
19
+ __collect_options__
20
+ end
21
+
22
+ # @return [Hash<Symbol,Any>]
23
+ #
24
+ # @api public
25
+ # @since 0.3.0
26
+ def __attributes__
27
+ __collect_params__.merge(__collect_options__)
28
+ end
29
+
30
+ private
31
+
32
+ # @return [Hash<Symbol,Any>]
33
+ #
34
+ # @api private
35
+ # @since 0.3.0
36
+ def __collect_params__
37
+ self.class.__params__.each_with_object({}) do |param, memo|
38
+ memo[param.name] = instance_variable_get("@#{param.name}")
39
+ end
40
+ end
41
+
42
+ # @return [Hash<Symbol,Any>]
43
+ #
44
+ # @api private
45
+ # @since 0.3.0
46
+ def __collect_options__
47
+ self.class.__options__.each_with_object({}) do |option, memo|
48
+ memo[option.name] = instance_variable_get("@#{option.name}")
49
+ end
50
+ end
51
+ end
@@ -5,7 +5,7 @@
5
5
  module SmartCore::Initializer::Plugins
6
6
  require_relative 'plugins/abstract'
7
7
  require_relative 'plugins/registry'
8
- require_relative 'plugins/registry_interface.rb'
8
+ require_relative 'plugins/registry_interface'
9
9
  require_relative 'plugins/access_mixin'
10
10
  require_relative 'plugins/thy_types'
11
11
 
@@ -48,8 +48,8 @@ class SmartCore::Initializer::Plugins::Abstract
48
48
  #
49
49
  # @api private
50
50
  # @since 0.1.0
51
- def __thread_safe__
52
- @__lock__.synchronize { yield }
51
+ def __thread_safe__(&block)
52
+ @__lock__.synchronize(&block)
53
53
  end
54
54
  end
55
55
  end
@@ -6,6 +6,7 @@ module SmartCore
6
6
  #
7
7
  # @api public
8
8
  # @since 0.1.0
9
- VERSION = '0.2.0'
9
+ # @version 0.5.0
10
+ VERSION = '0.5.0'
10
11
  end
11
12
  end
@@ -30,13 +30,14 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ['lib']
32
32
 
33
- spec.add_dependency 'smart_engine', '~> 0.6'
34
- spec.add_dependency 'smart_types', '~> 0.1.0'
33
+ spec.add_dependency 'smart_engine', '~> 0.11'
34
+ spec.add_dependency 'smart_types', '~> 0.4'
35
35
  spec.add_dependency 'qonfig', '~> 0.24'
36
36
 
37
- spec.add_development_dependency 'bundler', '~> 2.1'
37
+ spec.add_development_dependency 'bundler', '~> 2.2'
38
38
  spec.add_development_dependency 'rake', '~> 13.0'
39
- spec.add_development_dependency 'rspec', '~> 3.9'
40
- spec.add_development_dependency 'armitage-rubocop', '~> 0.83'
41
- spec.add_development_dependency 'simplecov', '~> 0.18'
39
+ spec.add_development_dependency 'rspec', '~> 3.10'
40
+ spec.add_development_dependency 'armitage-rubocop', '~> 1.7'
41
+ spec.add_development_dependency 'simplecov', '~> 0.21'
42
+ spec.add_development_dependency 'pry', '~> 0.13'
42
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smart_initializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-16 00:00:00.000000000 Z
11
+ date: 2021-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: smart_engine
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.6'
19
+ version: '0.11'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.6'
26
+ version: '0.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: smart_types
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.0
33
+ version: '0.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.0
40
+ version: '0.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: qonfig
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.1'
61
+ version: '2.2'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.1'
68
+ version: '2.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,42 +86,56 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '3.9'
89
+ version: '3.10'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '3.9'
96
+ version: '3.10'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: armitage-rubocop
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0.83'
103
+ version: '1.7'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0.83'
110
+ version: '1.7'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: simplecov
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0.18'
117
+ version: '0.21'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0.18'
124
+ version: '0.21'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.13'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '0.13'
125
139
  description: A simple and convenient way to declare complex constructors
126
140
  email:
127
141
  - iamdaiver@gmail.com
@@ -132,7 +146,6 @@ files:
132
146
  - ".gitignore"
133
147
  - ".rspec"
134
148
  - ".rubocop.yml"
135
- - ".travis.yml"
136
149
  - CHANGELOG.md
137
150
  - CODE_OF_CONDUCT.md
138
151
  - Gemfile
@@ -156,7 +169,6 @@ files:
156
169
  - lib/smart_core/initializer/attribute/finalizer/instance_method.rb
157
170
  - lib/smart_core/initializer/attribute/list.rb
158
171
  - lib/smart_core/initializer/attribute/parameters.rb
159
- - lib/smart_core/initializer/configurable_module.rb
160
172
  - lib/smart_core/initializer/configuration.rb
161
173
  - lib/smart_core/initializer/constructor.rb
162
174
  - lib/smart_core/initializer/constructor/definer.rb
@@ -167,6 +179,8 @@ files:
167
179
  - lib/smart_core/initializer/extensions/abstract.rb
168
180
  - lib/smart_core/initializer/extensions/ext_init.rb
169
181
  - lib/smart_core/initializer/extensions/list.rb
182
+ - lib/smart_core/initializer/functionality.rb
183
+ - lib/smart_core/initializer/instance_attribute_accessing.rb
170
184
  - lib/smart_core/initializer/plugins.rb
171
185
  - lib/smart_core/initializer/plugins/abstract.rb
172
186
  - lib/smart_core/initializer/plugins/access_mixin.rb
@@ -208,7 +222,7 @@ metadata:
208
222
  homepage_uri: https://github.com/smart-rb/smart_initializer
209
223
  source_code_uri: https://github.com/smart-rb/smart_initializer
210
224
  changelog_uri: https://github.com/smart-rb/smart_initializer/blob/master/CHANGELOG.md
211
- post_install_message:
225
+ post_install_message:
212
226
  rdoc_options: []
213
227
  require_paths:
214
228
  - lib
@@ -223,8 +237,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
237
  - !ruby/object:Gem::Version
224
238
  version: '0'
225
239
  requirements: []
226
- rubygems_version: 3.1.2
227
- signing_key:
240
+ rubygems_version: 3.2.3
241
+ signing_key:
228
242
  specification_version: 4
229
243
  summary: Initializer DSL
230
244
  test_files: []
@@ -1,51 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- os: linux
5
- dist: xenial
6
- before_install: gem install bundler
7
- script:
8
- - bundle exec rake rubocop
9
- - bundle exec rake rspec
10
- jobs:
11
- fast_finish: true
12
- include:
13
- - rvm: 2.4.10
14
- gemfile: gemfiles/with_external_deps.gemfile
15
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
16
- - rvm: 2.5.8
17
- gemfile: gemfiles/with_external_deps.gemfile
18
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
19
- - rvm: 2.6.6
20
- gemfile: gemfiles/with_external_deps.gemfile
21
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
22
- - rvm: 2.7.1
23
- gemfile: gemfiles/with_external_deps.gemfile
24
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
25
- - rvm: ruby-head
26
- gemfile: gemfiles/with_external_deps.gemfile
27
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
28
- - rvm: jruby-head
29
- gemfile: gemfiles/with_external_deps.gemfile
30
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
31
- - rvm: truffleruby
32
- gemfile: gemfiles/with_external_deps.gemfile
33
- env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
34
- - rvm: 2.4.10
35
- gemfile: gemfiles/without_external_deps.gemfile
36
- - rvm: 2.5.8
37
- gemfile: gemfiles/without_external_deps.gemfile
38
- - rvm: 2.6.6
39
- gemfile: gemfiles/without_external_deps.gemfile
40
- - rvm: 2.7.1
41
- gemfile: gemfiles/without_external_deps.gemfile
42
- - rvm: ruby-head
43
- gemfile: gemfiles/without_external_deps.gemfile
44
- - rvm: jruby-head
45
- gemfile: gemfiles/without_external_deps.gemfile
46
- - rvm: truffleruby
47
- gemfile: gemfiles/without_external_deps.gemfile
48
- allow_failures:
49
- - rvm: ruby-head
50
- - rvm: jruby-head
51
- - rvm: truffleruby