ncs_mdes 0.4.0 → 0.4.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.
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  NCS Navigator MDES Module history
2
2
  =================================
3
3
 
4
+ 0.4.1
5
+ -----
6
+
7
+ - Add separate {#omittable?} and {#nillable?} subconditions of
8
+ {#required?} (#4).
9
+
4
10
  0.4.0
5
11
  -----
6
12
 
@@ -31,11 +31,26 @@ module NcsNavigator::Mdes
31
31
  attr_accessor :type
32
32
 
33
33
  ##
34
- # Is the variable mandatory for a valid submission?
34
+ # If the variable does not have a value, should it be completely
35
+ # omitted when submitting to the VDR?
35
36
  #
36
37
  # @return [Boolean]
37
- attr_accessor :required
38
- alias :required? :required
38
+ attr_accessor :omittable
39
+ alias :omittable? :omittable
40
+
41
+ ##
42
+ # May the variable be submitted as a null value?
43
+ #
44
+ # @return [Boolean]
45
+ attr_accessor :nillable
46
+ alias :nillable? :nillable
47
+
48
+ ##
49
+ # Allows for an override of the default logic. Mostly intended for
50
+ # testing. Set to `nil` to restore default logic.
51
+ #
52
+ # @return [Boolean,nil]
53
+ attr_writer :required
39
54
 
40
55
  ##
41
56
  # If this variable is a foreign key, this is the {table
@@ -57,12 +72,8 @@ module NcsNavigator::Mdes
57
72
  log = options[:log] || NcsNavigator::Mdes.default_logger
58
73
 
59
74
  new(element['name']).tap do |var|
60
- var.required =
61
- if element['minOccurs']
62
- element['minOccurs'] != '0'
63
- else
64
- element['nillable'] == 'false'
65
- end
75
+ var.nillable = element['nillable'] == 'true'
76
+ var.omittable = element['minOccurs'] == '0'
66
77
  var.pii =
67
78
  case element['pii']
68
79
  when 'Y'; true;
@@ -104,6 +115,19 @@ module NcsNavigator::Mdes
104
115
  @constraints ||= []
105
116
  end
106
117
 
118
+ ##
119
+ # Is a value for the variable mandatory for a valid submission?
120
+ #
121
+ # @return [Boolean]
122
+ def required?
123
+ if @required.nil?
124
+ !(omittable? || nillable?)
125
+ else
126
+ @required
127
+ end
128
+ end
129
+ alias :required :required?
130
+
107
131
  ##
108
132
  # If the {#type} of this instance is a reference to an NCS type,
109
133
  # attempts to replace it with the full version from the given list
@@ -1,5 +1,5 @@
1
1
  module NcsNavigator
2
2
  module Mdes
3
- VERSION = "0.4.0"
3
+ VERSION = "0.4.1"
4
4
  end
5
5
  end
@@ -107,6 +107,34 @@ XSD
107
107
  end
108
108
  end
109
109
 
110
+ describe '#omittable?' do
111
+ it 'is true when minOccurs is 0' do
112
+ variable('<xs:element minOccurs="0"/>').should be_omittable
113
+ end
114
+
115
+ it 'is false when minOccurs is not present' do
116
+ comments.should_not be_omittable
117
+ end
118
+
119
+ it 'is false when minOccurs is > 0' do
120
+ variable('<xs:element minOccurs="1"/>').should_not be_omittable
121
+ end
122
+ end
123
+
124
+ describe '#nillable?' do
125
+ it 'is true when nillable is true' do
126
+ variable('<xs:element nillable="true"/>').should be_nillable
127
+ end
128
+
129
+ it 'is false when nillable is not present' do
130
+ variable('<xs:element/>').should_not be_nillable
131
+ end
132
+
133
+ it 'is false when nillable is false' do
134
+ variable('<xs:element nillable="false"/>').should_not be_nillable
135
+ end
136
+ end
137
+
110
138
  describe '#pii' do
111
139
  it 'is false when blank' do
112
140
  variable('<xs:element ncsdoc:pii=""/>').pii.should == false
@@ -156,6 +184,52 @@ XSD
156
184
  end
157
185
  end
158
186
 
187
+ describe '#required?' do
188
+ subject { Variable.new('foo') }
189
+
190
+ it 'is true when not omittable or nillable' do
191
+ subject.should be_required
192
+ end
193
+
194
+ it 'is false when omittable only' do
195
+ subject.omittable = true
196
+ subject.should_not be_required
197
+ end
198
+
199
+ it 'is false when nillable only' do
200
+ subject.nillable = true
201
+ subject.should_not be_required
202
+ end
203
+
204
+ it 'is false both nillable and omittable' do
205
+ subject.nillable = true
206
+ subject.omittable = true
207
+ subject.should_not be_required
208
+ end
209
+
210
+ describe 'when explicitly set' do
211
+ it 'preserves trueness even when would be false' do
212
+ subject.nillable = true
213
+ subject.required = true
214
+ subject.should be_required
215
+ end
216
+
217
+ it 'preserves falseness even when should be true' do
218
+ subject.required = false
219
+ subject.should_not be_required
220
+ end
221
+
222
+ it 'can be cleared by setting to nil' do
223
+ subject.nillable = true
224
+ subject.required = true
225
+ subject.should be_required
226
+
227
+ subject.required = nil
228
+ subject.should_not be_required
229
+ end
230
+ end
231
+ end
232
+
159
233
  describe '#resolve_type!' do
160
234
  let(:reference_type) { VariableType.reference('ncs:color_cl3') }
161
235
  let(:actual_type) { VariableType.new('color_cl3') }
metadata CHANGED
@@ -1,8 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncs_mdes
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.4.0
4
+ hash: 13
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 4
9
+ - 1
10
+ version: 0.4.1
6
11
  platform: ruby
7
12
  authors:
8
13
  - Rhett Sutphin
@@ -10,7 +15,7 @@ autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
17
 
13
- date: 2011-07-28 00:00:00 -05:00
18
+ date: 2011-07-31 00:00:00 -05:00
14
19
  default_executable:
15
20
  dependencies:
16
21
  - !ruby/object:Gem::Dependency
@@ -21,6 +26,10 @@ dependencies:
21
26
  requirements:
22
27
  - - ~>
23
28
  - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 1
32
+ - 4
24
33
  version: "1.4"
25
34
  type: :runtime
26
35
  version_requirements: *id001
@@ -32,6 +41,10 @@ dependencies:
32
41
  requirements:
33
42
  - - ~>
34
43
  - !ruby/object:Gem::Version
44
+ hash: 15
45
+ segments:
46
+ - 2
47
+ - 6
35
48
  version: "2.6"
36
49
  type: :development
37
50
  version_requirements: *id002
@@ -43,6 +56,11 @@ dependencies:
43
56
  requirements:
44
57
  - - ~>
45
58
  - !ruby/object:Gem::Version
59
+ hash: 63
60
+ segments:
61
+ - 0
62
+ - 9
63
+ - 2
46
64
  version: 0.9.2
47
65
  type: :development
48
66
  version_requirements: *id003
@@ -54,12 +72,19 @@ dependencies:
54
72
  requirements:
55
73
  - - ~>
56
74
  - !ruby/object:Gem::Version
75
+ hash: 7
76
+ segments:
77
+ - 0
78
+ - 7
79
+ - 2
57
80
  version: 0.7.2
58
81
  type: :development
59
82
  version_requirements: *id004
60
- description: "\n\
61
- Provides a consistent ruby interface to the project metainformation in the\n\
62
- National Children's Study's Master Data Element Specification.\n"
83
+ description: |
84
+
85
+ Provides a consistent ruby interface to the project metainformation in the
86
+ National Children's Study's Master Data Element Specification.
87
+
63
88
  email:
64
89
  - r-sutphin@northwestern.edu
65
90
  executables:
@@ -113,17 +138,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
138
  requirements:
114
139
  - - ">="
115
140
  - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
116
144
  version: "0"
117
145
  required_rubygems_version: !ruby/object:Gem::Requirement
118
146
  none: false
119
147
  requirements:
120
148
  - - ">="
121
149
  - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
122
153
  version: "0"
123
154
  requirements: []
124
155
 
125
156
  rubyforge_project:
126
- rubygems_version: 1.6.2
157
+ rubygems_version: 1.3.7
127
158
  signing_key:
128
159
  specification_version: 3
129
160
  summary: A ruby API for various versions of the NCS MDES.