ar_merge 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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'