active_git 0.0.6 → 0.0.7

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/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