stats_package_syntax_file_generator 1.0.4 → 1.1.3

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.
@@ -4,178 +4,171 @@
4
4
  # https://github.com/mnpopcenter/stats_package_syntax_file_generator
5
5
 
6
6
  module SyntaxFile
7
- class MakerSTS < Maker
7
+ class MakerSTS < Maker
8
8
 
9
- def initialize (sfc, syntax_type)
10
- super
9
+ def initialize(sfc, syntax_type)
10
+ super
11
11
 
12
- m = @sfc.max_var_name_length
13
- @var_lab_format = " %-#{m}s %s"
14
- @var_loc_format = " %-#{m}s %s %s"
15
-
16
- @vars_with_values = get_vars_with_sts_supported_values # cache
17
- end
12
+ m = @sfc.max_var_name_length
13
+ @var_lab_format = " %-#{m}s %s"
14
+ @var_loc_format = " %-#{m}s %s %s"
15
+
16
+ @vars_with_values = get_vars_with_sts_supported_values # cache
17
+ end
18
18
 
19
- def syntax
20
- r = [
19
+ def syntax
20
+ r = [
21
21
  syn_df,
22
22
  syn_var_labs,
23
23
  syn_val_labs,
24
- ]
25
- r.flatten
26
- end
24
+ ]
25
+ r.flatten
26
+ end
27
27
 
28
- def convert_to_comments (lines)
29
- return [] if lines.empty?
30
- [
28
+ def convert_to_comments(lines)
29
+ return [] if lines.empty?
30
+ [
31
31
  lines.map { |ln| '// ' + ln },
32
32
  blank,
33
- ].flatten
34
- end
33
+ ].flatten
34
+ end
35
35
 
36
- def syn_df
37
- r = [
36
+ def syn_df
37
+ r = [
38
38
  syn_df_start,
39
39
  syn_var_locations(@sfc.variables),
40
40
  syntax_end,
41
- ]
42
- r.flatten
43
- end
41
+ ]
42
+ r.flatten
43
+ end
44
44
 
45
- def syn_df_start
46
- ['FORMAT fixed', '', (@sfc.data_structure == 'hier') ? hier_fyi : '']
47
- end
45
+ def syn_df_start
46
+ ['FORMAT fixed', '', (@sfc.data_structure == 'hier') ? hier_fyi : '']
47
+ end
48
48
 
49
- def hier_fyi
50
- convert_to_comments([ '',
51
- 'Hierarchical data structures are not directly supported by Stat/Transfer.',
52
- 'Please see the README for the stats_package_syntax_file_generator gem for more information.', ''
53
- ])
54
- end
49
+ def hier_fyi
50
+ convert_to_comments(['',
51
+ 'Hierarchical data structures are not directly supported by Stat/Transfer.',
52
+ 'Please see the README for the stats_package_syntax_file_generator gem for more information.', ''
53
+ ])
54
+ end
55
55
 
56
- def syn_var_locations (var_list)
57
- r = [
56
+ def syn_var_locations(var_list)
57
+ r = [
58
58
  'VARIABLES',
59
59
  var_list.map { |v| sprintf @var_loc_format, v.name, var_loc_with_fmt(v), var_val_lbl_id(v) }
60
- ]
61
- r.flatten
62
- end
60
+ ]
61
+ r.flatten
62
+ end
63
63
 
64
- def var_val_lbl_id (var)
65
- return '' unless @vars_with_values.include?(var)
66
- '\\' + var.name
67
- end
64
+ def var_val_lbl_id(var)
65
+ return '' unless @vars_with_values.include?(var)
66
+ '\\' + var.name
67
+ end
68
68
 
69
- def syn_var_labs (var_list = [])
70
- var_list = @sfc.get_vars_with_var_labels if var_list.empty?
71
- var_list = var_list.reject { |var| !supported_var_label?(var) }
72
- return [] if var_list.empty?
73
- r = [
69
+ def syn_var_labs(var_list = [])
70
+ var_list = @sfc.get_vars_with_var_labels if var_list.empty?
71
+ var_list = var_list.reject { |var| !supported_var_label?(var) }
72
+ return [] if var_list.empty?
73
+ r = [
74
74
  'VARIABLE LABELS',
75
75
  var_list.map { |var| syn_var_lab_for_var(var) },
76
76
  syntax_end,
77
- ]
78
- r.flatten
79
- end
77
+ ]
78
+ r.flatten
79
+ end
80
80
 
81
- def syn_var_lab_for_var (var)
82
- sprintf @var_lab_format, var.name, esc(q(var.label))
83
- end
81
+ def syn_var_lab_for_var(var)
82
+ sprintf @var_lab_format, var.name, esc(q(var.label))
83
+ end
84
84
 
85
- def syn_val_labs
86
- var_list = @vars_with_values
87
- return [] if var_list.empty?
88
- r = [
85
+ def syn_val_labs
86
+ var_list = @vars_with_values
87
+ return [] if var_list.empty?
88
+ r = [
89
89
  'VALUE LABELS',
90
90
  syn_val_labs_for_var_list(var_list),
91
91
  syntax_end,
92
- ]
93
- r.flatten
94
- end
92
+ ]
93
+ r.flatten
94
+ end
95
95
 
96
- def syn_val_labs_for_var_list (var_list)
97
- var_list.map { |var| syn_val_labs_for_var(var) }
98
- end
96
+ def syn_val_labs_for_var_list(var_list)
97
+ var_list.map { |var| syn_val_labs_for_var(var) }
98
+ end
99
99
 
100
- def syn_val_labs_for_var (var)
101
- val_list = labelable_values(var)
102
- return [] if val_list.empty?
103
-
104
- m = max_value_length(var, val_list.select {|x| supported_val?(x)})
105
- value_format = " %-#{m}s %s"
106
- r = [
107
- syn_val_labs_for_var_start(var),
108
- val_list.map { |val| syn_val_lab_for_val(var, val, value_format) }
109
- ]
110
- r.flatten
111
- end
100
+ def syn_val_labs_for_var(var)
101
+ val_list = labelable_values(var)
102
+ return [] if val_list.empty?
112
103
 
113
- def syn_val_labs_for_var_start (var)
114
- ' \\' + var.name
115
- end
104
+ m = max_value_length(var, val_list.select { |x| supported_val?(x) })
105
+ value_format = " %-#{m}s %s"
106
+ r = [
107
+ syn_val_labs_for_var_start(var),
108
+ val_list.reject { |val| !supported_val?(val) }.map { |val| syn_val_lab_for_val(var, val, value_format) }
109
+ ]
110
+ r.flatten
111
+ end
116
112
 
117
- def syn_val_lab_for_val (var, val, fmt)
118
- return explain_skipped_value(val) if !supported_val?(val)
119
- sprintf fmt, sts_val_q(var, val_as_s(var, val.value.to_s)), esc(q(val.label))
120
- end
113
+ def syn_val_labs_for_var_start(var)
114
+ ' \\' + var.name
115
+ end
121
116
 
122
- # value codes (aka value values) need to be quoted with single quotes if they are strings
123
- def sts_val_q (var, v)
124
- var.is_string_var ? "'#{v}'" : v.to_s
125
- end
117
+ def syn_val_lab_for_val(var, val, fmt)
118
+ sprintf fmt, sts_val_q(var, val_as_s(var, val.value.to_s)), esc(q(val.label))
119
+ end
126
120
 
127
- def var_loc_with_fmt (var)
128
- return var.column_locations_as_s + var_fmt(var) unless var.implied_decimals > 0
129
- var.start_column.to_s + var_fmt(var)
130
- end
121
+ # value codes (aka value values) need to be quoted with single quotes if they are strings
122
+ def sts_val_q(var, v)
123
+ var.is_string_var ? "'#{v}'" : v.to_s
124
+ end
131
125
 
132
- def var_fmt (var)
133
- return ' (A)' if var.is_string_var
134
- return '' unless var.implied_decimals > 0
135
- ' (F' + var.width.to_s + '.' + var.implied_decimals.to_s + ')'
136
- end
126
+ def var_loc_with_fmt(var)
127
+ return var.column_locations_as_s + var_fmt(var) unless var.implied_decimals > 0
128
+ var.start_column.to_s + var_fmt(var)
129
+ end
137
130
 
138
- def q (s)
139
- '"' + s.to_s.gsub('"', '\'\'') + '"'
140
- end
131
+ def var_fmt(var)
132
+ return ' (A)' if var.is_string_var
133
+ return '' unless var.implied_decimals > 0
134
+ ' (F' + var.width.to_s + '.' + var.implied_decimals.to_s + ')'
135
+ end
141
136
 
142
- def esc (s)
143
- s.gsub(/\n/, " [New line.] ")
144
- end
137
+ def q(s)
138
+ '"' + s.to_s.gsub('"', '\'\'') + '"'
139
+ end
145
140
 
146
- def explain_skipped_value(val)
147
- return "// Value label for '#{val.value}' is not STS compatible -- skipping" if !supported_val_label?(val)
148
- "// Value '#{val.value}' is not STS compatible -- skipping" if !supported_val_value?(val)
149
- "// Skipping"
150
- end
141
+ def esc(s)
142
+ s.gsub(/\n/, " [New line.] ")
143
+ end
151
144
 
152
- # Stat/Transfer does not like blank value labels
153
- def get_vars_with_sts_supported_values()
154
- @sfc.get_vars_with_values.select do |var|
145
+ # Stat/Transfer does not like blank value labels
146
+ def get_vars_with_sts_supported_values()
147
+ @sfc.get_vars_with_values.select do |var|
155
148
  sts_supported_values(var).size > 0
149
+ end
156
150
  end
157
- end
158
151
 
159
- def sts_supported_values(var)
160
- return [] if (var.nil? || var.values.nil?)
161
- var.values.select { |val| supported_val?(val) }
162
- end
152
+ def sts_supported_values(var)
153
+ return [] if (var.nil? || var.values.nil?)
154
+ var.values.select { |val| supported_val?(val) }
155
+ end
163
156
 
164
- def supported_val?(val)
165
- supported_val_label?(val) && supported_val_value?(val)
166
- end
157
+ def supported_val?(val)
158
+ supported_val_label?(val) && supported_val_value?(val)
159
+ end
167
160
 
168
- def supported_val_label?(val)
169
- !(val.nil?) && !(val.label.nil?) && !(val.label.strip.empty?)
170
- end
161
+ def supported_val_label?(val)
162
+ !(val.nil?) && !(val.label.nil?) && !(val.label.strip.empty?)
163
+ end
171
164
 
172
- def supported_val_value?(val)
173
- !(val.nil?) && !(val.value.nil?) && !!(val.value.to_s =~ /^[A-Za-z0-9\-\_\.]+$/)
174
- end
165
+ def supported_val_value?(val)
166
+ !(val.nil?) && !(val.value.nil?) && !!(val.value.to_s =~ /^[A-Za-z0-9\-\_\.]+$/)
167
+ end
175
168
 
176
- def supported_var_label?(var)
177
- !(var.nil?) && !(var.label.nil?) && !(var.label.strip.empty?)
178
- end
169
+ def supported_var_label?(var)
170
+ !(var.nil?) && !(var.label.nil?) && !(var.label.strip.empty?)
171
+ end
179
172
 
180
- end
173
+ end
181
174
  end
@@ -4,26 +4,25 @@
4
4
  # https://github.com/mnpopcenter/stats_package_syntax_file_generator
5
5
 
6
6
  module SyntaxFile
7
- class Value
7
+ class Value
8
8
 
9
- ATTR = {
10
- :value => { :req => true, :rw => 'rw', :def => nil },
11
- :label => { :req => false, :rw => 'rw', :def => '' },
12
- }
9
+ ATTR = {
10
+ :value => { :req => true, :rw => 'rw', :def => nil },
11
+ :label => { :req => false, :rw => 'rw', :def => '' },
12
+ }
13
13
 
14
- ATTR.each_key do |k|
15
- attr_reader k if ATTR[k][:rw].include? 'r'
16
- attr_writer k if ATTR[k][:rw].include? 'w'
17
- end
14
+ ATTR.each_key do |k|
15
+ attr_reader k if ATTR[k][:rw].include? 'r'
16
+ attr_writer k if ATTR[k][:rw].include? 'w'
17
+ end
18
18
 
19
- def initialize (args = {})
20
- ATTR.each_key { |k|
21
- raise(ArgumentError, "Missing required parameter: '#{k}'.") if
22
- ATTR[k][:req] and not args.has_key?(k)
19
+ def initialize(args = {})
20
+ ATTR.each_key { |k|
21
+ raise(ArgumentError, "Missing required parameter: '#{k}'.") if ATTR[k][:req] and not args.has_key?(k)
23
22
  v = args.has_key?(k) ? args[k] : ATTR[k][:def]
24
23
  instance_variable_set("@#{k}".to_sym, v)
25
- }
26
- end
24
+ }
25
+ end
27
26
 
28
- end
27
+ end
29
28
  end
@@ -4,53 +4,52 @@
4
4
  # https://github.com/mnpopcenter/stats_package_syntax_file_generator
5
5
 
6
6
  module SyntaxFile
7
- class Variable
8
-
9
- ATTR = {
10
- :name => { :req => true, :rw => 'rw', :def => '' },
11
- :label => { :req => false, :rw => 'rw', :def => '' },
12
- :start_column => { :req => true, :rw => 'rw', :def => nil },
13
- :width => { :req => true, :rw => 'rw', :def => nil },
14
- :is_string_var => { :req => false, :rw => 'rw', :def => false },
15
- :is_double_var => { :req => false, :rw => 'rw', :def => false },
16
- :is_common_var => { :req => false, :rw => 'rw', :def => false },
17
- :record_type => { :req => false, :rw => 'rw', :def => '' },
18
- :implied_decimals => { :req => false, :rw => 'rw', :def => 0 },
19
- :suppress_labels => { :req => false, :rw => 'rw', :def => false },
20
- :values => { :req => false, :rw => 'r', :def => nil },
21
- }
22
-
23
- ATTR.each_key do |k|
24
- attr_reader k if ATTR[k][:rw].include? 'r'
25
- attr_writer k if ATTR[k][:rw].include? 'w'
26
- end
7
+ class Variable
8
+
9
+ ATTR = {
10
+ :name => { :req => true, :rw => 'rw', :def => '' },
11
+ :label => { :req => false, :rw => 'rw', :def => '' },
12
+ :start_column => { :req => true, :rw => 'rw', :def => nil },
13
+ :width => { :req => true, :rw => 'rw', :def => nil },
14
+ :is_string_var => { :req => false, :rw => 'rw', :def => false },
15
+ :is_double_var => { :req => false, :rw => 'rw', :def => false },
16
+ :is_common_var => { :req => false, :rw => 'rw', :def => false },
17
+ :record_type => { :req => false, :rw => 'rw', :def => '' },
18
+ :implied_decimals => { :req => false, :rw => 'rw', :def => 0 },
19
+ :suppress_labels => { :req => false, :rw => 'rw', :def => false },
20
+ :values => { :req => false, :rw => 'r', :def => nil },
21
+ }
22
+
23
+ ATTR.each_key do |k|
24
+ attr_reader k if ATTR[k][:rw].include? 'r'
25
+ attr_writer k if ATTR[k][:rw].include? 'w'
26
+ end
27
27
 
28
- def initialize (args = {})
29
- ATTR.each_key { |k|
30
- raise(ArgumentError, "Missing required parameter: '#{k}'.") if
31
- ATTR[k][:req] and not args.has_key?(k)
28
+ def initialize(args = {})
29
+ ATTR.each_key { |k|
30
+ raise(ArgumentError, "Missing required parameter: '#{k}'.") if ATTR[k][:req] and not args.has_key?(k)
32
31
  v = args.has_key?(k) ? args[k] : ATTR[k][:def]
33
32
  instance_variable_set("@#{k}".to_sym, v)
34
- }
35
- @values = [] if @values.nil?
36
- end
33
+ }
34
+ @values = [] if @values.nil?
35
+ end
37
36
 
38
- def column_locations_as_s
39
- @start_column.to_s + '-' + end_column.to_s
40
- end
37
+ def column_locations_as_s
38
+ @start_column.to_s + '-' + end_column.to_s
39
+ end
41
40
 
42
- def end_column
43
- @start_column + @width - 1
44
- end
41
+ def end_column
42
+ @start_column + @width - 1
43
+ end
45
44
 
46
- def add_value (args)
47
- @values.push Value.new(args)
48
- @values[-1]
49
- end
45
+ def add_value(args)
46
+ @values.push Value.new(args)
47
+ @values[-1]
48
+ end
50
49
 
51
- def clear_values
52
- @values = []
53
- end
50
+ def clear_values
51
+ @values = []
52
+ end
54
53
 
55
- end
54
+ end
56
55
  end
@@ -591,7 +591,7 @@ variables:
591
591
  is_missing_value: false
592
592
  -
593
593
  value: "50"
594
- label: "[no label]"
594
+ label: # empty label, should be a invalid value label for STS
595
595
  is_missing_value: false
596
596
  -
597
597
  value: "70"
@@ -4,7 +4,7 @@ project: ipumsi
4
4
  caller: test
5
5
  data_dir_name: __
6
6
  data_file_name: xx9999a.dat
7
- output_formats: [sas, spss, stata, sts]
7
+ output_formats: [sas, spss, stata, sts, rddi]
8
8
  output_dir_name: __
9
9
  output_file_stem: '%s'
10
10
  output_overwrite: true