schematic 0.0.5 → 0.0.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.
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm 1.9.2-p136@schematic
1
+ rvm 1.9.2-p136@schematic --create
@@ -115,8 +115,14 @@ module Schematic
115
115
  builder.xs :element, "name" => method_xsd_name, "minOccurs" => "0", "maxOccurs" => "1" do |element|
116
116
  element.xs :complexType do |complex_type|
117
117
  complex_type.xs :all do |nested_all|
118
- values.each do |value|
119
- nested_all.xs :element, "name" => value.to_s.dasherize, "minOccurs" => "0"
118
+ if values.is_a?(Array)
119
+ values.each do |value|
120
+ nested_all.xs :element, "name" => value.to_s.dasherize, "minOccurs" => "0"
121
+ end
122
+ elsif values.is_a?(Hash)
123
+ generate_xsd_additional_methods(nested_all, values)
124
+ else
125
+ raise "Additional methods must be a hash of hashes or hash of arrays"
120
126
  end
121
127
  end
122
128
  complex_type.xs :attribute, "name" => "type", "type" => "xs:string", "fixed" => "array", "use" => "optional"
@@ -1,3 +1,3 @@
1
1
  module Schematic
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -55,6 +55,12 @@ describe Schematic::Serializers::Xsd do
55
55
  validates :some_string, :presence => true
56
56
  validates :some_date, :presence => true, :allow_blank => true
57
57
  validates :some_datetime, :presence => true, :allow_blank => false
58
+
59
+ class << self
60
+ def xsd_methods
61
+ {:foo => { :bar => { :baz => nil } } }
62
+ end
63
+ end
58
64
  end
59
65
 
60
66
  end
@@ -347,19 +353,20 @@ describe Schematic::Serializers::Xsd do
347
353
  end
348
354
 
349
355
  describe ".xsd_methods" do
350
- with_model :some_model do
351
- table {}
356
+ context "given a method" do
357
+ with_model :some_model do
358
+ table {}
352
359
 
353
- model do
354
- def self.xsd_methods
355
- {:foo_bar => nil}
360
+ model do
361
+ def self.xsd_methods
362
+ {:foo_bar => nil}
363
+ end
356
364
  end
357
365
  end
358
- end
359
366
 
360
- it "should include the additional method" do
361
- xsd = generate_xsd_for_model(SomeModel) do
362
- <<-XML
367
+ it "should include the additional method" do
368
+ xsd = generate_xsd_for_model(SomeModel) do
369
+ <<-XML
363
370
  <xs:element name="id" minOccurs="0" maxOccurs="1">
364
371
  <xs:complexType>
365
372
  <xs:simpleContent>
@@ -370,10 +377,95 @@ describe Schematic::Serializers::Xsd do
370
377
  </xs:complexType>
371
378
  </xs:element>
372
379
  <xs:element name="foo-bar" minOccurs="0" maxOccurs="1"/>
373
- XML
380
+ XML
381
+ end
382
+
383
+ SomeModel.to_xsd.should == sanitize_xml(xsd)
374
384
  end
385
+ end
375
386
 
376
- SomeModel.to_xsd.should == sanitize_xml(xsd)
387
+ context "given a an array of methods" do
388
+ with_model :some_model do
389
+ table {}
390
+
391
+ model do
392
+ def self.xsd_methods
393
+ {:foo => [:bar, :baz]}
394
+ end
395
+ end
396
+ end
397
+
398
+ it "should include the additional methods" do
399
+ xsd = generate_xsd_for_model(SomeModel) do
400
+ <<-XML
401
+ <xs:element name="id" minOccurs="0" maxOccurs="1">
402
+ <xs:complexType>
403
+ <xs:simpleContent>
404
+ <xs:extension base="xs:integer">
405
+ <xs:attribute name="type" type="xs:string" use="optional"/>
406
+ </xs:extension>
407
+ </xs:simpleContent>
408
+ </xs:complexType>
409
+ </xs:element>
410
+ <xs:element name="foo" minOccurs="0" maxOccurs="1">
411
+ <xs:complexType>
412
+ <xs:all>
413
+ <xs:element name="bar" minOccurs="0"/>
414
+ <xs:element name="baz" minOccurs="0"/>
415
+ </xs:all>
416
+ <xs:attribute name="type" type="xs:string" fixed="array" use="optional"/>
417
+ </xs:complexType>
418
+ </xs:element>
419
+ XML
420
+ end
421
+
422
+ SomeModel.to_xsd.should == sanitize_xml(xsd)
423
+ end
424
+ end
425
+
426
+ context "given nested methods" do
427
+ with_model :some_model do
428
+ table {}
429
+
430
+ model do
431
+ def self.xsd_methods
432
+ { :foo => { :bar => {:baz => nil } } }
433
+ end
434
+ end
435
+ end
436
+
437
+ it "should nested the additional methods" do
438
+ xsd = generate_xsd_for_model(SomeModel) do
439
+ <<-XML
440
+ <xs:element name="id" minOccurs="0" maxOccurs="1">
441
+ <xs:complexType>
442
+ <xs:simpleContent>
443
+ <xs:extension base="xs:integer">
444
+ <xs:attribute name="type" type="xs:string" use="optional"/>
445
+ </xs:extension>
446
+ </xs:simpleContent>
447
+ </xs:complexType>
448
+ </xs:element>
449
+ <xs:element name="foo" minOccurs="0" maxOccurs="1">
450
+ <xs:complexType>
451
+ <xs:all>
452
+ <xs:element name="bar" minOccurs="0" maxOccurs="1">
453
+ <xs:complexType>
454
+ <xs:all>
455
+ <xs:element name="baz" minOccurs="0" maxOccurs="1"/>
456
+ </xs:all>
457
+ <xs:attribute name="type" type="xs:string" fixed="array" use="optional"/>
458
+ </xs:complexType>
459
+ </xs:element>
460
+ </xs:all>
461
+ <xs:attribute name="type" type="xs:string" fixed="array" use="optional"/>
462
+ </xs:complexType>
463
+ </xs:element>
464
+ XML
465
+ end
466
+
467
+ SomeModel.to_xsd.should == sanitize_xml(xsd)
468
+ end
377
469
  end
378
470
  end
379
471
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: schematic
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.5
5
+ version: 0.0.6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Case Commons, LLC
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-05 00:00:00 -04:00
13
+ date: 2011-04-12 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency