schematic 0.5.5 → 0.5.6
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.
@@ -27,9 +27,9 @@ module Schematic
|
|
27
27
|
output
|
28
28
|
end
|
29
29
|
|
30
|
-
def generate_xsd(builder, klass, include_collection, options)
|
30
|
+
def generate_xsd(builder, klass, include_collection, options, exclude)
|
31
31
|
xsd_generator.options = options
|
32
|
-
xsd_generator.generate(builder, klass, include_collection)
|
32
|
+
xsd_generator.generate(builder, klass, include_collection, exclude)
|
33
33
|
end
|
34
34
|
|
35
35
|
def ignore(*fields)
|
@@ -54,10 +54,6 @@ module Schematic
|
|
54
54
|
def required(*fields)
|
55
55
|
fields.each { |field| required_elements << field }
|
56
56
|
end
|
57
|
-
|
58
|
-
def method_missing(method, *args, &block)
|
59
|
-
@klass.send method, *args, &block
|
60
|
-
end
|
61
57
|
end
|
62
58
|
end
|
63
59
|
end
|
@@ -4,14 +4,14 @@ module Schematic
|
|
4
4
|
attr_reader :output, :names
|
5
5
|
attr_accessor :options
|
6
6
|
|
7
|
-
def initialize(klass
|
7
|
+
def initialize(klass)
|
8
8
|
@klass = klass
|
9
9
|
@names = Names.new(klass)
|
10
|
-
self.options = options
|
11
10
|
end
|
12
11
|
|
13
12
|
def options=(hash = {})
|
14
|
-
@options =
|
13
|
+
@options = hash
|
14
|
+
@options[:generated_types] ||= []
|
15
15
|
@options[:generated_types] << @klass
|
16
16
|
@options
|
17
17
|
end
|
@@ -34,15 +34,18 @@ module Schematic
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def generate(builder, klass, include_collection=true)
|
37
|
+
def generate(builder, klass, include_collection=true, exclude_from_parent = [])
|
38
|
+
@exclude = exclude_from_parent
|
39
|
+
|
38
40
|
nested_attributes.each do |nested_attribute|
|
39
41
|
next if nested_attribute.klass == klass
|
40
42
|
next if nested_attribute.klass == klass.superclass
|
41
43
|
@options ||= {}
|
42
44
|
@options[:generated_types] ||= []
|
43
|
-
|
45
|
+
exclude = klass.schematic_sandbox.ignored_elements[nested_attribute.name].dup
|
44
46
|
next if @options[:generated_types].include?(nested_attribute.klass)
|
45
|
-
|
47
|
+
|
48
|
+
nested_attribute.klass.schematic_sandbox.generate_xsd(builder, klass, nested_attribute.macro == :has_many, @options, exclude)
|
46
49
|
@options[:generated_types] << nested_attribute.klass
|
47
50
|
end
|
48
51
|
|
@@ -63,7 +66,7 @@ module Schematic
|
|
63
66
|
builder.xs :complexType, "name" => @names.type do |complex_type|
|
64
67
|
additional_methods = @klass.schematic_sandbox.added_elements.merge(@options[:methods] || {})
|
65
68
|
ignored_methods = @klass.schematic_sandbox.ignored_elements.dup
|
66
|
-
exclude = @
|
69
|
+
exclude = @exclude
|
67
70
|
|
68
71
|
case exclude
|
69
72
|
when Hash
|
@@ -169,7 +172,7 @@ module Schematic
|
|
169
172
|
def nested_attributes
|
170
173
|
return [] unless @klass.respond_to?(:reflect_on_all_associations)
|
171
174
|
@klass.reflect_on_all_associations.select do |association|
|
172
|
-
@klass.instance_methods.include?("#{association.name}_attributes="
|
175
|
+
@klass.instance_methods.include?(:"#{association.name}_attributes=") &&
|
173
176
|
association.options[:polymorphic] != true &&
|
174
177
|
!@klass.schematic_sandbox.ignored_elements[association.name.to_sym].nil?
|
175
178
|
end
|
data/lib/schematic/version.rb
CHANGED
@@ -77,19 +77,4 @@ describe Schematic::Generator::Sandbox do
|
|
77
77
|
subject.required_elements.should include(:bar)
|
78
78
|
end
|
79
79
|
end
|
80
|
-
|
81
|
-
describe "methods on original object get called when not difined in sandbox module" do
|
82
|
-
before do
|
83
|
-
klass.stub(:foo)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should delegate missing methods to klass" do
|
87
|
-
klass.should_receive(:foo)
|
88
|
-
|
89
|
-
subject.run do
|
90
|
-
self.foo
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
80
|
end
|
95
|
-
|
@@ -304,6 +304,142 @@ describe Schematic::Serializers::Xsd do
|
|
304
304
|
end
|
305
305
|
end
|
306
306
|
|
307
|
+
context "when the model has a nested attribute and ignores one of the methods of the nested attribute" do
|
308
|
+
with_model :parent do
|
309
|
+
table do |t|
|
310
|
+
t.string :first_name
|
311
|
+
t.string :last_name
|
312
|
+
end
|
313
|
+
|
314
|
+
model do
|
315
|
+
has_one :child
|
316
|
+
accepts_nested_attributes_for :child
|
317
|
+
schematic do
|
318
|
+
ignore :child => [:last_name]
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
with_model :child do
|
324
|
+
table do |t|
|
325
|
+
t.integer :parent_id
|
326
|
+
t.string :first_name
|
327
|
+
t.string :last_name
|
328
|
+
end
|
329
|
+
|
330
|
+
model do
|
331
|
+
belongs_to :parent
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
describe "the parent XSD" do
|
336
|
+
subject { Parent.to_xsd }
|
337
|
+
|
338
|
+
it "should be valid" do
|
339
|
+
subject.should include "child-attributes"
|
340
|
+
subject.should include "first-name"
|
341
|
+
subject.should include "last-name"
|
342
|
+
validate_xsd(subject)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
describe "the child XSD" do
|
347
|
+
subject { Child.to_xsd }
|
348
|
+
|
349
|
+
it "should be valid" do
|
350
|
+
subject.should include "first-name"
|
351
|
+
subject.should include "last-name"
|
352
|
+
validate_xsd(subject)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
context "when the model has a nested attribute and ignores a required method of the nested attribute" do
|
358
|
+
with_model :person do
|
359
|
+
model do
|
360
|
+
has_one :house
|
361
|
+
accepts_nested_attributes_for :house
|
362
|
+
schematic do
|
363
|
+
ignore :house => [:address]
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
with_model :house do
|
369
|
+
table do |t|
|
370
|
+
t.string :address
|
371
|
+
t.integer :price
|
372
|
+
t.belongs_to :person
|
373
|
+
end
|
374
|
+
model do
|
375
|
+
belongs_to :person
|
376
|
+
validates :address, presence: true
|
377
|
+
end
|
378
|
+
end
|
379
|
+
|
380
|
+
describe "the parent XSD" do
|
381
|
+
subject { Person.to_xsd }
|
382
|
+
it "should be valid" do
|
383
|
+
subject.should include %{"house-attributes"}
|
384
|
+
subject.should include %{"price"}
|
385
|
+
subject.should_not include %{"address"}
|
386
|
+
validate_xsd(subject)
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
describe "the child XSD" do
|
391
|
+
subject { House.to_xsd }
|
392
|
+
it "should be valid" do
|
393
|
+
subject.should include %{"price"}
|
394
|
+
subject.should include %{"address"}
|
395
|
+
validate_xsd(subject)
|
396
|
+
end
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
context "when the model has a polymorphic nested attribute and ignores a required method of the nested attribute" do
|
401
|
+
with_model :person do
|
402
|
+
model do
|
403
|
+
has_one :house, as: :homeowner
|
404
|
+
accepts_nested_attributes_for :house
|
405
|
+
schematic do
|
406
|
+
ignore :house => [:address]
|
407
|
+
end
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
with_model :house do
|
412
|
+
table do |t|
|
413
|
+
t.string :address
|
414
|
+
t.integer :price
|
415
|
+
t.belongs_to :homeowner, polymorphic: true
|
416
|
+
end
|
417
|
+
model do
|
418
|
+
belongs_to :homeowner, polymorphic: true
|
419
|
+
validates :address, presence: true
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
describe "the parent XSD" do
|
424
|
+
subject { Person.to_xsd }
|
425
|
+
it "should be valid" do
|
426
|
+
subject.should include %{"house-attributes"}
|
427
|
+
subject.should include %{"price"}
|
428
|
+
subject.should_not include %{"address"}
|
429
|
+
validate_xsd(subject)
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
433
|
+
describe "the child XSD" do
|
434
|
+
subject { House.to_xsd }
|
435
|
+
it "should be valid" do
|
436
|
+
subject.should include %{"price"}
|
437
|
+
subject.should include %{"address"}
|
438
|
+
validate_xsd(subject)
|
439
|
+
end
|
440
|
+
end
|
441
|
+
end
|
442
|
+
|
307
443
|
context "when the model has a circular nested attribute reference" do
|
308
444
|
with_model :plate do
|
309
445
|
model do
|
metadata
CHANGED
@@ -1,100 +1,104 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: schematic
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.5
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.5.6
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Case Commons, LLC
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2011-10-11 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: activerecord
|
16
|
-
requirement: &
|
17
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
21
22
|
version: 3.0.0
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
-
- !ruby/object:Gem::Dependency
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
26
27
|
name: builder
|
27
|
-
requirement: &
|
28
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version:
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
37
38
|
name: rspec-rails
|
38
|
-
requirement: &
|
39
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version:
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "2.1"
|
44
45
|
type: :development
|
45
46
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
-
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
48
49
|
name: with_model
|
49
|
-
requirement: &
|
50
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
50
51
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version:
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
55
56
|
type: :development
|
56
57
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
-
- !ruby/object:Gem::Dependency
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
59
60
|
name: nokogiri
|
60
|
-
requirement: &
|
61
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
61
62
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version:
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
66
67
|
type: :development
|
67
68
|
prerelease: false
|
68
|
-
version_requirements: *
|
69
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
70
71
|
name: sqlite3
|
71
|
-
requirement: &
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version:
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
77
78
|
type: :development
|
78
79
|
prerelease: false
|
79
|
-
version_requirements: *
|
80
|
-
- !ruby/object:Gem::Dependency
|
80
|
+
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
81
82
|
name: autotest
|
82
|
-
requirement: &
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
83
84
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
version:
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
88
89
|
type: :development
|
89
90
|
prerelease: false
|
90
|
-
version_requirements: *
|
91
|
+
version_requirements: *id007
|
91
92
|
description: Automatic XSD generation from ActiveRecord models
|
92
|
-
email:
|
93
|
+
email:
|
93
94
|
- casecommons-dev@googlegroups.com
|
94
95
|
executables: []
|
96
|
+
|
95
97
|
extensions: []
|
98
|
+
|
96
99
|
extra_rdoc_files: []
|
97
|
-
|
100
|
+
|
101
|
+
files:
|
98
102
|
- .gitignore
|
99
103
|
- .rspec
|
100
104
|
- .rvmrc
|
@@ -141,35 +145,38 @@ files:
|
|
141
145
|
- spec/xsd/xml.xsd
|
142
146
|
homepage: https://github.com/Casecommons/schematic
|
143
147
|
licenses: []
|
148
|
+
|
144
149
|
post_install_message:
|
145
150
|
rdoc_options: []
|
146
|
-
|
151
|
+
|
152
|
+
require_paths:
|
147
153
|
- lib
|
148
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
155
|
none: false
|
150
|
-
requirements:
|
151
|
-
- -
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
|
154
|
-
segments:
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
hash: 3959164304158595365
|
160
|
+
segments:
|
155
161
|
- 0
|
156
|
-
|
157
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
|
+
version: "0"
|
163
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
164
|
none: false
|
159
|
-
requirements:
|
160
|
-
- -
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
|
163
|
-
segments:
|
165
|
+
requirements:
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
hash: 3959164304158595365
|
169
|
+
segments:
|
164
170
|
- 0
|
165
|
-
|
171
|
+
version: "0"
|
166
172
|
requirements: []
|
173
|
+
|
167
174
|
rubyforge_project: schematic
|
168
175
|
rubygems_version: 1.8.10
|
169
176
|
signing_key:
|
170
177
|
specification_version: 3
|
171
178
|
summary: Automatic XSD generation from ActiveRecord models
|
172
|
-
test_files:
|
179
|
+
test_files:
|
173
180
|
- spec/schematic/generator/restrictions/custom_spec.rb
|
174
181
|
- spec/schematic/generator/restrictions/enumeration_spec.rb
|
175
182
|
- spec/schematic/generator/restrictions/length_spec.rb
|