asset_cloud 2.7.0 → 2.7.2
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 +4 -4
- data/.github/workflows/ci.yml +42 -0
- data/.github/workflows/cla.yml +22 -0
- data/.rubocop.yml +3 -1
- data/Gemfile +5 -3
- data/History.md +8 -0
- data/README.rdoc +3 -4
- data/Rakefile +18 -16
- data/asset_cloud.gemspec +19 -18
- data/dev.yml +1 -1
- data/lib/asset_cloud/asset.rb +17 -13
- data/lib/asset_cloud/asset_extension.rb +27 -15
- data/lib/asset_cloud/base.rb +77 -72
- data/lib/asset_cloud/bucket.rb +5 -2
- data/lib/asset_cloud/buckets/active_record_bucket.rb +16 -14
- data/lib/asset_cloud/buckets/blackhole_bucket.rb +2 -0
- data/lib/asset_cloud/buckets/bucket_chain.rb +38 -31
- data/lib/asset_cloud/buckets/file_system_bucket.rb +14 -15
- data/lib/asset_cloud/buckets/gcs_bucket.rb +6 -8
- data/lib/asset_cloud/buckets/invalid_bucket.rb +9 -6
- data/lib/asset_cloud/buckets/memory_bucket.rb +7 -4
- data/lib/asset_cloud/buckets/s3_bucket.rb +11 -8
- data/lib/asset_cloud/buckets/versioned_memory_bucket.rb +4 -2
- data/lib/asset_cloud/callbacks.rb +9 -5
- data/lib/asset_cloud/free_key_locator.rb +6 -6
- data/lib/asset_cloud/metadata.rb +11 -7
- data/lib/asset_cloud/validations.rb +9 -5
- data/lib/asset_cloud.rb +23 -21
- data/spec/active_record_bucket_spec.rb +27 -26
- data/spec/asset_cloud/metadata_spec.rb +4 -2
- data/spec/asset_extension_spec.rb +17 -16
- data/spec/asset_spec.rb +27 -21
- data/spec/base_spec.rb +93 -92
- data/spec/blackhole_bucket_spec.rb +12 -11
- data/spec/bucket_chain_spec.rb +61 -56
- data/spec/bucket_spec.rb +6 -5
- data/spec/callbacks_spec.rb +52 -32
- data/spec/file_system_spec.rb +25 -24
- data/spec/find_free_key_spec.rb +16 -17
- data/spec/gcs_bucket_remote_spec.rb +23 -22
- data/spec/gcs_bucket_spec.rb +48 -60
- data/spec/memory_bucket_spec.rb +12 -11
- data/spec/mock_s3_interface.rb +17 -6
- data/spec/remote_s3_bucket_spec.rb +31 -28
- data/spec/s3_bucket_spec.rb +19 -17
- data/spec/spec_helper.rb +8 -7
- data/spec/validations_spec.rb +13 -12
- data/spec/versioned_memory_bucket_spec.rb +11 -10
- metadata +10 -33
- data/.github/probots.yml +0 -2
- data/.rubocop_todo.yml +0 -326
- data/.travis.yml +0 -12
data/spec/memory_bucket_spec.rb
CHANGED
@@ -1,25 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "spec_helper"
|
3
4
|
|
4
5
|
class MemoryCloud < AssetCloud::Base
|
5
6
|
bucket :memory, AssetCloud::MemoryBucket
|
6
7
|
end
|
7
8
|
|
8
9
|
describe AssetCloud::MemoryBucket do
|
9
|
-
directory = File.dirname(__FILE__) +
|
10
|
+
directory = File.dirname(__FILE__) + "/files"
|
10
11
|
|
11
12
|
before do
|
12
|
-
@fs = MemoryCloud.new(directory,
|
13
|
+
@fs = MemoryCloud.new(directory, "http://assets/files")
|
13
14
|
end
|
14
15
|
|
15
|
-
describe
|
16
|
+
describe "modifying items in subfolder" do
|
16
17
|
it "should return nil when file does not exist" do
|
17
|
-
expect(@fs[
|
18
|
+
expect(@fs["memory/essay.txt"].exist?).to(eq(false))
|
18
19
|
end
|
19
20
|
|
20
21
|
it "should return set content when asked for the same file" do
|
21
|
-
@fs[
|
22
|
-
expect(@fs[
|
22
|
+
@fs["memory/essay.txt"] = "text"
|
23
|
+
expect(@fs["memory/essay.txt"].value).to(eq("text"))
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
@@ -29,15 +30,15 @@ describe AssetCloud::MemoryBucket do
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
32
|
-
describe
|
33
|
+
describe "#ls" do
|
33
34
|
before do
|
34
|
-
|
35
|
-
2.times { |number| @fs.write("memory/#{letter}#{number}",
|
35
|
+
["a", "b"].each do |letter|
|
36
|
+
2.times { |number| @fs.write("memory/#{letter}#{number}", ".") }
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
40
|
it "should return a list of assets which start with the given prefix" do
|
40
|
-
expect(@fs.buckets[:memory].ls(
|
41
|
+
expect(@fs.buckets[:memory].ls("memory/a").size).to(eq(2))
|
41
42
|
end
|
42
43
|
|
43
44
|
it "should return a list of all assets when a prefix is not given" do
|
data/spec/mock_s3_interface.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "ostruct"
|
3
4
|
|
4
5
|
class MockS3Interface
|
5
|
-
VALID_ACLS =
|
6
|
-
private
|
7
|
-
|
6
|
+
VALID_ACLS = [
|
7
|
+
"private",
|
8
|
+
"public-read",
|
9
|
+
"public-read-write",
|
10
|
+
"authenticated-read",
|
11
|
+
"aws-exec-read",
|
12
|
+
"bucket-owner-read",
|
13
|
+
"bucket-owner-full-control",
|
14
|
+
]
|
8
15
|
|
9
16
|
attr_reader :bucket_storage
|
10
17
|
|
@@ -39,6 +46,7 @@ class MockS3Interface
|
|
39
46
|
|
40
47
|
class Bucket
|
41
48
|
attr_reader :name, :client
|
49
|
+
|
42
50
|
def initialize(client, name)
|
43
51
|
@client = client
|
44
52
|
@name = name
|
@@ -62,7 +70,7 @@ class MockS3Interface
|
|
62
70
|
raise "Invalid ACL `#{options[:acl].inspect}`, must be one of: #{VALID_ACLS.inspect}"
|
63
71
|
end
|
64
72
|
|
65
|
-
options[:body] = options[:body].force_encoding(Encoding::BINARY)
|
73
|
+
options[:body] = options[:body].dup.force_encoding(Encoding::BINARY)
|
66
74
|
|
67
75
|
key = options.delete(:key)
|
68
76
|
|
@@ -81,6 +89,7 @@ class MockS3Interface
|
|
81
89
|
|
82
90
|
class NullS3Object
|
83
91
|
attr_reader :key
|
92
|
+
|
84
93
|
def initialize(bucket, key)
|
85
94
|
@bucket = bucket
|
86
95
|
@key = key
|
@@ -101,6 +110,8 @@ class MockS3Interface
|
|
101
110
|
class S3Object
|
102
111
|
attr_reader :key, :options
|
103
112
|
|
113
|
+
GottenObject = Struct.new(:body, keyword_init: true)
|
114
|
+
|
104
115
|
def initialize(bucket, key, options = {})
|
105
116
|
@bucket = bucket
|
106
117
|
@key = key
|
@@ -113,7 +124,7 @@ class MockS3Interface
|
|
113
124
|
end
|
114
125
|
|
115
126
|
def get(*)
|
116
|
-
|
127
|
+
GottenObject.new(**options)
|
117
128
|
end
|
118
129
|
|
119
130
|
def put(options = {})
|
@@ -1,85 +1,88 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "spec_helper"
|
3
4
|
|
4
5
|
class RemoteS3Cloud < AssetCloud::Base
|
5
6
|
attr_accessor :s3_connection
|
7
|
+
|
6
8
|
bucket :tmp, AssetCloud::S3Bucket
|
7
9
|
|
8
10
|
def s3_bucket(_key)
|
9
|
-
s3_connection.bucket(ENV[
|
11
|
+
s3_connection.bucket(ENV["S3_BUCKET_NAME"])
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
|
-
describe
|
14
|
-
|
15
|
+
describe "Remote test for AssetCloud::S3Bucket",
|
16
|
+
if: ENV["AWS_ACCESS_KEY_ID"] && ENV["AWS_SECRET_ACCESS_KEY"] && ENV["S3_BUCKET_NAME"] do
|
17
|
+
directory = File.dirname(__FILE__) + "/files"
|
15
18
|
|
16
19
|
before(:all) do
|
17
20
|
Aws.config = {
|
18
|
-
region: ENV.fetch(
|
21
|
+
region: ENV.fetch("AWS_REGION", "us-east-1"),
|
19
22
|
credentials: Aws::Credentials.new(
|
20
|
-
ENV[
|
21
|
-
ENV[
|
23
|
+
ENV["AWS_ACCESS_KEY_ID"],
|
24
|
+
ENV["AWS_SECRET_ACCESS_KEY"],
|
22
25
|
),
|
23
26
|
}
|
24
27
|
|
25
|
-
@cloud = RemoteS3Cloud.new(directory,
|
28
|
+
@cloud = RemoteS3Cloud.new(directory, "testing/assets/files")
|
26
29
|
@cloud.s3_connection = Aws::S3::Resource.new
|
27
30
|
@bucket = @cloud.buckets[:tmp]
|
28
31
|
end
|
29
32
|
|
30
33
|
after(:all) do
|
31
|
-
listing = @bucket.ls(
|
34
|
+
listing = @bucket.ls("tmp")
|
32
35
|
listing.each(&:delete)
|
33
36
|
end
|
34
37
|
|
35
38
|
it "#ls should return assets with proper keys" do
|
36
|
-
@cloud[
|
37
|
-
@cloud[
|
39
|
+
@cloud["tmp/test1.txt"] = "test1"
|
40
|
+
@cloud["tmp/test2.txt"] = "test2"
|
38
41
|
|
39
|
-
ls = @bucket.ls(
|
42
|
+
ls = @bucket.ls("tmp")
|
40
43
|
|
41
44
|
expect(ls).to(all(be_an(AssetCloud::Asset)))
|
42
|
-
expect(ls.map(&:key) - [
|
45
|
+
expect(ls.map(&:key) - ["tmp/test1.txt", "tmp/test2.txt"]).to(be_empty)
|
43
46
|
end
|
44
47
|
|
45
48
|
it "#ls returns all assets" do
|
46
|
-
@cloud[
|
47
|
-
@cloud[
|
49
|
+
@cloud["tmp/test1.txt"] = "test1"
|
50
|
+
@cloud["tmp/test2.txt"] = "test2"
|
48
51
|
|
49
52
|
ls = @bucket.ls
|
50
53
|
|
51
54
|
expect(ls).to(all(be_an(AssetCloud::Asset)))
|
52
|
-
expect(ls.map(&:key) - [
|
55
|
+
expect(ls.map(&:key) - ["tmp/test1.txt", "tmp/test2.txt"]).to(be_empty)
|
53
56
|
end
|
54
57
|
|
55
58
|
it "#delete should ignore errors when deleting" do
|
56
|
-
@bucket.delete(
|
59
|
+
@bucket.delete("tmp/a_file_that_should_not_exist.txt")
|
57
60
|
end
|
58
61
|
|
59
62
|
it "#delete should always return true" do
|
60
|
-
@cloud[
|
63
|
+
@cloud["tmp/test1.txt"] = "test1"
|
61
64
|
|
62
|
-
expect(@bucket.delete(
|
65
|
+
expect(@bucket.delete("tmp/test1.txt")).to(eq(true))
|
63
66
|
end
|
64
67
|
|
65
68
|
it "#stat should get metadata from S3" do
|
66
69
|
start_time = Time.now
|
67
|
-
value =
|
68
|
-
@cloud.build(
|
69
|
-
metadata = @bucket.stat(
|
70
|
+
value = "hello world"
|
71
|
+
@cloud.build("tmp/new_file.test", value).store
|
72
|
+
metadata = @bucket.stat("tmp/new_file.test")
|
70
73
|
expect(metadata.size).to(eq(value.size))
|
71
74
|
expect(metadata.updated_at).to(be >= start_time)
|
72
75
|
end
|
73
76
|
|
74
77
|
it "#stat a missing asset" do
|
75
|
-
metadata = @bucket.stat(
|
78
|
+
metadata = @bucket.stat("i_do_not_exist_and_never_will.test")
|
76
79
|
expect(metadata).to(be_an(AssetCloud::Metadata))
|
77
80
|
expect(metadata.exist).to(be(false))
|
78
81
|
end
|
79
82
|
|
80
83
|
it "#read " do
|
81
|
-
value =
|
82
|
-
key =
|
84
|
+
value = "hello world"
|
85
|
+
key = "tmp/new_file.txt"
|
83
86
|
@bucket.write(key, value)
|
84
87
|
data = @bucket.read(key)
|
85
88
|
expect(data).to(eq(value))
|
@@ -90,11 +93,11 @@ describe 'Remote test for AssetCloud::S3Bucket', if: ENV['AWS_ACCESS_KEY_ID'] &&
|
|
90
93
|
end
|
91
94
|
|
92
95
|
it "#reads first bytes when passed options" do
|
93
|
-
value =
|
94
|
-
key =
|
96
|
+
value = "hello world"
|
97
|
+
key = "tmp/new_file.txt"
|
95
98
|
options = { range: 0...5 }
|
96
99
|
@bucket.write(key, value)
|
97
100
|
data = @bucket.read(key, options)
|
98
|
-
expect(data).to(eq(
|
101
|
+
expect(data).to(eq("hello"))
|
99
102
|
end
|
100
103
|
end
|
data/spec/s3_bucket_spec.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "mock_s3_interface"
|
3
5
|
|
4
6
|
class S3Cloud < AssetCloud::Base
|
5
7
|
bucket :tmp, AssetCloud::S3Bucket
|
@@ -11,19 +13,19 @@ class S3Cloud < AssetCloud::Base
|
|
11
13
|
end
|
12
14
|
|
13
15
|
describe AssetCloud::S3Bucket do
|
14
|
-
directory = File.dirname(__FILE__) +
|
16
|
+
directory = File.dirname(__FILE__) + "/files"
|
15
17
|
|
16
18
|
before(:all) do
|
17
|
-
@cloud = S3Cloud.new(directory,
|
18
|
-
@cloud.s3_connection = MockS3Interface.new(
|
19
|
-
@cloud.s3_bucket_name =
|
19
|
+
@cloud = S3Cloud.new(directory, "http://assets/files")
|
20
|
+
@cloud.s3_connection = MockS3Interface.new("a", "b")
|
21
|
+
@cloud.s3_bucket_name = "asset-cloud-test"
|
20
22
|
|
21
23
|
@bucket = @cloud.buckets[:tmp]
|
22
|
-
FileUtils.mkdir_p(directory +
|
24
|
+
FileUtils.mkdir_p(directory + "/tmp")
|
23
25
|
end
|
24
26
|
|
25
27
|
after(:each) do
|
26
|
-
FileUtils.rm_rf(directory +
|
28
|
+
FileUtils.rm_rf(directory + "/tmp")
|
27
29
|
end
|
28
30
|
|
29
31
|
it "#ls should return assets with proper keys" do
|
@@ -32,35 +34,35 @@ describe AssetCloud::S3Bucket do
|
|
32
34
|
end
|
33
35
|
expect_any_instance_of(MockS3Interface::Bucket).to(receive(:objects).and_return(collection))
|
34
36
|
|
35
|
-
ls = @bucket.ls(
|
37
|
+
ls = @bucket.ls("tmp")
|
36
38
|
|
37
39
|
expect(ls).to(all(be_an(AssetCloud::Asset)))
|
38
|
-
expect(ls.map(&:key) - [
|
40
|
+
expect(ls.map(&:key) - ["tmp/blah.gif", "tmp/add_to_cart.gif"]).to(be_empty)
|
39
41
|
end
|
40
42
|
|
41
43
|
it "#delete should not ignore errors when deleting" do
|
42
44
|
expect_any_instance_of(MockS3Interface::NullS3Object).to(receive(:delete).and_raise(StandardError))
|
43
45
|
|
44
|
-
expect { @bucket.delete(
|
46
|
+
expect { @bucket.delete("assets/fail.gif") }.to(raise_error(StandardError))
|
45
47
|
end
|
46
48
|
|
47
49
|
it "#delete should always return true" do
|
48
50
|
expect_any_instance_of(MockS3Interface::NullS3Object).to(receive(:delete).and_return(nil))
|
49
51
|
|
50
|
-
expect(@bucket.delete(
|
52
|
+
expect(@bucket.delete("assets/fail.gif")).to(eq(true))
|
51
53
|
end
|
52
54
|
|
53
55
|
it "#stat should get metadata from S3" do
|
54
|
-
value =
|
55
|
-
@cloud.build(
|
56
|
-
metadata = @bucket.stat(
|
56
|
+
value = "hello world"
|
57
|
+
@cloud.build("tmp/new_file.test", value).store
|
58
|
+
metadata = @bucket.stat("tmp/new_file.test")
|
57
59
|
expect(metadata.size).to(eq(value.size))
|
58
60
|
expect(metadata.updated_at).to(eq(Time.parse("Mon Aug 27 17:37:51 UTC 2007")))
|
59
61
|
end
|
60
62
|
|
61
63
|
it "#read " do
|
62
|
-
value =
|
63
|
-
key =
|
64
|
+
value = "hello world"
|
65
|
+
key = "tmp/new_file.txt"
|
64
66
|
@bucket.write(key, value)
|
65
67
|
data = @bucket.read(key)
|
66
68
|
expect(data).to(eq(value))
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "rspec"
|
5
|
+
require "pry-byebug" if RUBY_VERSION >= "2.0.0"
|
6
|
+
require "active_support/all"
|
6
7
|
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
8
|
+
require "asset_cloud"
|
9
|
+
require "asset_cloud/buckets/s3_bucket"
|
10
|
+
require "asset_cloud/buckets/gcs_bucket"
|
data/spec/validations_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "spec_helper"
|
3
4
|
|
4
5
|
class ValidatedAsset < AssetCloud::Asset
|
5
6
|
validate :no_cats
|
@@ -7,8 +8,8 @@ class ValidatedAsset < AssetCloud::Asset
|
|
7
8
|
private
|
8
9
|
|
9
10
|
def no_cats
|
10
|
-
add_error(
|
11
|
-
add_warning(
|
11
|
+
add_error("no cats allowed!") if value =~ /cat/i
|
12
|
+
add_warning("bad dog!", "wet dog smell!") if value =~ /dog/i
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
@@ -18,24 +19,24 @@ end
|
|
18
19
|
|
19
20
|
describe ValidatedAsset do
|
20
21
|
before(:each) do
|
21
|
-
@cloud = BasicCloud.new(File.dirname(__FILE__) +
|
22
|
-
@cat = @cloud.build(
|
23
|
-
@dog = @cloud.build(
|
22
|
+
@cloud = BasicCloud.new(File.dirname(__FILE__) + "/files", "http://assets/")
|
23
|
+
@cat = @cloud.build("dog_pound/fido", "cat")
|
24
|
+
@dog = @cloud.build("dog_pound/fido", "dog")
|
24
25
|
end
|
25
26
|
|
26
27
|
describe "#store" do
|
27
28
|
it "should not store the asset unless validations pass" do
|
28
|
-
expect(@cloud).to(receive(:write).with(
|
29
|
+
expect(@cloud).to(receive(:write).with("dog_pound/fido", "dog").and_return(true))
|
29
30
|
|
30
31
|
@cat.store
|
31
32
|
expect(@cat.store).to(eq(false))
|
32
|
-
expect(@cat.errors).to(eq([
|
33
|
+
expect(@cat.errors).to(eq(["no cats allowed!"]))
|
33
34
|
expect(@dog.store).to(eq(true))
|
34
35
|
end
|
35
36
|
|
36
37
|
it "should store asset with warnings and save them in the warnings array" do
|
37
38
|
expect(@dog.store).to(eq(true))
|
38
|
-
expect(@dog.warnings).to(eq([
|
39
|
+
expect(@dog.warnings).to(eq(["bad dog!", "wet dog smell!"]))
|
39
40
|
expect(@cat.store).to(eq(false))
|
40
41
|
expect(@cat.warnings).to(eq([]))
|
41
42
|
end
|
@@ -54,10 +55,10 @@ describe ValidatedAsset do
|
|
54
55
|
describe "#valid?" do
|
55
56
|
it "should clear errors, run validations, and return validity" do
|
56
57
|
@cat.store
|
57
|
-
expect(@cat.errors).to(eq([
|
58
|
+
expect(@cat.errors).to(eq(["no cats allowed!"]))
|
58
59
|
expect(@cat.valid?).to(eq(false))
|
59
|
-
expect(@cat.errors).to(eq([
|
60
|
-
@cat.value =
|
60
|
+
expect(@cat.errors).to(eq(["no cats allowed!"]))
|
61
|
+
@cat.value = "disguised feline"
|
61
62
|
expect(@cat.valid?).to(eq(true))
|
62
63
|
expect(@cat.errors).to(be_empty)
|
63
64
|
end
|
@@ -1,36 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
require "spec_helper"
|
3
4
|
|
4
5
|
class VersionedMemoryCloud < AssetCloud::Base
|
5
6
|
bucket :memory, AssetCloud::VersionedMemoryBucket
|
6
7
|
end
|
7
8
|
|
8
9
|
describe AssetCloud::VersionedMemoryBucket do
|
9
|
-
directory = File.dirname(__FILE__) +
|
10
|
+
directory = File.dirname(__FILE__) + "/files"
|
10
11
|
|
11
12
|
before do
|
12
|
-
@fs = VersionedMemoryCloud.new(directory,
|
13
|
-
|
13
|
+
@fs = VersionedMemoryCloud.new(directory, "http://assets/files")
|
14
|
+
["one", "two", "three"].each do |content|
|
14
15
|
@fs.write("memory/foo", content)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
describe
|
19
|
+
describe "#versioned?" do
|
19
20
|
it "should return true" do
|
20
21
|
expect(@fs.buckets[:memory].versioned?).to(eq(true))
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
describe
|
25
|
+
describe "#read_version" do
|
25
26
|
it "should return the appropriate data when given a key and version" do
|
26
|
-
expect(@fs.read_version(
|
27
|
-
expect(@fs.read_version(
|
27
|
+
expect(@fs.read_version("memory/foo", 1)).to(eq("one"))
|
28
|
+
expect(@fs.read_version("memory/foo", 3)).to(eq("three"))
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
31
|
-
describe
|
32
|
+
describe "#versions" do
|
32
33
|
it "should return a list of available version identifiers for the given key" do
|
33
|
-
expect(@fs.versions(
|
34
|
+
expect(@fs.versions("memory/foo")).to(eq([1, 2, 3]))
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asset_cloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.7.
|
4
|
+
version: 2.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: pry
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: pry-byebug
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -100,11 +100,10 @@ executables: []
|
|
100
100
|
extensions: []
|
101
101
|
extra_rdoc_files: []
|
102
102
|
files:
|
103
|
-
- ".github/
|
103
|
+
- ".github/workflows/ci.yml"
|
104
|
+
- ".github/workflows/cla.yml"
|
104
105
|
- ".gitignore"
|
105
106
|
- ".rubocop.yml"
|
106
|
-
- ".rubocop_todo.yml"
|
107
|
-
- ".travis.yml"
|
108
107
|
- Gemfile
|
109
108
|
- History.md
|
110
109
|
- LICENSE
|
@@ -172,30 +171,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
171
|
- !ruby/object:Gem::Version
|
173
172
|
version: '0'
|
174
173
|
requirements: []
|
175
|
-
rubygems_version: 3.
|
174
|
+
rubygems_version: 3.4.12
|
176
175
|
signing_key:
|
177
176
|
specification_version: 4
|
178
177
|
summary: An abstraction layer around arbitrary and diverse asset stores.
|
179
|
-
test_files:
|
180
|
-
- spec/active_record_bucket_spec.rb
|
181
|
-
- spec/asset_cloud/metadata_spec.rb
|
182
|
-
- spec/asset_extension_spec.rb
|
183
|
-
- spec/asset_spec.rb
|
184
|
-
- spec/base_spec.rb
|
185
|
-
- spec/blackhole_bucket_spec.rb
|
186
|
-
- spec/bucket_chain_spec.rb
|
187
|
-
- spec/bucket_spec.rb
|
188
|
-
- spec/callbacks_spec.rb
|
189
|
-
- spec/file_system_spec.rb
|
190
|
-
- spec/files/products/key.txt
|
191
|
-
- spec/files/versioned_stuff/foo
|
192
|
-
- spec/find_free_key_spec.rb
|
193
|
-
- spec/gcs_bucket_remote_spec.rb
|
194
|
-
- spec/gcs_bucket_spec.rb
|
195
|
-
- spec/memory_bucket_spec.rb
|
196
|
-
- spec/mock_s3_interface.rb
|
197
|
-
- spec/remote_s3_bucket_spec.rb
|
198
|
-
- spec/s3_bucket_spec.rb
|
199
|
-
- spec/spec_helper.rb
|
200
|
-
- spec/validations_spec.rb
|
201
|
-
- spec/versioned_memory_bucket_spec.rb
|
178
|
+
test_files: []
|
data/.github/probots.yml
DELETED