ar_merge 0.2.0 → 0.3.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.
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.3
4
+ - 2.0
5
+ gemfile:
6
+ - gemfiles/activerecord_2.3.gemfile
7
+ - gemfiles/activerecord_3.2.gemfile
8
+ - gemfiles/activerecord_4.0.gemfile
9
+ matrix:
10
+ exclude:
11
+ - rvm: 2.0
12
+ gemfile: gemfiles/activerecord-2.3.gemfile
13
+ script: "rake spec"
data/Appraisals ADDED
@@ -0,0 +1,12 @@
1
+ appraise "activerecord_2.3" do
2
+ gem 'activerecord', '~> 2.3.18', :require => "active_record"
3
+ end
4
+
5
+ appraise "activerecord_3.2" do
6
+ gem 'activerecord', '~> 3.2.1', :require => "active_record"
7
+ end
8
+
9
+ appraise "activerecord_4.0" do
10
+ gem 'activerecord', '4.0.0.rc1', :require => "active_record"
11
+ end
12
+
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'rake'
5
5
  gem 'sqlite3'
6
6
  gem 'rspec', '~>2'
7
+ gem 'appraisal'
8
+ gem 'bump'
data/Gemfile.lock CHANGED
@@ -1,28 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ar_merge (0.2.0)
4
+ ar_merge (0.3.0)
5
5
  activerecord
6
6
 
7
7
  GEM
8
- remote: http://rubygems.org/
8
+ remote: https://rubygems.org/
9
9
  specs:
10
- activemodel (3.2.2)
11
- activesupport (= 3.2.2)
10
+ activemodel (3.2.13)
11
+ activesupport (= 3.2.13)
12
12
  builder (~> 3.0.0)
13
- activerecord (3.2.2)
14
- activemodel (= 3.2.2)
15
- activesupport (= 3.2.2)
13
+ activerecord (3.2.13)
14
+ activemodel (= 3.2.13)
15
+ activesupport (= 3.2.13)
16
16
  arel (~> 3.0.2)
17
17
  tzinfo (~> 0.3.29)
18
- activesupport (3.2.2)
19
- i18n (~> 0.6)
18
+ activesupport (3.2.13)
19
+ i18n (= 0.6.1)
20
20
  multi_json (~> 1.0)
21
+ appraisal (0.5.2)
22
+ bundler
23
+ rake
21
24
  arel (3.0.2)
22
- builder (3.0.0)
25
+ builder (3.0.4)
26
+ bump (0.4.1)
23
27
  diff-lcs (1.1.3)
24
- i18n (0.6.0)
25
- multi_json (1.3.4)
28
+ i18n (0.6.1)
29
+ multi_json (1.7.3)
26
30
  rake (0.9.2.2)
27
31
  rspec (2.9.0)
28
32
  rspec-core (~> 2.9.0)
@@ -33,13 +37,15 @@ GEM
33
37
  diff-lcs (~> 1.1.3)
34
38
  rspec-mocks (2.9.0)
35
39
  sqlite3 (1.3.6)
36
- tzinfo (0.3.33)
40
+ tzinfo (0.3.37)
37
41
 
38
42
  PLATFORMS
39
43
  ruby
40
44
 
41
45
  DEPENDENCIES
46
+ appraisal
42
47
  ar_merge!
48
+ bump
43
49
  rake
44
50
  rspec (~> 2)
45
51
  sqlite3
data/Rakefile CHANGED
@@ -1,22 +1,12 @@
1
+ require 'bundler/setup'
1
2
  require 'bundler/gem_tasks'
3
+ require 'appraisal'
4
+ require 'bump/tasks'
2
5
 
3
- task :default do
6
+ task :spec do
4
7
  sh "rspec spec/"
5
8
  end
6
9
 
7
- # extracted from https://github.com/grosser/project_template
8
- rule /^version:bump:.*/ do |t|
9
- sh "git status | grep 'nothing to commit'" # ensure we are not dirty
10
- index = ['major', 'minor','patch'].index(t.name.split(':').last)
11
- file = 'lib/ar_merge/version.rb'
12
-
13
- version_file = File.read(file)
14
- old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
15
- version_parts[index] = version_parts[index].to_i + 1
16
- version_parts[2] = 0 if index < 2 # remove patch for minor
17
- version_parts[1] = 0 if index < 1 # remove minor for major
18
- new_version = version_parts * '.'
19
- File.open(file,'w'){|f| f.write(version_file.sub(old_version, new_version)) }
20
-
21
- sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'"
10
+ task :default do
11
+ sh "bundle exec rake appraisal:install && bundle exec rake appraisal spec"
22
12
  end
data/Readme.md CHANGED
@@ -4,40 +4,46 @@
4
4
  - Keeps counters valid
5
5
  - Removes merged record
6
6
 
7
-
8
7
  INSTALL
9
8
  =======
10
9
 
11
- Rails plugin
12
-
13
- rails plugin install git://github.com/grosser/ar_merge.git
14
-
15
- OR Gem
16
-
17
- gem install ar_merge
10
+ ```Bash
11
+ gem install ar_merge
12
+ ```
18
13
 
19
14
 
20
15
  USAGE
21
16
  =====
22
17
  Merge from outside the model:
23
18
 
24
- user.merge!(other,:attributes=>user.attributes.keys,:associations=>%w[movies friends])`
19
+ ```Ruby
20
+ user.merge!(other,:attributes=>user.attributes.keys,:associations=>%w[movies friends])`
21
+ ```
25
22
 
26
23
  Merge from inside the model
27
24
 
28
- User < ActiveRecord::Base
29
- def merge!(other)
30
- super(other,:attributes=>%w[email website])
31
- end
32
- end
25
+ ```Ruby
26
+ User < ActiveRecord::Base
27
+ def merge!(other)
28
+ super(other,:attributes=>%w[email website])
29
+ end
30
+ end
31
+ ```
33
32
 
34
33
  Merge duplicates
35
34
 
36
- #merge all new users, that have the same email
37
- User.merge_duplicates!(User.find_all_by_status('new')) , :compare=>:email)
35
+ ```Ruby
36
+ #merge all new users, that have the same email
37
+ User.merge_duplicates!(User.find_all_by_status('new')) , :compare=>:email)
38
+ ```
39
+
40
+ TODO
41
+ ====
42
+ - 1 counter test fails on rails 4 (search for pending)
38
43
 
39
44
  AUTHOR
40
45
  ======
41
46
  [Michael Grosser](grosser.it)</br>
42
47
  michael@grosser.it</br>
48
+ [![Build Status](https://travis-ci.org/grosser/ar_merge.png)](https://travis-ci.org/grosser/ar_merge)<br/>
43
49
  License: MIT
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "sqlite3"
7
+ gem "rspec", "~>2"
8
+ gem "appraisal"
9
+ gem "bump"
10
+ gem "activerecord", "~> 2.3.18", :require=>"active_record"
11
+
12
+ gemspec :path=>"../"
@@ -0,0 +1,39 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/ar_merge
3
+ specs:
4
+ ar_merge (0.2.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activerecord (2.3.18)
11
+ activesupport (= 2.3.18)
12
+ activesupport (2.3.18)
13
+ appraisal (0.5.2)
14
+ bundler
15
+ rake
16
+ bump (0.4.1)
17
+ diff-lcs (1.2.4)
18
+ rake (10.0.4)
19
+ rspec (2.13.0)
20
+ rspec-core (~> 2.13.0)
21
+ rspec-expectations (~> 2.13.0)
22
+ rspec-mocks (~> 2.13.0)
23
+ rspec-core (2.13.1)
24
+ rspec-expectations (2.13.0)
25
+ diff-lcs (>= 1.1.3, < 2.0)
26
+ rspec-mocks (2.13.1)
27
+ sqlite3 (1.3.7)
28
+
29
+ PLATFORMS
30
+ ruby
31
+
32
+ DEPENDENCIES
33
+ activerecord (~> 2.3.18)
34
+ appraisal
35
+ ar_merge!
36
+ bump
37
+ rake
38
+ rspec (~> 2)
39
+ sqlite3
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "sqlite3"
7
+ gem "rspec", "~>2"
8
+ gem "appraisal"
9
+ gem "bump"
10
+ gem "activerecord", "~> 3.2.1", :require=>"active_record"
11
+
12
+ gemspec :path=>"../"
@@ -0,0 +1,52 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/ar_merge
3
+ specs:
4
+ ar_merge (0.2.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (3.2.13)
11
+ activesupport (= 3.2.13)
12
+ builder (~> 3.0.0)
13
+ activerecord (3.2.13)
14
+ activemodel (= 3.2.13)
15
+ activesupport (= 3.2.13)
16
+ arel (~> 3.0.2)
17
+ tzinfo (~> 0.3.29)
18
+ activesupport (3.2.13)
19
+ i18n (= 0.6.1)
20
+ multi_json (~> 1.0)
21
+ appraisal (0.5.2)
22
+ bundler
23
+ rake
24
+ arel (3.0.2)
25
+ builder (3.0.4)
26
+ bump (0.4.1)
27
+ diff-lcs (1.2.4)
28
+ i18n (0.6.1)
29
+ multi_json (1.7.3)
30
+ rake (10.0.4)
31
+ rspec (2.13.0)
32
+ rspec-core (~> 2.13.0)
33
+ rspec-expectations (~> 2.13.0)
34
+ rspec-mocks (~> 2.13.0)
35
+ rspec-core (2.13.1)
36
+ rspec-expectations (2.13.0)
37
+ diff-lcs (>= 1.1.3, < 2.0)
38
+ rspec-mocks (2.13.1)
39
+ sqlite3 (1.3.7)
40
+ tzinfo (0.3.37)
41
+
42
+ PLATFORMS
43
+ ruby
44
+
45
+ DEPENDENCIES
46
+ activerecord (~> 3.2.1)
47
+ appraisal
48
+ ar_merge!
49
+ bump
50
+ rake
51
+ rspec (~> 2)
52
+ sqlite3
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rake"
6
+ gem "sqlite3"
7
+ gem "rspec", "~>2"
8
+ gem "appraisal"
9
+ gem "bump"
10
+ gem "activerecord", "4.0.0.rc1", :require=>"active_record"
11
+
12
+ gemspec :path=>"../"
@@ -0,0 +1,60 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/ar_merge
3
+ specs:
4
+ ar_merge (0.2.0)
5
+ activerecord
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (4.0.0.rc1)
11
+ activesupport (= 4.0.0.rc1)
12
+ builder (~> 3.1.0)
13
+ activerecord (4.0.0.rc1)
14
+ activemodel (= 4.0.0.rc1)
15
+ activerecord-deprecated_finders (~> 1.0.2)
16
+ activesupport (= 4.0.0.rc1)
17
+ arel (~> 4.0.0)
18
+ activerecord-deprecated_finders (1.0.2)
19
+ activesupport (4.0.0.rc1)
20
+ i18n (~> 0.6, >= 0.6.4)
21
+ minitest (~> 4.2)
22
+ multi_json (~> 1.3)
23
+ thread_safe (~> 0.1)
24
+ tzinfo (~> 0.3.37)
25
+ appraisal (0.5.2)
26
+ bundler
27
+ rake
28
+ arel (4.0.0)
29
+ atomic (1.1.9)
30
+ builder (3.1.4)
31
+ bump (0.4.1)
32
+ diff-lcs (1.2.4)
33
+ i18n (0.6.4)
34
+ minitest (4.7.4)
35
+ multi_json (1.7.3)
36
+ rake (10.0.4)
37
+ rspec (2.13.0)
38
+ rspec-core (~> 2.13.0)
39
+ rspec-expectations (~> 2.13.0)
40
+ rspec-mocks (~> 2.13.0)
41
+ rspec-core (2.13.1)
42
+ rspec-expectations (2.13.0)
43
+ diff-lcs (>= 1.1.3, < 2.0)
44
+ rspec-mocks (2.13.1)
45
+ sqlite3 (1.3.7)
46
+ thread_safe (0.1.0)
47
+ atomic
48
+ tzinfo (0.3.37)
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ activerecord (= 4.0.0.rc1)
55
+ appraisal
56
+ ar_merge!
57
+ bump
58
+ rake
59
+ rspec (~> 2)
60
+ sqlite3
data/lib/ar_merge.rb CHANGED
@@ -2,11 +2,6 @@ require 'ar_merge/version'
2
2
  require 'active_record'
3
3
 
4
4
  module ARMerge
5
- def self.included(base)
6
- base.extend ClassMethods
7
- base.send(:include, InstanceMethods)
8
- end
9
-
10
5
  module InstanceMethods
11
6
  def merge!(other, options={})
12
7
  raise "cannot merge wit a new record" if other.new_record?
@@ -17,7 +12,7 @@ module ARMerge
17
12
  other.send(association_name).each do |associated|
18
13
  send(association_name) << associated
19
14
  end
20
-
15
+
21
16
  #update counters, this is very basic/hacky/not secure for customized counters...
22
17
  counter = "#{association_name}_count"
23
18
  next unless other.respond_to?(counter) and respond_to?("#{counter}=")
@@ -54,4 +49,5 @@ module ARMerge
54
49
  end
55
50
  end
56
51
 
57
- ActiveRecord::Base.send(:include, ARMerge)
52
+ ActiveRecord::Base.send(:include, ARMerge::InstanceMethods)
53
+ ActiveRecord::Base.send(:extend, ARMerge::ClassMethods)
@@ -1,3 +1,3 @@
1
1
  module ARMerge
2
- VERSION = Version = '0.2.0'
2
+ VERSION = Version = '0.3.0'
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe ARMerge do
4
- describe :merge! do
4
+ describe "#merge!" do
5
5
  before do
6
6
  @user = User.create!(:name=>'x')
7
7
  @u2 = User.create!(:name=>'y')
@@ -50,6 +50,7 @@ describe ARMerge do
50
50
  end
51
51
 
52
52
  it "keeps counters in sync" do
53
+ pending if ActiveRecord::VERSION::MAJOR == 4
53
54
  user, merged_user = CountingUser.create!, CountingUser.create!
54
55
  user.movies_count.should == 0
55
56
  merged_user.movies << Movie.new
@@ -70,7 +71,7 @@ describe ARMerge do
70
71
  end
71
72
  end
72
73
 
73
- describe :merge_duplicates! do
74
+ describe "#merge_duplicates!" do
74
75
  before do
75
76
  @u1 = User.create!(:name=>'a')
76
77
  @u2 = User.create!(:name=>'b')
@@ -99,4 +100,11 @@ describe ARMerge do
99
100
  it "has a VERSION" do
100
101
  ARMerge::VERSION.should =~ /^\d+\.\d+\.\d+$/
101
102
  end
103
+
104
+ it "does not mess up activerecord version" do
105
+ ARMerge::VERSION.should_not == ActiveRecord::VERSION
106
+ defined?(ActiveRecord::Version).should == nil
107
+ defined?(ActiveRecord::Base::Version).should == nil
108
+ defined?(ActiveRecord::Base::VERSION).should == nil
109
+ end
102
110
  end
@@ -1,10 +1,9 @@
1
1
  # connect
2
- ActiveRecord::Base.configurations = {"test" => {
2
+ ActiveRecord::Schema.verbose = false
3
+ ActiveRecord::Base.establish_connection(
3
4
  :adapter => "sqlite3",
4
- :database => ":memory:",
5
- }.with_indifferent_access}
6
-
7
- ActiveRecord::Base.establish_connection(:test)
5
+ :database => ":memory:"
6
+ )
8
7
 
9
8
  # create tables
10
9
  ActiveRecord::Schema.define(:version => 1) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_merge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-14 00:00:00.000000000 Z
12
+ date: 2013-05-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -33,12 +33,19 @@ executables: []
33
33
  extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
+ - .travis.yml
37
+ - Appraisals
36
38
  - Gemfile
37
39
  - Gemfile.lock
38
40
  - Rakefile
39
41
  - Readme.md
40
42
  - ar_merge.gemspec
41
- - init.rb
43
+ - gemfiles/activerecord_2.3.gemfile
44
+ - gemfiles/activerecord_2.3.gemfile.lock
45
+ - gemfiles/activerecord_3.2.gemfile
46
+ - gemfiles/activerecord_3.2.gemfile.lock
47
+ - gemfiles/activerecord_4.0.gemfile
48
+ - gemfiles/activerecord_4.0.gemfile.lock
42
49
  - lib/ar_merge.rb
43
50
  - lib/ar_merge/version.rb
44
51
  - spec/ar_merge_spec.rb
@@ -59,7 +66,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
59
66
  version: '0'
60
67
  segments:
61
68
  - 0
62
- hash: 3854198524710893758
69
+ hash: -2239147174191176291
63
70
  required_rubygems_version: !ruby/object:Gem::Requirement
64
71
  none: false
65
72
  requirements:
@@ -68,10 +75,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
75
  version: '0'
69
76
  segments:
70
77
  - 0
71
- hash: 3854198524710893758
78
+ hash: -2239147174191176291
72
79
  requirements: []
73
80
  rubyforge_project:
74
- rubygems_version: 1.8.24
81
+ rubygems_version: 1.8.25
75
82
  signing_key:
76
83
  specification_version: 3
77
84
  summary: Merge 2 ActiveRecords, preserving associations and attributes
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'ar_merge'