parametric 0.2.10 → 0.2.19

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.
data/spec/struct_spec.rb CHANGED
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
  require 'parametric/struct'
3
3
 
4
4
  describe Parametric::Struct do
5
- it "works" do
6
- friend_class = Class.new do
5
+ let(:friend_class) do
6
+ Class.new do
7
7
  include Parametric::Struct
8
8
 
9
9
  schema do
@@ -11,16 +11,19 @@ describe Parametric::Struct do
11
11
  field(:age).type(:integer)
12
12
  end
13
13
  end
14
+ end
15
+ let(:klass) do
16
+ Class.new.tap do |cl|
17
+ cl.send(:include, Parametric::Struct)
14
18
 
15
- klass = Class.new do
16
- include Parametric::Struct
17
-
18
- schema do
19
- field(:title).type(:string).present
20
- field(:friends).type(:array).default([]).schema friend_class
19
+ cl.schema do |sc, _|
20
+ sc.field(:title).type(:string).present
21
+ sc.field(:friends).type(:array).default([]).schema friend_class
21
22
  end
22
23
  end
24
+ end
23
25
 
26
+ it "works" do
24
27
  new_instance = klass.new
25
28
  expect(new_instance.title).to eq ''
26
29
  expect(new_instance.friends).to eq []
@@ -40,6 +43,10 @@ describe Parametric::Struct do
40
43
  expect(instance.friends.first.name).to eq 'Ismael'
41
44
  expect(instance.friends.first).to be_a friend_class
42
45
 
46
+ # Hash access with #[]
47
+ expect(instance[:title]).to eq instance.title
48
+ expect(instance[:friends].first[:name]).to eq instance.friends.first.name
49
+
43
50
  invalid_instance = klass.new({
44
51
  friends: [
45
52
  {name: 'Ismael', age: 40},
@@ -53,6 +60,18 @@ describe Parametric::Struct do
53
60
  expect(invalid_instance.friends[1].errors['$.name']).not_to be_nil
54
61
  end
55
62
 
63
+ it 'supports #structure' do
64
+ st = klass.schema.structure
65
+ expect(st[:title][:type]).to eq(:string)
66
+ expect(st[:friends][:structure][:age][:type]).to eq(:integer)
67
+ end
68
+
69
+ it 'supports #walk' do
70
+ output = klass.schema.walk(:type).output
71
+ expect(output[:title]).to eq(:string)
72
+ expect(output[:friends][0][:name]).to eq(:string)
73
+ end
74
+
56
75
  it "is inmutable by default" do
57
76
  klass = Class.new do
58
77
  include Parametric::Struct
@@ -99,32 +118,6 @@ describe Parametric::Struct do
99
118
  expect(instance.friends.first.age).to eq 10
100
119
  end
101
120
 
102
- it 'wraps nested schemas in custom class' do
103
- klass = Class.new do
104
- include Parametric::Struct
105
-
106
- def self.parametric_build_class_for_child(key, child_schema)
107
- Class.new do
108
- include Parametric::Struct
109
- schema child_schema
110
- def salutation
111
- "my age is #{age}"
112
- end
113
- end
114
- end
115
-
116
- schema do
117
- field(:name).type(:string).present
118
- field(:friends).type(:array).schema do
119
- field(:age).type(:integer)
120
- end
121
- end
122
- end
123
-
124
- user = klass.new(name: 'Ismael', friends: [{age: 43}])
125
- expect(user.friends.first.salutation).to eq 'my age is 43'
126
- end
127
-
128
121
  it "wraps regular schemas in structs" do
129
122
  friend_schema = Parametric::Schema.new do
130
123
  field(:name)
@@ -308,6 +301,9 @@ describe Parametric::Struct do
308
301
 
309
302
  schema do
310
303
  field(:title).type(:string).present
304
+ field(:consumption).type(:object).present.schema do
305
+ field(:type).present.options(%w[aaa bbb])
306
+ end
311
307
  end
312
308
  end
313
309
 
@@ -315,9 +311,10 @@ describe Parametric::Struct do
315
311
  klass.new!(title: '')
316
312
  rescue Parametric::InvalidStructError => e
317
313
  expect(e.errors['$.title']).not_to be nil
314
+ expect(e.errors['$.consumption']).not_to be nil
318
315
  end
319
316
 
320
- valid = klass.new!(title: 'foo')
317
+ valid = klass.new!(title: 'foo', consumption: { type: 'aaa' })
321
318
  expect(valid.title).to eq 'foo'
322
319
  end
323
320
  end
@@ -9,6 +9,13 @@ describe 'default validators' do
9
9
  expect(validator.valid?(payload[key], key, payload)).to eq valid
10
10
  end
11
11
 
12
+ describe ':value' do
13
+ it {
14
+ test_validator({key: 'Foobar'}, :key, :value, true, true, 'Foobar')
15
+ test_validator({key: 'Nope'}, :key, :value, true, false, 'Foobar')
16
+ }
17
+ end
18
+
12
19
  describe ':format' do
13
20
  it {
14
21
  test_validator({key: 'Foobar'}, :key, :format, true, true, /^Foo/)
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parametric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.10
4
+ version: 0.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ismael Celis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-26 00:00:00.000000000 Z
11
+ date: 2023-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.5'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.5'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +30,14 @@ dependencies:
44
30
  requirements:
45
31
  - - '='
46
32
  - !ruby/object:Gem::Version
47
- version: 3.4.0
33
+ version: 3.12.0
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - '='
53
39
  - !ruby/object:Gem::Version
54
- version: 3.4.0
40
+ version: 3.12.0
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: byebug
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -81,6 +67,7 @@ files:
81
67
  - LICENSE.txt
82
68
  - README.md
83
69
  - Rakefile
70
+ - bench/struct_bench.rb
84
71
  - bin/console
85
72
  - lib/parametric.rb
86
73
  - lib/parametric/block_validator.rb
@@ -90,10 +77,12 @@ files:
90
77
  - lib/parametric/field.rb
91
78
  - lib/parametric/field_dsl.rb
92
79
  - lib/parametric/policies.rb
80
+ - lib/parametric/policy_adapter.rb
93
81
  - lib/parametric/registry.rb
94
82
  - lib/parametric/results.rb
95
83
  - lib/parametric/schema.rb
96
84
  - lib/parametric/struct.rb
85
+ - lib/parametric/tagged_one_of.rb
97
86
  - lib/parametric/version.rb
98
87
  - parametric.gemspec
99
88
  - spec/custom_block_validator_spec.rb
@@ -101,6 +90,7 @@ files:
101
90
  - spec/expand_spec.rb
102
91
  - spec/field_spec.rb
103
92
  - spec/policies_spec.rb
93
+ - spec/schema_lifecycle_hooks_spec.rb
104
94
  - spec/schema_spec.rb
105
95
  - spec/schema_walk_spec.rb
106
96
  - spec/spec_helper.rb
@@ -110,7 +100,7 @@ homepage: ''
110
100
  licenses:
111
101
  - MIT
112
102
  metadata: {}
113
- post_install_message:
103
+ post_install_message:
114
104
  rdoc_options: []
115
105
  require_paths:
116
106
  - lib
@@ -125,9 +115,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
115
  - !ruby/object:Gem::Version
126
116
  version: '0'
127
117
  requirements: []
128
- rubyforge_project:
129
- rubygems_version: 2.7.7
130
- signing_key:
118
+ rubygems_version: 3.4.18
119
+ signing_key:
131
120
  specification_version: 4
132
121
  summary: DSL for declaring allowed parameters with options, regexp patern and default
133
122
  values.
@@ -137,6 +126,7 @@ test_files:
137
126
  - spec/expand_spec.rb
138
127
  - spec/field_spec.rb
139
128
  - spec/policies_spec.rb
129
+ - spec/schema_lifecycle_hooks_spec.rb
140
130
  - spec/schema_spec.rb
141
131
  - spec/schema_walk_spec.rb
142
132
  - spec/spec_helper.rb