amee-analytics 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,16 +1,15 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # Dependencies
4
- gem "amee-data-abstraction","~> 1.3"
5
- gem "amee-data-persistence","~> 1.2"
4
+ gem "amee-data-abstraction","~> 2.0"
5
+ gem "amee-data-persistence","~> 2.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
8
+ gem "bundler", "~> 1.0.0"
10
9
  gem "jeweler", "~> 1.6.4"
11
- gem 'rspec', '1.3.0'
10
+ gem "rails", "~> 3.0.10"
11
+ gem 'rspec', '2.6.0'
12
+ gem 'flexmock', '~> 0.9.0'
12
13
  gem 'rcov'
13
- gem 'rspec_spinner', '1.1.3'
14
- gem 'flexmock', '> 0.8.6'
15
- gem 'activerecord', '~> 2.3.5'
14
+ gem 'rdoc'
16
15
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,117 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ actionmailer (3.0.10)
6
+ actionpack (= 3.0.10)
7
+ mail (~> 2.2.19)
8
+ actionpack (3.0.10)
9
+ activemodel (= 3.0.10)
10
+ activesupport (= 3.0.10)
11
+ builder (~> 2.1.2)
12
+ erubis (~> 2.6.6)
13
+ i18n (~> 0.5.0)
14
+ rack (~> 1.2.1)
15
+ rack-mount (~> 0.6.14)
16
+ rack-test (~> 0.5.7)
17
+ tzinfo (~> 0.3.23)
18
+ activemodel (3.0.10)
19
+ activesupport (= 3.0.10)
20
+ builder (~> 2.1.2)
21
+ i18n (~> 0.5.0)
22
+ activerecord (3.0.10)
23
+ activemodel (= 3.0.10)
24
+ activesupport (= 3.0.10)
25
+ arel (~> 2.0.10)
26
+ tzinfo (~> 0.3.23)
27
+ activeresource (3.0.10)
28
+ activemodel (= 3.0.10)
29
+ activesupport (= 3.0.10)
30
+ activesupport (3.0.10)
31
+ amee (3.0.1)
32
+ activesupport (~> 3.0.10)
33
+ json
34
+ log4r
35
+ nokogiri (~> 1.4.3.1)
36
+ amee-data-abstraction (2.0.0)
37
+ amee (~> 3.0)
38
+ quantify (~> 2.0.0)
39
+ uuidtools (= 2.1.2)
40
+ amee-data-persistence (2.0.0)
41
+ activerecord (~> 3.0.10)
42
+ amee-data-abstraction (~> 2.0)
43
+ arel (2.0.10)
44
+ builder (2.1.2)
45
+ diff-lcs (1.1.3)
46
+ erubis (2.6.6)
47
+ abstract (>= 1.0.0)
48
+ flexmock (0.9.0)
49
+ git (1.2.5)
50
+ i18n (0.5.0)
51
+ jeweler (1.6.4)
52
+ bundler (~> 1.0)
53
+ git (>= 1.2.5)
54
+ rake
55
+ json (1.6.1)
56
+ log4r (1.1.9)
57
+ mail (2.2.19)
58
+ activesupport (>= 2.3.6)
59
+ i18n (>= 0.4.0)
60
+ mime-types (~> 1.16)
61
+ treetop (~> 1.4.8)
62
+ mime-types (1.16)
63
+ nokogiri (1.4.3.1)
64
+ polyglot (0.3.2)
65
+ quantify (2.0.0)
66
+ activesupport (~> 3.0.10)
67
+ i18n
68
+ rack (1.2.4)
69
+ rack-mount (0.6.14)
70
+ rack (>= 1.0.0)
71
+ rack-test (0.5.7)
72
+ rack (>= 1.0)
73
+ rails (3.0.10)
74
+ actionmailer (= 3.0.10)
75
+ actionpack (= 3.0.10)
76
+ activerecord (= 3.0.10)
77
+ activeresource (= 3.0.10)
78
+ activesupport (= 3.0.10)
79
+ bundler (~> 1.0)
80
+ railties (= 3.0.10)
81
+ railties (3.0.10)
82
+ actionpack (= 3.0.10)
83
+ activesupport (= 3.0.10)
84
+ rake (>= 0.8.7)
85
+ rdoc (~> 3.4)
86
+ thor (~> 0.14.4)
87
+ rake (0.9.2)
88
+ rcov (0.9.10)
89
+ rdoc (3.9.4)
90
+ rspec (2.6.0)
91
+ rspec-core (~> 2.6.0)
92
+ rspec-expectations (~> 2.6.0)
93
+ rspec-mocks (~> 2.6.0)
94
+ rspec-core (2.6.4)
95
+ rspec-expectations (2.6.0)
96
+ diff-lcs (~> 1.1.2)
97
+ rspec-mocks (2.6.0)
98
+ thor (0.14.6)
99
+ treetop (1.4.10)
100
+ polyglot
101
+ polyglot (>= 0.3.1)
102
+ tzinfo (0.3.29)
103
+ uuidtools (2.1.2)
104
+
105
+ PLATFORMS
106
+ ruby
107
+
108
+ DEPENDENCIES
109
+ amee-data-abstraction (~> 2.0)
110
+ amee-data-persistence (~> 2.0)
111
+ bundler (~> 1.0.0)
112
+ flexmock (~> 0.9.0)
113
+ jeweler (~> 1.6.4)
114
+ rails (~> 3.0.10)
115
+ rcov
116
+ rdoc
117
+ rspec (= 2.6.0)
data/Rakefile CHANGED
@@ -10,16 +10,14 @@ rescue Bundler::BundlerError => e
10
10
  exit e.status_code
11
11
  end
12
12
  require 'rake'
13
- require 'spec'
14
- require 'spec/rake/spectask'
13
+ require 'rspec'
14
+ require 'rspec/core/rake_task'
15
15
 
16
16
  task :default => [:spec]
17
17
 
18
- Spec::Rake::SpecTask.new do |t|
19
- t.spec_opts = ['--options', "spec/spec.opts"]
20
- t.spec_files = FileList['spec/**/*_spec.rb']
21
- t.rcov = true
22
- t.rcov_opts = ['--exclude', 'spec,/*ruby*,/*gems*']
18
+ desc "Run specs"
19
+ RSpec::Core::RakeTask.new do |t|
20
+ # Put spec opts in a file named .rspec in root
23
21
  end
24
22
 
25
23
  require 'jeweler'
@@ -71,29 +69,17 @@ Jeweler::Tasks.new do |gem|
71
69
  end
72
70
  Jeweler::RubygemsDotOrgTasks.new
73
71
 
74
- require 'rake/testtask'
75
- Rake::TestTask.new(:test) do |test|
76
- test.libs << 'lib' << 'test'
77
- test.pattern = 'test/**/test_*.rb'
78
- test.verbose = true
79
- end
80
-
81
72
  require 'rcov/rcovtask'
82
- Rcov::RcovTask.new do |test|
83
- test.libs << 'test'
84
- test.pattern = 'test/**/test_*.rb'
85
- test.verbose = true
86
- test.rcov_opts << '--exclude "gems/*"'
73
+ desc "Generate code coverage"
74
+ RSpec::Core::RakeTask.new(:coverage) do |t|
75
+ t.rcov = true
76
+ t.rcov_opts = ['--exclude', 'spec']
87
77
  end
88
78
 
89
- task :default => :test
90
-
91
- require 'rake/rdoctask'
92
- Rake::RDocTask.new do |rdoc|
93
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
94
-
95
- rdoc.rdoc_dir = 'rdoc'
96
- rdoc.title = "amee-analytics #{version}"
97
- rdoc.rdoc_files.include('README*')
98
- rdoc.rdoc_files.include('lib/**/*.rb')
79
+ require 'rdoc/task'
80
+ RDoc::Task.new do |rd|
81
+ rd.title = "AMEE Analytics"
82
+ rd.rdoc_dir = 'doc'
83
+ rd.main = "README"
84
+ rd.rdoc_files.include("README", "lib/**/*.rb")
99
85
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 2.0.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{amee-analytics}
8
- s.version = "1.1.0"
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-10-18}
12
+ s.date = %q{2011-09-28}
13
13
  s.description = %q{Part of the AMEE AppKit, this gem provides the ability to do mathmatical operations over a set of calculations}
14
14
  s.email = %q{help@amee.com}
15
15
  s.extra_rdoc_files = [
@@ -20,62 +20,63 @@ Gem::Specification.new do |s|
20
20
  ".rvmrc",
21
21
  "CHANGELOG.txt",
22
22
  "Gemfile",
23
+ "Gemfile.lock",
23
24
  "LICENSE.txt",
24
25
  "README.txt",
25
26
  "Rakefile",
26
27
  "VERSION",
27
28
  "amee-analytics.gemspec",
28
- "init.rb",
29
29
  "lib/amee-analytics.rb",
30
- "lib/amee/data_abstraction/calculation_collection_analytics_support.rb",
31
- "lib/amee/data_abstraction/result.rb",
32
- "lib/amee/data_abstraction/term_analytics_support.rb",
33
- "lib/amee/data_abstraction/terms_list_analytics_support.rb",
34
- "rails/init.rb",
30
+ "lib/amee/analytics/calculation_collection_analytics_support.rb",
31
+ "lib/amee/analytics/result.rb",
32
+ "lib/amee/analytics/term_analytics_support.rb",
33
+ "lib/amee/analytics/terms_list_analytics_support.rb",
35
34
  "spec/amee/analytics/calculation_collection_spec.rb",
36
35
  "spec/amee/analytics/term_spec.rb",
37
36
  "spec/amee/analytics/terms_list_spec.rb",
38
- "spec/fixtures/config/calculations/calcs.rb",
39
37
  "spec/spec.opts",
40
38
  "spec/spec_helper.rb"
41
39
  ]
42
40
  s.homepage = %q{http://github.com/AMEE/amee-analytics}
43
41
  s.licenses = ["MIT"]
44
42
  s.require_paths = ["lib"]
45
- s.rubygems_version = %q{1.5.3}
43
+ s.rubygems_version = %q{1.4.2}
46
44
  s.summary = %q{Analytics module for use with AMEE AppKit}
47
45
 
48
46
  if s.respond_to? :specification_version then
49
47
  s.specification_version = 3
50
48
 
51
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
- s.add_runtime_dependency(%q<amee-data-abstraction>, ["~> 1.3"])
53
- s.add_runtime_dependency(%q<amee-data-persistence>, ["~> 1.2"])
50
+ s.add_runtime_dependency(%q<amee-data-abstraction>, ["~> 2.0"])
51
+ s.add_runtime_dependency(%q<amee-data-persistence>, ["~> 2.0"])
52
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
54
53
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
55
- s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
54
+ s.add_development_dependency(%q<rails>, ["~> 3.0.10"])
55
+ s.add_development_dependency(%q<rspec>, ["= 2.6.0"])
56
+ s.add_development_dependency(%q<flexmock>, ["~> 0.9.0"])
56
57
  s.add_development_dependency(%q<rcov>, [">= 0"])
57
- s.add_development_dependency(%q<rspec_spinner>, ["= 1.1.3"])
58
- s.add_development_dependency(%q<flexmock>, ["> 0.8.6"])
59
- s.add_development_dependency(%q<activerecord>, ["~> 2.3.5"])
58
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
60
59
  else
61
- s.add_dependency(%q<amee-data-abstraction>, ["~> 1.3"])
62
- s.add_dependency(%q<amee-data-persistence>, ["~> 1.2"])
60
+ s.add_dependency(%q<amee-data-abstraction>, ["~> 2.0"])
61
+ s.add_dependency(%q<amee-data-persistence>, ["~> 2.0"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
63
63
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
64
- s.add_dependency(%q<rspec>, ["= 1.3.0"])
64
+ s.add_dependency(%q<rails>, ["~> 3.0.10"])
65
+ s.add_dependency(%q<rspec>, ["= 2.6.0"])
66
+ s.add_dependency(%q<flexmock>, ["~> 0.9.0"])
65
67
  s.add_dependency(%q<rcov>, [">= 0"])
66
- s.add_dependency(%q<rspec_spinner>, ["= 1.1.3"])
67
- s.add_dependency(%q<flexmock>, ["> 0.8.6"])
68
- s.add_dependency(%q<activerecord>, ["~> 2.3.5"])
68
+ s.add_dependency(%q<rdoc>, [">= 0"])
69
69
  end
70
70
  else
71
- s.add_dependency(%q<amee-data-abstraction>, ["~> 1.3"])
72
- s.add_dependency(%q<amee-data-persistence>, ["~> 1.2"])
71
+ s.add_dependency(%q<amee-data-abstraction>, ["~> 2.0"])
72
+ s.add_dependency(%q<amee-data-persistence>, ["~> 2.0"])
73
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
73
74
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
74
- s.add_dependency(%q<rspec>, ["= 1.3.0"])
75
+ s.add_dependency(%q<rails>, ["~> 3.0.10"])
76
+ s.add_dependency(%q<rspec>, ["= 2.6.0"])
77
+ s.add_dependency(%q<flexmock>, ["~> 0.9.0"])
75
78
  s.add_dependency(%q<rcov>, [">= 0"])
76
- s.add_dependency(%q<rspec_spinner>, ["= 1.1.3"])
77
- s.add_dependency(%q<flexmock>, ["> 0.8.6"])
78
- s.add_dependency(%q<activerecord>, ["~> 2.3.5"])
79
+ s.add_dependency(%q<rdoc>, [">= 0"])
79
80
  end
80
81
  end
81
82
 
@@ -2,7 +2,13 @@
2
2
  # Released as Open Source Software under the BSD 3-Clause license. See LICENSE.txt for details.
3
3
 
4
4
  require 'rubygems'
5
- gem 'amee-data-abstraction'
6
5
  require 'amee-data-abstraction'
6
+ require 'amee-data-persistence'
7
+ require 'amee/analytics/result'
8
+ require 'amee/analytics/calculation_collection_analytics_support'
9
+ require 'amee/analytics/terms_list_analytics_support'
10
+ require 'amee/analytics/term_analytics_support'
7
11
 
8
- require 'amee/data_abstraction/result'
12
+ ::AMEE::DataAbstraction::CalculationCollection.send :include, AMEE::Analytics::CalculationCollectionAnalyticsSupport
13
+ ::AMEE::DataAbstraction::TermsList.send :include, AMEE::Analytics::TermsListAnalyticsSupport
14
+ ::AMEE::DataAbstraction::Term.send :include, AMEE::Analytics::TermAnalyticsSupport
@@ -4,7 +4,7 @@
4
4
  # :title: Module: AMEE::DataAbstraction::CalculationCollectionAnalyticsSupport
5
5
 
6
6
  module AMEE
7
- module DataAbstraction
7
+ module Analytics
8
8
 
9
9
  # Mixin module for the <i>AMEE::DataAbstraction::CalculationCollection</i>
10
10
  # class, providing methods for handling collections of calculations.
@@ -53,7 +53,7 @@ module AMEE
53
53
  #
54
54
  def sort_by(term)
55
55
  term = term.to_sym unless term.is_a? Symbol
56
- CalculationCollection.new(send(term).sort_by(:value).map(&:parent))
56
+ AMEE::DataAbstraction::CalculationCollection.new(send(term).sort_by(:value).map(&:parent))
57
57
  end
58
58
 
59
59
  # Sorts the calculation collection in place according to the values on the
@@ -107,7 +107,7 @@ module AMEE
107
107
  calc.contents[term.label] = term
108
108
  calc
109
109
  end
110
- CalculationCollection.new(new_calcs)
110
+ AMEE::DataAbstraction::CalculationCollection.new(new_calcs)
111
111
  end
112
112
 
113
113
  # Similar to <tt>#standardize_units</tt> but standardizes units in place,
@@ -122,14 +122,14 @@ module AMEE
122
122
  # sums of all outputs represented within the collection
123
123
  #
124
124
  def sum_all_outputs
125
- TermsList.new(terms.outputs.visible.labels.uniq.map { |o| send(o).sum })
125
+ AMEE::DataAbstraction::TermsList.new(terms.outputs.visible.labels.uniq.map { |o| send(o).sum })
126
126
  end
127
127
 
128
128
  # Returns a new instance of the class <tt>TermsList</tt> representing either
129
129
  # CO2 or CO2e outputs from each calculation
130
130
  #
131
131
  def co2_or_co2e_outputs
132
- terms = TermsList.new
132
+ terms = AMEE::DataAbstraction::TermsList.new
133
133
  each do |calculation|
134
134
  if calculation['co2e']
135
135
  terms << calculation['co2e']
@@ -158,10 +158,10 @@ module AMEE
158
158
  # <tt>self</tt>.
159
159
  #
160
160
  def terms
161
- TermsList.new( (self.map { |calc| calc.terms.map { |term| term } }).flatten )
161
+ AMEE::DataAbstraction::TermsList.new( (self.map { |calc| calc.terms.map { |term| term } }).flatten )
162
162
  end
163
163
 
164
- TermsList::Selectors.each do |sel|
164
+ AMEE::DataAbstraction::TermsList::Selectors.each do |sel|
165
165
  delegate sel,:to=>:terms
166
166
  end
167
167
 
@@ -4,12 +4,12 @@
4
4
  # :title: Class AMEE::DataAbstraction::Result
5
5
 
6
6
  module AMEE
7
- module DataAbstraction
7
+ module Analytics
8
8
 
9
9
  # Subclass of <tt>Term</tt> providing methods and attributes appropriate for
10
10
  # representing the results of cross calculation operations specifically
11
11
  #
12
- class Result < Term
12
+ class Result < AMEE::DataAbstraction::Term
13
13
 
14
14
  end
15
15
  end
@@ -5,7 +5,7 @@
5
5
  # :title: Module: AMEE::DataAbstraction::TermAnalyticsSupport
6
6
 
7
7
  module AMEE
8
- module DataAbstraction
8
+ module Analytics
9
9
 
10
10
  # Mixin module for the <i>AMEE::DataAbstraction::Term</i> class, providing
11
11
  # methods for handling collections of calculations.
@@ -17,7 +17,7 @@ module AMEE
17
17
  #
18
18
  def to_result
19
19
  result_term = Result.new
20
- TermsList::TermProperties.each do |attr|
20
+ AMEE::DataAbstraction::TermsList::TermProperties.each do |attr|
21
21
  result_term.send(attr, self.send(attr))
22
22
  end
23
23
  return result_term
@@ -5,7 +5,7 @@
5
5
  # :title: Module: AMEE::DataAbstraction::TermsListAnalyticsSupport
6
6
 
7
7
  module AMEE
8
- module DataAbstraction
8
+ module Analytics
9
9
 
10
10
  # Mixin module for the <i>AMEE::DataAbstraction::Term</i> class, providing
11
11
  # methods for handling collections of calculations.
@@ -84,7 +84,7 @@ module AMEE
84
84
  def first_of_each_type
85
85
  labels = self.labels.uniq
86
86
  terms = labels.map {|label| find { |term| term.label == label } }
87
- TermsList.new(terms)
87
+ AMEE::DataAbstraction::TermsList.new(terms)
88
88
  end
89
89
 
90
90
  # Returns the label of the unit which is predominantly used across all terms
@@ -133,7 +133,7 @@ module AMEE
133
133
  # operations on
134
134
  #
135
135
  def numeric_terms
136
- TermsList.new select { |term| term.has_numeric_value? }
136
+ AMEE::DataAbstraction::TermsList.new select { |term| term.has_numeric_value? }
137
137
  end
138
138
 
139
139
  # Returns a new instance of <i>TermsList</i> with all units standardized and
@@ -159,7 +159,7 @@ module AMEE
159
159
  unit = predominant_unit if unit.nil?
160
160
  per_unit = predominant_per_unit if per_unit.nil?
161
161
  new_terms = map { |term| term.convert_unit(:unit => unit, :per_unit => per_unit) }
162
- TermsList.new new_terms
162
+ AMEE::DataAbstraction::TermsList.new new_terms
163
163
  end
164
164
 
165
165
  # Returns a new instance of <i>Result</i> which represents the sum of all
@@ -217,7 +217,7 @@ module AMEE
217
217
  if max_groups.size == 1
218
218
  max_groups.first.first.to_result
219
219
  else
220
- TermsList.new max_groups.map { |group| group.first.to_result }
220
+ AMEE::DataAbstraction::TermsList.new max_groups.map { |group| group.first.to_result }
221
221
  end
222
222
  end
223
223
 
@@ -250,31 +250,12 @@ module AMEE
250
250
  Result.new { label label; value value; unit unit; per_unit per_unit }
251
251
  end
252
252
 
253
- # Move an individual term to a specified location (index) within the list.
254
- # The specific term is selected on the basis of one of it's attributes values,
255
- # with the attribute to use (e.g. :value, :unit) given by <tt>attr</attr>
256
- # and value by <tt>value</tt>. The location within the list to move the term
257
- # is given as an index integer value as the final argument.
258
- #
259
- def move_by(attr,value,index)
260
- if attr == :unit || attr == :per_unit
261
- value = Unit.for value
262
- end
263
- term = find {|t| t.send(attr) == value }
264
- return if term.nil?
265
- delete(term)
266
- insert(index, term)
267
- end
268
-
269
- # Rotate the list terms by one element - shifts the first-placed term to the
270
- # end of the list, advancing all terms forward by one place.
271
- def rotate
272
- push(self.shift)
273
- end
274
-
275
- # Sorts the terms list in place according to the term attribute indiated by
253
+ # Sorts the terms list in place according to the term attribute indicated by
276
254
  # <tt>attr</tt>, returning <tt>self</tt>.
277
255
  #
256
+ # If differences in units exist between terms, sorting occur based on the
257
+ # absolute quantities implied.
258
+ #
278
259
  # my_terms_list.sort_by! :value
279
260
  #
280
261
  # #=> <AMEE::DataAbstraction::TermsList ... >
@@ -293,9 +274,9 @@ module AMEE
293
274
  #
294
275
  # E.g.
295
276
  #
296
- # my_terms_list.sort_by :value
277
+ # my_terms_list.sort_by :value
297
278
  #
298
- # #=> <AMEE::DataAbstraction::TermsList ... >
279
+ # #=> <AMEE::DataAbstraction::TermsList ... >
299
280
  #
300
281
  def sort_by(attr)
301
282
  # 1. Remove unset terms before sort and append at end
@@ -325,7 +306,7 @@ module AMEE
325
306
  # dynamically retrieving a subset of terms according their labels.
326
307
  #
327
308
  def type
328
- TermsList.new select{ |x| x.label == :type }
309
+ AMEE::DataAbstraction::TermsList.new select{ |x| x.label == :type }
329
310
  end
330
311
 
331
312
  def respond_to?(method)
@@ -372,7 +353,7 @@ module AMEE
372
353
  #
373
354
  def method_missing(method, *args, &block)
374
355
  if labels.include? method
375
- TermsList.new select{ |x| x.label == method }
356
+ AMEE::DataAbstraction::TermsList.new select{ |x| x.label == method }
376
357
  elsif method.to_s =~ /sort_by_(.*)!/ and self.class::TermProperties.include? $1.to_sym
377
358
  sort_by! $1.to_sym
378
359
  elsif method.to_s =~ /sort_by_(.*)/ and self.class::TermProperties.include? $1.to_sym
@@ -5,6 +5,7 @@ include AMEE::DataAbstraction
5
5
  describe CalculationCollection do
6
6
 
7
7
  before(:each) do
8
+ initialize_calculation_set
8
9
  @calcs = []
9
10
  @calcs << add_elec_calc(500,240)
10
11
  @calcs << add_elec_calc(1000,480)
@@ -144,7 +145,7 @@ describe CalculationCollection do
144
145
  @coll.first['usage'].unit.label.should eql 'J'
145
146
  @coll.standardize_units!(:usage,:kWh)
146
147
  @coll.first['usage'].unit 'kWh'
147
- @coll.first['usage'].value.should be_close 0.000138888888888889,0.000001
148
+ @coll.first['usage'].value.should be_within(0.000001).of(0.000138888888888889)
148
149
  end
149
150
 
150
151
  it "should standardize units returning new collection" do
@@ -152,7 +153,7 @@ describe CalculationCollection do
152
153
  @coll.first['co2'].unit.label.should eql 't'
153
154
  coll = @coll.standardize_units(:co2,:lb)
154
155
  coll.first['co2'].unit 'lb'
155
- coll.first['co2'].value.should be_close 529109.429243706,0.01
156
+ coll.first['co2'].value.should be_within(0.01).of(529109.429243706)
156
157
  end
157
158
 
158
159
  it "should handle 'type' as a terms filter" do
@@ -201,11 +202,11 @@ describe CalculationCollection do
201
202
 
202
203
  it "should add to calculation collection using += syntax" do
203
204
  @coll = CalculationCollection.new
204
- @coll += add_transport_calc(500,240)
205
+ @coll += [add_transport_calc(500,240)]
205
206
  @coll.should be_a CalculationCollection
206
- @coll += add_transport_calc(1000,480)
207
+ @coll += [add_transport_calc(1000,480)]
207
208
  @coll.should be_a CalculationCollection
208
- @coll += add_transport_calc(1234,600)
209
+ @coll += [add_transport_calc(1234,600)]
209
210
  @coll.should be_a CalculationCollection
210
211
  @coll.size.should eql 3
211
212
  end
@@ -5,6 +5,7 @@ include AMEE::DataAbstraction
5
5
  describe TermsList do
6
6
 
7
7
  before(:each) do
8
+ initialize_calculation_set
8
9
  calcs = []
9
10
  calcs << add_elec_calc(500,240)
10
11
  calcs << add_elec_calc(1000,480)
@@ -65,7 +66,7 @@ describe TermsList do
65
66
  list.should be_homogeneous
66
67
  list.should be_homogeneous_units
67
68
  list.first.unit.label.should eql 't'
68
- list.first.value.should be_close 0.1088621688,0.001
69
+ list.first.value.should be_within(0.001).of(0.1088621688)
69
70
  end
70
71
 
71
72
  it "should standardize term per units with predominant per units and convert values appropriately if no per unit specified" do
@@ -78,7 +79,7 @@ describe TermsList do
78
79
  list.should be_homogeneous
79
80
  list.should be_homogeneous_per_units
80
81
  list.first.per_unit.label.should eql 'h'
81
- list.first.value.should be_close 14400,0.001
82
+ list.first.value.should be_within(0.001).of(14400)
82
83
  end
83
84
 
84
85
  it "should standardize term units AND per units with predominant units and convert values appropriately if no units specified" do
@@ -95,7 +96,7 @@ describe TermsList do
95
96
  list.should be_homogeneous_per_units
96
97
  list.first.unit.label.should eql 't'
97
98
  list.first.per_unit.label.should eql 'h'
98
- list.first.value.should be_close 6.531730128,0.001
99
+ list.first.value.should be_within(0.001).of(6.531730128)
99
100
  end
100
101
 
101
102
  it "should standardize term units with specfied units and convert values appropriately" do
@@ -110,7 +111,7 @@ describe TermsList do
110
111
  list.first.unit.label.should eql 'lb'
111
112
  list[1].unit.label.should eql 'lb'
112
113
  list.first.value.should eql 240.0
113
- list[1].value.should be_close 1058218.85848741,0.001
114
+ list[1].value.should be_within(0.001).of(1058218.85848741)
114
115
  end
115
116
 
116
117
  it "should standardize term per units with specfied per units and convert values appropriately" do
@@ -126,7 +127,7 @@ describe TermsList do
126
127
  list.first.per_unit.label.should eql 'min'
127
128
  list[1].per_unit.label.should eql 'min'
128
129
  list.first.value.should eql 240.0
129
- list[1].value.should be_close 8,0.001
130
+ list[1].value.should be_within(0.001).of(8)
130
131
  end
131
132
 
132
133
  it "should standardize term units AND per units with specfied units AND per units and convert values appropriately" do
@@ -147,7 +148,7 @@ describe TermsList do
147
148
  list[1].unit.label.should eql 'lb'
148
149
  list[1].per_unit.label.should eql 'min'
149
150
  list.first.value.should eql 240.0
150
- list[1].value.should be_close 17636.9809747902,0.001
151
+ list[1].value.should be_within(0.001).of(17636.9809747902)
151
152
  end
152
153
 
153
154
  it "should sum terms" do
@@ -368,56 +369,6 @@ describe TermsList do
368
369
  list.last.to_s.should eql'Zambia'
369
370
  end
370
371
 
371
- it "should move a term on the basis of value" do
372
- @list=@list.co2
373
- @list.first.to_s.should eql "240.0 t"
374
- @list[1].to_s.should eql "480.0 t"
375
- @list.last.to_s.should eql "600.0 t"
376
- @list.move_by(:value, 600.0,0)
377
- @list.first.to_s.should eql "600.0 t"
378
- @list[1].to_s.should eql "240.0 t"
379
- @list.last.to_s.should eql "480.0 t"
380
- end
381
-
382
- it "should move a term on the basis of unit object" do
383
- @list=@list.co2
384
- @list.first.unit 't'
385
- @list[1].unit 'lb'
386
- @list.last.unit 'kg'
387
- @list.first.to_s.should eql "240.0 t"
388
- @list[1].to_s.should eql "480.0 lb"
389
- @list.last.to_s.should eql "600.0 kg"
390
- @list.move_by(:unit, Unit.kg,1)
391
- @list.first.to_s.should eql "240.0 t"
392
- @list[1].to_s.should eql "600.0 kg"
393
- @list.last.to_s.should eql "480.0 lb"
394
- end
395
-
396
- it "should move a term on the basis of unit label" do
397
- @list=@list.co2
398
- @list.first.unit 't'
399
- @list[1].unit 'lb'
400
- @list.last.unit 'kg'
401
- @list.first.to_s.should eql "240.0 t"
402
- @list[1].to_s.should eql "480.0 lb"
403
- @list.last.to_s.should eql "600.0 kg"
404
- @list.move_by(:unit, :t,-1)
405
- @list.first.to_s.should eql "480.0 lb"
406
- @list[1].to_s.should eql "600.0 kg"
407
- @list.last.to_s.should eql "240.0 t"
408
- end
409
-
410
- it "should rotate terms" do
411
- @list=@list.co2
412
- @list.first.to_s.should eql "240.0 t"
413
- @list[1].to_s.should eql "480.0 t"
414
- @list.last.to_s.should eql "600.0 t"
415
- @list.rotate
416
- @list.first.to_s.should eql "480.0 t"
417
- @list[1].to_s.should eql "600.0 t"
418
- @list.last.to_s.should eql "240.0 t"
419
- end
420
-
421
372
  it "should return a new TermList for numeric only terms" do
422
373
  @list=@list.co2.numeric_terms.should be_a TermsList
423
374
  end
data/spec/spec_helper.rb CHANGED
@@ -1,45 +1,81 @@
1
1
  require 'rubygems'
2
- require 'spec'
3
-
2
+ require 'rspec'
4
3
  require 'amee-analytics'
5
- require 'amee-data-persistence'
6
- require 'amee/data_abstraction/ongoing_calculation_persistence_support.rb'
7
- require 'amee/data_abstraction/calculation_collection_analytics_support'
8
- require 'amee/data_abstraction/terms_list_analytics_support'
9
- require 'amee/data_abstraction/term_analytics_support'
10
4
 
11
- AMEE::DataAbstraction::OngoingCalculation.class_eval {
12
- include AMEE::DataAbstraction::PersistenceSupport
13
- }
14
- AMEE::DataAbstraction::CalculationCollection.class_eval { include AMEE::DataAbstraction::CalculationCollectionAnalyticsSupport }
15
- AMEE::DataAbstraction::TermsList.class_eval { include AMEE::DataAbstraction::TermsListAnalyticsSupport }
16
- AMEE::DataAbstraction::Term.class_eval { include AMEE::DataAbstraction::TermAnalyticsSupport }
5
+ RAILS_ROOT = '.'
17
6
 
18
- class Rails
19
- def self.root
20
- File.dirname(__FILE__) + '/fixtures'
21
- end
22
- def self.logger
23
- nil
24
- end
7
+ RSpec.configure do |config|
8
+ config.mock_with :flexmock
25
9
  end
26
10
 
27
- Spec::Runner.configure do |config|
28
- config.mock_with :flexmock
29
- config.before(:all) do
30
- CalculationSet.find("calcs")
31
- end
11
+ def initialize_calculation_set
12
+ eval "Calculations = AMEE::DataAbstraction::CalculationSet.new {
13
+ calculation{
14
+ name 'Electricity'
15
+ label :electricity
16
+ path '/business/energy/electricity/grid'
17
+ drill {
18
+ label :country
19
+ path 'country'
20
+ value 'Argentina'
21
+ }
22
+ profile {
23
+ label :usage
24
+ name 'Electricity Used'
25
+ path 'energyPerTime'
26
+ default_unit :kWh
27
+ }
28
+ output {
29
+ label :co2
30
+ name 'Carbon Dioxide'
31
+ path :default
32
+ default_unit :t
33
+ }
34
+ }
35
+ calculation{
36
+ name 'Transport'
37
+ label :transport
38
+ path '/transport/defra/vehicle'
39
+ drill {
40
+ label :type
41
+ path 'type'
42
+ name 'Type'
43
+ }
44
+ drill {
45
+ label :size
46
+ path 'size'
47
+ name 'Size'
48
+ }
49
+ drill {
50
+ label :fuel
51
+ path 'fuel'
52
+ name 'Fuel'
53
+ }
54
+ profile {
55
+ label :distance
56
+ name 'distance'
57
+ path 'distance'
58
+ default_unit :km
59
+ }
60
+ output {
61
+ label :co2
62
+ name 'Carbon Dioxide'
63
+ path :default
64
+ default_unit :t
65
+ }
66
+ }
67
+ }"
32
68
  end
33
69
 
34
70
  def add_elec_calc(act,res)
35
- calc = CalculationSet.find("calcs")[:electricity].begin_calculation
71
+ calc = Calculations[:electricity].begin_calculation
36
72
  calc['usage'].value act
37
73
  calc['co2'].value res
38
74
  return calc
39
75
  end
40
76
 
41
77
  def add_transport_calc(act,res)
42
- calc = CalculationSet.find("calcs")[:transport].begin_calculation
78
+ calc = Calculations[:transport].begin_calculation
43
79
  calc['distance'].value act
44
80
  calc['co2'].value res
45
81
  return calc
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amee-analytics
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
- - 1
8
- - 1
7
+ - 2
9
8
  - 0
10
- version: 1.1.0
9
+ - 0
10
+ version: 2.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - James Hetherington
@@ -18,133 +18,147 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2011-10-18 00:00:00 +01:00
21
+ date: 2011-09-28 00:00:00 +01:00
22
22
  default_executable:
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
25
+ prerelease: false
25
26
  name: amee-data-abstraction
27
+ type: :runtime
26
28
  version_requirements: &id001 !ruby/object:Gem::Requirement
27
29
  none: false
28
30
  requirements:
29
31
  - - ~>
30
32
  - !ruby/object:Gem::Version
31
- hash: 9
33
+ hash: 3
32
34
  segments:
33
- - 1
34
- - 3
35
- version: "1.3"
36
- prerelease: false
37
- type: :runtime
35
+ - 2
36
+ - 0
37
+ version: "2.0"
38
38
  requirement: *id001
39
39
  - !ruby/object:Gem::Dependency
40
+ prerelease: false
40
41
  name: amee-data-persistence
42
+ type: :runtime
41
43
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
44
  none: false
43
45
  requirements:
44
46
  - - ~>
45
47
  - !ruby/object:Gem::Version
46
- hash: 11
48
+ hash: 3
47
49
  segments:
48
- - 1
49
50
  - 2
50
- version: "1.2"
51
- prerelease: false
52
- type: :runtime
51
+ - 0
52
+ version: "2.0"
53
53
  requirement: *id002
54
54
  - !ruby/object:Gem::Dependency
55
- name: jeweler
55
+ prerelease: false
56
+ name: bundler
57
+ type: :development
56
58
  version_requirements: &id003 !ruby/object:Gem::Requirement
57
59
  none: false
58
60
  requirements:
59
61
  - - ~>
60
62
  - !ruby/object:Gem::Version
61
- hash: 7
63
+ hash: 23
62
64
  segments:
63
65
  - 1
64
- - 6
65
- - 4
66
- version: 1.6.4
67
- prerelease: false
68
- type: :development
66
+ - 0
67
+ - 0
68
+ version: 1.0.0
69
69
  requirement: *id003
70
70
  - !ruby/object:Gem::Dependency
71
- name: rspec
71
+ prerelease: false
72
+ name: jeweler
73
+ type: :development
72
74
  version_requirements: &id004 !ruby/object:Gem::Requirement
73
75
  none: false
74
76
  requirements:
75
- - - "="
77
+ - - ~>
76
78
  - !ruby/object:Gem::Version
77
- hash: 27
79
+ hash: 7
78
80
  segments:
79
81
  - 1
80
- - 3
81
- - 0
82
- version: 1.3.0
83
- prerelease: false
84
- type: :development
82
+ - 6
83
+ - 4
84
+ version: 1.6.4
85
85
  requirement: *id004
86
86
  - !ruby/object:Gem::Dependency
87
- name: rcov
87
+ prerelease: false
88
+ name: rails
89
+ type: :development
88
90
  version_requirements: &id005 !ruby/object:Gem::Requirement
89
91
  none: false
90
92
  requirements:
91
- - - ">="
93
+ - - ~>
92
94
  - !ruby/object:Gem::Version
93
- hash: 3
95
+ hash: 19
94
96
  segments:
97
+ - 3
95
98
  - 0
96
- version: "0"
97
- prerelease: false
98
- type: :development
99
+ - 10
100
+ version: 3.0.10
99
101
  requirement: *id005
100
102
  - !ruby/object:Gem::Dependency
101
- name: rspec_spinner
103
+ prerelease: false
104
+ name: rspec
105
+ type: :development
102
106
  version_requirements: &id006 !ruby/object:Gem::Requirement
103
107
  none: false
104
108
  requirements:
105
109
  - - "="
106
110
  - !ruby/object:Gem::Version
107
- hash: 21
111
+ hash: 23
108
112
  segments:
109
- - 1
110
- - 1
111
- - 3
112
- version: 1.1.3
113
- prerelease: false
114
- type: :development
113
+ - 2
114
+ - 6
115
+ - 0
116
+ version: 2.6.0
115
117
  requirement: *id006
116
118
  - !ruby/object:Gem::Dependency
119
+ prerelease: false
117
120
  name: flexmock
121
+ type: :development
118
122
  version_requirements: &id007 !ruby/object:Gem::Requirement
119
123
  none: false
120
124
  requirements:
121
- - - ">"
125
+ - - ~>
122
126
  - !ruby/object:Gem::Version
123
- hash: 51
127
+ hash: 59
124
128
  segments:
125
129
  - 0
126
- - 8
127
- - 6
128
- version: 0.8.6
129
- prerelease: false
130
- type: :development
130
+ - 9
131
+ - 0
132
+ version: 0.9.0
131
133
  requirement: *id007
132
134
  - !ruby/object:Gem::Dependency
133
- name: activerecord
135
+ prerelease: false
136
+ name: rcov
137
+ type: :development
134
138
  version_requirements: &id008 !ruby/object:Gem::Requirement
135
139
  none: false
136
140
  requirements:
137
- - - ~>
141
+ - - ">="
138
142
  - !ruby/object:Gem::Version
139
- hash: 9
143
+ hash: 3
140
144
  segments:
141
- - 2
142
- - 3
143
- - 5
144
- version: 2.3.5
145
+ - 0
146
+ version: "0"
147
+ requirement: *id008
148
+ - !ruby/object:Gem::Dependency
145
149
  prerelease: false
150
+ name: rdoc
146
151
  type: :development
147
- requirement: *id008
152
+ version_requirements: &id009 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ requirement: *id009
148
162
  description: Part of the AMEE AppKit, this gem provides the ability to do mathmatical operations over a set of calculations
149
163
  email: help@amee.com
150
164
  executables: []
@@ -158,22 +172,20 @@ files:
158
172
  - .rvmrc
159
173
  - CHANGELOG.txt
160
174
  - Gemfile
175
+ - Gemfile.lock
161
176
  - LICENSE.txt
162
177
  - README.txt
163
178
  - Rakefile
164
179
  - VERSION
165
180
  - amee-analytics.gemspec
166
- - init.rb
167
181
  - lib/amee-analytics.rb
168
- - lib/amee/data_abstraction/calculation_collection_analytics_support.rb
169
- - lib/amee/data_abstraction/result.rb
170
- - lib/amee/data_abstraction/term_analytics_support.rb
171
- - lib/amee/data_abstraction/terms_list_analytics_support.rb
172
- - rails/init.rb
182
+ - lib/amee/analytics/calculation_collection_analytics_support.rb
183
+ - lib/amee/analytics/result.rb
184
+ - lib/amee/analytics/term_analytics_support.rb
185
+ - lib/amee/analytics/terms_list_analytics_support.rb
173
186
  - spec/amee/analytics/calculation_collection_spec.rb
174
187
  - spec/amee/analytics/term_spec.rb
175
188
  - spec/amee/analytics/terms_list_spec.rb
176
- - spec/fixtures/config/calculations/calcs.rb
177
189
  - spec/spec.opts
178
190
  - spec/spec_helper.rb
179
191
  has_rdoc: true
@@ -206,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
218
  requirements: []
207
219
 
208
220
  rubyforge_project:
209
- rubygems_version: 1.5.3
221
+ rubygems_version: 1.4.2
210
222
  signing_key:
211
223
  specification_version: 3
212
224
  summary: Analytics module for use with AMEE AppKit
data/init.rb DELETED
@@ -1,4 +0,0 @@
1
- # Copyright (C) 2011 AMEE UK Ltd. - http://www.amee.com
2
- # Released as Open Source Software under the BSD 3-Clause license. See LICENSE.txt for details.
3
-
4
- require File.dirname(__FILE__) + "/rails/init"
data/rails/init.rb DELETED
@@ -1,9 +0,0 @@
1
-
2
- # Copyright (C) 2011 AMEE UK Ltd. - http://www.amee.com
3
- # Released as Open Source Software under the BSD 3-Clause license. See LICENSE.txt for details.
4
-
5
- require 'amee-data-abstraction'
6
-
7
- ::AMEE::DataAbstraction::CalculationCollection.class_eval { include AMEE::DataAbstraction::CalculationCollectionAnalyticsSupport }
8
- ::AMEE::DataAbstraction::TermsList.class_eval { include AMEE::DataAbstraction::TermsListAnalyticsSupport }
9
- ::AMEE::DataAbstraction::Term.class_eval { include AMEE::DataAbstraction::TermAnalyticsSupport }
@@ -1,55 +0,0 @@
1
- calculation{
2
- name 'Electricity'
3
- label :electricity
4
- path '/business/energy/electricity/grid'
5
- drill {
6
- label :country
7
- path 'country'
8
- value 'Argentina'
9
- }
10
- profile {
11
- label :usage
12
- name 'Electricity Used'
13
- path 'energyPerTime'
14
- default_unit :kWh
15
- }
16
- output {
17
- label :co2
18
- name 'Carbon Dioxide'
19
- path 'default'
20
- default_unit :t
21
- }
22
- }
23
-
24
- calculation{
25
- name 'Transport'
26
- label :transport
27
- path '/transport/defra/vehicle'
28
- drill {
29
- label :type
30
- path 'type'
31
- name 'Type'
32
- }
33
- drill {
34
- label :size
35
- path 'size'
36
- name 'Size'
37
- }
38
- drill {
39
- label :fuel
40
- path 'fuel'
41
- name 'Fuel'
42
- }
43
- profile {
44
- label :distance
45
- name 'distance'
46
- path 'distance'
47
- default_unit :km
48
- }
49
- output {
50
- label :co2
51
- name 'Carbon Dioxide'
52
- path 'default'
53
- default_unit :t
54
- }
55
- }