active_git 0.0.3 → 0.0.4

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.
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
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveGit::Inflector do
4
+
5
+ let(:working_path) { '/home/git' }
6
+
7
+ it 'Git path' do
8
+ ActiveGit::Inflector.dirname(Country, working_path).should eq "#{working_path}/countries"
9
+ end
10
+
11
+ it 'Git path for nested model' do
12
+ ActiveGit::Inflector.dirname(Crm::Customer, working_path).should eq "#{working_path}/crm/customers"
13
+ end
14
+
15
+ it 'Git file' do
16
+ country = Country.create! name: 'Argentina'
17
+ ActiveGit::Inflector.filename(country, working_path).should eq "#{working_path}/countries/#{country.id}.json"
18
+ end
19
+
20
+ it 'Git file for nested model' do
21
+ customer = Crm::Customer.create! name: 'Monster Inc.'
22
+ ActiveGit::Inflector.filename(customer, working_path).should eq "#{working_path}/crm/customers/#{customer.id}.json"
23
+ end
24
+
25
+ it 'Model from filename' do
26
+ ActiveGit::Inflector.model("#{working_path}/countries/1.json", working_path).should be Country
27
+ end
28
+
29
+ it 'Model from filename' do
30
+ ActiveGit::Inflector.model("#{working_path}/crm/customers/1.json", working_path).should be Crm::Customer
31
+ end
32
+
33
+ it 'Model id' do
34
+ ActiveGit::Inflector.model_id("#{working_path}/crm/customers/1.json").should eq '1'
35
+ end
36
+
37
+ end
@@ -1,9 +1,9 @@
1
- class CreateCountries < ActiveRecord::Migration
2
- def change
3
- create_table :countries do |t|
4
- t.string :name, null: false
5
-
6
- t.timestamps
7
- end
8
- end
9
- end
1
+ class CreateCountries < ActiveRecord::Migration
2
+ def change
3
+ create_table :countries do |t|
4
+ t.string :name, null: false
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -1,9 +1,9 @@
1
- class CreateLanguages < ActiveRecord::Migration
2
- def change
3
- create_table :languages do |t|
4
- t.string :name, null: false
5
-
6
- t.timestamps
7
- end
8
- end
9
- end
1
+ class CreateLanguages < ActiveRecord::Migration
2
+ def change
3
+ create_table :languages do |t|
4
+ t.string :name, null: false
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -1,9 +1,9 @@
1
- class CreateBrands < ActiveRecord::Migration
2
- def change
3
- create_table :brands do |t|
4
- t.string :name, null: false
5
-
6
- t.timestamps
7
- end
8
- end
9
- end
1
+ class CreateBrands < ActiveRecord::Migration
2
+ def change
3
+ create_table :brands do |t|
4
+ t.string :name, null: false
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ class CreateCustomers < ActiveRecord::Migration
2
+ def change
3
+ create_table :crm_customers do |t|
4
+ t.string :name, null: false
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,24 +1,36 @@
1
- require 'active_git'
2
- require 'logger'
3
-
4
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
5
-
6
- TEMP_PATH = ENV['TMP'].gsub("\\", '/')
7
-
8
- ActiveRecord::Base.logger = Logger.new($stdout)
9
- ActiveRecord::Migrator.migrations_path = "#{File.dirname(__FILE__)}/migrations"
10
-
11
- RSpec.configure do |config|
12
- config.around do |example|
13
- ActiveRecord::Base.transaction do
14
- example.run
15
- raise ActiveRecord::Rollback
16
- end
17
- end
18
-
19
- config.before :all do
20
- ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ":memory:"
21
- ActiveRecord::Base.connection
22
- ActiveRecord::Migrator.migrate ActiveRecord::Migrator.migrations_path
23
- end
1
+ require 'active_git'
2
+ require 'logger'
3
+
4
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
5
+
6
+ ActiveRecord::Base.logger = Logger.new($stdout)
7
+ ActiveRecord::Migrator.migrations_path = "#{File.dirname(__FILE__)}/migrations"
8
+
9
+ module InflectorHelper
10
+ def git_dirname(model, working_path=nil)
11
+ ActiveGit::Inflector.dirname(model, working_path || ActiveGit.configuration.working_path)
12
+ end
13
+
14
+ def git_filename(instance, working_path=nil)
15
+ ActiveGit::Inflector.filename(instance, working_path || ActiveGit.configuration.working_path)
16
+ end
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+
21
+ config.around do |example|
22
+ ActiveRecord::Base.transaction do
23
+ example.run
24
+ raise ActiveRecord::Rollback
25
+ end
26
+ end
27
+
28
+ config.before :all do
29
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ":memory:"
30
+ ActiveRecord::Base.connection
31
+ ActiveRecord::Migrator.migrate ActiveRecord::Migrator.migrations_path
32
+ end
33
+
34
+ include InflectorHelper
35
+
24
36
  end
@@ -1,44 +1,48 @@
1
- require 'fileutils'
2
-
3
- class FileHelper
4
-
5
- def initialize
6
- @temp_folders = []
7
- end
8
-
9
- def create_temp_folder
10
- folder_name = "#{ENV['TMP'].gsub('\\', '/')}/#{timestamp}"
11
- @temp_folders << folder_name
12
- Dir.mkdir folder_name
13
- folder_name
14
- end
15
-
16
- def remove_temp_folders
17
- @temp_folders.each do |folder_name|
18
- FileUtils.rm_rf folder_name
19
- end
20
- end
21
-
22
- def create_temp_file(folder, content)
23
- file_name = "#{folder}/file #{timestamp}.txt"
24
- write_file file_name, content
25
- file_name
26
- end
27
-
28
- def write_file(file_name, content)
29
- Dir.mkdir File.dirname(file_name) unless Dir.exist? File.dirname(file_name)
30
- File.open(file_name, 'w') { |f| f.puts content }
31
- end
32
-
33
- def read_file(file_name)
34
- File.open(file_name, 'r') { |f| f.readlines.join("\n").strip }
35
- end
36
-
37
- private
38
-
39
- def timestamp
40
- sleep(0.01)
41
- (Time.now.to_f * 1000).to_i
42
- end
43
-
1
+ require 'fileutils'
2
+
3
+ class FileHelper
4
+
5
+ def initialize
6
+ @temp_folders = []
7
+ end
8
+
9
+ def create_temp_folder
10
+ folder_name = "#{temp_path}/#{timestamp}"
11
+ @temp_folders << folder_name
12
+ FileUtils.mkpath folder_name
13
+ folder_name
14
+ end
15
+
16
+ def remove_temp_folders
17
+ @temp_folders.each do |folder_name|
18
+ FileUtils.rm_rf folder_name
19
+ end
20
+ end
21
+
22
+ def create_temp_file(folder, content)
23
+ file_name = "#{folder}/file #{timestamp}.txt"
24
+ write_file file_name, content
25
+ file_name
26
+ end
27
+
28
+ def write_file(file_name, content)
29
+ Dir.mkdir File.dirname(file_name) unless Dir.exist? File.dirname(file_name)
30
+ File.open(file_name, 'w') { |f| f.puts content }
31
+ end
32
+
33
+ def read_file(file_name)
34
+ File.open(file_name, 'r') { |f| f.readlines.join("\n").strip }
35
+ end
36
+
37
+ private
38
+
39
+ def temp_path
40
+ Pathname.new("#{File.dirname(__FILE__)}/../../tmp").expand_path.to_s
41
+ end
42
+
43
+ def timestamp
44
+ sleep(0.01)
45
+ (Time.now.to_f * 1000).to_i
46
+ end
47
+
44
48
  end
@@ -1,5 +1,3 @@
1
- class Brand < ActiveRecord::Base
2
- git_versioned
3
-
4
- attr_accessible :name
1
+ class Brand < ActiveRecord::Base
2
+ git_versioned
5
3
  end
@@ -1,3 +1,2 @@
1
- class Country < ActiveRecord::Base
2
- attr_accessible :name
1
+ class Country < ActiveRecord::Base
3
2
  end
@@ -0,0 +1,6 @@
1
+ module Crm
2
+ class Customer < ActiveRecord::Base
3
+ self.table_name_prefix = 'crm_'
4
+ git_versioned
5
+ end
6
+ end
@@ -1,5 +1,3 @@
1
- class Language < ActiveRecord::Base
2
- git_versioned
3
-
4
- attr_accessible :name
1
+ class Language < ActiveRecord::Base
2
+ git_versioned
5
3
  end
@@ -1,101 +1,101 @@
1
- require 'spec_helper'
2
-
3
- describe 'ActiveGit::Synchronizers' do
4
-
5
- before :each do
6
- @file_helper = FileHelper.new
7
- end
8
-
9
- after :each do
10
- @file_helper.remove_temp_folders
11
- end
12
-
13
- context 'Target GIT' do
14
-
15
- it 'Create' do
16
- country = Country.create! name: 'Argentina'
17
-
18
- working_path = @file_helper.create_temp_folder
19
-
20
- File.exist?("#{working_path}/countries/#{country.id}.json").should be_false
21
-
22
- ActiveGit::Synchronizer.synchronize ActiveGit::FileSave.new(country, working_path)
23
-
24
- File.exist?("#{working_path}/countries/#{country.id}.json").should be_true
25
- end
26
-
27
- it 'Update' do
28
- country = Country.create! name: 'Argentina'
29
-
30
- working_path = @file_helper.create_temp_folder
31
-
32
- file_name = "#{working_path}/countries/#{country.id}.json"
33
- @file_helper.write_file file_name, 'test'
34
-
35
- @file_helper.read_file(file_name).should eq 'test'
36
-
37
- ActiveGit::Synchronizer.synchronize ActiveGit::FileSave.new(country, working_path)
38
-
39
- json = JSON.parse @file_helper.read_file(file_name)
40
- json['id'].should eq country.id
41
- json['name'].should eq country.name
42
- end
43
-
44
- it 'Destroy' do
45
- country = Country.create! name: 'Argentina'
46
-
47
- working_path = @file_helper.create_temp_folder
48
-
49
- file_name = "#{working_path}/countries/#{country.id}.json"
50
- @file_helper.write_file file_name, 'test'
51
-
52
- ActiveGit::Synchronizer.synchronize ActiveGit::FileDelete.new(country, working_path)
53
-
54
- File.exist?("#{working_path}/countries/#{country.id}.json").should be_false
55
- end
56
-
57
- end
58
-
59
- context 'Target DB' do
60
-
61
- it 'Create' do
62
- working_path = @file_helper.create_temp_folder
63
-
64
- file_name = "#{working_path}/countries/1.json"
65
- @file_helper.write_file file_name, {id: 1, name: 'Argentina', created_at: '2012-04-20T11:24:11-03:00', updated_at: '2012-04-20T11:24:11-03:00'}.to_json
66
-
67
- Country.count.should eq 0
68
-
69
- ActiveGit::Synchronizer.synchronize ActiveGit::DbCreate.new(file_name)
70
-
71
- Country.find(1).name.should eq 'Argentina'
72
- end
73
-
74
- it 'Update' do
75
- working_path = @file_helper.create_temp_folder
76
-
77
- country = Country.create! name: 'Argentina'
78
-
79
- file_name = "#{working_path}/countries/#{country.id}.json"
80
- @file_helper.write_file file_name, country.attributes.merge('name' => 'Brasil').to_json
81
-
82
- ActiveGit::Synchronizer.synchronize ActiveGit::DbUpdate.new(file_name)
83
-
84
- country.reload.name.should eq 'Brasil'
85
- end
86
-
87
- it 'Destroy' do
88
- working_path = @file_helper.create_temp_folder
89
-
90
- country = Country.create! name: 'Argentina'
91
-
92
- file_name = "#{working_path}/countries/#{country.id}.json"
93
-
94
- ActiveGit::Synchronizer.synchronize ActiveGit::DbDelete.new(file_name)
95
-
96
- Country.find_by_id(country.id).should be_nil
97
- end
98
-
99
- end
100
-
1
+ require 'spec_helper'
2
+
3
+ describe 'ActiveGit::Synchronizers' do
4
+
5
+ before :each do
6
+ @file_helper = FileHelper.new
7
+ end
8
+
9
+ after :each do
10
+ @file_helper.remove_temp_folders
11
+ end
12
+
13
+ context 'Target GIT' do
14
+
15
+ it 'Create' do
16
+ country = Country.create! name: 'Argentina'
17
+
18
+ working_path = @file_helper.create_temp_folder
19
+
20
+ File.exist?("#{working_path}/countries/#{country.id}.json").should be_false
21
+
22
+ ActiveGit::Synchronizer.synchronize ActiveGit::FileSave.new(country, working_path)
23
+
24
+ File.exist?("#{working_path}/countries/#{country.id}.json").should be_true
25
+ end
26
+
27
+ it 'Update' do
28
+ country = Country.create! name: 'Argentina'
29
+
30
+ working_path = @file_helper.create_temp_folder
31
+
32
+ file_name = "#{working_path}/countries/#{country.id}.json"
33
+ @file_helper.write_file file_name, 'test'
34
+
35
+ @file_helper.read_file(file_name).should eq 'test'
36
+
37
+ ActiveGit::Synchronizer.synchronize ActiveGit::FileSave.new(country, working_path)
38
+
39
+ json = JSON.parse @file_helper.read_file(file_name)
40
+ json['id'].should eq country.id
41
+ json['name'].should eq country.name
42
+ end
43
+
44
+ it 'Destroy' do
45
+ country = Country.create! name: 'Argentina'
46
+
47
+ working_path = @file_helper.create_temp_folder
48
+
49
+ file_name = "#{working_path}/countries/#{country.id}.json"
50
+ @file_helper.write_file file_name, 'test'
51
+
52
+ ActiveGit::Synchronizer.synchronize ActiveGit::FileDelete.new(country, working_path)
53
+
54
+ File.exist?("#{working_path}/countries/#{country.id}.json").should be_false
55
+ end
56
+
57
+ end
58
+
59
+ context 'Target DB' do
60
+
61
+ it 'Create' do
62
+ working_path = @file_helper.create_temp_folder
63
+
64
+ file_name = "#{working_path}/countries/1.json"
65
+ @file_helper.write_file file_name, {id: 1, name: 'Argentina', created_at: '2012-04-20T11:24:11-03:00', updated_at: '2012-04-20T11:24:11-03:00'}.to_json
66
+
67
+ Country.count.should eq 0
68
+
69
+ ActiveGit::Synchronizer.synchronize ActiveGit::DbCreate.new(file_name, working_path)
70
+
71
+ Country.find(1).name.should eq 'Argentina'
72
+ end
73
+
74
+ it 'Update' do
75
+ working_path = @file_helper.create_temp_folder
76
+
77
+ country = Country.create! name: 'Argentina'
78
+
79
+ file_name = "#{working_path}/countries/#{country.id}.json"
80
+ @file_helper.write_file file_name, country.attributes.merge('name' => 'Brasil').to_json
81
+
82
+ ActiveGit::Synchronizer.synchronize ActiveGit::DbUpdate.new(file_name, working_path)
83
+
84
+ country.reload.name.should eq 'Brasil'
85
+ end
86
+
87
+ it 'Destroy' do
88
+ working_path = @file_helper.create_temp_folder
89
+
90
+ country = Country.create! name: 'Argentina'
91
+
92
+ file_name = "#{working_path}/countries/#{country.id}.json"
93
+
94
+ ActiveGit::Synchronizer.synchronize ActiveGit::DbDelete.new(file_name, working_path)
95
+
96
+ Country.find_by_id(country.id).should be_nil
97
+ end
98
+
99
+ end
100
+
101
101
  end