dry-initializer 0.0.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9c8a4ecc08b8c494713d17b0af1191257c6eae96
4
- data.tar.gz: 5019f46f22eb9c37904b42f67620d2f5d2ee747f
3
+ metadata.gz: a7d86e04a313435b96cb103dc1f28a9427d7e799
4
+ data.tar.gz: b4b2556846b6e0ebee4b61808a28afc0c367290e
5
5
  SHA512:
6
- metadata.gz: 278434f8949064eb547f6c481e94bff71080eda6c6ff95586cc647259ba842301dc850022c6fd88af80ac37985394829a9c93788917b7755ef6011a0c595c1bb
7
- data.tar.gz: 6afa297f5e3a180d79366fb14750b787a7dc9b920118da9a0f806f37f1c3dcec1d0d6e14767b23dae284ff962099ea5aba0bd486607352a8825f1298f59eb204
6
+ metadata.gz: 1d0e559d62195cab0d72796b00a65ad0a6e777dc16076b3a692b4145f5366d9a9574d1eb52187ac19a222e71922bf4479fc49ceffbd7fd1d6a35e57e395ca864
7
+ data.tar.gz: 3e64a46b03f6956ce80de18fb5f99b7aed2eb61817617d106719222c6b2405073b6b217db4ac79d51765d2d9b5c5f99eb02624d082be8b259890f3751dc86b93
data/CHANGELOG.md CHANGED
@@ -1,3 +1,16 @@
1
+ ## v0.1.0 2016-04-26
2
+
3
+ Class DSL splitted to mixin and container versions (thanks to @AMHOL for the idea).
4
+ Backward compatibility is broken.
5
+
6
+ ### Changed (backward-incompatible changes)
7
+
8
+ * Use `extend Dry::Initializer::Mixin` instead of `extend Dry::Initializer` (nepalez)
9
+
10
+ ### Added
11
+
12
+ * Use `include Dry::Initializer.define(&block)` as an alternative to extending the class (nepalez)
13
+
1
14
  ## v0.0.1 2016-04-09
2
15
 
3
16
  First public release
data/README.md CHANGED
@@ -42,7 +42,7 @@ $ gem install dry-initializer
42
42
  require 'dry-initializer'
43
43
 
44
44
  class User
45
- extend Dry::Initializer
45
+ extend Dry::Initializer::Mixin
46
46
 
47
47
  # Params of the initializer along with corresponding readers
48
48
  param :name, type: String
@@ -76,13 +76,51 @@ class User
76
76
  end
77
77
  ```
78
78
 
79
+ ### Container Version
80
+
81
+ Instead of extending a class with the `Dry::Initializer::Mixin`, you can include a container with the initializer:
82
+
83
+ ```ruby
84
+ require 'dry-initializer'
85
+
86
+ class User
87
+ # notice `{}` syntax for the block, not `do..end`
88
+ include Dry::Initializer.define {
89
+ param :name, type: String
90
+ param :role, default: proc { 'customer' }
91
+ option :admin, default: proc { false }
92
+ }
93
+ end
94
+ ```
95
+
96
+ Now you do not pollute a class with new variables, but isolate them in a special "container" module with the initializer and attribute readers. This method should be preferred when you don't need subclassing.
97
+
98
+ If you still need the DSL (`param` and `option`) to be inherited, use the direct extension:
99
+
100
+ ```ruby
101
+ require 'dry-initializer'
102
+
103
+ class BaseService
104
+ extend Dry::Initializer::Mixin
105
+ alias_method :dependency, :param
106
+ end
107
+
108
+ class ShowUser < BaseService
109
+ dependency :user
110
+
111
+ def call
112
+ puts user&.name
113
+ end
114
+ end
115
+ ```
116
+
79
117
  ### Params and Options
80
118
 
81
119
  Use `param` to define plain argument:
82
120
 
83
121
  ```ruby
84
122
  class User
85
- extend Dry::Initializer
123
+ extend Dry::Initializer::Mixin
86
124
 
87
125
  param :name
88
126
  param :email
@@ -97,7 +135,7 @@ Use `option` to define named (hash) argument:
97
135
 
98
136
  ```ruby
99
137
  class User
100
- extend Dry::Initializer
138
+ extend Dry::Initializer::Mixin
101
139
 
102
140
  option :name
103
141
  option :email
@@ -112,7 +150,7 @@ All names should be unique:
112
150
 
113
151
  ```ruby
114
152
  class User
115
- extend Dry::Initializer
153
+ extend Dry::Initializer::Mixin
116
154
 
117
155
  param :name
118
156
  option :name # => raises #<SyntaxError ...>
@@ -125,7 +163,7 @@ By default both params and options are mandatory. Use `:default` key to make the
125
163
 
126
164
  ```ruby
127
165
  class User
128
- extend Dry::Initializer
166
+ extend Dry::Initializer::Mixin
129
167
 
130
168
  param :name, default: proc { 'Unknown user' }
131
169
  option :email, default: proc { 'unknown@example.com' }
@@ -144,7 +182,7 @@ Set `nil` as a default value explicitly:
144
182
 
145
183
  ```ruby
146
184
  class User
147
- extend Dry::Initializer
185
+ extend Dry::Initializer::Mixin
148
186
 
149
187
  param :name
150
188
  option :email, default: proc { nil }
@@ -163,7 +201,7 @@ If you need to **assign** proc as a default value, wrap it to another one:
163
201
 
164
202
  ```ruby
165
203
  class User
166
- extend Dry::Initializer
204
+ extend Dry::Initializer::Mixin
167
205
 
168
206
  param :name_proc, default: proc { proc { 'Unknown user' } }
169
207
  end
@@ -176,7 +214,7 @@ Proc will be executed in a scope of new instance. You can refer to other argumen
176
214
 
177
215
  ```ruby
178
216
  class User
179
- extend Dry::Initializer
217
+ extend Dry::Initializer::Mixin
180
218
 
181
219
  param :name
182
220
  param :email, default: proc { "#{name.downcase}@example.com" }
@@ -190,7 +228,7 @@ user.email # => 'andrew@example.com'
190
228
 
191
229
  ```ruby
192
230
  class User
193
- extend Dry::Initializer
231
+ extend Dry::Initializer::Mixin
194
232
 
195
233
  param :name, default: -> (obj) { 'Dude' }
196
234
  end
@@ -204,7 +242,7 @@ You cannot define required parameter after optional ones. The following example
204
242
 
205
243
  ```ruby
206
244
  class User
207
- extend Dry::Initializer
245
+ extend Dry::Initializer::Mixin
208
246
 
209
247
  param :name, default: proc { 'Unknown name' }
210
248
  param :email # => #<SyntaxError ...>
@@ -217,7 +255,7 @@ To set type constraint use `:type` key:
217
255
 
218
256
  ```ruby
219
257
  class User
220
- extend Dry::Initializer
258
+ extend Dry::Initializer::Mixin
221
259
 
222
260
  param :name, type: String
223
261
  end
@@ -233,7 +271,7 @@ You can use plain Ruby classes and modules as type constraint (see above), or us
233
271
 
234
272
  ```ruby
235
273
  class User
236
- extend Dry::Initializer
274
+ extend Dry::Initializer::Mixin
237
275
 
238
276
  param :name, type: Dry::Types::Coercion::String
239
277
  end
@@ -243,7 +281,7 @@ Or you can define custom constraint as a proc:
243
281
 
244
282
  ```ruby
245
283
  class User
246
- extend Dry::Initializer
284
+ extend Dry::Initializer::Mixin
247
285
 
248
286
  param :name, type: proc { |v| raise TypeError if String === v }
249
287
  end
@@ -262,7 +300,7 @@ To skip the reader, use `reader: false`:
262
300
 
263
301
  ```ruby
264
302
  class User
265
- extend Dry::Initializer
303
+ extend Dry::Initializer::Mixin
266
304
 
267
305
  param :name
268
306
  param :email, reader: false
@@ -283,7 +321,7 @@ Subclassing preserves all definitions being made inside a superclass:
283
321
 
284
322
  ```ruby
285
323
  class User
286
- extend Dry::Initializer
324
+ extend Dry::Initializer::Mixin
287
325
 
288
326
  param :name
289
327
  end
@@ -299,130 +337,9 @@ employee.position # => 'supercargo'
299
337
 
300
338
  ## Benchmarks
301
339
 
302
- ### Various usages of Dry::Initializer
303
-
304
- [At first][benchmark-options] we compared initializers for case of no-opts with those with default values and time constraints (for every single argument):
305
-
306
- ```
307
- no opts: 1186020.0 i/s
308
- with 2 types: 744825.4 i/s - 1.59x slower
309
- with 2 defaults: 644170.0 i/s - 1.84x slower
310
- with defaults and types: 534200.0 i/s - 2.22x slower
311
- ```
312
-
313
- Defaults are slow. The more defaults you add the slower the instantiation. Let's [add details][benchmark_several_defaults]:
314
-
315
- ```
316
- without defaults: 3412165.6 i/s
317
- with 0 of 1 default used: 1816946.6 i/s - 1.88x slower
318
- with 0 of 2 defaults used: 1620908.5 i/s - 2.11x slower
319
- with 0 of 3 defaults used: 1493410.6 i/s - 2.28x slower
320
- with 1 of 1 default used: 797438.8 i/s - 4.28x slower
321
- with 1 of 2 defaults used: 754533.4 i/s - 4.52x slower
322
- with 1 of 3 defaults used: 716828.9 i/s - 4.76x slower
323
- with 2 of 2 defaults used: 622569.8 i/s - 5.48x slower
324
- with 2 of 3 defaults used: 604062.1 i/s - 5.65x slower
325
- with 3 of 3 defaults used: 533233.4 i/s - 6.40x slower
326
- ```
327
-
328
- A single declaration of default values costs about 90% additional time. Its usage costs full 300%, and every next default adds 80% more.
329
-
330
- Avoid defaults when possible!
331
-
332
- ### Comparison to Other Gems
333
-
334
- We also compared initializers provided by gems from the [post 'Con-Struct Attibutes' by Jan Lelis][con-struct]:
335
-
336
- * [active_attr][active_attr]
337
- * [anima][anima]
338
- * [attr_extras][attr_extras]
339
- * [concord][concord]
340
- * [fast_attr][fast_attr]
341
- * [kwattr][kwattr]
342
- * [value_struct][value_struct]
343
- * [values][values]
344
- * [virtus][virtus]
345
-
346
- [con-struct]: http://idiosyncratic-ruby.com/18-con-struct-attributes.html
347
- [active_attr]: https://github.com/cgriego/active_attr
348
- [anima]: https://github.com/mbj/anima
349
- [attr_extras]: https://github.com/barsoom/attr_extras
350
- [concord]: https://github.com/mbj/concord
351
- [fast_attr]: https://github.com/applift/fast_attributes
352
- [kwattr]: https://github.com/etiennebarrie/kwattr
353
- [value_struct]: https://github.com/janlelis/value_struct
354
- [values]: https://github.com/tcrayford/values
355
- [virtus]: https://github.com/solnic/virtus
356
-
357
- Because the gems has their restrictions, in benchmarks we tested only comparable examples.
358
- A corresponding code in plain Ruby was taken for comparison.
359
-
360
- ### Without Options
361
-
362
- Results for [the examples][benchmark_without_options]
363
-
364
- Benchmark for instantiation of plain arguments (params):
365
-
366
- ```
367
- Core Struct: 4520294.5 i/s
368
- value_struct: 4479181.2 i/s - same-ish: difference falls within error
369
- plain Ruby: 4161762.2 i/s - 1.09x slower
370
- dry-initializer: 3981426.3 i/s - 1.14x slower
371
- concord: 1372696.9 i/s - 3.29x slower
372
- values: 637396.9 i/s - 7.09x slower
373
- attr_extras: 556342.9 i/s - 8.13x slower
374
- ```
375
-
376
- Benchmark for instantiation of named arguments (options)
377
-
378
- ```
379
- dry-initializer: 1020257.3 i/s
380
- plain Ruby: 1009705.8 i/s - same-ish: difference falls within error
381
- kwattr: 394574.0 i/s - 2.59x slower
382
- anima: 377387.8 i/s - 2.70x slower
383
- ```
384
-
385
- ### With Default Values
386
-
387
- Results for [the examples][benchmark_with_defaults]
388
-
389
- ```
390
- plain Ruby: 3534979.5 i/s
391
- dry-initializer: 657308.4 i/s - 5.38x slower
392
- kwattr: 581691.0 i/s - 6.08x slower
393
- active_attr: 309211.0 i/s - 11.43x slower
394
- ```
395
-
396
- ### With Type Constraints
397
-
398
- Results for [the examples][benchmark_with_types]
399
-
400
- ```
401
- plain Ruby: 951574.7 i/s
402
- dry-initializer: 701676.7 i/s - 1.36x slower
403
- fast_attributes: 562646.4 i/s - 1.69x slower
404
- virtus: 143113.3 i/s - 6.65x slower
405
- ```
406
-
407
- ### With Default Values and Type Constraints
408
-
409
- Results for [the examples][benchmark_with_types_and_defaults]
410
-
411
- ```
412
- plain Ruby: 2887933.4 i/s
413
- dry-initializer: 532508.0 i/s - 5.42x slower
414
- virtus: 183347.1 i/s - 15.75x slower
415
- ```
416
-
417
- To recap, `dry-initializer` is a fastest DSL for rubies 2.2+ except for cases when core `Struct` is sufficient.
340
+ The `dry-initializer` is a [fastest DSL][benchmarks] for rubies 2.2+ except for cases when core `Struct` is sufficient.
418
341
 
419
- [benchmark-options]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/options.rb
420
- [benchmark_several_defaults]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/several_defaults.rb
421
- [benchmark_without_options]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/without_options.rb
422
- [benchmark_with_defaults]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/with_defaults.rb
423
- [benchmark_with_types]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/with_types.rb
424
- [benchmark_with_types_and_defaults]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/with_types_and_defaults.rb
425
- [benchmark_params]: https://github.com/dryrb/dry-initializer/blob/master/benchmarks/params.rb
342
+ [benchmarks]: https://github.com/dry-rb/dry-initializer/wiki
426
343
 
427
344
  ## Compatibility
428
345
 
@@ -430,8 +347,7 @@ Tested under rubies [compatible to MRI 2.2+](.travis.yml).
430
347
 
431
348
  ## Contributing
432
349
 
433
- * Read the [STYLEGUIDE](config/metrics/STYLEGUIDE)
434
- * [Fork the project](https://github.com/nepalez/query_builder)
350
+ * [Fork the project](https://github.com/dry-rb/dry-initializer)
435
351
  * Create your feature branch (`git checkout -b my-new-feature`)
436
352
  * Add tests for it
437
353
  * Commit your changes (`git commit -am '[UPDATE] Add some feature'`)
@@ -2,28 +2,28 @@ Bundler.require(:benchmarks)
2
2
 
3
3
  require "dry-initializer"
4
4
  class NoOptsTest
5
- extend Dry::Initializer
5
+ extend Dry::Initializer::Mixin
6
6
 
7
7
  param :foo
8
8
  option :bar
9
9
  end
10
10
 
11
11
  class DefaultsTest
12
- extend Dry::Initializer
12
+ extend Dry::Initializer::Mixin
13
13
 
14
14
  param :foo, default: proc { "FOO" }
15
15
  option :bar, default: proc { "BAR" }
16
16
  end
17
17
 
18
18
  class TypesTest
19
- extend Dry::Initializer
19
+ extend Dry::Initializer::Mixin
20
20
 
21
21
  param :foo, type: String
22
22
  option :bar, type: String
23
23
  end
24
24
 
25
25
  class DefaultsAndTypesTest
26
- extend Dry::Initializer
26
+ extend Dry::Initializer::Mixin
27
27
 
28
28
  param :foo, type: String, default: proc { "FOO" }
29
29
  option :bar, type: String, default: proc { "BAR" }
data/benchmarks/params.rb CHANGED
@@ -13,7 +13,7 @@ StructTest = Struct.new(:foo, :bar)
13
13
 
14
14
  require "dry-initializer"
15
15
  class DryTest
16
- extend Dry::Initializer
16
+ extend Dry::Initializer::Mixin
17
17
 
18
18
  param :foo
19
19
  param :bar
@@ -3,7 +3,7 @@ Bundler.require(:benchmarks)
3
3
  require "dry-initializer"
4
4
 
5
5
  class ParamDefaults
6
- extend Dry::Initializer
6
+ extend Dry::Initializer::Mixin
7
7
 
8
8
  param :foo, default: proc { "FOO" }
9
9
  param :bar, default: proc { "BAR" }
@@ -11,7 +11,7 @@ class ParamDefaults
11
11
  end
12
12
 
13
13
  class OptionDefaults
14
- extend Dry::Initializer
14
+ extend Dry::Initializer::Mixin
15
15
 
16
16
  option :foo, default: proc { "FOO" }
17
17
  option :bar, default: proc { "BAR" }
@@ -2,7 +2,7 @@ Bundler.require(:benchmarks)
2
2
 
3
3
  require "dry-initializer"
4
4
  class WithoutDefaults
5
- extend Dry::Initializer
5
+ extend Dry::Initializer::Mixin
6
6
 
7
7
  param :foo
8
8
  param :bar
@@ -10,7 +10,7 @@ class WithoutDefaults
10
10
  end
11
11
 
12
12
  class WithOneDefault
13
- extend Dry::Initializer
13
+ extend Dry::Initializer::Mixin
14
14
 
15
15
  param :foo
16
16
  param :bar
@@ -18,7 +18,7 @@ class WithOneDefault
18
18
  end
19
19
 
20
20
  class WithTwoDefaults
21
- extend Dry::Initializer
21
+ extend Dry::Initializer::Mixin
22
22
 
23
23
  param :foo
24
24
  param :bar, default: proc { "BAR" }
@@ -26,7 +26,7 @@ class WithTwoDefaults
26
26
  end
27
27
 
28
28
  class WithThreeDefaults
29
- extend Dry::Initializer
29
+ extend Dry::Initializer::Mixin
30
30
 
31
31
  param :foo, default: proc { "FOO" }
32
32
  param :bar, default: proc { "BAR" }
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  require "dry-initializer"
13
13
  class DryTest
14
- extend Dry::Initializer
14
+ extend Dry::Initializer::Mixin
15
15
 
16
16
  option :foo, default: proc { "FOO" }
17
17
  option :bar, default: proc { "BAR" }
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  require "dry-initializer"
15
15
  class DryTest
16
- extend Dry::Initializer
16
+ extend Dry::Initializer::Mixin
17
17
 
18
18
  option :foo, type: String
19
19
  option :bar, type: String
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  require "dry-initializer"
15
15
  class DryTest
16
- extend Dry::Initializer
16
+ extend Dry::Initializer::Mixin
17
17
 
18
18
  option :foo, type: String, default: proc { "FOO" }
19
19
  option :bar, type: String, default: proc { "BAR" }
@@ -11,7 +11,7 @@ end
11
11
 
12
12
  require "dry-initializer"
13
13
  class DryTest
14
- extend Dry::Initializer
14
+ extend Dry::Initializer::Mixin
15
15
 
16
16
  option :foo
17
17
  option :bar
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "dry-initializer"
3
- gem.version = "0.0.1"
3
+ gem.version = "0.1.0"
4
4
  gem.author = ["Vladimir Kochnev (marshall-lee)", "Andrew Kozin (nepalez)"]
5
5
  gem.email = ["hashtable@yandex.ru", "andrew.kozin@gmail.com"]
6
6
  gem.homepage = "https://github.com/dryrb/dry-initializer"
@@ -13,7 +13,7 @@ Gem::Specification.new do |gem|
13
13
 
14
14
  gem.required_ruby_version = ">= 2.2"
15
15
 
16
- gem.add_development_dependency "guard-rspec", "~> 4.0"
17
- gem.add_development_dependency "rake", "~> 10.5"
16
+ gem.add_development_dependency "rspec", "~> 3.0"
17
+ gem.add_development_dependency "rake", "~> 10.0"
18
18
  gem.add_development_dependency "dry-types", "~> 0.5.1"
19
19
  end
@@ -9,45 +9,13 @@ module Dry
9
9
  require_relative "initializer/argument"
10
10
  require_relative "initializer/arguments"
11
11
  require_relative "initializer/builder"
12
+ require_relative "initializer/mixin"
12
13
 
13
- # Declares a plain argument
14
- #
15
- # @param [#to_sym] name
16
- #
17
- # @option options [Object] :default The default value
18
- # @option options [#call] :type The type constraings via `dry-types`
19
- # @option options [Boolean] :reader (true) Whether to define attr_reader
20
- #
21
- # @return [self] itself
22
- #
23
- def param(name, **options)
24
- arguments_builder.define_initializer(name, option: false, **options)
25
- self
26
- end
27
-
28
- # Declares a named argument
29
- #
30
- # @param (see #param)
31
- # @option (see #param)
32
- # @return (see #param)
33
- #
34
- def option(name, **options)
35
- arguments_builder.define_initializer(name, option: true, **options)
36
- self
37
- end
38
-
39
- private
40
-
41
- def arguments_builder
42
- @arguments_builder ||= begin
43
- builder = Builder.new
44
- include builder.mixin
45
- builder
14
+ def self.define(&block)
15
+ Module.new do |container|
16
+ container.extend Dry::Initializer::Mixin
17
+ container.instance_eval(&block)
46
18
  end
47
19
  end
48
-
49
- def inherited(klass)
50
- klass.instance_variable_set(:@arguments_builder, arguments_builder)
51
- end
52
20
  end
53
21
  end
@@ -0,0 +1,44 @@
1
+ module Dry::Initializer
2
+ # Class-level DSL for the initializer
3
+ module Mixin
4
+ # Declares a plain argument
5
+ #
6
+ # @param [#to_sym] name
7
+ #
8
+ # @option options [Object] :default The default value
9
+ # @option options [#call] :type The type constraings via `dry-types`
10
+ # @option options [Boolean] :reader (true) Whether to define attr_reader
11
+ #
12
+ # @return [self] itself
13
+ #
14
+ def param(name, **options)
15
+ arguments_builder.define_initializer(name, option: false, **options)
16
+ self
17
+ end
18
+
19
+ # Declares a named argument
20
+ #
21
+ # @param (see #param)
22
+ # @option (see #param)
23
+ # @return (see #param)
24
+ #
25
+ def option(name, **options)
26
+ arguments_builder.define_initializer(name, option: true, **options)
27
+ self
28
+ end
29
+
30
+ private
31
+
32
+ def arguments_builder
33
+ @arguments_builder ||= begin
34
+ builder = Builder.new
35
+ include builder.mixin
36
+ builder
37
+ end
38
+ end
39
+
40
+ def inherited(klass)
41
+ klass.instance_variable_set(:@arguments_builder, arguments_builder)
42
+ end
43
+ end
44
+ end
@@ -1,7 +1,7 @@
1
1
  describe "base example" do
2
2
  before do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo
7
7
  param :bar
@@ -0,0 +1,21 @@
1
+ describe "base example" do
2
+ before do
3
+ class Test::Foo
4
+ include Dry::Initializer.define {
5
+ param :foo
6
+ param :bar
7
+ option :baz
8
+ option :qux
9
+ }
10
+ end
11
+ end
12
+
13
+ it "instantiates attributes" do
14
+ subject = Test::Foo.new(1, 2, baz: 3, qux: 4)
15
+
16
+ expect(subject.foo).to eql 1
17
+ expect(subject.bar).to eql 2
18
+ expect(subject.baz).to eql 3
19
+ expect(subject.qux).to eql 4
20
+ end
21
+ end
@@ -1,7 +1,7 @@
1
1
  describe "default nil" do
2
2
  before do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, default: proc { nil }
7
7
  param :bar, default: proc { nil }
@@ -1,7 +1,7 @@
1
1
  describe "default values" do
2
2
  before do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, default: proc { :FOO }
7
7
  param :bar, default: proc { :BAR }
@@ -1,7 +1,7 @@
1
1
  describe "Dry type" do
2
2
  before do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, type: Dry::Types::Coercible::String
7
7
  end
@@ -1,7 +1,7 @@
1
1
  describe "invalid default value assignment" do
2
2
  subject do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, default: 1
7
7
  end
@@ -1,7 +1,7 @@
1
1
  describe "invalid type declaration" do
2
2
  subject do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, type: 1
7
7
  end
@@ -1,7 +1,7 @@
1
1
  describe "missed default values" do
2
2
  subject do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, default: proc { :FOO }
7
7
  param :bar
@@ -1,7 +1,7 @@
1
1
  describe "PORO type" do
2
2
  before do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, type: String
7
7
  end
@@ -1,7 +1,7 @@
1
1
  describe "proc type" do
2
2
  before do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, type: proc { |val| fail(TypeError) unless String === val }
7
7
  end
@@ -1,7 +1,7 @@
1
1
  describe "reader" do
2
2
  subject do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo, reader: false
7
7
  option :bar, reader: false
@@ -2,7 +2,7 @@ describe "repetitive definitions" do
2
2
  context "of params" do
3
3
  subject do
4
4
  class Test::Foo
5
- extend Dry::Initializer
5
+ extend Dry::Initializer::Mixin
6
6
 
7
7
  param :foo
8
8
  param :bar
@@ -18,7 +18,7 @@ describe "repetitive definitions" do
18
18
  context "of options" do
19
19
  subject do
20
20
  class Test::Foo
21
- extend Dry::Initializer
21
+ extend Dry::Initializer::Mixin
22
22
 
23
23
  option :foo
24
24
  option :bar
@@ -34,7 +34,7 @@ describe "repetitive definitions" do
34
34
  context "of param and option" do
35
35
  subject do
36
36
  class Test::Foo
37
- extend Dry::Initializer
37
+ extend Dry::Initializer::Mixin
38
38
 
39
39
  param :foo
40
40
  option :bar
@@ -1,7 +1,7 @@
1
1
  describe "subclassing" do
2
2
  subject do
3
3
  class Test::Foo
4
- extend Dry::Initializer
4
+ extend Dry::Initializer::Mixin
5
5
 
6
6
  param :foo
7
7
  option :bar
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
- require "pry"
2
1
  require "dry/initializer"
3
2
 
4
3
  RSpec.configure do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-initializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Kochnev (marshall-lee)
@@ -9,36 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-04-13 00:00:00.000000000 Z
12
+ date: 2016-04-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: guard-rspec
15
+ name: rspec
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '4.0'
20
+ version: '3.0'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '4.0'
27
+ version: '3.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '10.5'
34
+ version: '10.0'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '10.5'
41
+ version: '10.0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: dry-types
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +95,9 @@ files:
95
95
  - lib/dry/initializer/errors/key_error.rb
96
96
  - lib/dry/initializer/errors/missed_default_value_error.rb
97
97
  - lib/dry/initializer/errors/type_error.rb
98
+ - lib/dry/initializer/mixin.rb
98
99
  - spec/dry/base_spec.rb
100
+ - spec/dry/container_spec.rb
99
101
  - spec/dry/default_nil_spec.rb
100
102
  - spec/dry/default_values_spec.rb
101
103
  - spec/dry/dry_type_spec.rb
@@ -128,12 +130,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
130
  version: '0'
129
131
  requirements: []
130
132
  rubyforge_project:
131
- rubygems_version: 2.5.1
133
+ rubygems_version: 2.4.8
132
134
  signing_key:
133
135
  specification_version: 4
134
136
  summary: DSL for declaring params and options of the initializer
135
137
  test_files:
136
138
  - spec/dry/base_spec.rb
139
+ - spec/dry/container_spec.rb
137
140
  - spec/dry/default_nil_spec.rb
138
141
  - spec/dry/default_values_spec.rb
139
142
  - spec/dry/dry_type_spec.rb