amee_rails_layer 0.5.0 → 0.6.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.
@@ -19,8 +19,7 @@ these would be:
19
19
  * units (string) - the units the amount field is in
20
20
  * amount (float) - the amount of the thing being recorded, eg 6 (kg), 9 (litres)
21
21
  with either:
22
- * amee_profile (string) - the AMEE profile identifier under which all data is stored
23
- * or profile_id (integer) - the record id of the model holding the amee_profile (and of course that model to have an amee_profile field)
22
+ * amee_profile (string) - the AMEE profile identifier under which all data is stored [optional]
24
23
  Extra fields may also be required depending on the options used. See AmeeCarbonStore for full details
25
24
 
26
25
  == Usage
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.6.0
@@ -1,15 +1,15 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{amee_rails_layer}
8
- s.version = "0.5.0"
8
+ s.version = "0.6.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["George Palmer", "James Smith"]
12
- s.date = %q{2010-10-18}
12
+ s.date = %q{2011-03-07}
13
13
  s.description = %q{An abstraction layer for building applications around the AMEE API}
14
14
  s.email = %q{help@amee.com}
15
15
  s.extra_rdoc_files = [
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
35
35
  s.homepage = %q{http://github.com/AMEE/amee_rails_layer}
36
36
  s.rdoc_options = ["--charset=UTF-8"]
37
37
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.6}
38
+ s.rubygems_version = %q{1.3.7}
39
39
  s.summary = %q{An abstraction layer for building applications around the AMEE API}
40
40
  s.test_files = [
41
41
  "test/helper.rb",
@@ -46,7 +46,7 @@ Gem::Specification.new do |s|
46
46
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
47
47
  s.specification_version = 3
48
48
 
49
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
49
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
50
  s.add_development_dependency(%q<amee-ruby>, [">= 0"])
51
51
  else
52
52
  s.add_dependency(%q<amee-ruby>, [">= 0"])
@@ -10,11 +10,8 @@
10
10
  # * units (string) - the units the amount field is in
11
11
  # * amount (float) - the amount of the thing being recorded, eg 6 (kg), 9 (litres)
12
12
  # * amee_profile (string) - optional. The amee profile identifier under which all the data
13
- # is stored. Although this field is optional, either this or profile_id is required
14
- # * profile_id (integer) - optional. Used when the model belongs_to a parent that has the
15
- # amee_profile identifier. Name is changed according to the :profile option passed into
16
- # the has_carbon_data_stored_in_amee. Although this field is optional, either this or
17
- # amee_profile is required.
13
+ # is stored. Although this field is optional, if it is not present then a Proc must be
14
+ # passed to the has_carbon_data_stored_in_amee decleration evaluating to an amee profile
18
15
  # * repetitions (integer) - optional. Used when the model object is composed of several
19
16
  # repetitions - for example 6 x 3 miles would make the repetitions 6
20
17
  # * start_date (date) - optional. Used in combination with the has_date_range option on
@@ -28,29 +25,27 @@ module AmeeCarbonStore
28
25
 
29
26
  module ClassMethods
30
27
  # Class method that configures a class for storing carbon data in amee. Options are as follows:
31
- # * profile - if set will use this model (through a belongs_to relationship) to access the amee
32
- # profile to store the data under rather than the model itself. Pass the model to use as symbol
33
- # - eg :user or :project. Introduces the need for the profile_id field as described in header
34
- # and the referenced model must store the amee profile key under the field amee_profile (as
35
- # would be provided by the has_amee_profile decleration)
28
+ # * profile - if set will use this Proc to access the amee profile used to store the data under
29
+ # rather than the model itself. Pass a Proc that evaluates to the model containing the amee
30
+ # profile - eg Proc.new{|model| model.method}, Proc.new{|model| model.parent.method}. The
31
+ # referenced model must store the amee profile key under the field amee_profile (as would be
32
+ # provided by the has_amee_profile decleration)
36
33
  # * nameless - if set then automatically assign the name field so the user doesn't have to
37
34
  # (still requires the name field in the database as a name must be set to store in amee)
38
35
  # * has_date_range - will check for the presence of a start_date and end_date on the object
39
- # and pass that through to AMEE to store with the data. Will also check the name is unique
40
- # given the dates unless used in conjunction with :nameless option (the two together are
41
- # therefore not recommended as it will be easy to create overlapping data). Requires the
42
- # start_date and end_date database fields as described in header.
36
+ # and pass that through to AMEE to store with the data. Requires the start_date and end_date
37
+ # database fields as described in header.
43
38
  # * repetitions - allows repetitions of the data at a database level where AMEE doesn't support
44
39
  # it natively. For example multiple journeys can be setup with this option. The value stored
45
40
  # in AMEE will be the total for all journeys. Requires the repetitions database field as
46
41
  # described in header.
47
- # * singular_types - if using a structure where multiple types are available for a model and
48
- # the type is stored in the field "#{model}_type", this option enforces that only one instance
49
- # of each type may exist in the database (for a given project if using a project structure)
50
42
  def has_carbon_data_stored_in_amee(options = {})
51
-
52
43
  if options[:profile]
53
- belongs_to options[:profile]
44
+ unless options[:profile].is_a?(Proc)
45
+ warn '[DEPRECIATION] AmeeRailsLayer will no longer automatically provide the profile association. The relationship to the amee profile will also need to be defined as a Proc.'
46
+ belongs_to options[:profile]
47
+ options[:profile] = Proc.new{|model| model.send(options[:profile])}
48
+ end
54
49
  else
55
50
  has_amee_profile
56
51
  end
@@ -59,18 +54,10 @@ module AmeeCarbonStore
59
54
  validate_on_create :units_are_valid
60
55
  validates_presence_of :start_date, :end_date if options[:has_date_range]
61
56
  unless options[:nameless]
62
- if options[:has_date_range]
63
- validate :name_is_unique_given_date_range
64
- else
65
- uniqueness_options = options[:profile] ? {:scope => "#{options[:profile]}_id".to_sym} : {}
66
- validates_uniqueness_of :name, uniqueness_options
67
- end
68
- validates_format_of :name, :with => /\A[\w -]+\Z/,
69
- :message => "must be letters, numbers, spaces or underscores only"
70
57
  validates_length_of :name, :maximum => 250
71
58
  end
72
59
  if options[:singular_types]
73
- validate_on_create :maximum_one_instance_for_each_type
60
+ warn '[DEPRECIATION] singular_types option is no longer supported.'
74
61
  end
75
62
  if options[:repetitions]
76
63
  validates_numericality_of :repetitions, :only_integer => true
@@ -80,7 +67,7 @@ module AmeeCarbonStore
80
67
  before_update :update_amee
81
68
  after_destroy :delete_from_amee
82
69
 
83
- write_inheritable_attribute(:amee_profile_class, options[:profile]) if options[:profile]
70
+ write_inheritable_attribute(:amee_profile_proc, options[:profile]) if options[:profile]
84
71
  write_inheritable_attribute(:repetitions, true) if options[:repetitions]
85
72
  write_inheritable_attribute(:nameless_entries, true) if options[:nameless]
86
73
  write_inheritable_attribute(:has_date_range, true) if options[:has_date_range]
@@ -145,26 +132,6 @@ module AmeeCarbonStore
145
132
  def units_are_valid
146
133
  errors.add("units", "are not valid") if amount_symbol.nil?
147
134
  end
148
-
149
- def name_is_unique_given_date_range
150
- conditions = amee_profile_class_scoping.merge(:name => self.name)
151
- self.class.find(:all, :conditions => conditions).each do |record|
152
- next if record.id == self.id
153
- unless (self.start_date < record.start_date && self.end_date <= record.start_date) ||
154
- (self.start_date >= record.end_date && self.end_date > record.end_date)
155
- errors.add_to_base("Entry already added covering dates within that range")
156
- return false
157
- end
158
- end
159
- end
160
-
161
- def maximum_one_instance_for_each_type
162
- model_type = "#{self.class.name.underscore}_type".to_sym
163
- conditions = amee_profile_class_scoping.merge(model_type => send(model_type))
164
- if self.class.send(:find, :first, :conditions => conditions)
165
- errors.add_to_base "Only one #{amee_category.name} entry allowed"
166
- end
167
- end
168
135
 
169
136
  def add_to_amee
170
137
  profile = create_amee_profile
@@ -198,18 +165,13 @@ module AmeeCarbonStore
198
165
 
199
166
  # TODO can be renamed to amee_connection once ruby-amee rails lib merged in
200
167
  def connection_to_amee
201
- method = self.class.read_inheritable_attribute(:amee_profile_class)
202
- method ? send(method).amee_connection : amee_connection
168
+ profile_proc = self.class.read_inheritable_attribute(:amee_profile_proc)
169
+ profile_proc ? profile_proc.call(self).amee_connection : amee_connection
203
170
  end
204
171
 
205
172
  def amee_profile_path
206
- method = self.class.read_inheritable_attribute(:amee_profile_class)
207
- method ? "/profiles/#{send(method).amee_profile}" : "/profiles/#{amee_profile}"
208
- end
209
-
210
- def amee_profile_class_scoping
211
- method = self.class.read_inheritable_attribute(:amee_profile_class)
212
- method ? {"#{method}_id".to_sym => send(method).id} : {}
173
+ profile_proc = self.class.read_inheritable_attribute(:amee_profile_proc)
174
+ profile_proc ? "/profiles/#{profile_proc.call(self).amee_profile}" : "/profiles/#{amee_profile}"
213
175
  end
214
176
 
215
177
  def amee_profile_item
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amee_rails_layer
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 7
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 5
8
+ - 6
8
9
  - 0
9
- version: 0.5.0
10
+ version: 0.6.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - George Palmer
@@ -15,16 +16,18 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-10-18 00:00:00 +01:00
19
+ date: 2011-03-07 00:00:00 +00:00
19
20
  default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: amee-ruby
23
24
  prerelease: false
24
25
  requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
25
27
  requirements:
26
28
  - - ">="
27
29
  - !ruby/object:Gem::Version
30
+ hash: 3
28
31
  segments:
29
32
  - 0
30
33
  version: "0"
@@ -64,23 +67,27 @@ rdoc_options:
64
67
  require_paths:
65
68
  - lib
66
69
  required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
67
71
  requirements:
68
72
  - - ">="
69
73
  - !ruby/object:Gem::Version
74
+ hash: 3
70
75
  segments:
71
76
  - 0
72
77
  version: "0"
73
78
  required_rubygems_version: !ruby/object:Gem::Requirement
79
+ none: false
74
80
  requirements:
75
81
  - - ">="
76
82
  - !ruby/object:Gem::Version
83
+ hash: 3
77
84
  segments:
78
85
  - 0
79
86
  version: "0"
80
87
  requirements: []
81
88
 
82
89
  rubyforge_project:
83
- rubygems_version: 1.3.6
90
+ rubygems_version: 1.3.7
84
91
  signing_key:
85
92
  specification_version: 3
86
93
  summary: An abstraction layer for building applications around the AMEE API