active_git 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +19 -18
  2. data/.travis.yml +7 -0
  3. data/Gemfile +4 -4
  4. data/LICENSE +21 -21
  5. data/README.md +31 -29
  6. data/Rakefile +2 -2
  7. data/active_git.gemspec +25 -25
  8. data/lib/active_git.rb +47 -46
  9. data/lib/active_git/active_record_extension.rb +34 -49
  10. data/lib/active_git/commands.rb +146 -146
  11. data/lib/active_git/configuration.rb +28 -28
  12. data/lib/active_git/events/db_create.rb +8 -8
  13. data/lib/active_git/events/db_delete.rb +12 -12
  14. data/lib/active_git/events/db_delete_all.rb +15 -15
  15. data/lib/active_git/events/db_event.rb +28 -27
  16. data/lib/active_git/events/db_update.rb +14 -14
  17. data/lib/active_git/events/file_delete.rb +11 -11
  18. data/lib/active_git/events/file_event.rb +31 -31
  19. data/lib/active_git/events/file_save.rb +13 -13
  20. data/lib/active_git/events/folder_remove.rb +15 -15
  21. data/lib/active_git/inflector.rb +21 -0
  22. data/lib/active_git/synchronization_error.rb +32 -32
  23. data/lib/active_git/synchronizer.rb +53 -53
  24. data/lib/active_git/version.rb +3 -3
  25. data/spec/active_record_extension_spec.rb +60 -50
  26. data/spec/commands_spec.rb +245 -245
  27. data/spec/inflector_spec.rb +37 -0
  28. data/spec/migrations/20121004135939_create_countries.rb +9 -9
  29. data/spec/migrations/20121004135940_create_languages.rb +9 -9
  30. data/spec/migrations/20121030163114_create_brands.rb +9 -9
  31. data/spec/migrations/20130315192821_create_customers.rb +9 -0
  32. data/spec/spec_helper.rb +35 -23
  33. data/spec/support/helpers/file_helper.rb +47 -43
  34. data/spec/support/models/brand.rb +2 -4
  35. data/spec/support/models/country.rb +1 -2
  36. data/spec/support/models/customer.rb +6 -0
  37. data/spec/support/models/language.rb +2 -4
  38. data/spec/synchronization_spec.rb +100 -100
  39. metadata +56 -17
@@ -1,54 +1,54 @@
1
- module ActiveGit
2
- class Synchronizer
3
-
4
- def self.synchronize(*events)
5
- batch = self.new
6
-
7
- Array(events).flatten.each do |event|
8
- event.synchronize batch
9
- end
10
-
11
- batch.run
12
- end
13
-
14
- def run
15
- unless bulk_inserts.empty?
16
- define_job do
17
- bulk_inserts.each do |model, records|
18
- ActiveGit.configuration.logger.debug "[ActiveGit] Inserting #{model.model_name} models"
19
- import_result = model.import records, timestamps: false, validate: false
20
- raise SynchronizationError.new(import_result.failed_instances) unless import_result.failed_instances.empty?
21
- end
22
- end
23
- end
24
-
25
- ::ActiveRecord::Base.transaction do
26
- jobs.each do |job|
27
- job.call
28
- end
29
- end
30
- ActiveGit.add_all
31
- end
32
-
33
- def bulk_insert(data)
34
- bulk_inserts[data.class] ||= [] unless bulk_inserts.has_key? data.class
35
- bulk_inserts[data.class] << data
36
- end
37
-
38
- def define_job(&block)
39
- jobs << Proc.new(&block)
40
- end
41
-
42
- private
43
-
44
- def bulk_inserts
45
- @bulk_inserts ||= {}
46
- end
47
-
48
- def jobs
49
- @jobs ||= []
50
- end
51
-
52
- end
53
-
1
+ module ActiveGit
2
+ class Synchronizer
3
+
4
+ def self.synchronize(*events)
5
+ batch = self.new
6
+
7
+ Array(events).flatten.each do |event|
8
+ event.synchronize batch
9
+ end
10
+
11
+ batch.run
12
+ end
13
+
14
+ def run
15
+ unless bulk_inserts.empty?
16
+ define_job do
17
+ bulk_inserts.each do |model, records|
18
+ ActiveGit.configuration.logger.debug "[ActiveGit] Inserting #{model.model_name} models"
19
+ import_result = model.import records, timestamps: false, validate: false
20
+ raise SynchronizationError.new(import_result.failed_instances) unless import_result.failed_instances.empty?
21
+ end
22
+ end
23
+ end
24
+
25
+ ::ActiveRecord::Base.transaction do
26
+ jobs.each do |job|
27
+ job.call
28
+ end
29
+ end
30
+ ActiveGit.add_all
31
+ end
32
+
33
+ def bulk_insert(data)
34
+ bulk_inserts[data.class] ||= [] unless bulk_inserts.has_key? data.class
35
+ bulk_inserts[data.class] << data
36
+ end
37
+
38
+ def define_job(&block)
39
+ jobs << Proc.new(&block)
40
+ end
41
+
42
+ private
43
+
44
+ def bulk_inserts
45
+ @bulk_inserts ||= {}
46
+ end
47
+
48
+ def jobs
49
+ @jobs ||= []
50
+ end
51
+
52
+ end
53
+
54
54
  end
@@ -1,3 +1,3 @@
1
- module ActiveGit
2
- VERSION = '0.0.3'
3
- end
1
+ module ActiveGit
2
+ VERSION = '0.0.4'
3
+ end
@@ -1,51 +1,61 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveGit::ActiveRecord do
4
-
5
- before :each do
6
- @file_helper = FileHelper.new
7
- ActiveGit.configuration.working_path = @file_helper.create_temp_folder
8
- end
9
-
10
- after :each do
11
- @file_helper.remove_temp_folders
12
- end
13
-
14
- it 'Registered models' do
15
- ActiveGit.models.should include Language
16
- end
17
-
18
- it 'Create' do
19
- language = Language.create! name: 'Spanish'
20
-
21
- File.exist?(language.git_file).should be_true
22
-
23
- json = JSON.parse(@file_helper.read_file(language.git_file))
24
-
25
- json['id'].should eq language.id
26
- json['name'].should eq language.name
27
- end
28
-
29
- it 'Update' do
30
- language = Language.create! name: 'Spanish'
31
-
32
- json = JSON.parse(@file_helper.read_file(language.git_file))
33
- json['name'].should eq 'Spanish'
34
-
35
- language.update_attributes name: 'English'
36
-
37
- json = JSON.parse(@file_helper.read_file(language.git_file))
38
- json['name'].should eq 'English'
39
- end
40
-
41
- it 'Destroy' do
42
- language = Language.create! name: 'Spanish'
43
-
44
- File.exist?(language.git_file).should be_true
45
-
46
- language.destroy
47
-
48
- File.exist?(language.git_file).should be_false
49
- end
50
-
1
+ require 'spec_helper'
2
+
3
+ describe ActiveGit::ActiveRecord do
4
+
5
+ before :each do
6
+ @file_helper = FileHelper.new
7
+ ActiveGit.configuration.working_path = @file_helper.create_temp_folder
8
+ end
9
+
10
+ after :each do
11
+ @file_helper.remove_temp_folders
12
+ end
13
+
14
+ it 'Registered models' do
15
+ ActiveGit.models.should include Language
16
+ end
17
+
18
+ it 'Create' do
19
+ language = Language.create! name: 'Spanish'
20
+
21
+ File.exist?(git_filename(language)).should be_true
22
+
23
+ json = JSON.parse(@file_helper.read_file(git_filename(language)))
24
+
25
+ json['id'].should eq language.id
26
+ json['name'].should eq language.name
27
+ end
28
+
29
+ it 'Update' do
30
+ language = Language.create! name: 'Spanish'
31
+
32
+ json = JSON.parse(@file_helper.read_file(git_filename(language)))
33
+ json['name'].should eq 'Spanish'
34
+
35
+ language.update_attributes name: 'English'
36
+
37
+ json = JSON.parse(@file_helper.read_file(git_filename(language)))
38
+ json['name'].should eq 'English'
39
+ end
40
+
41
+ it 'Destroy' do
42
+ language = Language.create! name: 'Spanish'
43
+
44
+ File.exist?(git_filename(language)).should be_true
45
+
46
+ language.destroy
47
+
48
+ File.exist?(git_filename(language)).should be_false
49
+ end
50
+
51
+ it 'Load from json' do
52
+ attributes = {id: 1, name: 'Spanish', created_at: Time.now, updated_at: Time.now}
53
+ language = Language.from_json attributes.to_json
54
+
55
+ language.id.should eq attributes[:id]
56
+ language.name.should eq attributes[:name]
57
+ language.created_at.to_i.should eq attributes[:created_at].to_i
58
+ language.updated_at.to_i.should eq attributes[:updated_at].to_i
59
+ end
60
+
51
61
  end
@@ -1,246 +1,246 @@
1
- require 'spec_helper'
2
-
3
- describe ActiveGit::Commands do
4
-
5
- before :each do
6
- @file_helper = FileHelper.new
7
- ActiveGit.configuration.working_path = @file_helper.create_temp_folder
8
- ActiveGit.init
9
- end
10
-
11
- after :each do
12
- @file_helper.remove_temp_folders
13
- end
14
-
15
- context 'Dump and load' do
16
-
17
- it 'Dump complete db to files' do
18
- languages = [
19
- Language.create!(name: 'Spanish'),
20
- Language.create!(name: 'English')
21
- ]
22
-
23
- @file_helper.write_file "#{ActiveGit.configuration.working_path}/test.txt", 'test'
24
- @file_helper.write_file "#{Language.git_folder}/0.json", 'test'
25
-
26
- ActiveGit.dump_db
27
-
28
- File.exist?("#{ActiveGit.configuration.working_path}/test.txt").should be_false
29
-
30
- Dir.glob("#{Language.git_folder}/*.json").should have(2).items
31
-
32
- languages.each do |language|
33
- File.exist?(language.git_file).should be_true
34
- json = JSON.parse(@file_helper.read_file(language.git_file))
35
- json['id'].should eq language.id
36
- json['name'].should eq language.name
37
- end
38
- end
39
-
40
- it 'Dump single table to files' do
41
- language = Language.create! name: 'Spanish'
42
- country = Country.create! name: 'Argentina'
43
-
44
- Dir["#{ActiveGit.configuration.working_path}/*"].each { |f| FileUtils.rm_rf f }
45
-
46
- Dir.exists?("#{ActiveGit.configuration.working_path}/languages").should be_false
47
- File.exists?("#{ActiveGit.configuration.working_path}/languages/#{language.id}.json").should be_false
48
- Dir.exists?("#{ActiveGit.configuration.working_path}/countries").should be_false
49
- File.exists?("#{ActiveGit.configuration.working_path}/countries/#{country.id}.json").should be_false
50
-
51
- ActiveGit.dump_db Language
52
-
53
- Dir.exists?("#{ActiveGit.configuration.working_path}/languages").should be_true
54
- File.exists?("#{ActiveGit.configuration.working_path}/languages/#{language.id}.json").should be_true
55
- Dir.exists?("#{ActiveGit.configuration.working_path}/countries").should be_false
56
- File.exists?("#{ActiveGit.configuration.working_path}/countries/#{country.id}.json").should be_false
57
- end
58
-
59
- it 'Load all files to db' do
60
- languages = [
61
- Language.create!(name: 'Spanish'),
62
- Language.create!(name: 'English')
63
- ]
64
-
65
- Language.first.delete
66
-
67
- languages.each do |language|
68
- File.exist?(language.git_file).should be_true
69
- end
70
-
71
- ActiveGit.load_files
72
-
73
- Language.count.should be 2
74
-
75
- languages.each do |language|
76
- language.reload.should be_a Language
77
- end
78
- end
79
-
80
- it 'Load single model files to db' do
81
- language = Language.create! name: 'Spanish'
82
- brand = Brand.create! name: 'Coca Cola'
83
-
84
- File.exists?(language.git_file).should be_true
85
- File.exists?(brand.git_file).should be_true
86
-
87
- language.delete
88
- brand.delete
89
-
90
- ActiveGit.load_files Language
91
-
92
- Language.find_by_id(language.id).should_not be_nil
93
- Brand.find_by_id(brand.id).should be_nil
94
- end
95
-
96
- end
97
-
98
- context 'Git synchronization' do
99
-
100
- it 'Commit all files' do
101
- Language.create! name: 'Spanish'
102
-
103
- ActiveGit.status.should_not be_empty
104
-
105
- ActiveGit.commit_all 'Commit for test'
106
-
107
- ActiveGit.status.should be_empty
108
-
109
- ActiveGit.log.first.subject.should eq 'Commit for test'
110
- end
111
-
112
- it 'Push and pull' do
113
- bare = GitWrapper::Repository.new @file_helper.create_temp_folder
114
- bare.init_bare
115
-
116
- spanish = Language.create! name: 'Spanish'
117
- english = Language.create! name: 'English'
118
- ActiveGit.commit_all 'Local commit'
119
- ActiveGit.add_remote 'bare', bare.location
120
- ActiveGit.push 'bare'
121
-
122
- remote = GitWrapper::Repository.new @file_helper.create_temp_folder
123
- remote.init
124
- remote.add_remote 'bare', bare.location
125
- remote.pull 'bare'
126
-
127
- to_json = Proc.new do |id, name|
128
- JSON.pretty_generate id: id, name: name, created_at: Time.now, updated_at: Time.now
129
- end
130
- @file_helper.write_file "#{remote.location}/languages/#{spanish.id}.json", to_json.call(spanish.id, 'Spanish 2')
131
- @file_helper.write_file "#{remote.location}/languages/888.json", to_json.call(888, 'Portuguese')
132
- @file_helper.write_file "#{remote.location}/languages/999.json", to_json.call(999, 'French')
133
- FileUtils.rm "#{remote.location}/languages/#{english.id}.json"
134
-
135
- remote.add_all
136
- remote.commit 'Remote commit'
137
- remote.push 'bare'
138
-
139
- Language.count.should eq 2
140
-
141
- ActiveGit.pull('bare').should be_true
142
-
143
- ActiveGit.log.first.subject.should eq 'Remote commit'
144
- Language.count.should eq 3
145
- ['Spanish 2', 'Portuguese', 'French'].each do |lang_name|
146
- File.exist?(Language.find_by_name(lang_name).git_file).should be_true
147
- end
148
- end
149
-
150
- it 'Checkout' do
151
- Language.create! name: 'Spanish'
152
- Language.create! name: 'English'
153
-
154
- ActiveGit.commit_all 'Commit 1'
155
- ActiveGit.branch 'branch_test'
156
- ActiveGit.checkout 'branch_test'
157
-
158
- Language.first.destroy
159
- ActiveGit.commit_all 'Commit 2'
160
-
161
- Language.count.should eq 1
162
-
163
- ActiveGit.checkout 'master'
164
-
165
- Language.count.should eq 2
166
-
167
- ActiveGit.checkout 'branch_test'
168
-
169
- Language.count.should eq 1
170
- end
171
-
172
- it 'Reset to specific commit' do
173
- spanish = Language.create! name: 'Spanish'
174
- ActiveGit.commit_all 'Commit 1'
175
-
176
- english = Language.create! name: 'English'
177
- ActiveGit.commit_all 'Commit 1'
178
-
179
- Language.count.should eq 2
180
- File.exist?(spanish.git_file).should be_true
181
- File.exist?(english.git_file).should be_true
182
-
183
- ActiveGit.reset ActiveGit.log.last.commit_hash
184
-
185
- Language.count.should eq 1
186
- File.exist?(spanish.git_file).should be_true
187
- File.exist?(english.git_file).should be_false
188
- end
189
-
190
- it 'Reset to HEAD' do
191
- spanish = Language.create! name: 'Spanish'
192
- ActiveGit.commit_all 'Commit 1'
193
-
194
- english = Language.create! name: 'English'
195
-
196
- Language.count.should eq 2
197
- File.exist?(spanish.git_file).should be_true
198
- File.exist?(english.git_file).should be_true
199
-
200
- ActiveGit.reset
201
-
202
- Language.count.should eq 1
203
- File.exist?(spanish.git_file).should be_true
204
- File.exist?(english.git_file).should be_false
205
- end
206
-
207
- it 'Resolve version conflicts' do
208
- bare = GitWrapper::Repository.new @file_helper.create_temp_folder
209
- bare.init_bare
210
-
211
- ActiveGit.add_remote 'bare', bare.location
212
-
213
- spanish = Language.create! name: 'Spanish'
214
-
215
- ActiveGit.commit_all 'Commit v1'
216
- ActiveGit.push 'bare'
217
-
218
- other_repo = GitWrapper::Repository.new @file_helper.create_temp_folder
219
- other_repo.init
220
- other_repo.add_remote 'bare', bare.location
221
- other_repo.pull 'bare'
222
-
223
- @file_helper.write_file "#{other_repo.location}/languages/#{spanish.id}.json",
224
- JSON.pretty_generate(id: spanish.id, name: 'Spanish 2', created_at: Time.now, updated_at: Time.now)
225
-
226
- other_repo.add_all
227
- other_repo.commit 'Commit v2'
228
- other_repo.push 'bare'
229
-
230
- spanish.update_attributes name: 'Spanish 3'
231
- ActiveGit.commit 'Commit v3'
232
-
233
- ActiveGit.pull 'bare'
234
-
235
- spanish.reload.name.should eq 'Spanish 3'
236
-
237
- ActiveGit.log.should have(4).items
238
- ActiveGit.log[0].subject.should eq 'Resolve conflicts'
239
- ActiveGit.log[1].subject.should eq 'Commit v3'
240
- ActiveGit.log[2].subject.should eq 'Commit v2'
241
- ActiveGit.log[3].subject.should eq 'Commit v1'
242
- end
243
-
244
- end
245
-
1
+ require 'spec_helper'
2
+
3
+ describe ActiveGit::Commands do
4
+
5
+ before :each do
6
+ @file_helper = FileHelper.new
7
+ ActiveGit.configuration.working_path = @file_helper.create_temp_folder
8
+ ActiveGit.init
9
+ end
10
+
11
+ after :each do
12
+ @file_helper.remove_temp_folders
13
+ end
14
+
15
+ context 'Dump and load' do
16
+
17
+ it 'Dump complete db to files' do
18
+ languages = [
19
+ Language.create!(name: 'Spanish'),
20
+ Language.create!(name: 'English')
21
+ ]
22
+
23
+ @file_helper.write_file "#{ActiveGit.configuration.working_path}/test.txt", 'test'
24
+ @file_helper.write_file "#{git_dirname(Language)}/0.json", 'test'
25
+
26
+ ActiveGit.dump_db
27
+
28
+ File.exist?("#{ActiveGit.configuration.working_path}/test.txt").should be_false
29
+
30
+ Dir.glob("#{git_dirname(Language)}/*.json").should have(2).items
31
+
32
+ languages.each do |language|
33
+ File.exist?(git_filename(language)).should be_true
34
+ json = JSON.parse(@file_helper.read_file(git_filename(language)))
35
+ json['id'].should eq language.id
36
+ json['name'].should eq language.name
37
+ end
38
+ end
39
+
40
+ it 'Dump single table to files' do
41
+ language = Language.create! name: 'Spanish'
42
+ country = Country.create! name: 'Argentina'
43
+
44
+ Dir["#{ActiveGit.configuration.working_path}/*"].each { |f| FileUtils.rm_rf f }
45
+
46
+ Dir.exists?("#{ActiveGit.configuration.working_path}/languages").should be_false
47
+ File.exists?("#{ActiveGit.configuration.working_path}/languages/#{language.id}.json").should be_false
48
+ Dir.exists?("#{ActiveGit.configuration.working_path}/countries").should be_false
49
+ File.exists?("#{ActiveGit.configuration.working_path}/countries/#{country.id}.json").should be_false
50
+
51
+ ActiveGit.dump_db Language
52
+
53
+ Dir.exists?("#{ActiveGit.configuration.working_path}/languages").should be_true
54
+ File.exists?("#{ActiveGit.configuration.working_path}/languages/#{language.id}.json").should be_true
55
+ Dir.exists?("#{ActiveGit.configuration.working_path}/countries").should be_false
56
+ File.exists?("#{ActiveGit.configuration.working_path}/countries/#{country.id}.json").should be_false
57
+ end
58
+
59
+ it 'Load all files to db' do
60
+ languages = [
61
+ Language.create!(name: 'Spanish'),
62
+ Language.create!(name: 'English')
63
+ ]
64
+
65
+ Language.first.delete
66
+
67
+ languages.each do |language|
68
+ File.exist?(git_filename(language)).should be_true
69
+ end
70
+
71
+ ActiveGit.load_files
72
+
73
+ Language.count.should be 2
74
+
75
+ languages.each do |language|
76
+ language.reload.should be_a Language
77
+ end
78
+ end
79
+
80
+ it 'Load single model files to db' do
81
+ language = Language.create! name: 'Spanish'
82
+ brand = Brand.create! name: 'Coca Cola'
83
+
84
+ File.exists?(git_filename(language)).should be_true
85
+ File.exists?(git_filename(brand)).should be_true
86
+
87
+ language.delete
88
+ brand.delete
89
+
90
+ ActiveGit.load_files Language
91
+
92
+ Language.find_by_id(language.id).should_not be_nil
93
+ Brand.find_by_id(brand.id).should be_nil
94
+ end
95
+
96
+ end
97
+
98
+ context 'Git synchronization' do
99
+
100
+ it 'Commit all files' do
101
+ Language.create! name: 'Spanish'
102
+
103
+ ActiveGit.status.should_not be_empty
104
+
105
+ ActiveGit.commit_all 'Commit for test'
106
+
107
+ ActiveGit.status.should be_empty
108
+
109
+ ActiveGit.log.first.subject.should eq 'Commit for test'
110
+ end
111
+
112
+ it 'Push and pull' do
113
+ bare = GitWrapper::Repository.new @file_helper.create_temp_folder
114
+ bare.init_bare
115
+
116
+ spanish = Language.create! name: 'Spanish'
117
+ english = Language.create! name: 'English'
118
+ ActiveGit.commit_all 'Local commit'
119
+ ActiveGit.add_remote 'bare', bare.location
120
+ ActiveGit.push 'bare'
121
+
122
+ remote = GitWrapper::Repository.new @file_helper.create_temp_folder
123
+ remote.init
124
+ remote.add_remote 'bare', bare.location
125
+ remote.pull 'bare'
126
+
127
+ to_json = Proc.new do |id, name|
128
+ JSON.pretty_generate id: id, name: name, created_at: Time.now, updated_at: Time.now
129
+ end
130
+ @file_helper.write_file "#{remote.location}/languages/#{spanish.id}.json", to_json.call(spanish.id, 'Spanish 2')
131
+ @file_helper.write_file "#{remote.location}/languages/888.json", to_json.call(888, 'Portuguese')
132
+ @file_helper.write_file "#{remote.location}/languages/999.json", to_json.call(999, 'French')
133
+ FileUtils.rm "#{remote.location}/languages/#{english.id}.json"
134
+
135
+ remote.add_all
136
+ remote.commit 'Remote commit'
137
+ remote.push 'bare'
138
+
139
+ Language.count.should eq 2
140
+
141
+ ActiveGit.pull('bare').should be_true
142
+
143
+ ActiveGit.log.first.subject.should eq 'Remote commit'
144
+ Language.count.should eq 3
145
+ ['Spanish 2', 'Portuguese', 'French'].each do |lang_name|
146
+ File.exist?(git_filename(Language.find_by_name(lang_name))).should be_true
147
+ end
148
+ end
149
+
150
+ it 'Checkout' do
151
+ Language.create! name: 'Spanish'
152
+ Language.create! name: 'English'
153
+
154
+ ActiveGit.commit_all 'Commit 1'
155
+ ActiveGit.branch 'branch_test'
156
+ ActiveGit.checkout 'branch_test'
157
+
158
+ Language.first.destroy
159
+ ActiveGit.commit_all 'Commit 2'
160
+
161
+ Language.count.should eq 1
162
+
163
+ ActiveGit.checkout 'master'
164
+
165
+ Language.count.should eq 2
166
+
167
+ ActiveGit.checkout 'branch_test'
168
+
169
+ Language.count.should eq 1
170
+ end
171
+
172
+ it 'Reset to specific commit' do
173
+ spanish = Language.create! name: 'Spanish'
174
+ ActiveGit.commit_all 'Commit 1'
175
+
176
+ english = Language.create! name: 'English'
177
+ ActiveGit.commit_all 'Commit 1'
178
+
179
+ Language.count.should eq 2
180
+ File.exist?(git_filename(spanish)).should be_true
181
+ File.exist?(git_filename(english)).should be_true
182
+
183
+ ActiveGit.reset ActiveGit.log.last.commit_hash
184
+
185
+ Language.count.should eq 1
186
+ File.exist?(git_filename(spanish)).should be_true
187
+ File.exist?(git_filename(english)).should be_false
188
+ end
189
+
190
+ it 'Reset to HEAD' do
191
+ spanish = Language.create! name: 'Spanish'
192
+ ActiveGit.commit_all 'Commit 1'
193
+
194
+ english = Language.create! name: 'English'
195
+
196
+ Language.count.should eq 2
197
+ File.exist?(git_filename(spanish)).should be_true
198
+ File.exist?(git_filename(english)).should be_true
199
+
200
+ ActiveGit.reset
201
+
202
+ Language.count.should eq 1
203
+ File.exist?(git_filename(spanish)).should be_true
204
+ File.exist?(git_filename(english)).should be_false
205
+ end
206
+
207
+ it 'Resolve version conflicts' do
208
+ bare = GitWrapper::Repository.new @file_helper.create_temp_folder
209
+ bare.init_bare
210
+
211
+ ActiveGit.add_remote 'bare', bare.location
212
+
213
+ spanish = Language.create! name: 'Spanish'
214
+
215
+ ActiveGit.commit_all 'Commit v1'
216
+ ActiveGit.push 'bare'
217
+
218
+ other_repo = GitWrapper::Repository.new @file_helper.create_temp_folder
219
+ other_repo.init
220
+ other_repo.add_remote 'bare', bare.location
221
+ other_repo.pull 'bare'
222
+
223
+ @file_helper.write_file "#{other_repo.location}/languages/#{spanish.id}.json",
224
+ JSON.pretty_generate(id: spanish.id, name: 'Spanish 2', created_at: Time.now, updated_at: Time.now)
225
+
226
+ other_repo.add_all
227
+ other_repo.commit 'Commit v2'
228
+ other_repo.push 'bare'
229
+
230
+ spanish.update_attributes name: 'Spanish 3'
231
+ ActiveGit.commit 'Commit v3'
232
+
233
+ ActiveGit.pull 'bare'
234
+
235
+ spanish.reload.name.should eq 'Spanish 3'
236
+
237
+ ActiveGit.log.should have(4).items
238
+ ActiveGit.log[0].subject.should eq 'Resolve conflicts'
239
+ ActiveGit.log[1].subject.should eq 'Commit v3'
240
+ ActiveGit.log[2].subject.should eq 'Commit v2'
241
+ ActiveGit.log[3].subject.should eq 'Commit v1'
242
+ end
243
+
244
+ end
245
+
246
246
  end