virtus_model 0.2.9 → 0.4.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
- SHA1:
3
- metadata.gz: b0cb3157871c8866d19ac88f068076329ee5d9c5
4
- data.tar.gz: 68f6a26a49f767e902e335b30ef43a4cf5ef01e8
2
+ SHA256:
3
+ metadata.gz: 3ee6011c102fca90237cb6c3194cace9357117a446cf2fc29a1f964f2e67409f
4
+ data.tar.gz: e713f1506835660e37a2a606be407e7609dbc6ecefbddbff558f5455477a871b
5
5
  SHA512:
6
- metadata.gz: d74acfb486d3792660e01ee32423c95c7c10837c775d35e41183325c47b64a637ed712502771cad02c56ba7e6d9c48ec12c49a1d2705071d7d139ef32654cd39
7
- data.tar.gz: 3ec66545f02ad0aba4a926d6748880a8a3e2ae9221ea0d5c466369574c58e332f89768578ce72ef25c932cd9838a5e67c75c3f3077999d7a0a6c1f25b3938be3
6
+ metadata.gz: 0a820397fb543c190ce7c83fc899e1f3a629a54d9ac22cc791b251c716ba4850612a2ecb006ab4c8d783c90131f363f72defd101821762af3cf841eaf6f80d6f
7
+ data.tar.gz: ceebe0eda27d695ef6b47c231e1693f6b8e7adc9db937ad42041eec0b3b440cbc273c58284c4acd468222c523676f78daf182027f33139d0f1d288f6d134fbb2
data/README.md CHANGED
@@ -1,7 +1,87 @@
1
- # VirtusModel [![Build Status](https://travis-ci.org/derek-schaefer/virtus_model.svg)](https://travis-ci.org/derek-schaefer/virtus_model)
1
+ # VirtusModel
2
2
 
3
3
  A practical and pleasant union of [Virtus](https://rubygems.org/gems/virtus) and [ActiveModel](https://rubygems.org/gems/activemodel).
4
4
 
5
- # License
5
+ ## Installation
6
6
 
7
- MIT
7
+ Ruby version 2.5.0 or greater is required.
8
+
9
+ ```shell
10
+ $ gem install virtus_model
11
+ ```
12
+
13
+ ## Examples
14
+
15
+ First, familiarize yourself with the Virtus and ActiveModel libraries.
16
+
17
+ ```ruby
18
+ #
19
+ # Class definitions
20
+ #
21
+
22
+ class ModelOne < VirtusModel::Base
23
+ attribute :name, String
24
+
25
+ validates :name, presence: true
26
+ end
27
+
28
+ class ModelTwo < VirtusModel::Base
29
+ attribute :models, Array[ModelOne]
30
+
31
+ validates :models, presence: true
32
+ end
33
+
34
+ #
35
+ # Class methods
36
+ #
37
+
38
+ raise unless ModelOne.attributes == [:name]
39
+
40
+ raise unless ModelOne.attribute?(:name)
41
+
42
+ raise if ModelOne.attribute?(:other)
43
+
44
+ raise unless ModelTwo.associations == [:models]
45
+
46
+ raise unless ModelTwo.association?(:models)
47
+
48
+ raise if ModelTwo.association?(:other)
49
+
50
+ #
51
+ # Instance methods
52
+ #
53
+
54
+ model1 = ModelOne.new(name: 'hello')
55
+
56
+ raise unless model1.attributes == { name: 'hello' }
57
+
58
+ raise unless model1.valid?
59
+
60
+ model1.assign_attributes(name: nil)
61
+
62
+ raise if model1.valid?
63
+
64
+ raise unless model1.errors[:name] == ["can't be blank"]
65
+
66
+ raise unless model1.update(name: 'hello')
67
+
68
+ model2 = ModelTwo.new(models: [model1.attributes])
69
+
70
+ raise unless model2.valid?
71
+
72
+ model2.assign_attributes(models: [])
73
+
74
+ raise if model2.valid?
75
+
76
+ raise unless model2.errors[:models] == ["can't be blank"]
77
+
78
+ raise if model2.update(models: [{ name: nil }])
79
+
80
+ raise unless model2.errors[:'models[0][name]'] == ["can't be blank"]
81
+
82
+ raise unless model2.update(models: [model1])
83
+
84
+ raise unless model2.export == { models: [{ name: 'hello' }] }
85
+
86
+ raise unless ModelTwo.new(model2.export) == model2
87
+ ```
@@ -142,8 +142,8 @@ module VirtusModel
142
142
  def import_errors(name, model)
143
143
  return unless model.respond_to?(:validate)
144
144
  return if model.validate(validation_context)
145
- model.errors.each do |field, error|
146
- errors.add("#{name}[#{field}]", error)
145
+ model.errors.each do |error|
146
+ errors.add("#{name}[#{error.attribute}]", error.message)
147
147
  end
148
148
  end
149
149
 
@@ -1,3 +1,3 @@
1
1
  module VirtusModel
2
- VERSION = '0.2.9'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -343,7 +343,7 @@ describe VirtusModel::Base do
343
343
  subject { simple_model.assign_attributes(name: '') }
344
344
 
345
345
  it { expect(subject.valid?).to be(false) }
346
- it { expect(subject.errors.messages).to include(name: ["can't be blank"]) }
346
+ it { expect(subject.errors.to_hash).to include({ name: ["can't be blank"] }) }
347
347
  end
348
348
  end
349
349
 
@@ -359,8 +359,8 @@ describe VirtusModel::Base do
359
359
  subject { complex_model.assign_attributes(model: {}, models: [{}]) }
360
360
 
361
361
  it { expect(subject.valid?).to be(false) }
362
- it { expect(subject.errors.messages).to include(:"model[name]" => ["can't be blank"]) }
363
- it { expect(subject.errors.messages).to include(:"models[0][name]" => ["can't be blank"]) }
362
+ it { expect(subject.errors.to_hash).to include(:"model[name]" => ["can't be blank"]) }
363
+ it { expect(subject.errors.to_hash).to include(:"models[0][name]" => ["can't be blank"]) }
364
364
  end
365
365
  end
366
366
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtus_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derek Schaefer
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-10 00:00:00.000000000 Z
11
+ date: 2022-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -28,86 +28,98 @@ dependencies:
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '6.1'
34
+ - - "<"
32
35
  - !ruby/object:Gem::Version
33
- version: '4.2'
36
+ version: '7'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
- version: '4.2'
43
+ version: '6.1'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '7'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: activesupport
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - "~>"
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: '4.2'
53
+ version: '6.1'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '7'
48
57
  type: :runtime
49
58
  prerelease: false
50
59
  version_requirements: !ruby/object:Gem::Requirement
51
60
  requirements:
52
- - - "~>"
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '6.1'
64
+ - - "<"
53
65
  - !ruby/object:Gem::Version
54
- version: '4.2'
66
+ version: '7'
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: rake
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
71
  - - "~>"
60
72
  - !ruby/object:Gem::Version
61
- version: '11.1'
73
+ version: '13.0'
62
74
  type: :development
63
75
  prerelease: false
64
76
  version_requirements: !ruby/object:Gem::Requirement
65
77
  requirements:
66
78
  - - "~>"
67
79
  - !ruby/object:Gem::Version
68
- version: '11.1'
80
+ version: '13.0'
69
81
  - !ruby/object:Gem::Dependency
70
82
  name: rdoc
71
83
  requirement: !ruby/object:Gem::Requirement
72
84
  requirements:
73
- - - "~>"
85
+ - - ">="
74
86
  - !ruby/object:Gem::Version
75
- version: '4.2'
87
+ version: 6.3.1
76
88
  type: :development
77
89
  prerelease: false
78
90
  version_requirements: !ruby/object:Gem::Requirement
79
91
  requirements:
80
- - - "~>"
92
+ - - ">="
81
93
  - !ruby/object:Gem::Version
82
- version: '4.2'
94
+ version: 6.3.1
83
95
  - !ruby/object:Gem::Dependency
84
96
  name: rspec
85
97
  requirement: !ruby/object:Gem::Requirement
86
98
  requirements:
87
99
  - - "~>"
88
100
  - !ruby/object:Gem::Version
89
- version: '3.4'
101
+ version: '3.10'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
93
105
  requirements:
94
106
  - - "~>"
95
107
  - !ruby/object:Gem::Version
96
- version: '3.4'
108
+ version: '3.10'
97
109
  - !ruby/object:Gem::Dependency
98
110
  name: shoulda-matchers
99
111
  requirement: !ruby/object:Gem::Requirement
100
112
  requirements:
101
113
  - - "~>"
102
114
  - !ruby/object:Gem::Version
103
- version: '3.1'
115
+ version: '4.0'
104
116
  type: :development
105
117
  prerelease: false
106
118
  version_requirements: !ruby/object:Gem::Requirement
107
119
  requirements:
108
120
  - - "~>"
109
121
  - !ruby/object:Gem::Version
110
- version: '3.1'
122
+ version: '4.0'
111
123
  - !ruby/object:Gem::Dependency
112
124
  name: shoulda-callback-matchers
113
125
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +140,14 @@ dependencies:
128
140
  requirements:
129
141
  - - "~>"
130
142
  - !ruby/object:Gem::Version
131
- version: '0.11'
143
+ version: '0.17'
132
144
  type: :development
133
145
  prerelease: false
134
146
  version_requirements: !ruby/object:Gem::Requirement
135
147
  requirements:
136
148
  - - "~>"
137
149
  - !ruby/object:Gem::Version
138
- version: '0.11'
150
+ version: '0.17'
139
151
  description: A practical and pleasant union of Virtus and ActiveModel.
140
152
  email:
141
153
  - derek.schaefer@gmail.com
@@ -153,7 +165,7 @@ homepage: https://github.com/derek-schaefer/virtus_model
153
165
  licenses:
154
166
  - MIT
155
167
  metadata: {}
156
- post_install_message:
168
+ post_install_message:
157
169
  rdoc_options: []
158
170
  require_paths:
159
171
  - lib
@@ -161,16 +173,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
173
  requirements:
162
174
  - - ">="
163
175
  - !ruby/object:Gem::Version
164
- version: 2.0.0
176
+ version: 2.5.0
165
177
  required_rubygems_version: !ruby/object:Gem::Requirement
166
178
  requirements:
167
179
  - - ">="
168
180
  - !ruby/object:Gem::Version
169
181
  version: '0'
170
182
  requirements: []
171
- rubyforge_project:
172
- rubygems_version: 2.6.13
173
- signing_key:
183
+ rubygems_version: 3.1.6
184
+ signing_key:
174
185
  specification_version: 4
175
186
  summary: VirtusModel = Virtus + ActiveModel
176
187
  test_files: