eternity 0.0.5 → 0.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3c5b9f3dd98ebf47e906a3ea8a97213bbbe22e3
4
- data.tar.gz: 3b22572ec87e97029cb40cac6d7fed5cd284b584
3
+ metadata.gz: a7844d5b55ae3bf3ee53f5ffebe730e65c586071
4
+ data.tar.gz: 44489d244b55008ab3a484290e5f9e261ee77c2d
5
5
  SHA512:
6
- metadata.gz: 9e95c9952cf6ee5b3915a31dfc84cb470a5631a8250474a68db32ead4bfd0e3aaff4a79abc03503400317d3e6dab0955325d70ae1a5c784f9035ecb2857cc79d
7
- data.tar.gz: 8a54e838947cb958fedbd20be7fcc1e4ca162b6098a3636963093f0f1eada3c43fa5dbc788be9e6211080ae99235fa497932ae1bf4a544e066ec19396f61283e
6
+ metadata.gz: a478d2902be86a627498d81fa69b6191cb45c9574d26c520be0142b0ac051a533bb6e8a38772eda97d6579b1d987afeca7febc3cf21240b6ff40f5bba9ad8b33
7
+ data.tar.gz: 335f532289063578604144fde234b8ec2a62d91fb8ee1a205e9b5aa957f674d987e6307b7f58a614bcbc050d0b0351034350e09baa2cfed224b99432e6be6648
@@ -1 +1 @@
1
- ruby 2.1.0
1
+ ruby 2.0
@@ -18,10 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'redic', '~> 1.2.0'
22
- spec.add_dependency 'restruct', '~> 0.0.3'
21
+ spec.add_dependency 'redic', '~> 1.5.0'
22
+ spec.add_dependency 'restruct', '~> 0.1.0'
23
23
  spec.add_dependency 'class_config', '~> 0.0.2'
24
- spec.add_dependency 'locky', '~> 0.0.3'
25
24
  spec.add_dependency 'transparent_proxy', '~> 0.0.4'
26
25
 
27
26
  if RUBY_PLATFORM == 'java'
@@ -33,6 +32,7 @@ Gem::Specification.new do |spec|
33
32
  spec.add_development_dependency 'bundler', '~> 1.5'
34
33
  spec.add_development_dependency 'rake'
35
34
  spec.add_development_dependency 'minitest', '~> 4.7'
35
+ spec.add_development_dependency "minitest-great_expectations"
36
36
  spec.add_development_dependency 'turn', '~> 0.9'
37
37
  spec.add_development_dependency 'simplecov'
38
38
  spec.add_development_dependency 'pry-nav'
@@ -7,7 +7,6 @@ require 'fileutils'
7
7
  require 'forwardable'
8
8
  require 'restruct'
9
9
  require 'base64'
10
- require 'locky'
11
10
  require 'transparent_proxy'
12
11
 
13
12
  module Eternity
@@ -20,24 +19,24 @@ module Eternity
20
19
 
21
20
  extend ClassConfig
22
21
 
23
- attr_config :redis, Redic.new
22
+ attr_config :connection, Restruct::Connection.new
24
23
  attr_config :keyspace, Restruct::Id.new(:eternity)
25
24
  attr_config :blob_cache_expiration, 24 * 60 * 60 # 1 day in seconds
26
25
  attr_config :blob_path, File.join(Dir.home, '.eternity')
27
26
  attr_config :logger, Logger.new(STDOUT)
28
27
 
29
- def self.locker_storage
30
- @locker_storage ||= Restruct::MarshalHash.new redis: Redic.new(redis.url),
31
- id: keyspace[:locker]
28
+ def self.locker_for(repository_name)
29
+ Restruct::Locker.new connection: connection,
30
+ id: keyspace[:locker][:repository][repository_name]
32
31
  end
33
-
32
+
34
33
  def self.redis_keys
35
- redis.call 'KEYS', keyspace['*']
34
+ connection.call 'KEYS', keyspace['*']
36
35
  end
37
36
 
38
37
  def self.clear_redis
39
38
  redis_keys.each do |key|
40
- redis.call 'DEL', key
39
+ connection.call 'DEL', key
41
40
  end
42
41
  end
43
42
 
@@ -53,24 +53,24 @@ module Eternity
53
53
  end
54
54
 
55
55
  def clear_cache
56
- Eternity.redis.call('KEYS', Eternity.keyspace[:blob]['*']).each_slice(1000) do |keys|
57
- Eternity.redis.call 'DEL', *keys
56
+ Eternity.connection.call('KEYS', Eternity.keyspace[:blob]['*']).each_slice(1000) do |keys|
57
+ Eternity.connection.call 'DEL', *keys
58
58
  end
59
59
  end
60
60
 
61
61
  def count
62
- Eternity.redis.call('KEYS', Eternity.keyspace[:blob]['*']).count
62
+ Eternity.connection.call('KEYS', Eternity.keyspace[:blob]['*']).count
63
63
  end
64
64
 
65
65
  private
66
66
 
67
67
  def write_redis(type, sha1, serialization)
68
- Eternity.redis.call 'SET', Eternity.keyspace[:blob][type][sha1], serialization,
68
+ Eternity.connection.call 'SET', Eternity.keyspace[:blob][type][sha1], serialization,
69
69
  'EX', Eternity.blob_cache_expiration
70
70
  end
71
71
 
72
72
  def read_redis(type, sha1)
73
- Eternity.redis.call 'GET', Eternity.keyspace[:blob][type][sha1]
73
+ Eternity.connection.call 'GET', Eternity.keyspace[:blob][type][sha1]
74
74
  end
75
75
 
76
76
  def write_file(type, sha1, serialization)
@@ -25,7 +25,7 @@ module Eternity
25
25
  private
26
26
 
27
27
  def branches
28
- @branches ||= Restruct::Hash.new redis: Eternity.redis,
28
+ @branches ||= Restruct::Hash.new connection: Eternity.connection,
29
29
  id: Eternity.keyspace[:branches]
30
30
  end
31
31
 
@@ -44,7 +44,7 @@ module Eternity
44
44
  attr_reader :changes
45
45
 
46
46
  def locker
47
- Locky.new repository_name, Eternity.locker_storage
47
+ Eternity.locker_for repository_name
48
48
  end
49
49
 
50
50
  def repository_name
@@ -47,12 +47,13 @@ module Eternity
47
47
  end
48
48
 
49
49
  def history_ids
50
+ return [] if nil?
50
51
  if data['history']
51
52
  Blob.read :history, data['history']
52
53
  else
53
54
  # Backward compatibility
54
- cache_key = Eternity.keyspace[:cache][:history][id]
55
- return Eternity.redis.call 'LRANGE', cache_key, 0, -1 if Eternity.redis.call('EXISTS', cache_key) == 1
55
+ cache_key = self.class.history_cache_key[id]
56
+ return Eternity.connection.call 'LRANGE', cache_key, 0, -1 if Eternity.connection.call('EXISTS', cache_key) == 1
56
57
 
57
58
  commit_ids =
58
59
  if parent_ids.count == 2
@@ -64,7 +65,7 @@ module Eternity
64
65
  parent_id ? [parent_id] + Commit.new(parent_id).history_ids : []
65
66
  end
66
67
 
67
- Eternity.redis.call 'RPUSH', cache_key, *commit_ids
68
+ Eternity.connection.call 'RPUSH', cache_key, *commit_ids
68
69
 
69
70
  commit_ids
70
71
  end
@@ -75,6 +76,7 @@ module Eternity
75
76
  end
76
77
 
77
78
  def fast_forward?(commit)
79
+ return false if nil?
78
80
  return true if commit.nil?
79
81
  history_ids.include? commit.id
80
82
  end
@@ -159,6 +161,16 @@ module Eternity
159
161
  false
160
162
  end
161
163
 
164
+ def self.history_cache_key
165
+ Eternity.keyspace[:cache][:history]
166
+ end
167
+
168
+ def self.clear_history_cache
169
+ Eternity.connection.call('KEYS', history_cache_key['*']).each_slice(1000) do |keys|
170
+ Eternity.connection.call 'DEL', *keys
171
+ end
172
+ end
173
+
162
174
  private
163
175
 
164
176
  def data
@@ -1,9 +1,12 @@
1
1
  module Eternity
2
2
  class Index < Restruct::NestedHash.new(CollectionIndex)
3
3
 
4
- def initialize
5
- super redis: Eternity.redis,
6
- id: Eternity.keyspace[:index][SecureRandom.uuid]
4
+ attr_reader :name
5
+
6
+ def initialize(name=nil)
7
+ @name = name ? name.to_s : SecureRandom.uuid
8
+ super connection: Eternity.connection,
9
+ id: Eternity.keyspace[:index][@name]
7
10
  end
8
11
 
9
12
  def apply(delta)
@@ -25,5 +28,13 @@ module Eternity
25
28
  end
26
29
  end
27
30
 
31
+ def self.all
32
+ sections_count = Eternity.keyspace[:index].sections.count
33
+ names = Eternity.connection.call('KEYS', Eternity.keyspace[:index]['*']).map do |key|
34
+ Restruct::Id.new(key).sections[sections_count]
35
+ end.uniq
36
+ names.map { |name| new name }
37
+ end
38
+
28
39
  end
29
40
  end
@@ -46,7 +46,7 @@ module Eternity
46
46
  end
47
47
 
48
48
  def locker
49
- Locky.new repository_name, Eternity.locker_storage
49
+ Eternity.locker_for repository_name
50
50
  end
51
51
 
52
52
  def repository_name
@@ -7,10 +7,10 @@ module Eternity
7
7
  @name = name.to_s
8
8
  @id = Eternity.keyspace[:repository][@name]
9
9
  @tracker = Tracker.new self
10
- @current = Restruct::Hash.new redis: Eternity.redis, id: id[:current]
11
- @branches = Restruct::Hash.new redis: Eternity.redis, id: id[:branches]
12
- @locker = Locky.new @name, Eternity.locker_storage
13
- @default_branch = options.fetch(:default_branch) { 'master' }.to_s
10
+ @current = Restruct::Hash.new connection: Eternity.connection, id: id[:current]
11
+ @branches = Restruct::Hash.new connection: Eternity.connection, id: id[:branches]
12
+ @locker = Eternity.locker_for @name
13
+ @default_branch = options.fetch(:default_branch, 'master').to_s
14
14
  end
15
15
 
16
16
  def [](collection)
@@ -171,6 +171,14 @@ module Eternity
171
171
  self.delta = dump['delta']
172
172
  end
173
173
 
174
+ def self.all
175
+ sections_count = Eternity.keyspace[:repository].sections.count
176
+ names = Eternity.connection.call('KEYS', Eternity.keyspace[:repository]['*']).map do |key|
177
+ Restruct::Id.new(key).sections[sections_count]
178
+ end.uniq
179
+ names.map { |name| new name }
180
+ end
181
+
174
182
  private
175
183
 
176
184
  attr_reader :tracker, :current, :locker
@@ -10,7 +10,7 @@ module Eternity
10
10
 
11
11
  def initialize(repository)
12
12
  @repository = repository
13
- @changes = Changes.new redis: Eternity.redis,
13
+ @changes = Changes.new connection: Eternity.connection,
14
14
  id: repository.id[:changes]
15
15
  end
16
16
 
@@ -1,3 +1,3 @@
1
1
  module Eternity
2
- VERSION = '0.0.5'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -30,14 +30,14 @@ describe Blob do
30
30
  it 'Write in redis and file system' do
31
31
  sha1 = Blob.write :xyz, data
32
32
 
33
- redis_data = redis.call 'GET', key
33
+ redis_data = connection.call 'GET', key
34
34
  file_data = wait_and_read_file filename
35
35
 
36
36
  [redis_data, decode(file_data)].each { |d| MessagePack.unpack(d).must_equal data }
37
37
  end
38
38
 
39
39
  it 'Read from redis' do
40
- redis.call 'SET', key, serialization
40
+ connection.call 'SET', key, serialization
41
41
 
42
42
  refute File.exists?(filename)
43
43
  Blob.read(:xyz, sha1).must_equal data
@@ -47,7 +47,7 @@ describe Blob do
47
47
  FileUtils.mkpath File.dirname(filename)
48
48
  File.write filename, encode(serialization)
49
49
 
50
- redis.call('GET', key).must_be_nil
50
+ connection.call('GET', key).must_be_nil
51
51
  Blob.read(:xyz, sha1).must_equal data
52
52
  end
53
53
 
@@ -72,10 +72,22 @@ describe Repository, 'Commit' do
72
72
  error.message.must_equal 'Message must be present'
73
73
  end
74
74
 
75
+ it 'Clear history cache' do
76
+ 3.times do
77
+ connection.call 'RPUSH', Commit.history_cache_key[SecureRandom.uuid], SecureRandom.uuid
78
+ end
79
+
80
+ connection.call('KEYS', Commit.history_cache_key['*']).count.must_equal 3
81
+
82
+ Commit.clear_history_cache
83
+
84
+ connection.call('KEYS', Commit.history_cache_key['*']).count.must_equal 0
85
+ end
86
+
75
87
  describe 'With index' do
76
88
 
77
89
  def assert_transeint_index
78
- redis.call('KEYS', Eternity.keyspace[:index]['*']).must_be_empty
90
+ connection.call('KEYS', Eternity.keyspace[:index]['*']).must_be_empty
79
91
  end
80
92
 
81
93
  it 'Transient' do
@@ -102,5 +114,54 @@ describe Repository, 'Commit' do
102
114
  end
103
115
 
104
116
  end
105
-
117
+
118
+ describe 'Fast Forward' do
119
+
120
+ it 'Both commits nil' do
121
+ current_commit = Commit.new(nil)
122
+ target_commit = Commit.new(nil)
123
+
124
+ target_commit.wont_be :fast_forward?, current_commit
125
+ end
126
+
127
+ it 'Current commit nil' do
128
+ repository[:countries].insert 'AR', name: 'Argentina'
129
+ target_commit = repository.commit author: 'User', message: 'Commit 1'
130
+
131
+ current_commit = Commit.new nil
132
+
133
+ target_commit.must_be :fast_forward?, current_commit
134
+ end
135
+
136
+ it 'Target commit nil' do
137
+ repository[:countries].insert 'AR', name: 'Argentina'
138
+ current_commit = repository.commit author: 'User', message: 'Commit 1'
139
+
140
+ target_commit = Commit.new nil
141
+
142
+ target_commit.wont_be :fast_forward?, current_commit
143
+ end
144
+
145
+ it 'Target commit is not fast forward of current commit' do
146
+ repository[:countries].insert 'AR', name: 'Argentina'
147
+ target_commit = repository.commit author: 'User', message: 'Commit 1'
148
+
149
+ repository[:countries].insert 'BR', name: 'Brasil'
150
+ current_commit = repository.commit author: 'User', message: 'Commit 2'
151
+
152
+ target_commit.wont_be :fast_forward?, current_commit
153
+ end
154
+
155
+ it 'Target commit is fast forward of current commit' do
156
+ repository[:countries].insert 'AR', name: 'Argentina'
157
+ current_commit = repository.commit author: 'User', message: 'Commit 1'
158
+
159
+ repository[:countries].insert 'BR', name: 'Brasil'
160
+ target_commit = repository.commit author: 'User', message: 'Commit 2'
161
+
162
+ target_commit.must_be :fast_forward?, current_commit
163
+ end
164
+
165
+ end
166
+
106
167
  end
@@ -73,4 +73,16 @@ describe Index do
73
73
  index.to_h.must_equal index_2.to_h
74
74
  end
75
75
 
76
+ it 'In memory instances' do
77
+ Index.all.must_be_empty
78
+
79
+ index_1 = Index.new 'index_1'
80
+ index_1[:countries].insert 'AR', name: 'Argentina'
81
+
82
+ index_2 = Index.new 'index_2'
83
+ index_2[:countries].insert 'UY', name: 'Uruguay'
84
+
85
+ Index.all.map(&:name).sort.must_equal %w(index_1 index_2)
86
+ end
87
+
76
88
  end
@@ -4,20 +4,23 @@ describe 'Locking' do
4
4
 
5
5
  let(:repository) { Repository.new :test }
6
6
 
7
- def lock(repo)
8
- Eternity.locker_storage[repo.name] = :test_process
7
+ def with_locked(repository, key=:test_process)
8
+ locker = Eternity.locker_for repository.name
9
+ locker.lock key do
10
+ yield
11
+ end
9
12
  end
10
13
 
11
14
  def assert_locked
12
- error = proc { yield }.must_raise Locky::Error
13
- error.message.must_equal 'test already locked by test_process'
15
+ proc { yield }.must_raise Restruct::LockerError
14
16
  end
15
17
 
16
18
  it 'Commit' do
17
19
  repository[:countries].insert 'AR', name: 'Argentina'
18
- lock repository
19
-
20
- assert_locked { repository.commit author: 'User', message: 'Commit Message' }
20
+
21
+ with_locked repository, :commit do
22
+ assert_locked { repository.commit author: 'User', message: 'Commit Message' }
23
+ end
21
24
 
22
25
  repository.current_commit.must_be_nil
23
26
  repository.changes_count.must_equal 1
@@ -30,9 +33,9 @@ describe 'Locking' do
30
33
  repository[:countries].insert 'UY', name: 'Uruguay'
31
34
  commit_2 = repository.commit author: 'User', message: 'Commit 2'
32
35
 
33
- lock repository
34
-
35
- assert_locked { repository.checkout commit: commit_1.id }
36
+ with_locked repository, :checkout do
37
+ assert_locked { repository.checkout commit: commit_1.id }
38
+ end
36
39
 
37
40
  repository.current_commit.must_equal commit_2
38
41
  end
@@ -46,9 +49,9 @@ describe 'Locking' do
46
49
 
47
50
  repository.checkout commit: commit_1.id
48
51
 
49
- lock repository
50
-
51
- assert_locked { repository.merge commit: commit_2.id }
52
+ with_locked repository, :merge do
53
+ assert_locked { repository.merge commit: commit_2.id }
54
+ end
52
55
 
53
56
  repository.current_commit.must_equal commit_1
54
57
  end
@@ -58,9 +61,9 @@ describe 'Locking' do
58
61
  repository[:countries].insert 'UY', name: 'Uruguay'
59
62
  repository[:cities].insert 'CABA', name: 'Ciudad Autonoma de Buenos Aires'
60
63
 
61
- lock repository
62
-
63
- assert_locked { repository.revert }
64
+ with_locked repository, :revert_all do
65
+ assert_locked { repository.revert }
66
+ end
64
67
 
65
68
  repository.changes_count.must_equal 3
66
69
  repository[:countries].count.must_equal 2
@@ -72,9 +75,9 @@ describe 'Locking' do
72
75
  repository[:countries].insert 'UY', name: 'Uruguay'
73
76
  repository[:cities].insert 'CABA', name: 'Ciudad Autonoma de Buenos Aires'
74
77
 
75
- lock repository
76
-
77
- assert_locked { repository[:countries].revert_all }
78
+ with_locked repository, :revert do
79
+ assert_locked { repository[:countries].revert_all }
80
+ end
78
81
 
79
82
  repository.changes_count.must_equal 3
80
83
  repository[:countries].count.must_equal 2
@@ -82,19 +85,19 @@ describe 'Locking' do
82
85
  end
83
86
 
84
87
  it 'Insert' do
85
- lock repository
86
-
87
- assert_locked { repository[:countries].insert 'AR', name: 'Argentina' }
88
+ with_locked repository do
89
+ assert_locked { repository[:countries].insert 'AR', name: 'Argentina' }
90
+ end
88
91
 
89
92
  repository.changes_count.must_equal 0
90
93
  end
91
94
 
92
95
  it 'Update' do
93
96
  repository[:countries].insert 'AR', name: 'Argentina'
94
-
95
- lock repository
96
-
97
- assert_locked { repository[:countries].update 'AR', name: 'Republica Argentina' }
97
+
98
+ with_locked repository do
99
+ assert_locked { repository[:countries].update 'AR', name: 'Republica Argentina' }
100
+ end
98
101
 
99
102
  repository.delta.must_equal 'countries' => {'AR' => {'action' => 'insert', 'data' => {'name' => 'Argentina'}}}
100
103
  end
@@ -102,9 +105,9 @@ describe 'Locking' do
102
105
  it 'Delete' do
103
106
  repository[:countries].insert 'AR', name: 'Argentina'
104
107
 
105
- lock repository
106
-
107
- assert_locked { repository[:countries].delete 'AR' }
108
+ with_locked repository do
109
+ assert_locked { repository[:countries].delete 'AR' }
110
+ end
108
111
 
109
112
  repository.delta.must_equal 'countries' => {'AR' => {'action' => 'insert', 'data' => {'name' => 'Argentina'}}}
110
113
  end
@@ -112,9 +115,9 @@ describe 'Locking' do
112
115
  it 'Revert' do
113
116
  repository[:countries].insert 'AR', name: 'Argentina'
114
117
 
115
- lock repository
116
-
117
- assert_locked { repository[:countries].revert 'AR' }
118
+ with_locked repository, :revert do
119
+ assert_locked { repository[:countries].revert 'AR' }
120
+ end
118
121
 
119
122
  repository.delta.must_equal 'countries' => {'AR' => {'action' => 'insert', 'data' => {'name' => 'Argentina'}}}
120
123
  end
@@ -1,6 +1,7 @@
1
1
  require 'coverage_helper'
2
2
  require 'eternity'
3
3
  require 'minitest/autorun'
4
+ require 'minitest/great_expectations'
4
5
  require 'timeout'
5
6
  require 'turn'
6
7
  require 'pry-nav'
@@ -21,8 +22,8 @@ Eternity.configure do |config|
21
22
  end
22
23
 
23
24
  class Minitest::Spec
24
- def redis
25
- Eternity.redis
25
+ def connection
26
+ Eternity.connection
26
27
  end
27
28
 
28
29
  def digest(data)
@@ -70,4 +70,17 @@ describe Repository do
70
70
  repository.delta.must_equal 'countries' => {'UY' => {'action' => 'insert', 'data' => {'name' => 'Uruguay'}}}
71
71
  end
72
72
 
73
+ it 'In memory instances' do
74
+ Repository.all.must_be_empty
75
+
76
+ repository_1 = Repository.new 'repository_1'
77
+ repository_1[:countries].insert 'AR', name: 'Argentina'
78
+
79
+ repository_2 = Repository.new 'repository_2'
80
+ repository_2[:countries].insert 'UY', name: 'Uruguay'
81
+
82
+ Repository.all.map(&:name).sort.must_equal %w(repository_1 repository_2)
83
+ end
84
+
85
+
73
86
  end
metadata CHANGED
@@ -1,181 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eternity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-08 00:00:00.000000000 Z
11
+ date: 2015-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redic
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.0
19
+ version: 1.5.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.2.0
26
+ version: 1.5.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: restruct
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 0.0.3
33
+ version: 0.1.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 0.0.3
40
+ version: 0.1.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: class_config
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.0.2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.0.2
55
- - !ruby/object:Gem::Dependency
56
- name: locky
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 0.0.3
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 0.0.3
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: transparent_proxy
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - "~>"
59
+ - - ~>
74
60
  - !ruby/object:Gem::Version
75
61
  version: 0.0.4
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - "~>"
66
+ - - ~>
81
67
  - !ruby/object:Gem::Version
82
68
  version: 0.0.4
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: msgpack
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - "~>"
73
+ - - ~>
88
74
  - !ruby/object:Gem::Version
89
75
  version: 0.5.9
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - "~>"
80
+ - - ~>
95
81
  - !ruby/object:Gem::Version
96
82
  version: 0.5.9
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: bundler
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - "~>"
87
+ - - ~>
102
88
  - !ruby/object:Gem::Version
103
89
  version: '1.5'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - "~>"
94
+ - - ~>
109
95
  - !ruby/object:Gem::Version
110
96
  version: '1.5'
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: rake
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
- - - ">="
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - ">="
108
+ - - '>='
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: minitest
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - "~>"
115
+ - - ~>
130
116
  - !ruby/object:Gem::Version
131
117
  version: '4.7'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - "~>"
122
+ - - ~>
137
123
  - !ruby/object:Gem::Version
138
124
  version: '4.7'
125
+ - !ruby/object:Gem::Dependency
126
+ name: minitest-great_expectations
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: turn
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - "~>"
143
+ - - ~>
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0.9'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ~>
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0.9'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: simplecov
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ">="
157
+ - - '>='
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ">="
164
+ - - '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: pry-nav
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ">="
171
+ - - '>='
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ">="
178
+ - - '>='
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  description: Distributed database version control system
@@ -185,11 +185,11 @@ executables: []
185
185
  extensions: []
186
186
  extra_rdoc_files: []
187
187
  files:
188
- - ".coveralls.yml"
189
- - ".gitignore"
190
- - ".ruby-gemset"
191
- - ".ruby-version"
192
- - ".travis.yml"
188
+ - .coveralls.yml
189
+ - .gitignore
190
+ - .ruby-gemset
191
+ - .ruby-version
192
+ - .travis.yml
193
193
  - Gemfile
194
194
  - LICENSE.txt
195
195
  - README.md
@@ -238,17 +238,17 @@ require_paths:
238
238
  - lib
239
239
  required_ruby_version: !ruby/object:Gem::Requirement
240
240
  requirements:
241
- - - ">="
241
+ - - '>='
242
242
  - !ruby/object:Gem::Version
243
243
  version: '0'
244
244
  required_rubygems_version: !ruby/object:Gem::Requirement
245
245
  requirements:
246
- - - ">="
246
+ - - '>='
247
247
  - !ruby/object:Gem::Version
248
248
  version: '0'
249
249
  requirements: []
250
250
  rubyforge_project:
251
- rubygems_version: 2.2.2
251
+ rubygems_version: 2.4.7
252
252
  signing_key:
253
253
  specification_version: 4
254
254
  summary: Distributed database version control system