vcdry 1.0.0 → 1.0.1

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
  SHA256:
3
- metadata.gz: 185f278d99a71c67953d1453a9b2c62ee2afac0c914d3a4c8793c5677396b232
4
- data.tar.gz: 84290611068e8991a71164cdd11ca4d2e318ce364975905b1ece0c75e5a2dada
3
+ metadata.gz: ea70c4d286339f58ec30b1c77ae5ecc1579c52ec511d17aed9ba7afb82b68e36
4
+ data.tar.gz: 2c0209b85f1175c3f2463b7b8c821eaa30829c88c10ea2b354d5b656079c7391
5
5
  SHA512:
6
- metadata.gz: 95dd05bd5d0654374b46a99d43cb0029e9302a3b38a0d60e4278b64a2e0edb2e5dce528a91a0c732ab494fafa9e2cf287977960f31cc4d4411ec19947f80eb7b
7
- data.tar.gz: c47f92e3d43e7b96f7901b37a4633d6a8e9a96a787e8fc9e2ad0d4d922d76bcfe532eb623059305b3c7c348f629e22bf580baafaba39cba3737927bf45a2b7c1
6
+ metadata.gz: 3f118fe1853440ed1f5fe649851f7801000cd81787022c5ae0cafdab688330a8a3ac452f82321810dbb9906ecbc68b1b8eb5c763d0e9a256a290d59840ca470b
7
+ data.tar.gz: b4bfbb7e38542cf36bd28503612e8cc4305e3120328e5b13df0305c24d4325f4f8bad71ebf63d879b497dcaff223537b662c3645c80a09dfeaa4e31a110eea43
data/CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
- ## [Unreleased]
1
+ ## [1.0.1] - 2023-04-28
2
+
3
+ - Added initializer callbacks.
4
+ - Treat `default: nil` and `optional: true` identically.
5
+ - Fix for `other_keywords` to accept the optional type as intended.
6
+ - Fix for inheritance issues when including VCDry::DSL on a parent component.
7
+ - Fix to allow passing `nil` to an optional keyword.
2
8
 
3
9
  ## [1.0.0] - 2023-04-16
4
10
 
data/README.md CHANGED
@@ -40,6 +40,7 @@ end
40
40
  - [other_keywords](#other_keywords)
41
41
  - [strict_keywords](#strict_keywords)
42
42
  - [remove_keyword](#remove_keyword)
43
+ - [Callbacks](#callbacks)
43
44
  - [Types](#types)
44
45
  - [Development](#development)
45
46
  - [Contributing](#contributing)
@@ -260,6 +261,25 @@ class MyOtherComponent < MyComponent
260
261
  end
261
262
  ```
262
263
 
264
+ ### Callbacks
265
+
266
+ Including `VCDry::DSL` adds support through `ActiveModel::Callbacks` for the
267
+ `before_initialize`, `after_initialization`, and `around_initialize` callbacks
268
+ to minimize the need to override the initlialize method.
269
+
270
+ ```ruby
271
+ class MyComponent < MyComponent
272
+ before_initialize ->() { @links = [] }
273
+ after_intialize :some_method
274
+
275
+ private
276
+
277
+ def some_method
278
+ # do something fancy
279
+ end
280
+ end
281
+ ```
282
+
263
283
  ## Types
264
284
 
265
285
  The following types are built-in to `vcdry`.
data/lib/vcdry/config.rb CHANGED
@@ -13,6 +13,12 @@ module VCDry
13
13
  @name = name.to_sym
14
14
  @type = (type.nil? || type.respond_to?(:call)) ? type : VCDry::Types[type]
15
15
  @options = options
16
+
17
+ # Translate default: nil to optional: true
18
+ if @options.key?(:default) && @options[:default].nil?
19
+ @options.delete(:default)
20
+ @options[:optional] = true
21
+ end
16
22
  end
17
23
 
18
24
  def array?
@@ -48,7 +54,7 @@ module VCDry
48
54
  end
49
55
 
50
56
  def optional?
51
- default? || !!@options[:optional]
57
+ default? || @options[:optional]
52
58
  end
53
59
 
54
60
  def required?
@@ -72,6 +78,7 @@ module VCDry
72
78
  def type_cast_value(value)
73
79
  return if value == NOT_DEFINED
74
80
  return value if @type.nil?
81
+ return if value.nil? && @options[:optional]
75
82
 
76
83
  value = @type.call(value)
77
84
  if enum? && enum_values.exclude?(value)
data/lib/vcdry/dsl.rb CHANGED
@@ -10,9 +10,12 @@ module VCDry
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  def initialize(**kwargs)
13
- kwargs = kwargs.symbolize_keys
14
- vcdry_parse_keywords(**kwargs)
15
- vcdry_parse_unknown_keywords(**kwargs)
13
+ run_callbacks :initialize do
14
+ kwargs = kwargs.symbolize_keys
15
+ vcdry_parse_keywords(**kwargs)
16
+ vcdry_parse_unknown_keywords(**kwargs)
17
+ super
18
+ end
16
19
  end
17
20
 
18
21
  def vcdry_parse_keywords(**kwargs)
@@ -35,11 +38,18 @@ module VCDry
35
38
  instance_variable_set(config.instance_variable, config.type_cast(unknown_kwargs))
36
39
  end
37
40
 
41
+ included do
42
+ extend ActiveModel::Callbacks
43
+
44
+ define_model_callbacks :initialize
45
+ end
46
+
38
47
  class_methods do
39
48
  delegate :other_keywords, :remove_keyword, :strict_keywords, to: :vcdry
40
49
 
41
50
  def inherited(subclass)
42
51
  subclass.instance_variable_set(:@vcdry, @vcdry&.dup)
52
+ super
43
53
  end
44
54
 
45
55
  def keyword(name, type = nil, **options)
@@ -41,7 +41,7 @@ module VCDry
41
41
  @keywords.keys
42
42
  end
43
43
 
44
- def other_keywords(name, type: :hash)
44
+ def other_keywords(name, type = :hash)
45
45
  @other_keywords_config = Config.new(name, type)
46
46
  end
47
47
 
data/lib/vcdry/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module VCDry
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vcdry
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Monroe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-16 00:00:00.000000000 Z
11
+ date: 2023-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails