schematic 0.6.1 → 0.6.2

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.
@@ -8,12 +8,13 @@ module Schematic
8
8
  end
9
9
  end
10
10
 
11
- def initialize(klass, column, additional_methods = {}, ignored_methods = {}, required_methods = [])
11
+ def initialize(klass, column, additional_methods = {}, ignored_methods = {}, required_methods = [], non_required_methods = [])
12
12
  @klass = klass
13
13
  @column = column
14
14
  @additional_methods = additional_methods
15
15
  @ignored_methods = ignored_methods
16
16
  @required_methods = required_methods
17
+ @non_required_methods = non_required_methods
17
18
  end
18
19
 
19
20
  def generate(builder)
@@ -40,6 +41,7 @@ module Schematic
40
41
  end
41
42
 
42
43
  def minimum_occurrences_for_column
44
+ return 0 if @non_required_methods.include?(@column.name.to_sym)
43
45
  return 1 if @required_methods.include?(@column.name.to_sym)
44
46
  return 0 unless @klass.respond_to?(:_validators)
45
47
  @klass._validators[@column.name.to_sym].each do |column_validation|
@@ -1,13 +1,14 @@
1
1
  module Schematic
2
2
  module Generator
3
3
  class Sandbox
4
- attr_accessor :ignored_elements, :added_elements, :required_elements
4
+ attr_accessor :ignored_elements, :added_elements, :required_elements, :non_required_elements
5
5
 
6
6
  def initialize(klass)
7
7
  @klass = klass
8
8
  @ignored_elements ||= Hash.new([])
9
9
  @added_elements ||= {}
10
10
  @required_elements ||= []
11
+ @non_required_elements ||= []
11
12
  end
12
13
 
13
14
  def run(&block)
@@ -55,6 +56,10 @@ module Schematic
55
56
  fields.each { |field| required_elements << field }
56
57
  end
57
58
 
59
+ def not_required(*fields)
60
+ fields.each { |field| non_required_elements << field }
61
+ end
62
+
58
63
  def root(name)
59
64
  xsd_generator.names.root = name
60
65
  end
@@ -89,9 +89,10 @@ module Schematic
89
89
  end
90
90
 
91
91
  required_methods = @klass.schematic_sandbox.required_elements
92
+ non_required_methods = @klass.schematic_sandbox.non_required_elements
92
93
 
93
94
  complex_type.xs :all do |all|
94
- generate_column_elements(all, additional_methods, ignored_methods, required_methods)
95
+ generate_column_elements(all, additional_methods, ignored_methods, required_methods, non_required_methods)
95
96
 
96
97
  nested_attributes.each do |nested_attribute|
97
98
  case nested_attribute.macro
@@ -121,10 +122,10 @@ module Schematic
121
122
  end
122
123
  end
123
124
 
124
- def generate_column_elements(builder, additional_methods, ignored_methods, required_methods)
125
+ def generate_column_elements(builder, additional_methods, ignored_methods, required_methods, non_required_methods)
125
126
  return unless @klass.respond_to?(:columns)
126
127
  @klass.columns.each do |column|
127
- Column.new(@klass, column, additional_methods, ignored_methods, required_methods).generate(builder)
128
+ Column.new(@klass, column, additional_methods, ignored_methods, required_methods, non_required_methods).generate(builder)
128
129
  end
129
130
  end
130
131
 
@@ -1,3 +1,3 @@
1
1
  module Schematic
2
- VERSION = "0.6.1"
2
+ VERSION = "0.6.2"
3
3
  end
@@ -78,6 +78,23 @@ describe Schematic::Generator::Sandbox do
78
78
  end
79
79
  end
80
80
 
81
+ describe "not requiring elements" do
82
+ it "should add the method to the non-required list" do
83
+ subject.run do
84
+ not_required :foo
85
+ end
86
+ subject.non_required_elements.should include(:foo)
87
+ end
88
+
89
+ it "accepts multiple fields" do
90
+ subject.run do
91
+ not_required :foo, :bar
92
+ end
93
+ subject.non_required_elements.should include(:foo)
94
+ subject.non_required_elements.should include(:bar)
95
+ end
96
+ end
97
+
81
98
  describe "setting the root" do
82
99
  it "should change the root element name" do
83
100
  subject.run do
@@ -135,5 +135,40 @@ describe Schematic::Serializers::Xsd do
135
135
  end
136
136
  end
137
137
  end
138
+
139
+ context "with a model with field explicitly not required" do
140
+ subject { sanitize_xml(ModelWithNotRequiredField.to_xsd) }
141
+
142
+ with_model :model_with_not_required_field do
143
+ table :id => false do |t|
144
+ t.string :some_field
145
+ end
146
+
147
+ model do
148
+ validates_presence_of :some_field
149
+
150
+ schematic do
151
+ not_required :some_field
152
+ end
153
+ end
154
+ end
155
+
156
+ it "should mark that the field minimum occurrences is 1" do
157
+ xsd = generate_xsd_for_model(ModelWithNotRequiredField) do
158
+ <<-XML
159
+ <xs:element name="some-field" minOccurs="0" maxOccurs="1">
160
+ <xs:complexType>
161
+ <xs:simpleContent>
162
+ <xs:restriction base="String">
163
+ </xs:restriction>
164
+ </xs:simpleContent>
165
+ </xs:complexType>
166
+ </xs:element>
167
+ XML
168
+ end
169
+
170
+ subject.should == xsd
171
+ end
172
+ end
138
173
  end
139
174
  end
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.1
4
+ version: 0.6.2
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-03-26 00:00:00.000000000 Z
12
+ date: 2012-04-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70212766160660 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70212766160660
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: builder
27
- requirement: &70212766160240 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,21 +37,31 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70212766160240
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rspec-rails
38
- requirement: &70212766159700 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - =
51
+ - - '='
42
52
  - !ruby/object:Gem::Version
43
53
  version: '2.7'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70212766159700
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: with_model
49
- requirement: &70212766159200 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: 0.2.4
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70212766159200
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.2.4
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: nokogiri
60
- requirement: &70212766158820 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70212766158820
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: sqlite3
71
- requirement: &70212766158360 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70212766158360
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: autotest
82
- requirement: &70212766157940 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,7 +117,12 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70212766157940
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  description: Automatic XSD generation from ActiveRecord models
92
127
  email:
93
128
  - casecommons-dev@googlegroups.com
@@ -153,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
188
  version: '0'
154
189
  segments:
155
190
  - 0
156
- hash: -3449394722461241422
191
+ hash: -4530207830951825601
157
192
  required_rubygems_version: !ruby/object:Gem::Requirement
158
193
  none: false
159
194
  requirements:
@@ -162,10 +197,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
197
  version: '0'
163
198
  segments:
164
199
  - 0
165
- hash: -3449394722461241422
200
+ hash: -4530207830951825601
166
201
  requirements: []
167
202
  rubyforge_project: schematic
168
- rubygems_version: 1.8.10
203
+ rubygems_version: 1.8.21
169
204
  signing_key:
170
205
  specification_version: 3
171
206
  summary: Automatic XSD generation from ActiveRecord models