schematic 0.6.2 → 0.7.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 +7 -0
- data/.gitignore +14 -8
- data/.travis.yml +17 -0
- data/Gemfile +6 -1
- data/LICENSE +1 -1
- data/README.md +106 -0
- data/Rakefile +3 -8
- data/lib/schematic.rb +3 -42
- data/lib/schematic/exceptions.rb +13 -0
- data/lib/schematic/generator/column.rb +17 -11
- data/lib/schematic/generator/namespaces.rb +3 -3
- data/lib/schematic/generator/restrictions/base.rb +5 -5
- data/lib/schematic/generator/restrictions/custom.rb +3 -2
- data/lib/schematic/generator/restrictions/enumeration.rb +5 -2
- data/lib/schematic/generator/restrictions/length.rb +4 -2
- data/lib/schematic/generator/restrictions/numericality.rb +3 -1
- data/lib/schematic/generator/restrictions/pattern.rb +4 -3
- data/lib/schematic/generator/sandbox.rb +4 -1
- data/lib/schematic/generator/types.rb +14 -13
- data/lib/schematic/generator/uniqueness.rb +7 -8
- data/lib/schematic/generator/xsd.rb +32 -26
- data/lib/schematic/serializers/xsd.rb +6 -6
- data/lib/schematic/version.rb +1 -1
- data/schematic.gemspec +23 -24
- data/spec/schematic/generator/restrictions/custom_spec.rb +15 -18
- data/spec/schematic/generator/restrictions/enumeration_spec.rb +31 -31
- data/spec/schematic/generator/restrictions/length_spec.rb +35 -30
- data/spec/schematic/generator/restrictions/mixin_spec.rb +11 -15
- data/spec/schematic/generator/restrictions/numericality_spec.rb +11 -11
- data/spec/schematic/generator/restrictions/pattern_spec.rb +20 -21
- data/spec/schematic/generator/sandbox_spec.rb +17 -17
- data/spec/schematic/generator/uniqueness_spec.rb +38 -37
- data/spec/schematic/serializers/xsd_extend_spec.rb +11 -11
- data/spec/schematic/serializers/xsd_validation_presence_spec.rb +16 -11
- data/spec/schematic/serializers/xsd_xsd_ignore_methods_spec.rb +3 -3
- data/spec/schematic/serializers/xsd_xsd_methods_spec.rb +27 -24
- data/spec/schematic/serializers/xsd_xsd_minimum_occurrences_for_spec.rb +13 -8
- data/spec/schematic_serializers_xsd_spec.rb +70 -67
- data/spec/spec_helper.rb +8 -113
- data/spec/support/database.rb +9 -0
- data/spec/support/helpers.rb +111 -0
- data/spec/support/with_model.rb +5 -0
- data/spec/{xsd → support/xsd}/XMLSchema.xsd +0 -0
- data/spec/{xsd → support/xsd}/xml.xsd +0 -0
- metadata +54 -69
- data/.rspec +0 -1
- data/.rvmrc +0 -1
- data/README.rdoc +0 -103
- data/spec/support/extensions/active_model/validations/inclusion.rb +0 -69
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'builder'
|
2
|
+
require 'schematic/generator/xsd'
|
3
|
+
|
1
4
|
module Schematic
|
2
5
|
module Generator
|
3
6
|
class Sandbox
|
@@ -20,7 +23,7 @@ module Schematic
|
|
20
23
|
end
|
21
24
|
|
22
25
|
def to_xsd(options = {})
|
23
|
-
output =
|
26
|
+
output = ''
|
24
27
|
builder = Builder::XmlMarkup.new(:target => output, :indent => 2)
|
25
28
|
xsd_generator.options = options
|
26
29
|
xsd_generator.header(builder)
|
@@ -2,24 +2,25 @@ module Schematic
|
|
2
2
|
module Generator
|
3
3
|
class Types
|
4
4
|
COMPLEX = {
|
5
|
-
:integer
|
6
|
-
:float
|
7
|
-
:string
|
8
|
-
:text
|
9
|
-
:datetime => { :complex_type =>
|
10
|
-
:date
|
11
|
-
:boolean
|
12
|
-
|
5
|
+
:integer => { :complex_type => 'Integer', :xsd_type => 'xs:integer' }.freeze,
|
6
|
+
:float => { :complex_type => 'Float', :xsd_type => 'xs:float' }.freeze,
|
7
|
+
:string => { :complex_type => 'String', :xsd_type => 'xs:string' }.freeze,
|
8
|
+
:text => { :complex_type => 'Text', :xsd_type => 'xs:string' }.freeze,
|
9
|
+
:datetime => { :complex_type => 'DateTime', :xsd_type => 'xs:dateTime' }.freeze,
|
10
|
+
:date => { :complex_type => 'Date', :xsd_type => 'xs:date' }.freeze,
|
11
|
+
:boolean => { :complex_type => 'Boolean', :xsd_type => 'xs:boolean' }.freeze,
|
12
|
+
:uuid => { :complex_type => 'String', :xsd_type => 'xs:string' }.freeze,
|
13
|
+
}.freeze
|
13
14
|
|
14
15
|
def self.xsd(builder)
|
15
|
-
Types::COMPLEX.each do |
|
16
|
+
Types::COMPLEX.values.uniq.each do |value|
|
16
17
|
complex_type_name = value[:complex_type]
|
17
18
|
xsd_type = value[:xsd_type]
|
18
|
-
builder.xs :complexType,
|
19
|
+
builder.xs :complexType, 'name' => complex_type_name do |complex_type|
|
19
20
|
complex_type.xs :simpleContent do |simple_content|
|
20
|
-
simple_content.xs :extension,
|
21
|
-
extension.xs :attribute,
|
22
|
-
extension.xs :attribute,
|
21
|
+
simple_content.xs :extension, 'base' => xsd_type do |extension|
|
22
|
+
extension.xs :attribute, 'name' => 'type', 'type' => 'xs:string', 'use' => 'optional'
|
23
|
+
extension.xs :attribute, 'name' => 'nil', 'type' => 'xs:boolean', 'use' => 'optional'
|
23
24
|
end
|
24
25
|
end
|
25
26
|
end
|
@@ -1,18 +1,20 @@
|
|
1
|
+
require 'active_record/validations/uniqueness'
|
2
|
+
require 'schematic/generator/column_validator'
|
3
|
+
|
1
4
|
module Schematic
|
2
5
|
module Generator
|
3
6
|
class Uniqueness < ColumnValidator
|
4
|
-
|
5
7
|
def generate(builder)
|
6
8
|
for_validator ActiveRecord::Validations::UniquenessValidator do |validator|
|
7
9
|
unique_name = validator.attributes.first.to_s.dasherize
|
8
10
|
additional_fields = (Array.wrap(validator.options[:scope]) || []).map(&:to_s).map(&:dasherize)
|
9
11
|
|
10
12
|
names = Schematic::Generator::Names.new(@klass)
|
11
|
-
builder.xs :unique,
|
12
|
-
unique.xs :selector,
|
13
|
-
unique.xs :field,
|
13
|
+
builder.xs :unique, 'name' => "#{unique_name}-must-be-unique" do |unique|
|
14
|
+
unique.xs :selector, 'xpath' => "./#{names.element}"
|
15
|
+
unique.xs :field, 'xpath' => unique_name
|
14
16
|
additional_fields.each do |additional_field|
|
15
|
-
unique.xs :field,
|
17
|
+
unique.xs :field, 'xpath' => additional_field
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -20,6 +22,3 @@ module Schematic
|
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
23
|
-
|
24
|
-
|
25
|
-
|
@@ -1,3 +1,9 @@
|
|
1
|
+
require 'schematic/generator/column'
|
2
|
+
require 'schematic/generator/names'
|
3
|
+
require 'schematic/generator/namespaces'
|
4
|
+
require 'schematic/generator/types'
|
5
|
+
require 'schematic/generator/uniqueness'
|
6
|
+
|
1
7
|
module Schematic
|
2
8
|
module Generator
|
3
9
|
class Xsd
|
@@ -21,7 +27,7 @@ module Schematic
|
|
21
27
|
end
|
22
28
|
|
23
29
|
def schema(builder)
|
24
|
-
builder.xs :schema, ns(
|
30
|
+
builder.xs :schema, ns('xs', :w3, :schema) do |schema|
|
25
31
|
Types.xsd(schema)
|
26
32
|
element_for_klass(schema)
|
27
33
|
generate(schema, @klass)
|
@@ -29,7 +35,7 @@ module Schematic
|
|
29
35
|
end
|
30
36
|
|
31
37
|
def element_for_klass(builder)
|
32
|
-
builder.xs :element,
|
38
|
+
builder.xs :element, 'name' => @names.element_collection, 'type' => @names.collection_type do |element|
|
33
39
|
generate_uniqueness_constraints(element)
|
34
40
|
end
|
35
41
|
end
|
@@ -65,16 +71,16 @@ module Schematic
|
|
65
71
|
end
|
66
72
|
|
67
73
|
def generate_complex_type_for_collection(builder)
|
68
|
-
builder.xs :complexType,
|
74
|
+
builder.xs :complexType, 'name' => @names.collection_type do |complex_type|
|
69
75
|
complex_type.xs :sequence do |sequence|
|
70
|
-
sequence.xs :element,
|
76
|
+
sequence.xs :element, 'name' => @names.element, 'type' => @names.type, 'minOccurs' => '0', 'maxOccurs' => 'unbounded'
|
71
77
|
end
|
72
|
-
complex_type.xs :attribute,
|
78
|
+
complex_type.xs :attribute, 'name' => 'type', 'type' => 'xs:string', 'fixed' => 'array'
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
76
82
|
def generate_complex_type_for_model(builder)
|
77
|
-
builder.xs :complexType,
|
83
|
+
builder.xs :complexType, 'name' => @names.type do |complex_type|
|
78
84
|
additional_methods = @klass.schematic_sandbox.added_elements.merge(@options[:methods] || {})
|
79
85
|
ignored_methods = @klass.schematic_sandbox.ignored_elements.dup
|
80
86
|
exclude = @exclude
|
@@ -98,22 +104,22 @@ module Schematic
|
|
98
104
|
case nested_attribute.macro
|
99
105
|
when :has_many
|
100
106
|
all.xs :element,
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
107
|
+
'name' => nested_attribute_name(nested_attribute.name),
|
108
|
+
'type' => nested_attribute.klass.schematic_sandbox.xsd_generator.names.collection_type,
|
109
|
+
'minOccurs' => '0',
|
110
|
+
'maxOccurs' => '1'
|
105
111
|
when :has_one
|
106
112
|
all.xs :element,
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
113
|
+
'name' => nested_attribute_name(nested_attribute.name, {:pluralized => false}),
|
114
|
+
'type' => nested_attribute.klass.schematic_sandbox.xsd_generator.names.type,
|
115
|
+
'minOccurs' => '0',
|
116
|
+
'maxOccurs' => '1'
|
111
117
|
when :belongs_to
|
112
118
|
all.xs :element,
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
119
|
+
'name' => nested_attribute_name(nested_attribute.name, {:pluralized => false}),
|
120
|
+
'type' => nested_attribute.klass.schematic_sandbox.xsd_generator.names.type,
|
121
|
+
'minOccurs' => '0',
|
122
|
+
'maxOccurs' => '1'
|
117
123
|
end
|
118
124
|
end
|
119
125
|
|
@@ -140,10 +146,10 @@ module Schematic
|
|
140
146
|
enumeration_method = "xsd_#{value}_enumeration_restrictions".to_sym
|
141
147
|
builder.xs :complexType do |complex_type|
|
142
148
|
complex_type.xs :simpleContent do |simple_content|
|
143
|
-
simple_content.xs :restriction,
|
149
|
+
simple_content.xs :restriction, 'base' => 'String' do |restriction|
|
144
150
|
if @klass.respond_to? enumeration_method
|
145
151
|
@klass.send(enumeration_method).each do |enumeration|
|
146
|
-
restriction.xs :enumeration,
|
152
|
+
restriction.xs :enumeration, 'value' => enumeration
|
147
153
|
end
|
148
154
|
end
|
149
155
|
end
|
@@ -155,18 +161,18 @@ module Schematic
|
|
155
161
|
additional_methods.each do |method_name, values|
|
156
162
|
method_xsd_name = method_name.to_s.dasherize
|
157
163
|
if values.is_a?(Array) || values.is_a?(Hash)
|
158
|
-
builder.xs :element,
|
164
|
+
builder.xs :element, 'name' => method_xsd_name, 'minOccurs' => '0', 'maxOccurs' => '1' do |element|
|
159
165
|
element.xs :complexType do |complex_type|
|
160
166
|
if values.is_a?(Array)
|
161
167
|
complex_type.xs :sequence do |nested_sequence|
|
162
168
|
if values.present?
|
163
169
|
values.each do |value|
|
164
|
-
nested_sequence.xs :element,
|
170
|
+
nested_sequence.xs :element, 'name' => value.to_s.dasherize, 'minOccurs' => '0', 'maxOccurs' => 'unbounded' do |sequence_element|
|
165
171
|
generate_inclusion_value_restrictions(sequence_element, value)
|
166
172
|
end
|
167
173
|
end
|
168
174
|
else
|
169
|
-
nested_sequence.xs :any,
|
175
|
+
nested_sequence.xs :any, 'processContents' => 'skip', 'minOccurs' => '0', 'maxOccurs' => 'unbounded'
|
170
176
|
end
|
171
177
|
end
|
172
178
|
elsif values.is_a?(Hash)
|
@@ -174,9 +180,9 @@ module Schematic
|
|
174
180
|
generate_additional_methods(nested_all, values)
|
175
181
|
end
|
176
182
|
else
|
177
|
-
raise
|
183
|
+
raise 'Additional methods must be a hash of hashes or hash of arrays'
|
178
184
|
end
|
179
|
-
complex_type.xs :attribute,
|
185
|
+
complex_type.xs :attribute, 'name' => 'type', 'type' => 'xs:string', 'fixed' => 'array', 'use' => 'optional'
|
180
186
|
end
|
181
187
|
end
|
182
188
|
else
|
@@ -203,7 +209,7 @@ module Schematic
|
|
203
209
|
def nested_attribute_name(name, options={})
|
204
210
|
pluralized = options.delete(:pluralized)
|
205
211
|
pluralized = true if pluralized.nil?
|
206
|
-
name = name.to_s.gsub(
|
212
|
+
name = name.to_s.gsub('_', '-')
|
207
213
|
name = name.pluralize if pluralized
|
208
214
|
"#{name}-attributes"
|
209
215
|
end
|
@@ -1,11 +1,12 @@
|
|
1
|
+
require 'schematic/generator/sandbox'
|
2
|
+
require 'schematic/exceptions'
|
3
|
+
|
1
4
|
module Schematic
|
2
5
|
module Serializers
|
3
6
|
module Xsd
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
raise ClassMissingAttributes unless klass.instance_methods.include?(:attributes)
|
8
|
-
end
|
7
|
+
def self.extended(klass)
|
8
|
+
raise ClassMissingXmlSerializer unless klass.ancestors.include?(ActiveModel::Serializers::Xml)
|
9
|
+
raise ClassMissingAttributes unless klass.instance_methods.include?(:attributes)
|
9
10
|
end
|
10
11
|
|
11
12
|
def schematic(&block)
|
@@ -19,7 +20,6 @@ module Schematic
|
|
19
20
|
def to_xsd(options = {})
|
20
21
|
schematic_sandbox.to_xsd(options)
|
21
22
|
end
|
22
|
-
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/schematic/version.rb
CHANGED
data/schematic.gemspec
CHANGED
@@ -1,29 +1,28 @@
|
|
1
|
-
#
|
2
|
-
$:.push File.expand_path(
|
3
|
-
require
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
require 'schematic/version'
|
4
4
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'schematic'
|
7
|
+
spec.version = Schematic::VERSION
|
8
|
+
spec.authors = ['Case Commons, LLC']
|
9
|
+
spec.email = ['casecommons-dev@googlegroups.com', 'andrew@johnandrewmarshall.com']
|
10
|
+
spec.homepage = 'https://github.com/Casecommons/schematic'
|
11
|
+
spec.summary = %q{Automatic XSD generation from ActiveRecord models}
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.license = 'MIT'
|
14
14
|
|
15
|
-
|
15
|
+
spec.files = `git ls-files`.split($/)
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
s.add_development_dependency('rspec-rails', '= 2.7')
|
20
|
-
s.add_development_dependency('with_model', '>= 0.2.4')
|
21
|
-
s.add_development_dependency('nokogiri')
|
22
|
-
s.add_development_dependency('sqlite3')
|
23
|
-
s.add_development_dependency('autotest')
|
20
|
+
spec.add_dependency 'activerecord', '~> 4.0'
|
21
|
+
spec.add_dependency 'builder'
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
spec.add_development_dependency 'nokogiri'
|
24
|
+
spec.add_development_dependency 'rake'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 2.14'
|
26
|
+
spec.add_development_dependency 'sqlite3'
|
27
|
+
spec.add_development_dependency 'with_model', '~> 1.0'
|
29
28
|
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Schematic::Generator::Restrictions::
|
3
|
+
describe "Schematic::Generator::Restrictions::Custom" do
|
4
4
|
describe ".to_xsd" do
|
5
5
|
context "with a model with custom validations" do
|
6
6
|
before do
|
7
7
|
class CrazyTownValidator < ActiveModel::EachValidator
|
8
8
|
def validate_each(record, attribute, value)
|
9
|
-
record.errors.add(attribute,
|
9
|
+
record.errors.add(attribute, 'must be crazy') unless value.match /.*crazy.*|\w/
|
10
10
|
end
|
11
11
|
|
12
12
|
def xsd_pattern_restrictions
|
@@ -18,30 +18,31 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
18
18
|
subject { sanitize_xml(CustomModel.to_xsd) }
|
19
19
|
with_model :custom_model do
|
20
20
|
table :id => false do |t|
|
21
|
-
t.string
|
21
|
+
t.string 'title'
|
22
22
|
end
|
23
23
|
|
24
24
|
model do
|
25
|
+
self.primary_key = :title
|
25
26
|
validates :title, :crazy_town => true
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
30
|
it "should validate against it's own XSD" do
|
30
|
-
invalid_instance = CustomModel.new(:title =>
|
31
|
+
invalid_instance = CustomModel.new(:title => 'happy today')
|
31
32
|
xml = [invalid_instance].to_xml
|
32
|
-
|
33
|
+
expect {
|
33
34
|
validate_xml_against_xsd(xml, subject)
|
34
|
-
}.
|
35
|
-
invalid_instance = CustomModel.new(:title =>
|
35
|
+
}.to raise_error
|
36
|
+
invalid_instance = CustomModel.new(:title => 'happytoday')
|
36
37
|
xml = [invalid_instance].to_xml
|
37
|
-
|
38
|
+
expect {
|
38
39
|
validate_xml_against_xsd(xml, subject)
|
39
|
-
}.
|
40
|
-
valid_instance = CustomModel.new(:title =>
|
40
|
+
}.to raise_error
|
41
|
+
valid_instance = CustomModel.new(:title => 'iamcrazytoday')
|
41
42
|
xml = [valid_instance].to_xml
|
42
|
-
|
43
|
+
expect {
|
43
44
|
validate_xml_against_xsd(xml, subject)
|
44
|
-
}.
|
45
|
+
}.not_to raise_error
|
45
46
|
end
|
46
47
|
|
47
48
|
it "should mark that the field with the allowed values" do
|
@@ -60,12 +61,8 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
60
61
|
XML
|
61
62
|
end
|
62
63
|
|
63
|
-
subject.
|
64
|
+
expect(subject).to eq(xsd)
|
64
65
|
end
|
65
66
|
end
|
66
67
|
end
|
67
68
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
@@ -1,32 +1,32 @@
|
|
1
|
-
require
|
2
|
-
require "support/extensions/active_model/validations/inclusion"
|
1
|
+
require 'spec_helper'
|
3
2
|
|
4
|
-
describe Schematic::Generator::Restrictions::Enumeration do
|
3
|
+
describe "Schematic::Generator::Restrictions::Enumeration" do
|
5
4
|
describe ".to_xsd" do
|
6
5
|
context "with a model with inclusion validations" do
|
7
6
|
subject { sanitize_xml(EnumerationModel.to_xsd) }
|
8
7
|
with_model :enumeration_model do
|
9
8
|
table :id => false do |t|
|
10
|
-
t.string
|
11
|
-
t.string
|
12
|
-
t.string
|
13
|
-
t.string
|
14
|
-
t.boolean
|
15
|
-
t.string
|
16
|
-
t.string
|
17
|
-
t.integer
|
18
|
-
t.integer
|
19
|
-
t.integer
|
9
|
+
t.string 'title'
|
10
|
+
t.string 'should_be_skipped'
|
11
|
+
t.string 'should_also_be_skipped'
|
12
|
+
t.string 'and_also_be_skipped'
|
13
|
+
t.boolean 'active'
|
14
|
+
t.string 'options'
|
15
|
+
t.string 'more_options'
|
16
|
+
t.integer 'force_enumeration'
|
17
|
+
t.integer 'skip_enumeration'
|
18
|
+
t.integer 'skip_inclusion_set_lambda'
|
20
19
|
end
|
21
20
|
|
22
21
|
model do
|
23
|
-
|
24
|
-
validates :
|
25
|
-
validates :
|
26
|
-
validates :
|
22
|
+
self.primary_key = :title
|
23
|
+
validates :title, :inclusion => { :in => ['a', 'b', 'c'] }
|
24
|
+
validates :should_be_skipped, :inclusion => ['a', 'b', 'c'], :if => lambda { false }
|
25
|
+
validates :should_also_be_skipped, :inclusion => ['a', 'b', 'c'], :unless => lambda { false }
|
26
|
+
validates :and_also_be_skipped, :inclusion => ['a', 'b', 'c'], :if => lambda { true}, :unless => lambda { false }
|
27
27
|
validates :active, :inclusion => { :in => [true, false] }
|
28
|
-
validates :options, :inclusion => { :in => lambda { |f| [
|
29
|
-
validates :more_options, :inclusion => { :in => lambda { |f| f.title ==
|
28
|
+
validates :options, :inclusion => { :in => lambda { |f| ['some valid attribute'] } }
|
29
|
+
validates :more_options, :inclusion => { :in => lambda { |f| f.title == 'something' ? ['test'] : ['something else'] } }
|
30
30
|
validates :force_enumeration, :inclusion => { :in => [1, 2], :xsd => { :include => true} }, :if => lambda { false }
|
31
31
|
validates :skip_enumeration, :inclusion => { :in => [1, 2], :xsd => { :include => false} }, :if => lambda { true }
|
32
32
|
validates :skip_inclusion_set_lambda, :inclusion => { :in => lambda { |x| [1, 2] } }, :if => :some_method
|
@@ -38,25 +38,25 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should validate against it's own XSD" do
|
41
|
-
invalid_instance = EnumerationModel.new(:title =>
|
41
|
+
invalid_instance = EnumerationModel.new(:title => 'd')
|
42
42
|
xml = [invalid_instance].to_xml
|
43
|
-
|
43
|
+
expect {
|
44
44
|
validate_xml_against_xsd(xml, subject)
|
45
|
-
}.
|
46
|
-
valid_instance = EnumerationModel.new(:title =>
|
47
|
-
:should_be_skipped =>
|
48
|
-
:should_also_be_skipped =>
|
49
|
-
:and_also_be_skipped =>
|
45
|
+
}.to raise_error
|
46
|
+
valid_instance = EnumerationModel.new(:title => 'a',
|
47
|
+
:should_be_skipped => 'a',
|
48
|
+
:should_also_be_skipped => 'a',
|
49
|
+
:and_also_be_skipped => 'a',
|
50
50
|
:active => true,
|
51
|
-
:options =>
|
52
|
-
:more_options =>
|
51
|
+
:options => 'some valid attribute',
|
52
|
+
:more_options => 'something else',
|
53
53
|
:force_enumeration => 2,
|
54
54
|
:skip_enumeration => 2,
|
55
55
|
:skip_inclusion_set_lambda => 2)
|
56
56
|
xml = [valid_instance].to_xml
|
57
|
-
|
57
|
+
expect {
|
58
58
|
validate_xml_against_xsd(xml, subject)
|
59
|
-
}.
|
59
|
+
}.not_to raise_error
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should mark that the field with the allowed values" do
|
@@ -151,7 +151,7 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
151
151
|
XML
|
152
152
|
end
|
153
153
|
|
154
|
-
subject.
|
154
|
+
expect(subject).to eq(xsd)
|
155
155
|
end
|
156
156
|
end
|
157
157
|
end
|