virtus_model 0.2.9 → 0.4.0

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
- 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: