schematic 0.6.0 → 0.6.1

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.
@@ -1,7 +1,7 @@
1
1
  module Schematic
2
2
  module Generator
3
3
  class Names
4
- attr_accessor :root
4
+ attr_accessor :root, :klass
5
5
 
6
6
  def initialize(klass)
7
7
  @klass = klass
@@ -11,8 +11,8 @@ module Schematic
11
11
 
12
12
  def options=(hash = {})
13
13
  @options = hash
14
- @options[:generated_types] ||= []
15
- @options[:generated_types] << @klass
14
+ @options[:generated_singular_types] ||= []
15
+ @options[:generated_plural_types] ||= []
16
16
  @options
17
17
  end
18
18
 
@@ -35,22 +35,33 @@ module Schematic
35
35
  end
36
36
 
37
37
  def generate(builder, klass, include_collection=true, exclude_from_parent = [])
38
+ @iteration ||= 0
38
39
  @exclude = exclude_from_parent
39
-
40
40
  nested_attributes.each do |nested_attribute|
41
41
  next if nested_attribute.klass == klass
42
42
  next if nested_attribute.klass == klass.superclass
43
43
  @options ||= {}
44
- @options[:generated_types] ||= []
44
+ @options[:generated_singular_types] ||= []
45
+ @options[:generated_plural_types] ||= []
45
46
  exclude = klass.schematic_sandbox.ignored_elements[nested_attribute.name].dup
46
- next if @options[:generated_types].include?(nested_attribute.klass)
47
47
 
48
- nested_attribute.klass.schematic_sandbox.generate_xsd(builder, klass, nested_attribute.macro == :has_many, @options, exclude)
49
- @options[:generated_types] << nested_attribute.klass
48
+ if nested_attribute.macro == :has_many && !@options[:generated_plural_types].include?(nested_attribute.klass)
49
+ nested_attribute.klass.schematic_sandbox.generate_xsd(builder, klass, true, @options, exclude)
50
+ @options[:generated_plural_types] << nested_attribute.klass
51
+ elsif !@options[:generated_singular_types].include?(nested_attribute.klass)
52
+ nested_attribute.klass.schematic_sandbox.generate_xsd(builder, klass, false, @options, exclude)
53
+ @options[:generated_singular_types] << nested_attribute.klass
54
+ end
50
55
  end
51
-
52
- generate_complex_type_for_collection(builder) if include_collection
53
- generate_complex_type_for_model(builder)
56
+ if include_collection && !@options[:generated_plural_types].include?(@names.collection_type)
57
+ generate_complex_type_for_collection(builder)
58
+ @options[:generated_plural_types] << @names.collection_type
59
+ end
60
+ unless @options[:generated_singular_types].include?(@names.type)
61
+ generate_complex_type_for_model(builder)
62
+ @options[:generated_singular_types] << @names.type
63
+ end
64
+ builder
54
65
  end
55
66
 
56
67
  def generate_complex_type_for_collection(builder)
@@ -120,7 +131,7 @@ module Schematic
120
131
  def generate_uniqueness_constraints(builder)
121
132
  return unless @klass.respond_to?(:columns)
122
133
  @klass.columns.each do |column|
123
- Uniqueness.new(@klass, column).generate(builder)
134
+ Uniqueness.new(@klass, column).generate(builder)
124
135
  end
125
136
  end
126
137
 
@@ -1,3 +1,3 @@
1
1
  module Schematic
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
@@ -739,4 +739,43 @@ describe Schematic::Serializers::Xsd do
739
739
  xsd.nested_attribute_name(:very_special_children).should == "very-special-children-attributes"
740
740
  end
741
741
  end
742
+ context "when the model has a nested attribute with a different class name and foreign key than the has_many association" do
743
+ with_model :foo do
744
+ model do
745
+ has_one :bar, :class_name => "Quz", :foreign_key => "bar_id"
746
+ has_many :children, :class_name => "Quz", :foreign_key => "children_id"
747
+ accepts_nested_attributes_for :children
748
+ accepts_nested_attributes_for :bar
749
+ end
750
+ end
751
+ with_model :quz do
752
+ table do |t|
753
+ t.integer :bar_id
754
+ t.integer :children_id
755
+ t.string :name
756
+ end
757
+ end
758
+ subject { Foo.to_xsd }
759
+
760
+ it "should generate a valid XSD" do
761
+ test_xml = <<-END
762
+ <?xml version="1.0" encoding="UTF-8"?>
763
+ <foos>
764
+ <foo>
765
+ <children-attributes>
766
+ <quz>
767
+ <name>Joe</name>
768
+ </quz>
769
+ </children-attributes>
770
+ </foo>
771
+ </foos>
772
+ END
773
+
774
+ subject.should include "Quz"
775
+ subject.should include "Quzs"
776
+ validate_xml_against_xsd(test_xml, subject)
777
+ end
778
+ end
742
779
  end
780
+
781
+
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.6.0
4
+ version: 0.6.1
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: 2012-02-02 00:00:00.000000000Z
12
+ date: 2012-03-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70329222280980 !ruby/object:Gem::Requirement
16
+ requirement: &70212766160660 !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: *70329222280980
24
+ version_requirements: *70212766160660
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: builder
27
- requirement: &70329222247240 !ruby/object:Gem::Requirement
27
+ requirement: &70212766160240 !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: *70329222247240
35
+ version_requirements: *70212766160240
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec-rails
38
- requirement: &70329222245680 !ruby/object:Gem::Requirement
38
+ requirement: &70212766159700 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '2.7'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70329222245680
46
+ version_requirements: *70212766159700
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: with_model
49
- requirement: &70329222244100 !ruby/object:Gem::Requirement
49
+ requirement: &70212766159200 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.2.4
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70329222244100
57
+ version_requirements: *70212766159200
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: nokogiri
60
- requirement: &70329222243200 !ruby/object:Gem::Requirement
60
+ requirement: &70212766158820 !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: *70329222243200
68
+ version_requirements: *70212766158820
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
- requirement: &70329222242300 !ruby/object:Gem::Requirement
71
+ requirement: &70212766158360 !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: *70329222242300
79
+ version_requirements: *70212766158360
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: autotest
82
- requirement: &70329222240840 !ruby/object:Gem::Requirement
82
+ requirement: &70212766157940 !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: *70329222240840
90
+ version_requirements: *70212766157940
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: -3320943580698096283
156
+ hash: -3449394722461241422
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: -3320943580698096283
165
+ hash: -3449394722461241422
166
166
  requirements: []
167
167
  rubyforge_project: schematic
168
168
  rubygems_version: 1.8.10