vcdry 1.0.1 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +26 -0
- data/lib/vcdry/core.rb +59 -0
- data/lib/vcdry/dsl.rb +13 -56
- data/lib/vcdry/version.rb +1 -1
- data/lib/vcdry.rb +2 -4
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23e7e6597fb4e286a35c06290cce1efbc90421cf7b9272e6927060ec7afa1836
|
4
|
+
data.tar.gz: 1d85c66ceaa4402ba2b2132cf0659c45e8d28aafa99ec9297a925ecee2c1c860
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5100e330ab5256cdc3bc7449543265f6334034be7876370f0f007b3cc5f51f96dd5ad99e98efa5d7a75029fc7a01487d2285b9294ea180cfb6329abf808085e1
|
7
|
+
data.tar.gz: c09be2d8cbc5188d80c82ebd693530ee9cc51e12018f08ea388d662ce9fd93a8d27b3e2b629094e089eb3371c16a11a2fdb3cf099ff1a561749ee83e1f16fe07
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -300,6 +300,32 @@ VCDry::Types.add_type(:boolean, ->(value) { ActiveRecord::Type::Boolean.new.cast
|
|
300
300
|
VCDry::Types.add_type(:custom_hash, ->(value) { CustomHash.new(value) })
|
301
301
|
```
|
302
302
|
|
303
|
+
## Mix-in Behavior
|
304
|
+
|
305
|
+
To mix-in the `keyword` behavior without using the `VCDry::DSL` (and its
|
306
|
+
initialize method), you can call include `VCDry::Core` instead and then call
|
307
|
+
`vcdry_parse_keywords` against the hash you wish to parse out keywords from.
|
308
|
+
|
309
|
+
The `vcdry_parse_keywords` accepts a hash and returns a hash of all key/value
|
310
|
+
pairs that were not pulled out as a `keyword`.
|
311
|
+
|
312
|
+
> **Note**: Including `VCDry::Core` does not include support for
|
313
|
+
> `other_keywords`, `strict_keywords`, or enable support for callbacks.
|
314
|
+
|
315
|
+
```ruby
|
316
|
+
class HeadingComponent
|
317
|
+
include VCDry::Core
|
318
|
+
|
319
|
+
keyword :size, :symbol, default: :md
|
320
|
+
other_keywords :options
|
321
|
+
|
322
|
+
def initialize(text, **options)
|
323
|
+
@text = text
|
324
|
+
@options = vcdry_parse_keywords(options)
|
325
|
+
end
|
326
|
+
end
|
327
|
+
```
|
328
|
+
|
303
329
|
## Development
|
304
330
|
|
305
331
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
data/lib/vcdry/core.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require "active_support/concern"
|
2
|
+
require "active_support/core_ext/hash"
|
3
|
+
require "active_support/core_ext/module/delegation"
|
4
|
+
|
5
|
+
require_relative "error"
|
6
|
+
require_relative "registry"
|
7
|
+
|
8
|
+
module VCDry
|
9
|
+
module Core
|
10
|
+
extend ActiveSupport::Concern
|
11
|
+
|
12
|
+
def vcdry_parse_keywords(kwargs = {})
|
13
|
+
kwargs = kwargs.symbolize_keys
|
14
|
+
self.class.vcdry.keyword_configs.each do |config|
|
15
|
+
if config.required? && !kwargs.key?(config.name)
|
16
|
+
raise MissingRequiredKeywordError.new(config.name)
|
17
|
+
end
|
18
|
+
|
19
|
+
value = kwargs.fetch(config.name, config.default)
|
20
|
+
instance_variable_set(config.instance_variable, config.type_cast(value))
|
21
|
+
end
|
22
|
+
kwargs.except(*self.class.vcdry.keywords)
|
23
|
+
end
|
24
|
+
|
25
|
+
class_methods do
|
26
|
+
delegate :remove_keyword, to: :vcdry
|
27
|
+
|
28
|
+
def inherited(subclass)
|
29
|
+
subclass.instance_variable_set(:@vcdry, @vcdry&.dup)
|
30
|
+
super
|
31
|
+
end
|
32
|
+
|
33
|
+
def keyword(name, type = nil, **options)
|
34
|
+
name = name.to_sym
|
35
|
+
config = vcdry.keyword(name, type, options)
|
36
|
+
vcutils_define_helper_methods(config)
|
37
|
+
end
|
38
|
+
|
39
|
+
def vcdry
|
40
|
+
@vcdry ||= Registry.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def vcutils_define_helper_methods(config)
|
44
|
+
if config.enum?
|
45
|
+
config.enum_values.each do |value|
|
46
|
+
define_method "#{config.name}_#{value}?" do
|
47
|
+
instance_variable_get(config.instance_variable) == value
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
if config.optional?
|
52
|
+
define_method "#{config.name}?" do
|
53
|
+
instance_variable_get(config.instance_variable).present?
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/vcdry/dsl.rb
CHANGED
@@ -1,36 +1,29 @@
|
|
1
|
+
require "active_model/callbacks"
|
1
2
|
require "active_support/concern"
|
2
|
-
require "active_support/core_ext/hash"
|
3
|
-
require "active_support/core_ext/module/delegation"
|
4
3
|
|
4
|
+
require_relative "core"
|
5
5
|
require_relative "error"
|
6
|
-
require_relative "registry"
|
7
6
|
|
8
7
|
module VCDry
|
9
8
|
module DSL
|
10
9
|
extend ActiveSupport::Concern
|
10
|
+
include Core
|
11
|
+
|
12
|
+
included do
|
13
|
+
extend ActiveModel::Callbacks
|
14
|
+
|
15
|
+
define_model_callbacks :initialize
|
16
|
+
end
|
11
17
|
|
12
18
|
def initialize(**kwargs)
|
13
19
|
run_callbacks :initialize do
|
14
|
-
|
15
|
-
|
16
|
-
vcdry_parse_unknown_keywords(**kwargs)
|
20
|
+
unknown_kwargs = vcdry_parse_keywords(kwargs)
|
21
|
+
vcdry_parse_unknown_keywords(unknown_kwargs)
|
17
22
|
super
|
18
23
|
end
|
19
24
|
end
|
20
25
|
|
21
|
-
def
|
22
|
-
self.class.vcdry.keyword_configs.each do |config|
|
23
|
-
if config.required? && !kwargs.key?(config.name)
|
24
|
-
raise MissingRequiredKeywordError.new(config.name)
|
25
|
-
end
|
26
|
-
|
27
|
-
value = kwargs.fetch(config.name, config.default)
|
28
|
-
instance_variable_set(config.instance_variable, config.type_cast(value))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def vcdry_parse_unknown_keywords(**kwargs)
|
33
|
-
unknown_kwargs = kwargs.except(*self.class.vcdry.keywords)
|
26
|
+
def vcdry_parse_unknown_keywords(unknown_kwargs = {})
|
34
27
|
raise UnknownArgumentError.new(*unknown_kwargs.keys) if self.class.vcdry.strict? && unknown_kwargs.present?
|
35
28
|
return unless self.class.vcdry.gather_unknown_keywords?
|
36
29
|
|
@@ -38,44 +31,8 @@ module VCDry
|
|
38
31
|
instance_variable_set(config.instance_variable, config.type_cast(unknown_kwargs))
|
39
32
|
end
|
40
33
|
|
41
|
-
included do
|
42
|
-
extend ActiveModel::Callbacks
|
43
|
-
|
44
|
-
define_model_callbacks :initialize
|
45
|
-
end
|
46
|
-
|
47
34
|
class_methods do
|
48
|
-
delegate :other_keywords, :
|
49
|
-
|
50
|
-
def inherited(subclass)
|
51
|
-
subclass.instance_variable_set(:@vcdry, @vcdry&.dup)
|
52
|
-
super
|
53
|
-
end
|
54
|
-
|
55
|
-
def keyword(name, type = nil, **options)
|
56
|
-
name = name.to_sym
|
57
|
-
config = vcdry.keyword(name, type, options)
|
58
|
-
vcutils_define_helper_methods(config)
|
59
|
-
end
|
60
|
-
|
61
|
-
def vcdry
|
62
|
-
@vcdry ||= Registry.new
|
63
|
-
end
|
64
|
-
|
65
|
-
def vcutils_define_helper_methods(config)
|
66
|
-
if config.enum?
|
67
|
-
config.enum_values.each do |value|
|
68
|
-
define_method "#{config.name}_#{value}?" do
|
69
|
-
instance_variable_get(config.instance_variable) == value
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
if config.optional?
|
74
|
-
define_method "#{config.name}?" do
|
75
|
-
instance_variable_get(config.instance_variable).present?
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
35
|
+
delegate :other_keywords, :strict_keywords, to: :vcdry
|
79
36
|
end
|
80
37
|
end
|
81
38
|
end
|
data/lib/vcdry/version.rb
CHANGED
data/lib/vcdry.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
|
+
require_relative "vcdry/config"
|
2
|
+
require_relative "vcdry/core"
|
1
3
|
require_relative "vcdry/dsl"
|
2
4
|
require_relative "vcdry/error"
|
3
|
-
require_relative "vcdry/config"
|
4
5
|
require_relative "vcdry/registry"
|
5
6
|
require_relative "vcdry/types"
|
6
7
|
require_relative "vcdry/version"
|
7
|
-
|
8
|
-
module VCDry
|
9
|
-
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.
|
4
|
+
version: 1.1.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-
|
11
|
+
date: 2023-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -76,6 +76,7 @@ files:
|
|
76
76
|
- Rakefile
|
77
77
|
- lib/vcdry.rb
|
78
78
|
- lib/vcdry/config.rb
|
79
|
+
- lib/vcdry/core.rb
|
79
80
|
- lib/vcdry/dsl.rb
|
80
81
|
- lib/vcdry/error.rb
|
81
82
|
- lib/vcdry/registry.rb
|