ncs_mdes 0.3.1 → 0.4.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.
@@ -0,0 +1,34 @@
1
+ require 'ncs_navigator/mdes'
2
+
3
+ module NcsNavigator::Mdes
4
+ ##
5
+ # One dispostion code in the MDES.
6
+ class DispositionCode
7
+
8
+ attr_accessor :event
9
+ attr_accessor :final_category
10
+ attr_accessor :sub_category
11
+ attr_accessor :disposition
12
+ attr_accessor :interim_code
13
+ attr_accessor :final_code
14
+
15
+ ##
16
+ # Given attributes (presumably loaded from a YAML file) create
17
+ # a new instance of a DispositionCode
18
+ #
19
+ # @return [DispositionCode] the created instance.
20
+ def initialize(attrs)
21
+ [:event, :final_category, :sub_category, :disposition, :interim_code, :final_code].each do |a|
22
+ self.send("#{a}=", attrs[a.to_s])
23
+ end
24
+ end
25
+
26
+ ##
27
+ # Provides a briefer inspection for cleaner IRB use.
28
+ #
29
+ # @return [String]
30
+ def inspect
31
+ "\#<#{self.class} event=#{event.inspect} disposition=#{disposition.inspect} status_code=#{interim_code.inspect}/#{final_code.inspect}>"
32
+ end
33
+ end
34
+ end
@@ -56,6 +56,7 @@ module NcsNavigator::Mdes
56
56
  sd.version = version
57
57
  sd.schema = schema
58
58
  sd.heuristic_overrides = "#{version}/heuristic_overrides.yml"
59
+ sd.disposition_codes = "#{version}/disposition_codes.yml"
59
60
  end
60
61
  end
61
62
  private :create
@@ -125,6 +126,30 @@ module NcsNavigator::Mdes
125
126
  def heuristic_overrides=(path)
126
127
  @heuristic_overrides = path
127
128
  end
129
+
130
+ ##
131
+ # The absolute path to a YAML-formatted document defining
132
+ # the disposition codes as found in the Master Data Element Specifications
133
+ # spreadsheet.
134
+ #
135
+ # This is path is optional; if one is not provided no disposition
136
+ # codes will be loaded.
137
+ #
138
+ # @return [String]
139
+ def disposition_codes
140
+ absolutize(@disposition_codes)
141
+ end
142
+
143
+ ##
144
+ # Set the path to the disposition codes document.
145
+ # If the path is relative (i.e., it does not begin with `/`), it
146
+ # will be interpreted relative to {#base}.
147
+ #
148
+ # @param [String] path
149
+ # @return [String] the provided path
150
+ def disposition_codes=(path)
151
+ @disposition_codes = path
152
+ end
128
153
 
129
154
  private
130
155
 
@@ -129,6 +129,26 @@ module NcsNavigator::Mdes
129
129
  end
130
130
  private :read_types
131
131
 
132
+ ##
133
+ # @return [Array<DispositionCode>] all the named disposition codes in the MDES.
134
+ def disposition_codes
135
+ @disposition_codes ||=
136
+ begin
137
+ if File.exist?(source_documents.disposition_codes)
138
+ YAML.load(File.read source_documents.disposition_codes).collect do |dc|
139
+ DispositionCode.new(dc)
140
+ end
141
+ else
142
+ empty_disposition_codes
143
+ end
144
+ end
145
+ end
146
+
147
+ def empty_disposition_codes
148
+ []
149
+ end
150
+ private :empty_disposition_codes
151
+
132
152
  ##
133
153
  # A briefer inspection for nicer IRB sessions.
134
154
  #
@@ -57,7 +57,12 @@ module NcsNavigator::Mdes
57
57
  log = options[:log] || NcsNavigator::Mdes.default_logger
58
58
 
59
59
  new(element['name']).tap do |var|
60
- var.required = (element['nillable'] == 'false')
60
+ var.required =
61
+ if element['minOccurs']
62
+ element['minOccurs'] != '0'
63
+ else
64
+ element['nillable'] == 'false'
65
+ end
61
66
  var.pii =
62
67
  case element['pii']
63
68
  when 'Y'; true;
@@ -1,5 +1,5 @@
1
1
  module NcsNavigator
2
2
  module Mdes
3
- VERSION = "0.3.1"
3
+ VERSION = "0.4.0"
4
4
  end
5
5
  end
@@ -10,6 +10,8 @@ module NcsNavigator
10
10
  autoload :Variable, 'ncs_navigator/mdes/variable'
11
11
  autoload :VariableType, 'ncs_navigator/mdes/variable_type'
12
12
 
13
+ autoload :DispositionCode, 'ncs_navigator/mdes/disposition_code'
14
+
13
15
  ##
14
16
  # @return the default logger for this module when no other one is
15
17
  # specified. It logs to standard error.
@@ -60,6 +60,16 @@ module NcsNavigator::Mdes
60
60
  SourceDocuments.new.heuristic_overrides.should be_nil
61
61
  end
62
62
  end
63
+
64
+ describe '#disposition_codes' do
65
+ let(:property) { :disposition_codes }
66
+
67
+ it_behaves_like 'an absolutizing path accessor'
68
+
69
+ it 'is optional' do
70
+ SourceDocuments.new.disposition_codes.should be_nil
71
+ end
72
+ end
63
73
 
64
74
  describe '.get' do
65
75
  describe '1.2' do
@@ -72,6 +82,10 @@ module NcsNavigator::Mdes
72
82
  it 'has the correct path for the overrides' do
73
83
  subject.heuristic_overrides.should =~ %r{1.2/heuristic_overrides.yml$}
74
84
  end
85
+
86
+ it 'has the correct path for the disposition codes' do
87
+ subject.disposition_codes.should =~ %r{1.2/disposition_codes.yml$}
88
+ end
75
89
 
76
90
  it 'is of the specified version' do
77
91
  subject.version.should == '1.2'
@@ -88,6 +102,10 @@ module NcsNavigator::Mdes
88
102
  it 'has the correct path for the overrides' do
89
103
  subject.heuristic_overrides.should =~ %r{2.0/heuristic_overrides.yml$}
90
104
  end
105
+
106
+ it 'has the correct path for the disposition codes' do
107
+ subject.disposition_codes.should =~ %r{2.0/disposition_codes.yml$}
108
+ end
91
109
 
92
110
  it 'is of the specified version' do
93
111
  subject.version.should == '2.0'
@@ -63,6 +63,41 @@ module NcsNavigator::Mdes
63
63
  include_examples 'tables fully resolved'
64
64
  end
65
65
  end
66
+
67
+
68
+ describe '#disposition codes' do
69
+ it 'is composed of DispositionCode instances' do
70
+ Specification.new('2.0', :log => logger).disposition_codes.first.
71
+ should be_a DispositionCode
72
+ end
73
+
74
+ context 'in version 1.2' do
75
+ let(:disposition_codes) { Specification.new('1.2', :log => logger).disposition_codes }
76
+
77
+ it 'has 0 codes' do
78
+ disposition_codes.size.should == 0
79
+ end
80
+ end
81
+
82
+ context 'in version 2.0' do
83
+ let(:disposition_codes) { Specification.new('2.0', :log => logger).disposition_codes }
84
+
85
+ it 'has 251 codes' do
86
+ disposition_codes.size.should == 251
87
+ end
88
+
89
+ it 'creates valid codes' do
90
+ code = disposition_codes.first
91
+ code.event.should == "Household Enumeration Event"
92
+ code.final_category.should == "Unknown Eligibility"
93
+ code.sub_category.should == "Unknown if Dwelling Unit"
94
+ code.disposition.should == "Not attempted"
95
+ code.interim_code.should == "010"
96
+ code.final_code.should == "510"
97
+ end
98
+
99
+ end
100
+ end
66
101
 
67
102
  describe '#[]' do
68
103
  let(:spec) { Specification.new('2.0') }
@@ -97,6 +97,14 @@ XSD
97
97
  it 'is false when nillable' do
98
98
  comments.should_not be_required
99
99
  end
100
+
101
+ it 'is false when not nillable but minOccurs is 0' do
102
+ variable('<xs:element nillable="false" minOccurs="0"/>').should_not be_required
103
+ end
104
+
105
+ it 'is true when nillable omitted but minOccurs is > 0' do
106
+ variable('<xs:element minOccurs="1"/>').should be_required
107
+ end
100
108
  end
101
109
 
102
110
  describe '#pii' do
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ncs_mdes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 3
9
- - 1
10
- version: 0.3.1
4
+ prerelease:
5
+ version: 0.4.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Rhett Sutphin
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-07-27 00:00:00 -05:00
13
+ date: 2011-07-28 00:00:00 -05:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
@@ -26,10 +21,6 @@ dependencies:
26
21
  requirements:
27
22
  - - ~>
28
23
  - !ruby/object:Gem::Version
29
- hash: 7
30
- segments:
31
- - 1
32
- - 4
33
24
  version: "1.4"
34
25
  type: :runtime
35
26
  version_requirements: *id001
@@ -41,10 +32,6 @@ dependencies:
41
32
  requirements:
42
33
  - - ~>
43
34
  - !ruby/object:Gem::Version
44
- hash: 15
45
- segments:
46
- - 2
47
- - 6
48
35
  version: "2.6"
49
36
  type: :development
50
37
  version_requirements: *id002
@@ -56,11 +43,6 @@ dependencies:
56
43
  requirements:
57
44
  - - ~>
58
45
  - !ruby/object:Gem::Version
59
- hash: 63
60
- segments:
61
- - 0
62
- - 9
63
- - 2
64
46
  version: 0.9.2
65
47
  type: :development
66
48
  version_requirements: *id003
@@ -72,19 +54,12 @@ dependencies:
72
54
  requirements:
73
55
  - - ~>
74
56
  - !ruby/object:Gem::Version
75
- hash: 7
76
- segments:
77
- - 0
78
- - 7
79
- - 2
80
57
  version: 0.7.2
81
58
  type: :development
82
59
  version_requirements: *id004
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
-
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"
88
63
  email:
89
64
  - r-sutphin@northwestern.edu
90
65
  executables:
@@ -105,8 +80,10 @@ files:
105
80
  - documents/1.2/Data_Transmission_Schema_V1.2.xsd
106
81
  - documents/1.2/heuristic_overrides.yml
107
82
  - documents/2.0/NCS_Transmission_Schema_2.0.01.02.xml
83
+ - documents/2.0/disposition_codes.yml
108
84
  - documents/2.0/heuristic_overrides.yml
109
85
  - lib/ncs_navigator/mdes.rb
86
+ - lib/ncs_navigator/mdes/disposition_code.rb
110
87
  - lib/ncs_navigator/mdes/source_documents.rb
111
88
  - lib/ncs_navigator/mdes/specification.rb
112
89
  - lib/ncs_navigator/mdes/transmission_table.rb
@@ -136,23 +113,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
113
  requirements:
137
114
  - - ">="
138
115
  - !ruby/object:Gem::Version
139
- hash: 3
140
- segments:
141
- - 0
142
116
  version: "0"
143
117
  required_rubygems_version: !ruby/object:Gem::Requirement
144
118
  none: false
145
119
  requirements:
146
120
  - - ">="
147
121
  - !ruby/object:Gem::Version
148
- hash: 3
149
- segments:
150
- - 0
151
122
  version: "0"
152
123
  requirements: []
153
124
 
154
125
  rubyforge_project:
155
- rubygems_version: 1.3.7
126
+ rubygems_version: 1.6.2
156
127
  signing_key:
157
128
  specification_version: 3
158
129
  summary: A ruby API for various versions of the NCS MDES.