dis 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dis/jobs/change_type.rb +4 -4
- data/lib/dis/jobs/delete.rb +3 -3
- data/lib/dis/jobs/store.rb +3 -3
- data/lib/dis/layer.rb +33 -33
- data/lib/dis/storage.rb +18 -18
- data/lib/dis/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e288aeab069c9e9d3e65daeb330c4a28cd639d9d83a70cad85b91fbcc156d91c
|
4
|
+
data.tar.gz: c9b4fd556e84eb7e3ade9155f62fdc0e7220b1fdbf1fef601255ece90b8df530
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d61a6b68917905cd896300e7413e8676d7562cdd96599c6331928da12ef6f8a6bdc7ad2c7cfaccc3fff5d42bed45f6f123a1bf1f0138689dd2c26070f9c7ebe
|
7
|
+
data.tar.gz: b75616ead369930d1a52b2778afd50af9f252d75bad020836762b5247289cd4fe805fc2791b19158fdc1926d22313eb2240e5c441e8d0ac04589d966e2209a2b
|
data/lib/dis/jobs/change_type.rb
CHANGED
@@ -6,13 +6,13 @@ module Dis
|
|
6
6
|
#
|
7
7
|
# Handles delayed object type change.
|
8
8
|
#
|
9
|
-
# Dis::Jobs::ChangeType.perform_later("old_things", "new_things",
|
9
|
+
# Dis::Jobs::ChangeType.perform_later("old_things", "new_things", key)
|
10
10
|
class ChangeType < ActiveJob::Base
|
11
11
|
queue_as :dis
|
12
12
|
|
13
|
-
def perform(prev_type, new_type,
|
14
|
-
Dis::Storage.delayed_store(new_type,
|
15
|
-
Dis::Storage.delayed_delete(prev_type,
|
13
|
+
def perform(prev_type, new_type, key)
|
14
|
+
Dis::Storage.delayed_store(new_type, key)
|
15
|
+
Dis::Storage.delayed_delete(prev_type, key)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
data/lib/dis/jobs/delete.rb
CHANGED
@@ -6,12 +6,12 @@ module Dis
|
|
6
6
|
#
|
7
7
|
# Handles delayed deletion of objects.
|
8
8
|
#
|
9
|
-
# Dis::Jobs::Delete.perform_later("documents",
|
9
|
+
# Dis::Jobs::Delete.perform_later("documents", key)
|
10
10
|
class Delete < ActiveJob::Base
|
11
11
|
queue_as :dis
|
12
12
|
|
13
|
-
def perform(type,
|
14
|
-
Dis::Storage.delayed_delete(type,
|
13
|
+
def perform(type, key)
|
14
|
+
Dis::Storage.delayed_delete(type, key)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/dis/jobs/store.rb
CHANGED
@@ -6,12 +6,12 @@ module Dis
|
|
6
6
|
#
|
7
7
|
# Handles delayed storage of objects.
|
8
8
|
#
|
9
|
-
# Dis::Jobs::Store.perform_later("documents",
|
9
|
+
# Dis::Jobs::Store.perform_later("documents", key)
|
10
10
|
class Store < ActiveJob::Base
|
11
11
|
queue_as :dis
|
12
12
|
|
13
|
-
def perform(type,
|
14
|
-
Dis::Storage.delayed_store(type,
|
13
|
+
def perform(type, key)
|
14
|
+
Dis::Storage.delayed_store(type, key)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/dis/layer.rb
CHANGED
@@ -66,7 +66,7 @@ module Dis
|
|
66
66
|
!delayed?
|
67
67
|
end
|
68
68
|
|
69
|
-
# Returns true if the layer
|
69
|
+
# Returns true if the layer is public.
|
70
70
|
def public?
|
71
71
|
@public
|
72
72
|
end
|
@@ -83,26 +83,26 @@ module Dis
|
|
83
83
|
|
84
84
|
# Stores a file.
|
85
85
|
#
|
86
|
-
#
|
87
|
-
# layer.store("documents",
|
86
|
+
# key = Digest::SHA1.file(file.path).hexdigest
|
87
|
+
# layer.store("documents", key, path)
|
88
88
|
#
|
89
|
-
#
|
89
|
+
# The key must be a hex digest of the file content. If an object with the
|
90
90
|
# supplied hash already exists, no action will be performed. In other
|
91
91
|
# words, no data will be overwritten if a hash collision occurs.
|
92
92
|
#
|
93
93
|
# Returns an instance of Fog::Model, or raises an error if the layer
|
94
94
|
# is readonly.
|
95
|
-
def store(type,
|
95
|
+
def store(type, key, file)
|
96
96
|
raise Dis::Errors::ReadOnlyError if readonly?
|
97
|
-
store!(type,
|
97
|
+
store!(type, key, file)
|
98
98
|
end
|
99
99
|
|
100
|
-
# Returns true if a object with the given
|
100
|
+
# Returns true if a object with the given key exists.
|
101
101
|
#
|
102
|
-
# layer.exists?("documents",
|
103
|
-
def exists?(type,
|
104
|
-
if directory(type,
|
105
|
-
directory(type,
|
102
|
+
# layer.exists?("documents", key)
|
103
|
+
def exists?(type, key)
|
104
|
+
if directory(type, key) &&
|
105
|
+
directory(type, key).files.head(key_component(type, key))
|
106
106
|
true
|
107
107
|
else
|
108
108
|
false
|
@@ -111,22 +111,22 @@ module Dis
|
|
111
111
|
|
112
112
|
# Retrieves a file from the store.
|
113
113
|
#
|
114
|
-
# layer.get("documents",
|
115
|
-
def get(type,
|
116
|
-
dir = directory(type,
|
114
|
+
# layer.get("documents", key)
|
115
|
+
def get(type, key)
|
116
|
+
dir = directory(type, key)
|
117
117
|
return unless dir
|
118
|
-
dir.files.get(key_component(type,
|
118
|
+
dir.files.get(key_component(type, key))
|
119
119
|
end
|
120
120
|
|
121
121
|
# Deletes a file from the store.
|
122
122
|
#
|
123
|
-
# layer.delete("documents",
|
123
|
+
# layer.delete("documents", key)
|
124
124
|
#
|
125
125
|
# Returns true if the file was deleted, or false if it could not be found.
|
126
126
|
# Raises an error if the layer is readonly.
|
127
|
-
def delete(type,
|
127
|
+
def delete(type, key)
|
128
128
|
raise Dis::Errors::ReadOnlyError if readonly?
|
129
|
-
delete!(type,
|
129
|
+
delete!(type, key)
|
130
130
|
end
|
131
131
|
|
132
132
|
# Returns a name for the layer.
|
@@ -142,37 +142,37 @@ module Dis
|
|
142
142
|
{ delayed: false, readonly: false, public: false, path: nil }
|
143
143
|
end
|
144
144
|
|
145
|
-
def directory_component(_type,
|
145
|
+
def directory_component(_type, _key)
|
146
146
|
path || ''
|
147
147
|
end
|
148
148
|
|
149
|
-
def key_component(type,
|
150
|
-
[type,
|
149
|
+
def key_component(type, key)
|
150
|
+
[type, key[0...2], key[2..key.length]].compact.join('/')
|
151
151
|
end
|
152
152
|
|
153
|
-
def delete!(type,
|
154
|
-
return false unless exists?(type,
|
155
|
-
get(type,
|
153
|
+
def delete!(type, key)
|
154
|
+
return false unless exists?(type, key)
|
155
|
+
get(type, key).destroy
|
156
156
|
end
|
157
157
|
|
158
|
-
def directory(type,
|
159
|
-
connection.directories.get(directory_component(type,
|
158
|
+
def directory(type, key)
|
159
|
+
connection.directories.get(directory_component(type, key))
|
160
160
|
end
|
161
161
|
|
162
|
-
def directory!(type,
|
163
|
-
dir = directory(type,
|
162
|
+
def directory!(type, key)
|
163
|
+
dir = directory(type, key)
|
164
164
|
dir ||= connection.directories.create(
|
165
|
-
key: directory_component(type,
|
165
|
+
key: directory_component(type, key),
|
166
166
|
public: public?
|
167
167
|
)
|
168
168
|
dir
|
169
169
|
end
|
170
170
|
|
171
|
-
def store!(type,
|
172
|
-
return get(type,
|
171
|
+
def store!(type, key, file)
|
172
|
+
return get(type, key) if exists?(type, key)
|
173
173
|
file.rewind if file.respond_to?(:rewind)
|
174
|
-
directory!(type,
|
175
|
-
key: key_component(type,
|
174
|
+
directory!(type, key).files.create(
|
175
|
+
key: key_component(type, key),
|
176
176
|
body: (file.is_a?(Fog::Model) ? file.body : file),
|
177
177
|
public: public?
|
178
178
|
)
|
data/lib/dis/storage.rb
CHANGED
@@ -41,18 +41,18 @@ module Dis
|
|
41
41
|
# Changes the type of an object. Kicks off a
|
42
42
|
# <tt>Dis::Jobs::ChangeType</tt> job if any delayed layers are defined.
|
43
43
|
#
|
44
|
-
# Dis::Storage.change_type("old_things", "new_things",
|
45
|
-
def change_type(prev_type, new_type,
|
44
|
+
# Dis::Storage.change_type("old_things", "new_things", key)
|
45
|
+
def change_type(prev_type, new_type, key)
|
46
46
|
require_writeable_layers!
|
47
|
-
file = get(prev_type,
|
47
|
+
file = get(prev_type, key)
|
48
48
|
store_immediately!(new_type, file)
|
49
49
|
layers.immediate.writeable.each do |layer|
|
50
|
-
layer.delete(prev_type,
|
50
|
+
layer.delete(prev_type, key)
|
51
51
|
end
|
52
52
|
if layers.delayed.writeable.any?
|
53
|
-
Dis::Jobs::ChangeType.perform_later(prev_type, new_type,
|
53
|
+
Dis::Jobs::ChangeType.perform_later(prev_type, new_type, key)
|
54
54
|
end
|
55
|
-
|
55
|
+
key
|
56
56
|
end
|
57
57
|
|
58
58
|
# Stores a file and returns a digest. Kicks off a
|
@@ -81,11 +81,11 @@ module Dis
|
|
81
81
|
|
82
82
|
# Returns true if the file exists in any layer.
|
83
83
|
#
|
84
|
-
# Dis::Storage.exists?("things",
|
85
|
-
def exists?(type,
|
84
|
+
# Dis::Storage.exists?("things", key) # => true
|
85
|
+
def exists?(type, key)
|
86
86
|
require_layers!
|
87
87
|
layers.each do |layer|
|
88
|
-
return true if layer.exists?(type,
|
88
|
+
return true if layer.exists?(type, key)
|
89
89
|
end
|
90
90
|
false
|
91
91
|
end
|
@@ -98,14 +98,14 @@ module Dis
|
|
98
98
|
# first available layer, then store it in all immediate layer.
|
99
99
|
#
|
100
100
|
# Returns an instance of Fog::Model.
|
101
|
-
def get(type,
|
101
|
+
def get(type, key)
|
102
102
|
require_layers!
|
103
103
|
|
104
104
|
fetch_count = 0
|
105
105
|
result = layers.inject(nil) do |res, layer|
|
106
106
|
res || lambda do
|
107
107
|
fetch_count += 1
|
108
|
-
layer.get(type,
|
108
|
+
layer.get(type, key)
|
109
109
|
end.call
|
110
110
|
end
|
111
111
|
|
@@ -120,18 +120,18 @@ module Dis
|
|
120
120
|
# Returns true if the file existed in any immediate layers,
|
121
121
|
# or false if not.
|
122
122
|
#
|
123
|
-
# Dis::Storage.delete("things",
|
123
|
+
# Dis::Storage.delete("things", key)
|
124
124
|
# # => true
|
125
|
-
# Dis::Storage.delete("things",
|
125
|
+
# Dis::Storage.delete("things", key)
|
126
126
|
# # => false
|
127
|
-
def delete(type,
|
127
|
+
def delete(type, key)
|
128
128
|
require_writeable_layers!
|
129
129
|
deleted = false
|
130
130
|
layers.immediate.writeable.each do |layer|
|
131
|
-
deleted = true if layer.delete(type,
|
131
|
+
deleted = true if layer.delete(type, key)
|
132
132
|
end
|
133
133
|
if layers.delayed.writeable.any?
|
134
|
-
Dis::Jobs::Delete.perform_later(type,
|
134
|
+
Dis::Jobs::Delete.perform_later(type, key)
|
135
135
|
end
|
136
136
|
deleted
|
137
137
|
end
|
@@ -139,9 +139,9 @@ module Dis
|
|
139
139
|
# Deletes content from all delayed layers.
|
140
140
|
#
|
141
141
|
# Dis::Storage.delayed_delete("things", hash)
|
142
|
-
def delayed_delete(type,
|
142
|
+
def delayed_delete(type, key)
|
143
143
|
layers.delayed.writeable.each do |layer|
|
144
|
-
layer.delete(type,
|
144
|
+
layer.delete(type, key)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
data/lib/dis/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Inge Jørgensen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: fog
|
28
|
+
name: fog-core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.1.2
|
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:
|
40
|
+
version: 2.1.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: fog-local
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|