parametric 0.2.10 → 0.2.19

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