antonjenkins-model_sync 0.1.1 → 0.1.2

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.
data/README.rdoc CHANGED
@@ -6,7 +6,9 @@ model_sync is a simple gem for pushing changes to one of your rails models to an
6
6
  model_sync :sync_to => :student,
7
7
  :relationship => { :student_id => :s_stno },
8
8
  :mappings => { :forename => :s_forename },
9
- :mapping_block => Proc.new { |master, slave| slave.update_attribute(:s_sex, master.gender ? master.gender.code : nil) }
9
+ :mapping_block => Proc.new do |master, slave|
10
+ slave.update_attribute(:s_sex, master.gender ? master.gender.code : nil)
11
+ end
10
12
  end
11
13
 
12
14
  Assuming we have a Student model, the above code will add an after_save callback to the User model which will push changes to the forename value into the s_forename value of Student. The correct Student instance is found using the :relationship hash - student_id in User must equal s_stno in Student.
@@ -23,6 +25,16 @@ Once a user books a course and becomes a student as well we've got a user and a
23
25
 
24
26
  The model_sync gem will do all the syncing for me in a totally transparent way.
25
27
 
28
+ == Installation
29
+
30
+ If you've not already added github as a source for gem then do so:
31
+
32
+ gem sources -a http://gems.github.com
33
+
34
+ Now you can install the gem:
35
+
36
+ sudo gem install antonjenkins-model_sync
37
+
26
38
  == Limitations
27
39
 
28
40
  Currently the changes are pushed over with an after_save hook using update_attribute on the :sync_to model. This bypasses validations and any failures on update_attribute are currently not handled.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('model_sync', '0.1.1') do |p|
5
+ Echoe.new('model_sync', '0.1.2') do |p|
6
6
  p.description = "Sync changes to an ActiveRecord model to another model"
7
7
  p.url = "http://github.com/antonjenkins/model_sync"
8
8
  p.author = "Anton Jenkins"
data/lib/model_sync.rb CHANGED
@@ -24,7 +24,7 @@ module ModelSync
24
24
  def sync_changes
25
25
  # If we can find a slave instance...
26
26
  if slave_instance = find_slave_instance
27
- # ... then update all the attributes which we've mapped
27
+ # ...then update all the attributes which we've mapped
28
28
  self.class.mappings.each do |source, dest|
29
29
  slave_instance.update_attribute(dest, self.read_attribute(source))
30
30
  end
@@ -35,8 +35,11 @@ module ModelSync
35
35
 
36
36
  private
37
37
  def find_slave_instance
38
+ # return nil if we don't have a value for the foreign key
39
+ return nil unless foreign_key_value = self.read_attribute(self.class.relationship.keys.first)
40
+ # find the instance of the slave class using the relationship hash
38
41
  self.class.slave_model_class.find(:first,
39
- :conditions => "#{self.class.relationship.values.first.to_s} = #{self.read_attribute(self.class.relationship.keys.first)}")
42
+ :conditions => "#{self.class.relationship.values.first.to_s} = #{foreign_key_value}")
40
43
  end
41
44
  end
42
45
  end
data/model_sync.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{model_sync}
5
- s.version = "0.1.1"
5
+ s.version = "0.1.2"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Anton Jenkins"]
9
- s.date = %q{2009-07-02}
9
+ s.date = %q{2009-07-06}
10
10
  s.description = %q{Sync changes to an ActiveRecord model to another model}
11
11
  s.email = %q{info@pixellatedvisions.com}
12
12
  s.extra_rdoc_files = ["lib/model_sync.rb", "README.rdoc"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: antonjenkins-model_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Jenkins
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-02 00:00:00 -07:00
12
+ date: 2009-07-06 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15