active_git 0.0.4 → 0.0.5
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/.coveralls.yml +2 -0
- data/.travis.yml +6 -2
- data/Gemfile +2 -0
- data/README.md +4 -0
- data/Rakefile +9 -0
- data/active_git.gemspec +11 -2
- data/lib/active_git/commands.rb +2 -2
- data/lib/active_git/events/db_create.rb +1 -1
- data/lib/active_git/events/db_delete.rb +1 -5
- data/lib/active_git/events/db_event.rb +13 -1
- data/lib/active_git/events/db_update.rb +2 -7
- data/lib/active_git/inflector.rb +9 -1
- data/lib/active_git/version.rb +1 -1
- data/spec/coverage_helper.rb +8 -0
- data/spec/inflector_spec.rb +9 -0
- data/spec/spec_helper.rb +9 -1
- data/spec/support/helpers/file_helper.rb +0 -6
- metadata +131 -43
data/.coveralls.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 1.9.2
|
4
3
|
- 1.9.3
|
5
4
|
- 2.0
|
6
5
|
- jruby
|
7
|
-
|
6
|
+
env:
|
7
|
+
- DB=postgresql
|
8
|
+
before_script:
|
9
|
+
- git config --global user.name "User Name"
|
10
|
+
- git config --global user.email "user@mail.com"
|
11
|
+
- psql -c 'create database test' -U postgres
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# ActiveGit
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/active_git)
|
3
4
|
[](https://travis-ci.org/gabynaiman/active_git)
|
5
|
+
[](https://coveralls.io/r/gabynaiman/active_git?branch=master)
|
6
|
+
[](https://codeclimate.com/github/gabynaiman/active_git)
|
7
|
+
[](https://gemnasium.com/gabynaiman/active_git)
|
4
8
|
|
5
9
|
DB and GIT synchronization via ActiveRecord and GitWrapper
|
6
10
|
|
data/Rakefile
CHANGED
@@ -1,2 +1,11 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new do |task|
|
6
|
+
task.pattern = 'spec/**/*_spec.rb'
|
7
|
+
task.rspec_opts = '--tty --color -f documentation'
|
8
|
+
task.verbose = false
|
9
|
+
end
|
10
|
+
|
11
|
+
task default: :spec
|
data/active_git.gemspec
CHANGED
@@ -16,10 +16,19 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
|
18
18
|
s.add_dependency 'activerecord', '>= 3.0.0'
|
19
|
-
s.add_dependency 'git_wrapper', '~> 1.
|
19
|
+
s.add_dependency 'git_wrapper', '~> 1.1'
|
20
20
|
s.add_dependency 'activerecord-import'
|
21
21
|
s.add_dependency 'easy_diff'
|
22
22
|
|
23
|
+
s.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
s.add_development_dependency "rake"
|
23
25
|
s.add_development_dependency 'rspec'
|
24
|
-
s.add_development_dependency
|
26
|
+
s.add_development_dependency "simplecov"
|
27
|
+
if RUBY_ENGINE == 'jruby'
|
28
|
+
s.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
|
29
|
+
s.add_development_dependency 'activerecord-jdbcpostgresql-adapter'
|
30
|
+
else
|
31
|
+
s.add_development_dependency 'sqlite3'
|
32
|
+
s.add_development_dependency 'pg'
|
33
|
+
end
|
25
34
|
end
|
data/lib/active_git/commands.rb
CHANGED
@@ -44,7 +44,7 @@ module ActiveGit
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def merge(commit)
|
47
|
-
last_log = log.first
|
47
|
+
last_log = (log || []).first
|
48
48
|
diffs = diff_reverse commit unless last_log
|
49
49
|
|
50
50
|
unless repository.merge(commit)
|
@@ -58,7 +58,7 @@ module ActiveGit
|
|
58
58
|
synchronize_diffs diffs
|
59
59
|
rescue => e
|
60
60
|
ActiveGit.configuration.logger.error "[ActiveGit] #{e}"
|
61
|
-
reset
|
61
|
+
last_log ? reset(last_log.commit_hash) : reset
|
62
62
|
return false
|
63
63
|
end
|
64
64
|
|
@@ -2,11 +2,7 @@ module ActiveGit
|
|
2
2
|
class DbDelete < DbEvent
|
3
3
|
|
4
4
|
def synchronize(synchronizer)
|
5
|
-
synchronizer
|
6
|
-
ActiveGit.configuration.logger.debug "[ActiveGit] Deleting #{model.model_name} #{model_id}"
|
7
|
-
record = model.find_by_id(model_id)
|
8
|
-
record.delete if record
|
9
|
-
end
|
5
|
+
delete synchronizer
|
10
6
|
end
|
11
7
|
|
12
8
|
end
|
@@ -10,7 +10,7 @@ module ActiveGit
|
|
10
10
|
raise 'Must implement in subclass'
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
private
|
14
14
|
|
15
15
|
def model
|
16
16
|
@model ||= Inflector.model(@file_name, @working_path)
|
@@ -25,5 +25,17 @@ module ActiveGit
|
|
25
25
|
model.from_json(json)
|
26
26
|
end
|
27
27
|
|
28
|
+
def create(synchronizer)
|
29
|
+
synchronizer.bulk_insert data
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete(synchronizer)
|
33
|
+
synchronizer.define_job do
|
34
|
+
ActiveGit.configuration.logger.debug "[ActiveGit] Deleting #{model.model_name} #{model_id}"
|
35
|
+
record = model.find_by_id(model_id)
|
36
|
+
record.delete if record
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
28
40
|
end
|
29
41
|
end
|
@@ -2,13 +2,8 @@ module ActiveGit
|
|
2
2
|
class DbUpdate < DbEvent
|
3
3
|
|
4
4
|
def synchronize(synchronizer)
|
5
|
-
synchronizer
|
6
|
-
|
7
|
-
synchronizer.define_job do
|
8
|
-
ActiveGit.configuration.logger.debug "[ActiveGit] Deleting #{model.model_name} #{model_id}"
|
9
|
-
record = model.find_by_id(model_id)
|
10
|
-
record.delete if record
|
11
|
-
end
|
5
|
+
delete synchronizer
|
6
|
+
create synchronizer
|
12
7
|
end
|
13
8
|
|
14
9
|
end
|
data/lib/active_git/inflector.rb
CHANGED
@@ -1,14 +1,22 @@
|
|
1
1
|
module ActiveGit
|
2
2
|
module Inflector
|
3
3
|
|
4
|
+
def self.relative_dirname(model)
|
5
|
+
model.model_name.underscore.pluralize
|
6
|
+
end
|
7
|
+
|
4
8
|
def self.dirname(model, working_path=nil)
|
5
|
-
"#{working_path || ActiveGit.configuration.working_path}/#{model
|
9
|
+
"#{working_path || ActiveGit.configuration.working_path}/#{relative_dirname(model)}"
|
6
10
|
end
|
7
11
|
|
8
12
|
def self.filename(instance, working_path=nil)
|
9
13
|
"#{dirname(instance.class, working_path || ActiveGit.configuration.working_path)}/#{instance.id}.json"
|
10
14
|
end
|
11
15
|
|
16
|
+
def self.relative_filename(instance)
|
17
|
+
"#{relative_dirname(instance.class)}/#{instance.id}.json"
|
18
|
+
end
|
19
|
+
|
12
20
|
def self.model(filename, working_path=nil)
|
13
21
|
File.dirname(filename.gsub(working_path || ActiveGit.configuration.working_path, '')).classify.constantize
|
14
22
|
end
|
data/lib/active_git/version.rb
CHANGED
data/spec/inflector_spec.rb
CHANGED
@@ -12,6 +12,10 @@ describe ActiveGit::Inflector do
|
|
12
12
|
ActiveGit::Inflector.dirname(Crm::Customer, working_path).should eq "#{working_path}/crm/customers"
|
13
13
|
end
|
14
14
|
|
15
|
+
it 'Git relative path' do
|
16
|
+
ActiveGit::Inflector.relative_dirname(Country).should eq "countries"
|
17
|
+
end
|
18
|
+
|
15
19
|
it 'Git file' do
|
16
20
|
country = Country.create! name: 'Argentina'
|
17
21
|
ActiveGit::Inflector.filename(country, working_path).should eq "#{working_path}/countries/#{country.id}.json"
|
@@ -22,6 +26,11 @@ describe ActiveGit::Inflector do
|
|
22
26
|
ActiveGit::Inflector.filename(customer, working_path).should eq "#{working_path}/crm/customers/#{customer.id}.json"
|
23
27
|
end
|
24
28
|
|
29
|
+
it 'Git relative file' do
|
30
|
+
country = Country.create! name: 'Argentina'
|
31
|
+
ActiveGit::Inflector.relative_filename(country).should eq "countries/#{country.id}.json"
|
32
|
+
end
|
33
|
+
|
25
34
|
it 'Model from filename' do
|
26
35
|
ActiveGit::Inflector.model("#{working_path}/countries/1.json", working_path).should be Country
|
27
36
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
+
require 'coverage_helper'
|
1
2
|
require 'active_git'
|
2
3
|
require 'logger'
|
3
4
|
|
4
5
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
5
6
|
|
6
7
|
ActiveRecord::Base.logger = Logger.new($stdout)
|
8
|
+
ActiveRecord::Base.logger.level = Logger::Severity::ERROR
|
7
9
|
ActiveRecord::Migrator.migrations_path = "#{File.dirname(__FILE__)}/migrations"
|
8
10
|
|
11
|
+
ActiveGit.configuration.logger.level = Logger::Severity::ERROR
|
12
|
+
|
9
13
|
module InflectorHelper
|
10
14
|
def git_dirname(model, working_path=nil)
|
11
15
|
ActiveGit::Inflector.dirname(model, working_path || ActiveGit.configuration.working_path)
|
@@ -26,7 +30,11 @@ RSpec.configure do |config|
|
|
26
30
|
end
|
27
31
|
|
28
32
|
config.before :all do
|
29
|
-
|
33
|
+
if ENV['DB'] == 'postgresql'
|
34
|
+
ActiveRecord::Base.establish_connection adapter: 'postgresql', database: 'test', username: 'postgres'
|
35
|
+
else
|
36
|
+
ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
|
37
|
+
end
|
30
38
|
ActiveRecord::Base.connection
|
31
39
|
ActiveRecord::Migrator.migrate ActiveRecord::Migrator.migrations_path
|
32
40
|
end
|
@@ -19,12 +19,6 @@ class FileHelper
|
|
19
19
|
end
|
20
20
|
end
|
21
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
22
|
def write_file(file_name, content)
|
29
23
|
Dir.mkdir File.dirname(file_name) unless Dir.exist? File.dirname(file_name)
|
30
24
|
File.open(file_name, 'w') { |f| f.puts content }
|
metadata
CHANGED
@@ -1,112 +1,190 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_git
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Gabriel Naiman
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
|
17
|
-
none: false
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
18
|
- - ! '>='
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: 3.0.0
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
21
|
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
24
|
- - ! '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.0.0
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :runtime
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: git_wrapper
|
32
|
-
|
33
|
-
none: false
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
33
|
requirements:
|
35
34
|
- - ~>
|
36
35
|
- !ruby/object:Gem::Version
|
37
|
-
version: '1.
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
version: '1.1'
|
41
37
|
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
42
39
|
requirements:
|
43
40
|
- - ~>
|
44
41
|
- !ruby/object:Gem::Version
|
45
|
-
version: '1.
|
42
|
+
version: '1.1'
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :runtime
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: activerecord-import
|
48
|
-
|
49
|
-
none: false
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
49
|
requirements:
|
51
50
|
- - ! '>='
|
52
51
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
-
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
version: !binary |-
|
53
|
+
MA==
|
57
54
|
none: false
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
58
56
|
requirements:
|
59
57
|
- - ! '>='
|
60
58
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
59
|
+
version: !binary |-
|
60
|
+
MA==
|
61
|
+
none: false
|
62
|
+
prerelease: false
|
63
|
+
type: :runtime
|
62
64
|
- !ruby/object:Gem::Dependency
|
63
65
|
name: easy_diff
|
64
|
-
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: !binary |-
|
71
|
+
MA==
|
65
72
|
none: false
|
73
|
+
requirement: !ruby/object:Gem::Requirement
|
66
74
|
requirements:
|
67
75
|
- - ! '>='
|
68
76
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
77
|
+
version: !binary |-
|
78
|
+
MA==
|
79
|
+
none: false
|
80
|
+
prerelease: false
|
70
81
|
type: :runtime
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: bundler
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '1.3'
|
89
|
+
none: false
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '1.3'
|
95
|
+
none: false
|
71
96
|
prerelease: false
|
97
|
+
type: :development
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rake
|
72
100
|
version_requirements: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: !binary |-
|
105
|
+
MA==
|
73
106
|
none: false
|
107
|
+
requirement: !ruby/object:Gem::Requirement
|
74
108
|
requirements:
|
75
109
|
- - ! '>='
|
76
110
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
111
|
+
version: !binary |-
|
112
|
+
MA==
|
113
|
+
none: false
|
114
|
+
prerelease: false
|
115
|
+
type: :development
|
78
116
|
- !ruby/object:Gem::Dependency
|
79
117
|
name: rspec
|
80
|
-
|
118
|
+
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ! '>='
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: !binary |-
|
123
|
+
MA==
|
81
124
|
none: false
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
82
126
|
requirements:
|
83
127
|
- - ! '>='
|
84
128
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
86
|
-
|
129
|
+
version: !binary |-
|
130
|
+
MA==
|
131
|
+
none: false
|
87
132
|
prerelease: false
|
133
|
+
type: :development
|
134
|
+
- !ruby/object:Gem::Dependency
|
135
|
+
name: simplecov
|
88
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ! '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: !binary |-
|
141
|
+
MA==
|
89
142
|
none: false
|
143
|
+
requirement: !ruby/object:Gem::Requirement
|
90
144
|
requirements:
|
91
145
|
- - ! '>='
|
92
146
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
147
|
+
version: !binary |-
|
148
|
+
MA==
|
149
|
+
none: false
|
150
|
+
prerelease: false
|
151
|
+
type: :development
|
94
152
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
96
|
-
|
153
|
+
name: activerecord-jdbcsqlite3-adapter
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: !binary |-
|
159
|
+
MA==
|
97
160
|
none: false
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
98
162
|
requirements:
|
99
163
|
- - ! '>='
|
100
164
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
102
|
-
|
165
|
+
version: !binary |-
|
166
|
+
MA==
|
167
|
+
none: false
|
103
168
|
prerelease: false
|
169
|
+
type: :development
|
170
|
+
- !ruby/object:Gem::Dependency
|
171
|
+
name: activerecord-jdbcpostgresql-adapter
|
104
172
|
version_requirements: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: !binary |-
|
177
|
+
MA==
|
105
178
|
none: false
|
179
|
+
requirement: !ruby/object:Gem::Requirement
|
106
180
|
requirements:
|
107
181
|
- - ! '>='
|
108
182
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
183
|
+
version: !binary |-
|
184
|
+
MA==
|
185
|
+
none: false
|
186
|
+
prerelease: false
|
187
|
+
type: :development
|
110
188
|
description: DB and GIT synchronization via ActiveRecord and GitWrapper
|
111
189
|
email:
|
112
190
|
- gabynaiman@gmail.com
|
@@ -114,6 +192,7 @@ executables: []
|
|
114
192
|
extensions: []
|
115
193
|
extra_rdoc_files: []
|
116
194
|
files:
|
195
|
+
- .coveralls.yml
|
117
196
|
- .gitignore
|
118
197
|
- .travis.yml
|
119
198
|
- Gemfile
|
@@ -140,6 +219,7 @@ files:
|
|
140
219
|
- lib/active_git/version.rb
|
141
220
|
- spec/active_record_extension_spec.rb
|
142
221
|
- spec/commands_spec.rb
|
222
|
+
- spec/coverage_helper.rb
|
143
223
|
- spec/inflector_spec.rb
|
144
224
|
- spec/migrations/20121004135939_create_countries.rb
|
145
225
|
- spec/migrations/20121004135940_create_languages.rb
|
@@ -154,31 +234,40 @@ files:
|
|
154
234
|
- spec/synchronization_spec.rb
|
155
235
|
homepage: https://github.com/gabynaiman/active_git
|
156
236
|
licenses: []
|
157
|
-
post_install_message:
|
237
|
+
post_install_message:
|
158
238
|
rdoc_options: []
|
159
239
|
require_paths:
|
160
240
|
- lib
|
161
241
|
required_ruby_version: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
242
|
requirements:
|
164
243
|
- - ! '>='
|
165
244
|
- !ruby/object:Gem::Version
|
166
|
-
|
167
|
-
|
245
|
+
segments:
|
246
|
+
- 0
|
247
|
+
hash: 2
|
248
|
+
version: !binary |-
|
249
|
+
MA==
|
168
250
|
none: false
|
251
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
252
|
requirements:
|
170
253
|
- - ! '>='
|
171
254
|
- !ruby/object:Gem::Version
|
172
|
-
|
255
|
+
segments:
|
256
|
+
- 0
|
257
|
+
hash: 2
|
258
|
+
version: !binary |-
|
259
|
+
MA==
|
260
|
+
none: false
|
173
261
|
requirements: []
|
174
|
-
rubyforge_project:
|
262
|
+
rubyforge_project:
|
175
263
|
rubygems_version: 1.8.24
|
176
|
-
signing_key:
|
264
|
+
signing_key:
|
177
265
|
specification_version: 3
|
178
266
|
summary: DB and GIT synchronization via ActiveRecord and GitWrapper
|
179
267
|
test_files:
|
180
268
|
- spec/active_record_extension_spec.rb
|
181
269
|
- spec/commands_spec.rb
|
270
|
+
- spec/coverage_helper.rb
|
182
271
|
- spec/inflector_spec.rb
|
183
272
|
- spec/migrations/20121004135939_create_countries.rb
|
184
273
|
- spec/migrations/20121004135940_create_languages.rb
|
@@ -191,4 +280,3 @@ test_files:
|
|
191
280
|
- spec/support/models/customer.rb
|
192
281
|
- spec/support/models/language.rb
|
193
282
|
- spec/synchronization_spec.rb
|
194
|
-
has_rdoc:
|