dry-initializer 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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