amee-data-abstraction 1.3.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/CHANGELOG.txt +0 -3
- data/Gemfile +5 -7
- data/Gemfile.lock +20 -14
- data/README.txt +15 -28
- data/Rakefile +17 -16
- data/VERSION +1 -1
- data/amee-data-abstraction.gemspec +21 -24
- data/lib/amee-data-abstraction.rb +6 -0
- data/lib/amee-data-abstraction/calculation.rb +1 -1
- data/lib/amee-data-abstraction/calculation_set.rb +10 -152
- data/lib/amee-data-abstraction/drill.rb +6 -23
- data/lib/amee-data-abstraction/input.rb +0 -24
- data/lib/amee-data-abstraction/ongoing_calculation.rb +9 -13
- data/lib/amee-data-abstraction/term.rb +13 -31
- data/spec/amee-data-abstraction/calculation_set_spec.rb +11 -245
- data/spec/amee-data-abstraction/calculation_spec.rb +18 -23
- data/spec/amee-data-abstraction/drill_spec.rb +7 -34
- data/spec/amee-data-abstraction/input_spec.rb +73 -113
- data/spec/amee-data-abstraction/metadatum_spec.rb +1 -1
- data/spec/amee-data-abstraction/ongoing_calculation_spec.rb +29 -45
- data/spec/amee-data-abstraction/profile_spec.rb +2 -2
- data/spec/amee-data-abstraction/prototype_calculation_spec.rb +11 -18
- data/spec/amee-data-abstraction/term_spec.rb +8 -50
- data/spec/amee-data-abstraction/terms_list_spec.rb +12 -16
- data/spec/config/amee_units_spec.rb +2 -1
- data/spec/core-extensions/class_spec.rb +18 -18
- data/spec/core-extensions/hash_spec.rb +2 -1
- data/spec/core-extensions/ordered_hash_spec.rb +2 -1
- data/spec/core-extensions/proc_spec.rb +1 -1
- data/spec/fixtures/{config/electricity.rb → electricity.rb} +2 -2
- data/spec/fixtures/electricity_and_transport.rb +55 -0
- data/spec/fixtures/{config/calculations/transport.rb → transport.rb} +2 -2
- data/spec/spec_helper.rb +7 -43
- metadata +56 -61
- data/init.rb +0 -4
- data/rails/init.rb +0 -32
- data/spec/fixtures/config/calculations/electricity.rb +0 -35
- data/spec/fixtures/config/calculations/electricity_and_transport.rb +0 -53
data/.rvmrc
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rvm 1.8.7@amee-data-abstraction
|
1
|
+
rvm 1.8.7@amee-data-abstraction
|
data/CHANGELOG.txt
CHANGED
data/Gemfile
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem "amee", "~>
|
3
|
+
gem "amee", "~> 4.0"
|
4
4
|
gem 'uuidtools', '2.1.2'
|
5
|
-
gem 'quantify', '
|
5
|
+
gem 'quantify', '~> 2.0.0'
|
6
6
|
|
7
|
-
# Add dependencies to develop your gem here.
|
8
|
-
# Include everything needed to run rake, tests, features, etc.
|
9
7
|
group :development do
|
10
8
|
gem "bundler", "~> 1.0.0"
|
11
9
|
gem "jeweler", "~> 1.6.4"
|
12
|
-
gem 'rspec', '
|
13
|
-
gem 'rcov'
|
14
|
-
gem 'rspec_spinner', '1.1.3'
|
10
|
+
gem 'rspec', '2.6.0'
|
15
11
|
gem 'flexmock', '> 0.8.6'
|
12
|
+
gem 'rcov'
|
13
|
+
gem 'rdoc'
|
16
14
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
activesupport (
|
5
|
-
amee (
|
6
|
-
activesupport (~>
|
4
|
+
activesupport (3.0.10)
|
5
|
+
amee (4.0.0)
|
6
|
+
activesupport (~> 3.0.10)
|
7
7
|
json
|
8
8
|
log4r
|
9
9
|
nokogiri (~> 1.4.3.1)
|
10
|
+
diff-lcs (1.1.3)
|
10
11
|
flexmock (0.9.0)
|
11
12
|
git (1.2.5)
|
12
13
|
i18n (0.6.0)
|
@@ -14,30 +15,35 @@ GEM
|
|
14
15
|
bundler (~> 1.0)
|
15
16
|
git (>= 1.2.5)
|
16
17
|
rake
|
17
|
-
json (1.
|
18
|
+
json (1.5.4)
|
18
19
|
log4r (1.1.9)
|
19
20
|
nokogiri (1.4.3.1)
|
20
|
-
quantify (
|
21
|
-
activesupport
|
21
|
+
quantify (2.0.0)
|
22
|
+
activesupport (~> 3.0.10)
|
22
23
|
i18n
|
23
24
|
rake (0.9.2)
|
24
25
|
rcov (0.9.10)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
rdoc (3.9.4)
|
27
|
+
rspec (2.6.0)
|
28
|
+
rspec-core (~> 2.6.0)
|
29
|
+
rspec-expectations (~> 2.6.0)
|
30
|
+
rspec-mocks (~> 2.6.0)
|
31
|
+
rspec-core (2.6.4)
|
32
|
+
rspec-expectations (2.6.0)
|
33
|
+
diff-lcs (~> 1.1.2)
|
34
|
+
rspec-mocks (2.6.0)
|
29
35
|
uuidtools (2.1.2)
|
30
36
|
|
31
37
|
PLATFORMS
|
32
38
|
ruby
|
33
39
|
|
34
40
|
DEPENDENCIES
|
35
|
-
amee (~>
|
41
|
+
amee (~> 4.0)
|
36
42
|
bundler (~> 1.0.0)
|
37
43
|
flexmock (> 0.8.6)
|
38
44
|
jeweler (~> 1.6.4)
|
39
|
-
quantify (
|
45
|
+
quantify (~> 2.0.0)
|
40
46
|
rcov
|
41
|
-
|
42
|
-
|
47
|
+
rdoc
|
48
|
+
rspec (= 2.6.0)
|
43
49
|
uuidtools (= 2.1.2)
|
data/README.txt
CHANGED
@@ -25,9 +25,9 @@ Documentation: http://rubydoc.info/gems/amee-data-abstraction
|
|
25
25
|
All gem requirements should be installed as part of the rubygems installation process
|
26
26
|
above, but are listed here for completeness.
|
27
27
|
|
28
|
-
* amee ~> 3.
|
28
|
+
* amee ~> 3.0
|
29
29
|
* uuidtools = 2.1.2
|
30
|
-
* quantify = 1.
|
30
|
+
* quantify = 1.1.0
|
31
31
|
|
32
32
|
== USAGE
|
33
33
|
|
@@ -117,10 +117,16 @@ Submit to AMEE for calculation
|
|
117
117
|
|
118
118
|
Typical practice is initialize the calculation prototypes required for an
|
119
119
|
application via a configuration file which creates the required calculation
|
120
|
-
templates within an instance of CalculationSet.
|
121
|
-
|
120
|
+
templates within an instance of CalculationSet. If the calculation set is assigned
|
121
|
+
to a global variable or constant, the set of prototypes is available for
|
122
|
+
initializing new calculations and templating view structures (e.g. tables, forms)
|
123
|
+
from anywhere in the application.
|
122
124
|
|
123
|
-
|
125
|
+
Adding a configuration to /config or /config/initializers may be appropriate
|
126
|
+
|
127
|
+
# e.g. /config/initializers/calculations.rb
|
128
|
+
|
129
|
+
Calculations = AMEE::DataAbstraction::CalculationSet {
|
124
130
|
|
125
131
|
calculation {
|
126
132
|
label :electricity
|
@@ -142,36 +148,17 @@ be structured the follow DSL:
|
|
142
148
|
path "/some/fuel/associated/path/in/amee"
|
143
149
|
terms_from_amee
|
144
150
|
}
|
145
|
-
|
146
|
-
The default location for such files within Rails applications is under
|
147
|
-
/config/calculations. If such an approach is taken, the configuration can be
|
148
|
-
read and a calculation set generated by using the filename, thus:
|
149
|
-
|
150
|
-
CalculationSet.find('my_emissions_calculations')
|
151
|
-
|
152
|
-
#=> <AMEE::DataAbstraction::CalculationSet ... >
|
153
|
-
|
154
|
-
Otherwise, the path to the configuration file can be provided:
|
155
|
-
|
156
|
-
CalculationSet.find('some/directory/my_emissions_calculations')
|
157
|
-
|
158
|
-
#=> <AMEE::DataAbstraction::CalculationSet ... >
|
159
|
-
|
160
|
-
The calculation set is accessible as follow using the same argument as used
|
161
|
-
by the Find method (filename if conventional Rails location, path otherwise):
|
162
|
-
|
163
|
-
CalculationSet.sets['my_emissions_calculations']
|
151
|
+
}
|
164
152
|
|
165
153
|
#=> <AMEE::DataAbstraction::CalculationSet ... >
|
166
154
|
|
167
|
-
|
168
|
-
label:
|
155
|
+
From this global calculation set, initialize a new calculation
|
169
156
|
|
170
|
-
my_fuel_calculation =
|
157
|
+
my_fuel_calculation = Calculations[:fuel].begin_calculation
|
171
158
|
|
172
159
|
#=> <AMEE::DataAbstraction::OngoingCalculation ... >
|
173
160
|
|
174
|
-
a_different_transport_calculation =
|
161
|
+
a_different_transport_calculation = Calculations[:transport].begin_calculation
|
175
162
|
|
176
163
|
#=> <AMEE::DataAbstraction::OngoingCalculation ... >
|
177
164
|
|
data/Rakefile
CHANGED
@@ -13,16 +13,14 @@ rescue Bundler::BundlerError => e
|
|
13
13
|
exit e.status_code
|
14
14
|
end
|
15
15
|
require 'rake'
|
16
|
-
require '
|
17
|
-
require '
|
16
|
+
require 'rspec'
|
17
|
+
require 'rspec/core/rake_task'
|
18
18
|
|
19
19
|
task :default => [:spec]
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
t.rcov = true
|
25
|
-
t.rcov_opts = ['--exclude', 'spec,/*ruby*,/*gems*']
|
21
|
+
desc "Run specs"
|
22
|
+
RSpec::Core::RakeTask.new do |t|
|
23
|
+
# Put spec opts in a file named .rspec in root
|
26
24
|
end
|
27
25
|
|
28
26
|
require 'jeweler'
|
@@ -74,14 +72,17 @@ Jeweler::Tasks.new do |gem|
|
|
74
72
|
end
|
75
73
|
Jeweler::RubygemsDotOrgTasks.new
|
76
74
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
75
|
+
require 'rcov/rcovtask'
|
76
|
+
desc "Generate code coverage"
|
77
|
+
RSpec::Core::RakeTask.new(:coverage) do |t|
|
78
|
+
t.rcov = true
|
79
|
+
t.rcov_opts = ['--exclude', 'spec']
|
80
|
+
end
|
82
81
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
82
|
+
require 'rdoc/task'
|
83
|
+
RDoc::Task.new do |rd|
|
84
|
+
rd.title = "AMEE Data Abstraction"
|
85
|
+
rd.rdoc_dir = 'doc'
|
86
|
+
rd.main = "README"
|
87
|
+
rd.rdoc_files.include("README", "lib/**/*.rb")
|
87
88
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0.0
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{amee-data-abstraction}
|
8
|
-
s.version = "
|
8
|
+
s.version = "2.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Hetherington", "Andrew Berkeley", "James Smith", "George Palmer"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-09-28}
|
13
13
|
s.description = %q{Part of the AMEEappkit this gem provides a data abstraction layer, decreasing the amount and detail of development required}
|
14
14
|
s.email = %q{help@amee.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,7 +28,6 @@ Gem::Specification.new do |s|
|
|
28
28
|
"amee-data-abstraction.gemspec",
|
29
29
|
"examples/_calculator_form.erb",
|
30
30
|
"examples/calculation_controller.rb",
|
31
|
-
"init.rb",
|
32
31
|
"lib/amee-data-abstraction.rb",
|
33
32
|
"lib/amee-data-abstraction/calculation.rb",
|
34
33
|
"lib/amee-data-abstraction/calculation_set.rb",
|
@@ -48,7 +47,6 @@ Gem::Specification.new do |s|
|
|
48
47
|
"lib/core-extensions/hash.rb",
|
49
48
|
"lib/core-extensions/ordered_hash.rb",
|
50
49
|
"lib/core-extensions/proc.rb",
|
51
|
-
"rails/init.rb",
|
52
50
|
"spec/amee-data-abstraction/calculation_set_spec.rb",
|
53
51
|
"spec/amee-data-abstraction/calculation_spec.rb",
|
54
52
|
"spec/amee-data-abstraction/drill_spec.rb",
|
@@ -64,53 +62,52 @@ Gem::Specification.new do |s|
|
|
64
62
|
"spec/core-extensions/hash_spec.rb",
|
65
63
|
"spec/core-extensions/ordered_hash_spec.rb",
|
66
64
|
"spec/core-extensions/proc_spec.rb",
|
67
|
-
"spec/fixtures/
|
68
|
-
"spec/fixtures/
|
69
|
-
"spec/fixtures/
|
70
|
-
"spec/fixtures/config/electricity.rb",
|
65
|
+
"spec/fixtures/electricity.rb",
|
66
|
+
"spec/fixtures/electricity_and_transport.rb",
|
67
|
+
"spec/fixtures/transport.rb",
|
71
68
|
"spec/spec.opts",
|
72
69
|
"spec/spec_helper.rb"
|
73
70
|
]
|
74
71
|
s.homepage = %q{http://github.com/AMEE/amee-data-abstraction}
|
75
72
|
s.licenses = ["BSD 3-Clause"]
|
76
73
|
s.require_paths = ["lib"]
|
77
|
-
s.rubygems_version = %q{1.
|
74
|
+
s.rubygems_version = %q{1.4.2}
|
78
75
|
s.summary = %q{Calculation and form building tool hiding details of AMEEconnect}
|
79
76
|
|
80
77
|
if s.respond_to? :specification_version then
|
81
78
|
s.specification_version = 3
|
82
79
|
|
83
80
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
84
|
-
s.add_runtime_dependency(%q<amee>, ["~>
|
81
|
+
s.add_runtime_dependency(%q<amee>, ["~> 4.0"])
|
85
82
|
s.add_runtime_dependency(%q<uuidtools>, ["= 2.1.2"])
|
86
|
-
s.add_runtime_dependency(%q<quantify>, ["
|
83
|
+
s.add_runtime_dependency(%q<quantify>, ["~> 2.0.0"])
|
87
84
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
88
85
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
89
|
-
s.add_development_dependency(%q<rspec>, ["=
|
90
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
91
|
-
s.add_development_dependency(%q<rspec_spinner>, ["= 1.1.3"])
|
86
|
+
s.add_development_dependency(%q<rspec>, ["= 2.6.0"])
|
92
87
|
s.add_development_dependency(%q<flexmock>, ["> 0.8.6"])
|
88
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
89
|
+
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
93
90
|
else
|
94
|
-
s.add_dependency(%q<amee>, ["~>
|
91
|
+
s.add_dependency(%q<amee>, ["~> 4.0"])
|
95
92
|
s.add_dependency(%q<uuidtools>, ["= 2.1.2"])
|
96
|
-
s.add_dependency(%q<quantify>, ["
|
93
|
+
s.add_dependency(%q<quantify>, ["~> 2.0.0"])
|
97
94
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
98
95
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
99
|
-
s.add_dependency(%q<rspec>, ["=
|
100
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
101
|
-
s.add_dependency(%q<rspec_spinner>, ["= 1.1.3"])
|
96
|
+
s.add_dependency(%q<rspec>, ["= 2.6.0"])
|
102
97
|
s.add_dependency(%q<flexmock>, ["> 0.8.6"])
|
98
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
99
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
103
100
|
end
|
104
101
|
else
|
105
|
-
s.add_dependency(%q<amee>, ["~>
|
102
|
+
s.add_dependency(%q<amee>, ["~> 4.0"])
|
106
103
|
s.add_dependency(%q<uuidtools>, ["= 2.1.2"])
|
107
|
-
s.add_dependency(%q<quantify>, ["
|
104
|
+
s.add_dependency(%q<quantify>, ["~> 2.0.0"])
|
108
105
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
109
106
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
110
|
-
s.add_dependency(%q<rspec>, ["=
|
111
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
112
|
-
s.add_dependency(%q<rspec_spinner>, ["= 1.1.3"])
|
107
|
+
s.add_dependency(%q<rspec>, ["= 2.6.0"])
|
113
108
|
s.add_dependency(%q<flexmock>, ["> 0.8.6"])
|
109
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
110
|
+
s.add_dependency(%q<rdoc>, [">= 0"])
|
114
111
|
end
|
115
112
|
end
|
116
113
|
|
@@ -132,7 +132,7 @@ module AMEE
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def explorer_url
|
135
|
-
Rails.logger.info "#explorer_url method deprecated. Use #discover_url" if defined?
|
135
|
+
::Rails.logger.info "#explorer_url method deprecated. Use #discover_url" if defined? Rails
|
136
136
|
discover_url
|
137
137
|
end
|
138
138
|
|
@@ -36,95 +36,22 @@ module AMEE
|
|
36
36
|
#
|
37
37
|
class CalculationSet
|
38
38
|
|
39
|
-
#
|
40
|
-
#
|
39
|
+
# Initialize a <i>CalculationSet</i> with a "DSL" block, i.e. a block to be
|
40
|
+
# evaluated in the context of the instantiated CalculationSet
|
41
41
|
#
|
42
|
-
|
43
|
-
|
44
|
-
# Convenience method for accessing the @@sets class variable
|
45
|
-
def self.sets
|
46
|
-
@@sets
|
47
|
-
end
|
48
|
-
|
49
|
-
# Retrieve a calculation set on the basis of a configuration file name or
|
50
|
-
# relatiev/absolute file path. If configuration files are location within
|
51
|
-
# the default Rails location under '/config/calculations' then the path and
|
52
|
-
# the .rb extenstion can be omitted from the name.
|
53
|
-
#
|
54
|
-
def self.find(name)
|
55
|
-
@@sets[name.to_sym] or load_set(name)
|
56
|
-
end
|
57
|
-
|
58
|
-
# Regenerate a configuration lock file assocaited with the master
|
59
|
-
# configuration file <tt>name</tt>. Optionally set a custom path for the
|
60
|
-
# lock file as <tt>output_path</tt>, otherwise the lock file path and
|
61
|
-
# filename will be based upon the master file with the extension .lock.rb.
|
62
|
-
#
|
63
|
-
def self.regenerate_lock_file(name,output_path=nil)
|
64
|
-
set = CalculationSet.find(name)
|
65
|
-
set.generate_lock_file(output_path)
|
66
|
-
end
|
67
|
-
|
68
|
-
# Find a specific prototype calculation instance without specifying the set
|
69
|
-
# to which it belongs.
|
70
|
-
#
|
71
|
-
def self.find_prototype_calculation(label)
|
72
|
-
@@sets.each_pair do |name,set|
|
73
|
-
set = find(name)
|
74
|
-
return set[label] if set[label]
|
75
|
-
end
|
76
|
-
return nil
|
77
|
-
end
|
78
|
-
|
79
|
-
protected
|
80
|
-
|
81
|
-
# Load a calculation set based on a filename or full path.
|
82
|
-
def self.load_set(name)
|
83
|
-
CalculationSet.new(name,:file => name) do
|
84
|
-
instance_eval(File.open(self.config_path).read)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
DEFFAULT_RAILS_CONFIG_DIR = "config/calculations"
|
89
|
-
|
90
|
-
# Find the config file assocaited with <tt>name</tt>. The method first checks
|
91
|
-
# the default Rails configuration location (config/calculations) then the
|
92
|
-
# file path described by <tt>name</tt> relative to the Rails root and by
|
93
|
-
# absolute path.
|
94
|
-
def self.find_config_file(name)
|
95
|
-
default_config_dir = defined?(::Rails) ? "#{::Rails.root}/#{DEFFAULT_RAILS_CONFIG_DIR}" : nil
|
96
|
-
if defined?(::Rails) && File.exists?("#{default_config_dir}/#{name.to_s}.rb")
|
97
|
-
"#{default_config_dir}/#{name.to_s}.rb"
|
98
|
-
elsif defined?(::Rails) && File.exists?("#{default_config_dir}/#{name.to_s}")
|
99
|
-
"#{default_config_dir}/#{name.to_s}"
|
100
|
-
elsif defined?(::Rails) && File.exists?("#{::Rails.root}/#{name}")
|
101
|
-
"#{::Rails.root}/#{name}"
|
102
|
-
elsif File.exists?(name)
|
103
|
-
name
|
104
|
-
else
|
105
|
-
raise ArgumentError, "The config file '#{name}' could not be located"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
public
|
110
|
-
|
111
|
-
attr_accessor :calculations, :name, :file
|
112
|
-
|
113
|
-
# Initialise a new Calculation set. Specify the name of the calculation set
|
114
|
-
# as the first argument. This name is used as the set key within the class
|
115
|
-
# variable @@sets hash.
|
116
|
-
#
|
117
|
-
def initialize(name,options={},&block)
|
118
|
-
raise ArgumentError, "Calculation set must have a name" unless name
|
119
|
-
@name = name
|
120
|
-
@file = CalculationSet.find_config_file(options[:file]) if options[:file]
|
121
|
-
@calculations = ActiveSupport::OrderedHash.new
|
42
|
+
def initialize(options={},&block)
|
43
|
+
@calculations=ActiveSupport::OrderedHash.new
|
122
44
|
@all_blocks=[]
|
123
45
|
@all_options={}
|
124
46
|
instance_eval(&block) if block
|
125
|
-
@@sets[@name.to_sym] = self
|
126
47
|
end
|
127
48
|
|
49
|
+
# Access the @calculations instance variable ordered hash. Keys are labels
|
50
|
+
# assocaited with each prototype calculation; values are the instantiated
|
51
|
+
# <i>PrototypeCalculation</i> objects
|
52
|
+
#
|
53
|
+
attr_accessor :calculations
|
54
|
+
|
128
55
|
# Shorthand method for returning the prototype calculation which is represented
|
129
56
|
# by a label matching <tt>sym</tt>
|
130
57
|
#
|
@@ -167,77 +94,8 @@ module AMEE
|
|
167
94
|
instance_exec(usage,&dsl_block)
|
168
95
|
}
|
169
96
|
end
|
170
|
-
end
|
171
97
|
|
172
|
-
# Returns the path to the configuration file for <tt>self</tt>. If a .lock
|
173
|
-
# file exists, this takes precedence, otherwise the master config file
|
174
|
-
# described by the <tt>#file</tt> attribute is returned.
|
175
|
-
#
|
176
|
-
def config_path
|
177
|
-
lock_file_exists? ? lock_file_path : @file
|
178
98
|
end
|
179
|
-
|
180
|
-
# Returns the path to the configuration lock file
|
181
|
-
def lock_file_path
|
182
|
-
@file.gsub(".rb",".lock.rb") rescue nil
|
183
|
-
end
|
184
|
-
|
185
|
-
# Returns <tt>true</tt> if a configuration lock file exists. Otherwise,
|
186
|
-
# returns <tt>false</tt>.
|
187
|
-
#
|
188
|
-
def lock_file_exists?
|
189
|
-
File.exists?(lock_file_path)
|
190
|
-
end
|
191
|
-
|
192
|
-
# Generates a lock file for the calcuation set configuration. If no argument
|
193
|
-
# is provided the, the lock file is generated using the filename and path
|
194
|
-
# described by the <tt>#lock_file_path</tt> method. If a custom output
|
195
|
-
# location is required, this can be provided optionally as an argument.
|
196
|
-
#
|
197
|
-
def generate_lock_file(output_path=nil)
|
198
|
-
file = output_path || lock_file_path or raise ArgumentError,
|
199
|
-
"No path for lock file known. Either set path for the master config file using the #file accessor method or provide as an argument"
|
200
|
-
string = ""
|
201
|
-
@calculations.values.each do |prototype_calculation|
|
202
|
-
string += "calculation {\n\n"
|
203
|
-
string += " name \"#{prototype_calculation.name}\"\n"
|
204
|
-
string += " label :#{prototype_calculation.label}\n"
|
205
|
-
string += " path \"#{prototype_calculation.path}\"\n\n"
|
206
|
-
prototype_calculation.terms.each do |term|
|
207
|
-
string += " #{term.class.to_s.split("::").last.downcase} {\n"
|
208
|
-
string += " name \"#{term.name}\"\n" unless term.name.blank?
|
209
|
-
string += " label :#{term.label}\n" unless term.label.blank?
|
210
|
-
string += " path \"#{term.path}\"\n" unless term.path.blank?
|
211
|
-
string += " value \"#{term.value}\"\n" unless term.value.blank?
|
212
|
-
|
213
|
-
if term.is_a?(AMEE::DataAbstraction::Input)
|
214
|
-
string += " fixed \"#{term.value}\"\n" if term.fixed? && !term.value.blank?
|
215
|
-
if term.is_a?(AMEE::DataAbstraction::Drill)
|
216
|
-
string += " choices \"#{term.choices.join('","')}\"\n" if term.instance_variable_defined?("@choices") && !term.choices.blank?
|
217
|
-
elsif term.is_a?(AMEE::DataAbstraction::Profile)
|
218
|
-
string += " choices [\"#{term.choices.join('","')}\"]\n" if term.instance_variable_defined?("@choices") && !term.choices.blank?
|
219
|
-
end
|
220
|
-
string += " optional!\n" if term.optional?
|
221
|
-
end
|
222
|
-
|
223
|
-
string += " default_unit :#{term.default_unit.label}\n" unless term.default_unit.blank?
|
224
|
-
string += " default_per_unit :#{term.default_per_unit.label}\n" unless term.default_per_unit.blank?
|
225
|
-
string += " alternative_units :#{term.alternative_units.map(&:label).join(', :')}\n" unless term.alternative_units.blank?
|
226
|
-
string += " alternative_per_units :#{term.alternative_per_units.map(&:label).join(', :')}\n" unless term.alternative_per_units.blank?
|
227
|
-
string += " unit :#{term.unit.label}\n" unless term.unit.blank?
|
228
|
-
string += " per_unit :#{term.per_unit.label}\n" unless term.per_unit.blank?
|
229
|
-
string += " type :#{term.type}\n" unless term.type.blank?
|
230
|
-
string += " interface :#{term.interface}\n" unless term.interface.blank?
|
231
|
-
string += " note \"#{term.note}\"\n" unless term.note.blank?
|
232
|
-
string += " disable!\n" if !term.is_a?(AMEE::DataAbstraction::Drill) && term.disabled?
|
233
|
-
string += " hide!\n" if term.hidden?
|
234
|
-
string += " }\n\n"
|
235
|
-
end
|
236
|
-
string += "}\n\n"
|
237
|
-
end
|
238
|
-
File.open(file,'w') { |f| f.write string }
|
239
|
-
end
|
240
|
-
|
241
99
|
end
|
242
100
|
end
|
243
101
|
end
|