eternity 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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