spout 0.3.0.rc2 → 0.3.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/spout/actions.rb +1 -1
- data/lib/spout/tasks/engine.rake +19 -92
- data/lib/spout/tests.rb +5 -1
- data/lib/spout/tests/domain_name_uniqueness.rb +10 -0
- data/lib/spout/tests/variable_name_uniqueness.rb +10 -0
- data/lib/spout/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e50bf89439f62303ac004c28c0a8667703e30f4a
|
4
|
+
data.tar.gz: be7c8397dce6d4079f0d98b8e06923e2b1e685c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5f53395b85e06a43ff229715046d2aa5d9875e71f5a655a7b50bc1d3da37496630ba0ec2f1b064b8219d04b11143f8fec75c3cb2a6f781593eb79b135380ca2
|
7
|
+
data.tar.gz: 2d382de9ab10cc0ccfaf9e6b203b290c2a2da7602fe6dad2baa4948d5b49f30ce82625db93717e500c6155b7d6545b64cad05d939b0afc44d60f1557fea54552
|
data/CHANGELOG.md
CHANGED
@@ -3,10 +3,14 @@
|
|
3
3
|
### Enhancements
|
4
4
|
- Tests now hide passing tests by default
|
5
5
|
- To show all tests, use `spout tv`, or `bundle exec rake`
|
6
|
+
- Tests now include check for variable and domain name uniqueness across folders
|
7
|
+
- `include Spout::Tests::VariableNameUniqueness`
|
8
|
+
- `include Spout::Tests::DomainNameUniqueness`
|
6
9
|
- Exports will now create a folder based on the version specified in the `VERSION` file located in the root of the data dictionary
|
7
10
|
- If a version is specified, `spout export 1.0.1` then the command line version is used
|
8
11
|
- If no version is specified, and no `VERSION` file exists, then the default `1.0.0` is used
|
9
12
|
- The version must be specified on the first line in the `VERSION` file
|
13
|
+
- Spout can now create a new Spout project in a folder that was cloned from a Git repository
|
10
14
|
- Use of Ruby 2.0.0-p247 is now recommended
|
11
15
|
|
12
16
|
## 0.2.0 (June 26, 2013)
|
data/lib/spout/actions.rb
CHANGED
@@ -88,7 +88,7 @@ The FOLDER must be empty or new.
|
|
88
88
|
|
89
89
|
EOT
|
90
90
|
|
91
|
-
if @full_path == '' or (Dir.exists?(@full_path) and (Dir.entries(@full_path)
|
91
|
+
if @full_path == '' or ( Dir.exists?(@full_path) and (Dir.entries(@full_path) & ['.gitignore', '.ruby-version', '.travis.yml', 'Gemfile', 'Rakefile', 'domains', 'variables', 'test']).size > 0 )
|
92
92
|
puts usage
|
93
93
|
exit(0)
|
94
94
|
end
|
data/lib/spout/tasks/engine.rake
CHANGED
@@ -18,19 +18,19 @@ namespace :dd do
|
|
18
18
|
|
19
19
|
desc 'Create Data Dictionary from repository'
|
20
20
|
task :create do
|
21
|
-
|
22
21
|
folder = "dd/#{ENV['VERSION'] || standard_version}"
|
22
|
+
puts " create".colorize( :green ) + " #{folder}"
|
23
23
|
FileUtils.mkpath folder
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
hybrid_export(folder)
|
28
|
-
else
|
29
|
-
standard_export(folder)
|
30
|
-
end
|
25
|
+
export_name = nil
|
26
|
+
additional_keys = []
|
31
27
|
|
28
|
+
if ENV['TYPE'] == 'hybrid'
|
29
|
+
export_name = 'hybrid'
|
30
|
+
additional_keys = [['hybrid', 'design_name'], ['hybrid', 'design_file'], ['hybrid', 'sensitivity'], ['hybrid', 'commonly_used']]
|
31
|
+
end
|
32
32
|
|
33
|
-
|
33
|
+
expanded_export(folder, export_name, additional_keys)
|
34
34
|
end
|
35
35
|
|
36
36
|
desc 'Initialize JSON repository from a CSV file: CSV=datadictionary.csv'
|
@@ -49,18 +49,22 @@ def standard_version
|
|
49
49
|
version == '' ? '1.0.0' : version
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
53
|
-
|
52
|
+
def expanded_export(folder, export_name = nil, additional_keys = [])
|
53
|
+
variables_export_file = "#{[export_name, 'variables'].compact.join('-')}.csv"
|
54
|
+
puts " export".colorize( :blue ) + " #{folder}/#{variables_export_file}"
|
55
|
+
CSV.open("#{folder}/#{variables_export_file}", "wb") do |csv|
|
54
56
|
keys = %w(id display_name description type units domain labels calculation)
|
55
|
-
csv << ['folder'] + keys
|
57
|
+
csv << ['folder'] + keys + additional_keys.collect{|i| i[1]}
|
56
58
|
Dir.glob("variables/**/*.json").each do |file|
|
57
59
|
if json = JSON.parse(File.read(file)) rescue false
|
58
60
|
variable_folder = variable_folder_path(file)
|
59
|
-
csv << [variable_folder] + keys.collect{|key| json[key].kind_of?(Array) ? json[key].join(';') : json[key].to_s}
|
61
|
+
csv << [variable_folder] + keys.collect{|key| json[key].kind_of?(Array) ? json[key].join(';') : json[key].to_s} + additional_keys.collect{|i| other_property(i[0], json, i[1])}
|
60
62
|
end
|
61
63
|
end
|
62
64
|
end
|
63
|
-
|
65
|
+
domains_export_file = "#{[export_name, 'domains'].compact.join('-')}.csv"
|
66
|
+
puts " export".colorize( :blue ) + " #{folder}/#{domains_export_file}"
|
67
|
+
CSV.open("#{folder}/#{domains_export_file}", "wb") do |csv|
|
64
68
|
keys = %w(value display_name description)
|
65
69
|
csv << ['folder', 'domain_id'] + keys
|
66
70
|
Dir.glob("domains/**/*.json").each do |file|
|
@@ -87,85 +91,8 @@ def variable_folder_path(file)
|
|
87
91
|
file.gsub(/variables\//, '').split('/')[0..-2].join('/')
|
88
92
|
end
|
89
93
|
|
90
|
-
def
|
91
|
-
|
92
|
-
json['hybrid']['type']
|
93
|
-
else
|
94
|
-
hybrid_concept_type_map(json['type'])
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def hybrid_concept_type_map(variable_type)
|
99
|
-
hybrid_types = { "choices" => "categorical",
|
100
|
-
"numeric" => "continuous",
|
101
|
-
"integer" => "continuous",
|
102
|
-
"string" => "free text",
|
103
|
-
"text" => "free text",
|
104
|
-
"date" => "datetime",
|
105
|
-
"time" => "datetime",
|
106
|
-
"file" => "free text" }
|
107
|
-
hybrid_types[variable_type] || variable_type
|
108
|
-
end
|
109
|
-
|
110
|
-
def hybrid_property(json, property)
|
111
|
-
json['hybrid'] ? json['hybrid'][property] : ''
|
112
|
-
end
|
113
|
-
|
114
|
-
def hybrid_export(folder)
|
115
|
-
domain_parents = {}
|
116
|
-
CSV.open("#{folder}/hybrid.csv", "wb") do |csv|
|
117
|
-
csv << ["Folder", "Short Name", "Description", "Concept Type", "Units", "Terms", "Internal Terms", "Parents", "Children", "Field Values", "Sensitivity", "Display Name", "Commonly Used", "Calculation", "Source Name", "Source File"]
|
118
|
-
Dir.glob("variables/**/*.json").each do |file|
|
119
|
-
if json = JSON.parse(File.read(file)) rescue false
|
120
|
-
if json['domain'].to_s != ''
|
121
|
-
domain_parents[json['domain'].to_s.downcase] ||= []
|
122
|
-
domain_parents[json['domain'].to_s.downcase] << json['id'].to_s
|
123
|
-
end
|
124
|
-
row = [
|
125
|
-
variable_folder_path(file), # Folder
|
126
|
-
json['id'], # Short Name
|
127
|
-
json['description'], # Description
|
128
|
-
hybrid_concept_type(json), # Concept Type
|
129
|
-
json['units'], # Units
|
130
|
-
(json['labels'] || []).join(';'), # Terms
|
131
|
-
'', # Internal Terms
|
132
|
-
'', # Parents
|
133
|
-
'', # Children
|
134
|
-
'', # Field Values
|
135
|
-
hybrid_property(json, 'access level'), # Sensitivity
|
136
|
-
json['display_name'], # Display Name
|
137
|
-
hybrid_property(json, 'most commonly used'), # Commonly Used
|
138
|
-
json['calculation'], # Calculation
|
139
|
-
hybrid_property(json, 'SOURCE'), # Source Name
|
140
|
-
hybrid_property(json, 'filename') # Source File
|
141
|
-
]
|
142
|
-
csv << row
|
143
|
-
end
|
144
|
-
end
|
145
|
-
Dir.glob("domains/**/*.json").each do |file|
|
146
|
-
if json = JSON.parse(File.read(file)) rescue false
|
147
|
-
json.each do |option|
|
148
|
-
row = [
|
149
|
-
domain_folder_path(file), # Folder
|
150
|
-
extract_domain_name(file)+'_'+option['value'].to_s, # Short Name
|
151
|
-
option['description'], # Description
|
152
|
-
'boolean', # Concept Type
|
153
|
-
'', # Units
|
154
|
-
'', # Terms
|
155
|
-
option['value'], # Internal Terms
|
156
|
-
(domain_parents[extract_domain_name(file).downcase] || []).join(';'), # Parents
|
157
|
-
'', # Children
|
158
|
-
'', # Field Values
|
159
|
-
'0', # Sensitivity
|
160
|
-
option['display_name'], # Display Name
|
161
|
-
'', # Commonly Used
|
162
|
-
'', # Calculation
|
163
|
-
]
|
164
|
-
csv << row
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
94
|
+
def other_property(parent, json, property)
|
95
|
+
json[parent] ? json[parent][property] : ''
|
169
96
|
end
|
170
97
|
|
171
98
|
def import_variables
|
data/lib/spout/tests.rb
CHANGED
@@ -3,17 +3,21 @@ require 'test/unit'
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'json'
|
5
5
|
|
6
|
-
require 'spout/tests/domain_existence_validation'
|
7
6
|
require 'spout/tests/json_validation'
|
8
7
|
require 'spout/tests/variable_type_validation'
|
8
|
+
require 'spout/tests/variable_name_uniqueness'
|
9
|
+
require 'spout/tests/domain_existence_validation'
|
9
10
|
require 'spout/tests/domain_format'
|
11
|
+
require 'spout/tests/domain_name_uniqueness'
|
10
12
|
|
11
13
|
module Spout
|
12
14
|
module Tests
|
13
15
|
include Spout::Tests::JsonValidation
|
14
16
|
include Spout::Tests::VariableTypeValidation
|
17
|
+
include Spout::Tests::VariableNameUniqueness
|
15
18
|
include Spout::Tests::DomainExistenceValidation
|
16
19
|
include Spout::Tests::DomainFormat
|
20
|
+
include Spout::Tests::DomainNameUniqueness
|
17
21
|
|
18
22
|
Turn.config.trace = 1
|
19
23
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module Spout
|
2
|
+
module Tests
|
3
|
+
module VariableNameUniqueness
|
4
|
+
def test_variable_name_uniqueness
|
5
|
+
files = Dir.glob("variables/**/*.json").collect{|file| file.split('/').last }
|
6
|
+
assert_equal [], files.select{ |f| files.count(f) > 1 }.uniq
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/lib/spout/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.0.
|
4
|
+
version: 0.3.0.rc3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Remo Mueller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -104,7 +104,9 @@ files:
|
|
104
104
|
- lib/spout/templates/travis.yml
|
105
105
|
- lib/spout/tests/domain_existence_validation.rb
|
106
106
|
- lib/spout/tests/domain_format.rb
|
107
|
+
- lib/spout/tests/domain_name_uniqueness.rb
|
107
108
|
- lib/spout/tests/json_validation.rb
|
109
|
+
- lib/spout/tests/variable_name_uniqueness.rb
|
108
110
|
- lib/spout/tests/variable_type_validation.rb
|
109
111
|
- lib/spout/tests.rb
|
110
112
|
- lib/spout/version.rb
|