schematic 0.1.3 → 0.1.4
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/lib/schematic/generator/column.rb +1 -0
- data/lib/schematic/generator/restrictions/base.rb +5 -1
- data/lib/schematic/generator/restrictions/custom.rb +18 -0
- data/lib/schematic/generator/restrictions/enumeration.rb +0 -5
- data/lib/schematic/generator/restrictions/length.rb +0 -5
- data/lib/schematic/generator/restrictions/pattern.rb +0 -5
- data/lib/schematic/version.rb +1 -1
- data/spec/schematic/generator/restrictions/custom_spec.rb +65 -0
- metadata +4 -1
@@ -19,6 +19,7 @@ module Schematic
|
|
19
19
|
Restrictions::Length.new(@klass, @column).generate(restriction)
|
20
20
|
Restrictions::Enumeration.new(@klass, @column).generate(restriction)
|
21
21
|
Restrictions::Pattern.new(@klass, @column).generate(restriction)
|
22
|
+
Restrictions::Custom.new(@klass, @column).generate(restriction)
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
@@ -8,7 +8,7 @@ module Schematic
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def for_validator(validator_klass)
|
11
|
-
|
11
|
+
validators_for_column.each do |column_validation|
|
12
12
|
next unless column_validation.is_a? validator_klass
|
13
13
|
next unless column_validation.options[:if].nil?
|
14
14
|
yield(column_validation)
|
@@ -16,6 +16,10 @@ module Schematic
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def validators_for_column
|
20
|
+
@klass._validators[@column.name.to_sym]
|
21
|
+
end
|
22
|
+
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Schematic
|
2
|
+
module Generator
|
3
|
+
module Restrictions
|
4
|
+
class Custom < Base
|
5
|
+
def generate(builder)
|
6
|
+
validators_for_column.each do |validator|
|
7
|
+
if validator.respond_to?(:xsd_restriction)
|
8
|
+
restriction = validator.xsd_restriction
|
9
|
+
builder.xs(:pattern, "value" => restriction.is_a?(Regexp) ? restriction.source : restriction)
|
10
|
+
return
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -2,11 +2,6 @@ module Schematic
|
|
2
2
|
module Generator
|
3
3
|
module Restrictions
|
4
4
|
class Enumeration < Base
|
5
|
-
def initialize(klass, column)
|
6
|
-
@klass = klass
|
7
|
-
@column = column
|
8
|
-
end
|
9
|
-
|
10
5
|
def generate(builder)
|
11
6
|
for_validator ActiveModel::Validations::InclusionValidator do |validator|
|
12
7
|
validator.options[:in].each do |value|
|
@@ -2,11 +2,6 @@ module Schematic
|
|
2
2
|
module Generator
|
3
3
|
module Restrictions
|
4
4
|
class Length < Base
|
5
|
-
def initialize(klass, column)
|
6
|
-
@klass = klass
|
7
|
-
@column = column
|
8
|
-
end
|
9
|
-
|
10
5
|
def generate(builder)
|
11
6
|
for_validator ActiveModel::Validations::LengthValidator do |validator|
|
12
7
|
builder.xs(:maxLength, "value" => validator.options[:maximum]) if validator.options[:maximum]
|
@@ -2,11 +2,6 @@ module Schematic
|
|
2
2
|
module Generator
|
3
3
|
module Restrictions
|
4
4
|
class Pattern < Base
|
5
|
-
def initialize(klass, column)
|
6
|
-
@klass = klass
|
7
|
-
@column = column
|
8
|
-
end
|
9
|
-
|
10
5
|
def generate(builder)
|
11
6
|
for_validator ActiveModel::Validations::FormatValidator do |validator|
|
12
7
|
if pattern = validator.options[:with]
|
data/lib/schematic/version.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Schematic::Generator::Restrictions::Enumeration do
|
4
|
+
describe ".to_xsd" do
|
5
|
+
context "with a model with custom validations" do
|
6
|
+
before do
|
7
|
+
class CrazyTownValidator < ActiveModel::EachValidator
|
8
|
+
def validate_each(record, attribute, value)
|
9
|
+
record.errors.add(attribute, "must be crazy") unless value.match /.*crazy.*/
|
10
|
+
end
|
11
|
+
|
12
|
+
def xsd_restriction
|
13
|
+
/.*crazy.*/
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
subject { sanitize_xml(CustomModel.to_xsd) }
|
19
|
+
with_model :custom_model do
|
20
|
+
table :id => false do |t|
|
21
|
+
t.string "title"
|
22
|
+
end
|
23
|
+
|
24
|
+
model do
|
25
|
+
validates :title, :crazy_town => true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should validate against it's own XSD" do
|
30
|
+
invalid_instance = CustomModel.new(:title => "happy")
|
31
|
+
xml = [invalid_instance].to_xml
|
32
|
+
lambda {
|
33
|
+
validate_xml_against_xsd(xml, subject)
|
34
|
+
}.should raise_error
|
35
|
+
valid_instance = CustomModel.new(:title => "iamcrazytoday")
|
36
|
+
xml = [valid_instance].to_xml
|
37
|
+
lambda {
|
38
|
+
validate_xml_against_xsd(xml, subject)
|
39
|
+
}.should_not raise_error
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should mark that the field with the allowed values" do
|
43
|
+
xsd = generate_xsd_for_model(CustomModel) do
|
44
|
+
<<-XML
|
45
|
+
<xs:element name="title" minOccurs="0" maxOccurs="1">
|
46
|
+
<xs:complexType>
|
47
|
+
<xs:simpleContent>
|
48
|
+
<xs:restriction base="String">
|
49
|
+
<xs:pattern value=".*crazy.*"/>
|
50
|
+
</xs:restriction>
|
51
|
+
</xs:simpleContent>
|
52
|
+
</xs:complexType>
|
53
|
+
</xs:element>
|
54
|
+
XML
|
55
|
+
end
|
56
|
+
|
57
|
+
subject.should == xsd
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: schematic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Case Commons, LLC
|
@@ -112,6 +112,7 @@ files:
|
|
112
112
|
- lib/schematic/generator/names.rb
|
113
113
|
- lib/schematic/generator/namespaces.rb
|
114
114
|
- lib/schematic/generator/restrictions/base.rb
|
115
|
+
- lib/schematic/generator/restrictions/custom.rb
|
115
116
|
- lib/schematic/generator/restrictions/enumeration.rb
|
116
117
|
- lib/schematic/generator/restrictions/length.rb
|
117
118
|
- lib/schematic/generator/restrictions/pattern.rb
|
@@ -120,6 +121,7 @@ files:
|
|
120
121
|
- lib/schematic/serializers/xsd.rb
|
121
122
|
- lib/schematic/version.rb
|
122
123
|
- schematic.gemspec
|
124
|
+
- spec/schematic/generator/restrictions/custom_spec.rb
|
123
125
|
- spec/schematic/generator/restrictions/enumeration_spec.rb
|
124
126
|
- spec/schematic/generator/restrictions/length_spec.rb
|
125
127
|
- spec/schematic/generator/restrictions/pattern_spec.rb
|
@@ -160,6 +162,7 @@ signing_key:
|
|
160
162
|
specification_version: 3
|
161
163
|
summary: Automatic XSD generation from ActiveRecord models
|
162
164
|
test_files:
|
165
|
+
- spec/schematic/generator/restrictions/custom_spec.rb
|
163
166
|
- spec/schematic/generator/restrictions/enumeration_spec.rb
|
164
167
|
- spec/schematic/generator/restrictions/length_spec.rb
|
165
168
|
- spec/schematic/generator/restrictions/pattern_spec.rb
|