schematic 0.2.3 → 0.3.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.
@@ -7,7 +7,7 @@ module Schematic
7
7
  end
8
8
 
9
9
  def type
10
- @klass.name.demodulize
10
+ @klass.name.gsub(/::/,'')
11
11
  end
12
12
 
13
13
  def element
@@ -22,6 +22,10 @@ module Schematic
22
22
  type.pluralize
23
23
  end
24
24
 
25
+ def nested_attribute_name
26
+ "#{element_collection}-attributes"
27
+ end
28
+
25
29
  end
26
30
  end
27
31
  end
@@ -12,7 +12,7 @@ module Schematic
12
12
 
13
13
  def options=(hash = {})
14
14
  @options = {:generated_types => []}.merge(hash)
15
- @options[:generated_types] << @klass unless @options[:generated_types].include?(@klass)
15
+ @options[:generated_types] << @klass
16
16
  @options
17
17
  end
18
18
 
@@ -38,9 +38,9 @@ module Schematic
38
38
  nested_attributes.each do |nested_attribute|
39
39
  next if nested_attribute.klass == klass
40
40
  next if nested_attribute.klass == klass.superclass
41
- next if @options && @options[:generated_types] && @options[:generated_types].include?(klass)
41
+ next if @options && @options[:generated_types] && @options[:generated_types].include?(nested_attribute.klass)
42
42
  nested_attribute.klass.generate_xsd(builder, klass, @options)
43
- @options[:generated_types] << klass
43
+ @options[:generated_types] << nested_attribute.klass
44
44
  end
45
45
 
46
46
  generate_complex_type_for_collection(builder)
@@ -64,7 +64,7 @@ module Schematic
64
64
  generate_column_elements(all, additional_methods, ignored_methods)
65
65
 
66
66
  nested_attributes.each do |nested_attribute|
67
- all.xs :element, "name" => "#{nested_attribute.name.to_s.dasherize}-attributes", "type" => nested_attribute.klass.xsd_generator.names.collection_type, "minOccurs" => "0", "maxOccurs" => "1"
67
+ all.xs :element, "name" => nested_attribute.klass.xsd_generator.names.nested_attribute_name, "type" => nested_attribute.klass.xsd_generator.names.collection_type, "minOccurs" => "0", "maxOccurs" => "1"
68
68
  end
69
69
 
70
70
  generate_additional_methods(all, additional_methods)
@@ -1,3 +1,3 @@
1
1
  module Schematic
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -98,7 +98,7 @@ describe Schematic::Serializers::Xsd do
98
98
  with_model :parent do
99
99
  table {}
100
100
  model do
101
- has_many :children
101
+ has_many :children, :class_name => "Namespace::Child"
102
102
  accepts_nested_attributes_for :children
103
103
  end
104
104
  end
@@ -125,29 +125,37 @@ describe Schematic::Serializers::Xsd do
125
125
  it "should generate a valid XSD" do
126
126
  validate_xsd(subject)
127
127
  end
128
+
129
+ it "should validate against its own XSD" do
130
+ child_instance = Namespace::Child.new(:parent_id => 123)
131
+ xml = [child_instance].to_xml
132
+ lambda {
133
+ validate_xml_against_xsd(xml, subject)
134
+ }.should_not raise_error
135
+ end
128
136
  end
129
137
 
130
138
  context "when the model has a circular nested attribute reference" do
131
- with_model :blog do
139
+ with_model :plate do
132
140
  table {}
133
141
  model do
134
- has_many :posts
135
- accepts_nested_attributes_for :posts
142
+ has_many :cheeses
143
+ accepts_nested_attributes_for :cheeses
136
144
  end
137
145
  end
138
146
 
139
- with_model :post do
147
+ with_model :cheese do
140
148
  table do |t|
141
- t.integer :blog_id
149
+ t.integer :plate_id
142
150
  end
143
151
 
144
152
  model do
145
- belongs_to :blog
146
- accepts_nested_attributes_for :blog
153
+ belongs_to :plate
154
+ accepts_nested_attributes_for :plate
147
155
  end
148
156
  end
149
157
 
150
- subject { Post.to_xsd }
158
+ subject { Cheese.to_xsd }
151
159
 
152
160
  it "should generate a valid XSD" do
153
161
  validate_xsd(subject)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: schematic
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.3
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Case Commons, LLC