schematic 0.5.4 → 0.5.5
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/.gitignore +1 -0
- data/README.rdoc +1 -0
- data/lib/schematic/generator/column.rb +2 -3
- data/lib/schematic/generator/restrictions/enumeration.rb +6 -3
- data/lib/schematic/generator/sandbox.rb +8 -2
- data/lib/schematic/generator/xsd.rb +17 -2
- data/lib/schematic/version.rb +1 -1
- data/spec/schematic/generator/restrictions/enumeration_spec.rb +12 -2
- data/spec/schematic/generator/sandbox_spec.rb +20 -9
- data/spec/schematic/serializers/xsd_xsd_methods_spec.rb +0 -4
- data/spec/schematic/serializers/xsd_xsd_minimum_occurrences_for_spec.rb +0 -1
- data/spec/schematic_serializers_xsd_spec.rb +46 -9
- metadata +18 -18
data/.gitignore
CHANGED
data/README.rdoc
CHANGED
@@ -8,7 +8,7 @@ module Schematic
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def initialize(klass, column, additional_methods = {}, ignored_methods =
|
11
|
+
def initialize(klass, column, additional_methods = {}, ignored_methods = {}, required_methods = [])
|
12
12
|
@klass = klass
|
13
13
|
@column = column
|
14
14
|
@additional_methods = additional_methods
|
@@ -55,8 +55,7 @@ module Schematic
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def skip_generation?
|
58
|
-
@additional_methods.keys.map(&:to_s).include?(@column.name)
|
59
|
-
@ignored_methods.map(&:to_s).include?(@column.name)
|
58
|
+
(@additional_methods.keys + @ignored_methods.keys).map(&:to_s).include?(@column.name)
|
60
59
|
end
|
61
60
|
end
|
62
61
|
end
|
@@ -5,8 +5,12 @@ module Schematic
|
|
5
5
|
def generate(builder)
|
6
6
|
for_validator ActiveModel::Validations::InclusionValidator do |validator|
|
7
7
|
next if column.type == :boolean
|
8
|
-
|
9
|
-
|
8
|
+
if validator.options[:in].respond_to?(:call)
|
9
|
+
valid_values = validator.options[:in].call(nil) rescue []
|
10
|
+
else
|
11
|
+
valid_values = validator.options[:in]
|
12
|
+
end
|
13
|
+
valid_values.each do |value|
|
10
14
|
builder.xs(:enumeration, "value" => value)
|
11
15
|
end
|
12
16
|
end
|
@@ -21,4 +25,3 @@ module Schematic
|
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
24
|
-
|
@@ -5,7 +5,7 @@ module Schematic
|
|
5
5
|
|
6
6
|
def initialize(klass)
|
7
7
|
@klass = klass
|
8
|
-
@ignored_elements ||= []
|
8
|
+
@ignored_elements ||= Hash.new([])
|
9
9
|
@added_elements ||= {}
|
10
10
|
@required_elements ||= []
|
11
11
|
end
|
@@ -33,7 +33,13 @@ module Schematic
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def ignore(*fields)
|
36
|
-
fields.
|
36
|
+
if fields[0].is_a?(Hash)
|
37
|
+
fields[0].each do |key, value|
|
38
|
+
ignored_elements[key.to_sym] = value
|
39
|
+
end
|
40
|
+
else
|
41
|
+
fields.each { |field| ignored_elements[field] = nil }
|
42
|
+
end
|
37
43
|
end
|
38
44
|
|
39
45
|
def add(*args)
|
@@ -40,6 +40,7 @@ module Schematic
|
|
40
40
|
next if nested_attribute.klass == klass.superclass
|
41
41
|
@options ||= {}
|
42
42
|
@options[:generated_types] ||= []
|
43
|
+
@options[:exclude] = klass.schematic_sandbox.ignored_elements[nested_attribute.name]
|
43
44
|
next if @options[:generated_types].include?(nested_attribute.klass)
|
44
45
|
nested_attribute.klass.schematic_sandbox.generate_xsd(builder, klass, nested_attribute.macro == :has_many, @options)
|
45
46
|
@options[:generated_types] << nested_attribute.klass
|
@@ -61,8 +62,20 @@ module Schematic
|
|
61
62
|
def generate_complex_type_for_model(builder)
|
62
63
|
builder.xs :complexType, "name" => @names.type do |complex_type|
|
63
64
|
additional_methods = @klass.schematic_sandbox.added_elements.merge(@options[:methods] || {})
|
64
|
-
ignored_methods = @klass.schematic_sandbox.ignored_elements
|
65
|
+
ignored_methods = @klass.schematic_sandbox.ignored_elements.dup
|
66
|
+
exclude = @options[:exclude]
|
67
|
+
|
68
|
+
case exclude
|
69
|
+
when Hash
|
70
|
+
ignored_methods.merge!(exclude)
|
71
|
+
when Array
|
72
|
+
exclude.each do |key|
|
73
|
+
ignored_methods[key] = nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
65
77
|
required_methods = @klass.schematic_sandbox.required_elements
|
78
|
+
|
66
79
|
complex_type.xs :all do |all|
|
67
80
|
generate_column_elements(all, additional_methods, ignored_methods, required_methods)
|
68
81
|
|
@@ -156,7 +169,9 @@ module Schematic
|
|
156
169
|
def nested_attributes
|
157
170
|
return [] unless @klass.respond_to?(:reflect_on_all_associations)
|
158
171
|
@klass.reflect_on_all_associations.select do |association|
|
159
|
-
@klass.instance_methods.include?("#{association.name}_attributes=".to_sym) &&
|
172
|
+
@klass.instance_methods.include?("#{association.name}_attributes=".to_sym) &&
|
173
|
+
association.options[:polymorphic] != true &&
|
174
|
+
!@klass.schematic_sandbox.ignored_elements[association.name.to_sym].nil?
|
160
175
|
end
|
161
176
|
end
|
162
177
|
|
data/lib/schematic/version.rb
CHANGED
@@ -13,6 +13,7 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
13
13
|
t.string "and_also_be_skipped"
|
14
14
|
t.boolean "active"
|
15
15
|
t.string "options"
|
16
|
+
t.string "more_options"
|
16
17
|
t.integer "force_enumeration"
|
17
18
|
t.integer "skip_enumeration"
|
18
19
|
t.integer "skip_inclusion_set_lambda"
|
@@ -25,6 +26,7 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
25
26
|
validates :and_also_be_skipped, :inclusion => ["a", "b", "c"], :if => lambda { true}, :unless => lambda { false }
|
26
27
|
validates :active, :inclusion => { :in => [true, false] }
|
27
28
|
validates :options, :inclusion => { :in => lambda { |f| ["some valid attribute"] } }
|
29
|
+
validates :more_options, :inclusion => { :in => lambda { |f| f.title == "something" ? ["test"] : ["something else"] } }
|
28
30
|
validates :force_enumeration, :inclusion => { :in => [1, 2], :xsd => { :include => true} }, :if => lambda { false }
|
29
31
|
validates :skip_enumeration, :inclusion => { :in => [1, 2], :xsd => { :include => false} }, :if => lambda { true }
|
30
32
|
validates :skip_inclusion_set_lambda, :inclusion => { :in => lambda { |x| [1, 2] } }, :if => :some_method
|
@@ -47,6 +49,7 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
47
49
|
:and_also_be_skipped => "a",
|
48
50
|
:active => true,
|
49
51
|
:options => "some valid attribute",
|
52
|
+
:more_options => "something else",
|
50
53
|
:force_enumeration => 2,
|
51
54
|
:skip_enumeration => 2,
|
52
55
|
:skip_inclusion_set_lambda => 2)
|
@@ -103,6 +106,15 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
103
106
|
</xs:complexType>
|
104
107
|
</xs:element>
|
105
108
|
<xs:element name="options" minOccurs="0" maxOccurs="1">
|
109
|
+
<xs:complexType>
|
110
|
+
<xs:simpleContent>
|
111
|
+
<xs:restriction base="String">
|
112
|
+
<xs:enumeration value="some valid attribute"/>
|
113
|
+
</xs:restriction>
|
114
|
+
</xs:simpleContent>
|
115
|
+
</xs:complexType>
|
116
|
+
</xs:element>
|
117
|
+
<xs:element name="more-options" minOccurs="0" maxOccurs="1">
|
106
118
|
<xs:complexType>
|
107
119
|
<xs:simpleContent>
|
108
120
|
<xs:restriction base="String">
|
@@ -144,5 +156,3 @@ describe Schematic::Generator::Restrictions::Enumeration do
|
|
144
156
|
end
|
145
157
|
end
|
146
158
|
end
|
147
|
-
|
148
|
-
|
@@ -5,19 +5,30 @@ describe Schematic::Generator::Sandbox do
|
|
5
5
|
let(:klass) { Object }
|
6
6
|
|
7
7
|
describe "ignoring elements" do
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
context "on the base element" do
|
9
|
+
it "should add the method to the ignored list" do
|
10
|
+
subject.run do
|
11
|
+
ignore :foo
|
12
|
+
end
|
13
|
+
subject.ignored_elements.should include(:foo)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "accepts multiple fields" do
|
17
|
+
subject.run do
|
18
|
+
ignore :foo, :bar
|
19
|
+
end
|
20
|
+
subject.ignored_elements.should include(:foo)
|
21
|
+
subject.ignored_elements.should include(:bar)
|
11
22
|
end
|
12
|
-
subject.ignored_elements.should include(:foo)
|
13
23
|
end
|
14
24
|
|
15
|
-
|
16
|
-
|
17
|
-
|
25
|
+
context "on nested elements" do
|
26
|
+
it "should remove the method to the element list" do
|
27
|
+
subject.run do
|
28
|
+
ignore :foo => [:bar]
|
29
|
+
end
|
30
|
+
subject.ignored_elements[:foo].should == [:bar]
|
18
31
|
end
|
19
|
-
subject.ignored_elements.should include(:foo)
|
20
|
-
subject.ignored_elements.should include(:bar)
|
21
32
|
end
|
22
33
|
end
|
23
34
|
|
@@ -4,8 +4,6 @@ describe Schematic::Serializers::Xsd do
|
|
4
4
|
describe "Adding additional methods" do
|
5
5
|
context "given a method" do
|
6
6
|
with_model :some_model do
|
7
|
-
table {}
|
8
|
-
|
9
7
|
model do
|
10
8
|
schematic do
|
11
9
|
add :foo_bar
|
@@ -258,8 +256,6 @@ describe Schematic::Serializers::Xsd do
|
|
258
256
|
|
259
257
|
context "given nested methods" do
|
260
258
|
with_model :some_model do
|
261
|
-
table {}
|
262
|
-
|
263
259
|
model do
|
264
260
|
schematic do
|
265
261
|
add :foo => { :bar => { :baz => nil } }
|
@@ -52,6 +52,7 @@ describe Schematic::Serializers::Xsd do
|
|
52
52
|
validate_xml_against_xsd(xml, subject)
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
55
56
|
context "when the model is not namespaced" do
|
56
57
|
subject { SomeModel.to_xsd }
|
57
58
|
|
@@ -138,11 +139,8 @@ describe Schematic::Serializers::Xsd do
|
|
138
139
|
table do |t|
|
139
140
|
t.integer :parent_id
|
140
141
|
end
|
141
|
-
model {}
|
142
142
|
end
|
143
143
|
with_model :parent do
|
144
|
-
table {}
|
145
|
-
model {}
|
146
144
|
end
|
147
145
|
|
148
146
|
|
@@ -179,7 +177,6 @@ describe Schematic::Serializers::Xsd do
|
|
179
177
|
|
180
178
|
context "when the model has a nested attribute on a subclass with a different class name than the has_many association" do
|
181
179
|
with_model :parent2 do
|
182
|
-
table {}
|
183
180
|
model do
|
184
181
|
has_many :children, :class_name => "SpecialChild"
|
185
182
|
accepts_nested_attributes_for :children
|
@@ -207,7 +204,6 @@ describe Schematic::Serializers::Xsd do
|
|
207
204
|
|
208
205
|
context "when the model has a nested attribute for a has_one association" do
|
209
206
|
with_model :car do
|
210
|
-
table {}
|
211
207
|
model do
|
212
208
|
has_one :engine
|
213
209
|
accepts_nested_attributes_for :engine
|
@@ -236,7 +232,6 @@ describe Schematic::Serializers::Xsd do
|
|
236
232
|
|
237
233
|
context "when the model has a nested attribute which is ignored" do
|
238
234
|
with_model :car do
|
239
|
-
table {}
|
240
235
|
model do
|
241
236
|
has_one :engine
|
242
237
|
accepts_nested_attributes_for :engine
|
@@ -264,9 +259,53 @@ describe Schematic::Serializers::Xsd do
|
|
264
259
|
end
|
265
260
|
end
|
266
261
|
|
262
|
+
context "when the model has a nested attribute and ignores one of the methods of the nested attribute" do
|
263
|
+
with_model :parent do
|
264
|
+
model do
|
265
|
+
has_one :child
|
266
|
+
accepts_nested_attributes_for :child
|
267
|
+
schematic do
|
268
|
+
ignore :child => [:last_name]
|
269
|
+
end
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
with_model :child do
|
274
|
+
table do |t|
|
275
|
+
t.integer :parent_id
|
276
|
+
t.string :first_name
|
277
|
+
t.string :last_name
|
278
|
+
end
|
279
|
+
|
280
|
+
model do
|
281
|
+
belongs_to :parent
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
describe "the parent XSD" do
|
286
|
+
subject { Parent.to_xsd }
|
287
|
+
|
288
|
+
it "should be valid" do
|
289
|
+
subject.should include "child-attributes"
|
290
|
+
subject.should include "first-name"
|
291
|
+
subject.should_not include "last-name"
|
292
|
+
validate_xsd(subject)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
describe "the child XSD" do
|
297
|
+
subject { Child.to_xsd }
|
298
|
+
|
299
|
+
it "should be valid" do
|
300
|
+
subject.should include "first-name"
|
301
|
+
subject.should include "last-name"
|
302
|
+
validate_xsd(subject)
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
267
307
|
context "when the model has a circular nested attribute reference" do
|
268
308
|
with_model :plate do
|
269
|
-
table {}
|
270
309
|
model do
|
271
310
|
has_many :cheeses
|
272
311
|
accepts_nested_attributes_for :cheeses
|
@@ -294,7 +333,6 @@ describe Schematic::Serializers::Xsd do
|
|
294
333
|
|
295
334
|
context "when the model has a nested reference that references another nested reference" do
|
296
335
|
with_model :blog do
|
297
|
-
table {}
|
298
336
|
model do
|
299
337
|
has_many :posts
|
300
338
|
has_many :readers
|
@@ -446,7 +484,6 @@ describe Schematic::Serializers::Xsd do
|
|
446
484
|
|
447
485
|
describe "additional methods" do
|
448
486
|
with_model :some_model do
|
449
|
-
table {}
|
450
487
|
end
|
451
488
|
|
452
489
|
it "should include the additional method" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schematic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-10-
|
12
|
+
date: 2011-10-10 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152311800 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152311800
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: builder
|
27
|
-
requirement: &
|
27
|
+
requirement: &2152311020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2152311020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec-rails
|
38
|
-
requirement: &
|
38
|
+
requirement: &2152310340 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '2.1'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2152310340
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: with_model
|
49
|
-
requirement: &
|
49
|
+
requirement: &2152309480 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2152309480
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: nokogiri
|
60
|
-
requirement: &
|
60
|
+
requirement: &2152308540 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2152308540
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sqlite3
|
71
|
-
requirement: &
|
71
|
+
requirement: &2152307820 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2152307820
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: autotest
|
82
|
-
requirement: &
|
82
|
+
requirement: &2152307120 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2152307120
|
91
91
|
description: Automatic XSD generation from ActiveRecord models
|
92
92
|
email:
|
93
93
|
- casecommons-dev@googlegroups.com
|
@@ -153,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
153
|
version: '0'
|
154
154
|
segments:
|
155
155
|
- 0
|
156
|
-
hash: -
|
156
|
+
hash: -2905881266573223577
|
157
157
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
158
|
none: false
|
159
159
|
requirements:
|
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
162
|
version: '0'
|
163
163
|
segments:
|
164
164
|
- 0
|
165
|
-
hash: -
|
165
|
+
hash: -2905881266573223577
|
166
166
|
requirements: []
|
167
167
|
rubyforge_project: schematic
|
168
168
|
rubygems_version: 1.8.10
|