active_model_serializers_validator 1.0.1 → 1.1
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/.travis.yml +7 -0
- data/README.md +6 -8
- data/Rakefile +1 -1
- data/lib/active_model/serializer/validator/errors.rb +8 -0
- data/lib/active_model/serializer/validator/mixin.rb +8 -1
- data/lib/active_model/serializer/validator/version.rb +1 -1
- data/lib/active_model_serializers_validator.rb +1 -0
- data/spec/validator_spec.rb +40 -5
- metadata +6 -4
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# ActiveModel::Serializer::Validator
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/active_model_serializers_validator)
|
4
|
+
[](https://travis-ci.org/mirego/active_model_serializers_validator)
|
5
|
+
|
3
6
|
This gem adds JSON schema validations for the JSON output generated by an `ActiveModel::Serializer`.
|
4
7
|
|
5
8
|
## Installation
|
@@ -57,11 +60,6 @@ serializer.errors
|
|
57
60
|
|
58
61
|
## About Mirego
|
59
62
|
|
60
|
-
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun.
|
61
|
-
|
62
|
-
[
|
63
|
-
[iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"),
|
64
|
-
[Android](http://mirego.com/en/android-app-development/ "Android application development"),
|
65
|
-
[Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"),
|
66
|
-
[Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and
|
67
|
-
[Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development").
|
63
|
+
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We proudly build mobile applications for [iPhone](http://mirego.com/en/iphone-app-development/ "iPhone application development"), [iPad](http://mirego.com/en/ipad-app-development/ "iPad application development"), [Android](http://mirego.com/en/android-app-development/ "Android application development"), [Blackberry](http://mirego.com/en/blackberry-app-development/ "Blackberry application development"), [Windows Phone](http://mirego.com/en/windows-phone-app-development/ "Windows Phone application development") and [Windows 8](http://mirego.com/en/windows-8-app-development/ "Windows 8 application development") in beautiful Quebec City.
|
64
|
+
|
65
|
+
We also love [open-source software](http://open.mirego.com/) and we try to extract as much code as possible from our projects to give back to the community.
|
data/Rakefile
CHANGED
@@ -22,7 +22,14 @@ module ActiveModel
|
|
22
22
|
end
|
23
23
|
|
24
24
|
return @_json_schema unless value
|
25
|
-
|
25
|
+
|
26
|
+
if !value.is_a?(String) && !value.is_a?(Hash)
|
27
|
+
raise InvalidSchemaError.new('Schema must be a path to a file or a Hash.')
|
28
|
+
elsif value.is_a?(String) && !File.exists?(value)
|
29
|
+
raise InvalidSchemaError.new('Schema file does not exist.')
|
30
|
+
else
|
31
|
+
@_json_schema = value
|
32
|
+
end
|
26
33
|
end
|
27
34
|
|
28
35
|
# Validate the rendered data against a JSON schema file and
|
@@ -2,6 +2,7 @@ require 'json-schema'
|
|
2
2
|
require 'active_support'
|
3
3
|
require 'active_support/core_ext/object/to_json'
|
4
4
|
require 'active_model/serializer'
|
5
|
+
require 'active_model/serializer/validator/errors'
|
5
6
|
require 'active_model/serializer/validator/mixin'
|
6
7
|
require 'active_model/serializer/validator/version'
|
7
8
|
|
data/spec/validator_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe ActiveModel::Serializer::Validator do
|
4
4
|
describe :valid? do
|
5
|
-
subject { ActiveModel::Serializer.new(OpenStruct.new(:
|
5
|
+
subject { ActiveModel::Serializer.new(OpenStruct.new(foo: 'bar')) }
|
6
6
|
before { ActiveModel::Serializer.stub(:valid_against_schema?).and_return(stubbed_validation) }
|
7
7
|
|
8
8
|
context 'with empty errors' do
|
@@ -28,21 +28,56 @@ describe ActiveModel::Serializer::Validator do
|
|
28
28
|
|
29
29
|
subject { ActiveModel::Serializer.valid_against_schema?(product_schema, serializer) }
|
30
30
|
let(:serializer) { ProductSerializer.new(serializable) }
|
31
|
-
|
31
|
+
let(:schema) { product_schema }
|
32
32
|
|
33
33
|
context 'without validaton errors' do
|
34
|
-
let(:serializable) { OpenStruct.new(:
|
34
|
+
let(:serializable) { OpenStruct.new(id: 4, name: "Widget", price: 1200, tags: %w(foo bar baz)) }
|
35
35
|
it { should be_empty }
|
36
36
|
end
|
37
37
|
|
38
38
|
context 'with validaton errors' do
|
39
|
-
let(:serializable) { OpenStruct.new(:
|
39
|
+
let(:serializable) { OpenStruct.new(id: 4, price: 1200, tags: %w(foo bar baz)) }
|
40
40
|
it { should_not be_empty }
|
41
41
|
its(:length) { should eql 1 }
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
describe :json_schema do
|
46
|
-
|
46
|
+
subject { ProductSerializer.new(serializable) }
|
47
|
+
let(:set_schema!) { ProductSerializer.json_schema schema_file }
|
48
|
+
|
49
|
+
before do
|
50
|
+
try_remove_const(:ProductSerializer)
|
51
|
+
|
52
|
+
ProductSerializer = Class.new(ActiveModel::Serializer) do
|
53
|
+
self.root = false
|
54
|
+
attributes :id, :name, :price, :tags
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context 'with existing file' do
|
59
|
+
let(:schema_file) { File.expand_path("../fixtures/product.jsonschema", __FILE__) }
|
60
|
+
before { set_schema! }
|
61
|
+
|
62
|
+
context 'with valid serializable' do
|
63
|
+
let(:serializable) { OpenStruct.new(id: 4, name: "Widget", price: 1200, tags: %w(foo bar baz)) }
|
64
|
+
it { should be_valid }
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'with invalid serializable' do
|
68
|
+
let(:serializable) { OpenStruct.new }
|
69
|
+
it { should_not be_valid }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with unknown file as schema' do
|
74
|
+
let(:schema_file) { File.expand_path("../fixtures/non-existing-file.jsonschema", __FILE__) }
|
75
|
+
it { expect { set_schema! }.to raise_error ActiveModel::Serializer::Validator::InvalidSchemaError, 'Schema file does not exist.' }
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'with a non-supported type as schema' do
|
79
|
+
let(:schema_file) { true }
|
80
|
+
it { expect { set_schema! }.to raise_error ActiveModel::Serializer::Validator::InvalidSchemaError, 'Schema must be a path to a file or a Hash.' }
|
81
|
+
end
|
47
82
|
end
|
48
83
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_serializers_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.1'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-08-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -133,11 +133,13 @@ extra_rdoc_files: []
|
|
133
133
|
files:
|
134
134
|
- .gitignore
|
135
135
|
- .rspec
|
136
|
+
- .travis.yml
|
136
137
|
- Gemfile
|
137
138
|
- LICENSE.md
|
138
139
|
- README.md
|
139
140
|
- Rakefile
|
140
141
|
- active_model_serializers_validator.gemspec
|
142
|
+
- lib/active_model/serializer/validator/errors.rb
|
141
143
|
- lib/active_model/serializer/validator/mixin.rb
|
142
144
|
- lib/active_model/serializer/validator/version.rb
|
143
145
|
- lib/active_model_serializers_validator.rb
|
@@ -161,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
163
|
version: '0'
|
162
164
|
segments:
|
163
165
|
- 0
|
164
|
-
hash: -
|
166
|
+
hash: -3032059615404729066
|
165
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
168
|
none: false
|
167
169
|
requirements:
|
@@ -170,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
172
|
version: '0'
|
171
173
|
segments:
|
172
174
|
- 0
|
173
|
-
hash: -
|
175
|
+
hash: -3032059615404729066
|
174
176
|
requirements: []
|
175
177
|
rubyforge_project:
|
176
178
|
rubygems_version: 1.8.23
|