active_git 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/lib/active_git.rb CHANGED
@@ -53,11 +53,12 @@ module ActiveGit
53
53
  def self.batch(&block)
54
54
  @batch_mode = true
55
55
  begin
56
- yield
56
+ result = yield
57
57
  Synchronizer.synchronize @events
58
+ result
58
59
  ensure
59
60
  @batch_mode = false
60
- @events.clear
61
+ @events.clear if @events
61
62
  end
62
63
  end
63
64
 
@@ -1,6 +1,12 @@
1
1
  module ActiveGit
2
2
  class Configuration
3
3
 
4
+ attr_accessor :sync_batch_size
5
+
6
+ def initialize
7
+ @sync_batch_size = 10000
8
+ end
9
+
4
10
  def working_path
5
11
  @working_path.is_a?(Proc) ? @working_path.call : @working_path
6
12
  end
@@ -21,7 +21,7 @@ module ActiveGit
21
21
  end
22
22
 
23
23
  def data
24
- json = File.open(@file_name, 'r') { |f| f.readlines.join("\n") }
24
+ json = File.open(@file_name, 'r') { |f| f.read }
25
25
  model.from_json(json)
26
26
  end
27
27
 
@@ -38,4 +38,4 @@ module ActiveGit
38
38
  end
39
39
 
40
40
  end
41
- end
41
+ end
@@ -15,9 +15,11 @@ module ActiveGit
15
15
  if bulk_inserts.any?
16
16
  define_job do
17
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?
18
+ records.each_slice(ActiveGit.configuration.sync_batch_size) do |batch_records|
19
+ ActiveGit.configuration.logger.debug "[ActiveGit] Inserting #{model.model_name} models"
20
+ import_result = model.import batch_records, timestamps: false, validate: false
21
+ raise SynchronizationError.new(import_result.failed_instances) unless import_result.failed_instances.empty?
22
+ end
21
23
  end
22
24
  end
23
25
  end
@@ -30,18 +32,17 @@ module ActiveGit
30
32
  end
31
33
 
32
34
  def bulk_insert(data)
33
- bulk_inserts[data.class] ||= [] unless bulk_inserts.has_key? data.class
34
35
  bulk_inserts[data.class] << data
35
36
  end
36
37
 
37
38
  def define_job(&block)
38
- jobs << Proc.new(&block)
39
+ jobs << block
39
40
  end
40
41
 
41
42
  private
42
43
 
43
44
  def bulk_inserts
44
- @bulk_inserts ||= {}
45
+ @bulk_inserts ||= Hash.new{|h,k| h[k] = []}
45
46
  end
46
47
 
47
48
  def jobs
@@ -1,3 +1,3 @@
1
1
  module ActiveGit
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveGit::Configuration do
4
+
5
+ before :each do
6
+ @working_path = ActiveGit.configuration.working_path
7
+ @bare_path = ActiveGit.configuration.bare_path
8
+ @logger = ActiveGit.configuration.logger
9
+ end
10
+
11
+ after :each do
12
+ ActiveGit.configuration.working_path = @working_path
13
+ ActiveGit.configuration.bare_path = @bare_path
14
+ ActiveGit.configuration.logger = @logger
15
+ end
16
+
17
+ it 'default sync_batch_size' do
18
+ ActiveGit.configuration.sync_batch_size.should eq 10000
19
+ end
20
+
21
+ it 'set sync_batch_size' do
22
+ ActiveGit.configuration.sync_batch_size = 100
23
+ ActiveGit.configuration.sync_batch_size.should eq 100
24
+ end
25
+
26
+ it 'set working_path with string' do
27
+ ActiveGit.configuration.working_path = "/path_to_test"
28
+ ActiveGit.configuration.working_path.should eq "/path_to_test"
29
+ end
30
+
31
+ it 'set working_path with block' do
32
+ ActiveGit.configuration.working_path = lambda do
33
+ path_home = '/home'
34
+ "#{path_home}/path_to_test"
35
+ end
36
+ ActiveGit.configuration.working_path.should eq "/home/path_to_test"
37
+ end
38
+
39
+ it 'set bare_path with string' do
40
+ ActiveGit.configuration.bare_path = "/path_to_test"
41
+ ActiveGit.configuration.bare_path.should eq "/path_to_test"
42
+ end
43
+
44
+ it 'set bare_path with block' do
45
+ ActiveGit.configuration.bare_path = lambda do
46
+ path_home = '/home'
47
+ "#{path_home}/path_to_test"
48
+ end
49
+ ActiveGit.configuration.bare_path.should eq "/home/path_to_test"
50
+ end
51
+
52
+ it 'get default logger' do
53
+ ActiveGit.configuration.logger.should be_a Logger
54
+ end
55
+
56
+ it 'set logger' do
57
+ logger = Logger.new($stdout)
58
+ ActiveGit.configuration.logger.should_not eq logger
59
+ ActiveGit.configuration.logger = logger
60
+ ActiveGit.configuration.logger.should eq logger
61
+ end
62
+
63
+ end
@@ -35,7 +35,7 @@ describe ActiveGit::Inflector do
35
35
  ActiveGit::Inflector.model("#{working_path}/countries/1.json", working_path).should be Country
36
36
  end
37
37
 
38
- it 'Model from filename' do
38
+ it 'Nested model from filename' do
39
39
  ActiveGit::Inflector.model("#{working_path}/crm/customers/1.json", working_path).should be Crm::Customer
40
40
  end
41
41
 
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,14 @@ require 'logger'
4
4
 
5
5
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
6
6
 
7
- ActiveRecord::Base.logger = Logger.new($stdout)
8
- ActiveRecord::Base.logger.level = Logger::Severity::ERROR
9
7
  ActiveRecord::Migrator.migrations_path = "#{File.dirname(__FILE__)}/migrations"
8
+ ActiveRecord::Migration.verbose = false
10
9
 
11
- ActiveGit.configuration.logger.level = Logger::Severity::ERROR
10
+ logger = Logger.new($stdout)
11
+ logger.level = Logger::Severity::FATAL
12
+
13
+ ActiveRecord::Base.logger = logger
14
+ ActiveGit.configuration.logger = logger
12
15
 
13
16
  module InflectorHelper
14
17
  def git_dirname(model, working_path=nil)
@@ -96,6 +96,31 @@ describe ActiveGit::Synchronizer do
96
96
  Country.find_by_id(country.id).should be_nil
97
97
  end
98
98
 
99
+ it 'Batch size' do
100
+ ActiveGit.configuration.sync_batch_size = 2
101
+
102
+ working_path = @file_helper.create_temp_folder
103
+
104
+ countries = 10.times.map do |i|
105
+ Country.new(name: "Country #{i}") do |country|
106
+ country.id = i.to_s
107
+ country.created_at = Time.now
108
+ country.updated_at = Time.now
109
+ end
110
+ end
111
+ ActiveGit::Synchronizer.synchronize countries.map {|c| ActiveGit::FileSave.new(c, working_path)}
112
+
113
+ events = countries.map do |country|
114
+ ActiveGit::DbCreate.new(ActiveGit::Inflector.filename(country, working_path), working_path)
115
+ end
116
+
117
+ Country.should_receive(:import).
118
+ exactly(5).times.
119
+ and_return(double(failed_instances: []))
120
+
121
+ ActiveGit::Synchronizer.synchronize events
122
+ end
123
+
99
124
  end
100
125
 
101
126
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_git
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
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: 2013-08-04 00:00:00.000000000 Z
12
+ date: 2013-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -206,6 +206,7 @@ files:
206
206
  - spec/active_record_extension_spec.rb
207
207
  - spec/batch_synchronization_spec.rb
208
208
  - spec/commands_spec.rb
209
+ - spec/configuration_spec.rb
209
210
  - spec/coverage_helper.rb
210
211
  - spec/inflector_spec.rb
211
212
  - spec/migrations/20121004135939_create_countries.rb
@@ -231,18 +232,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
231
232
  - - ! '>='
232
233
  - !ruby/object:Gem::Version
233
234
  version: '0'
234
- segments:
235
- - 0
236
- hash: -181325600156632224
237
235
  required_rubygems_version: !ruby/object:Gem::Requirement
238
236
  none: false
239
237
  requirements:
240
238
  - - ! '>='
241
239
  - !ruby/object:Gem::Version
242
240
  version: '0'
243
- segments:
244
- - 0
245
- hash: -181325600156632224
246
241
  requirements: []
247
242
  rubyforge_project:
248
243
  rubygems_version: 1.8.25
@@ -253,6 +248,7 @@ test_files:
253
248
  - spec/active_record_extension_spec.rb
254
249
  - spec/batch_synchronization_spec.rb
255
250
  - spec/commands_spec.rb
251
+ - spec/configuration_spec.rb
256
252
  - spec/coverage_helper.rb
257
253
  - spec/inflector_spec.rb
258
254
  - spec/migrations/20121004135939_create_countries.rb