ar-s3-columns 0.0.1 → 0.0.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/lib/ar_s3_columns/class_methods.rb +4 -9
- data/lib/ar_s3_columns/version.rb +1 -1
- data/tests/s3_columns_test.rb +18 -14
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 282bdd2f9a64ab3ce8b5eb0d1da444561fa5a349
|
4
|
+
data.tar.gz: e3c3819dc1fb3e07e77771b0725e0bdedc213139
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f21b8cc024c18f83a05b1b7259d24f235faa018cb012f629dc51149fb4c86e11fc032013d0576ca0c074063d7a5238b94083bbadd0ac18cba0c8c67d01b1072
|
7
|
+
data.tar.gz: 366824645f80a8875cdb560dbfcfa5e5e5546bdfddf9b85cd6013fe473db118c1f5ec4e1aa42467d0ecfa6452afb399566b796cde409e8b2732ea4264ece25aa
|
@@ -29,18 +29,12 @@ module S3Columns
|
|
29
29
|
def s3_column_#{column_name}
|
30
30
|
if self.persisted? && key_path = read_attribute(:#{column_name})
|
31
31
|
key = S3Columns.s3_connection.buckets["#{options[:s3_bucket]}"].objects[key_path]
|
32
|
-
|
33
|
-
|
32
|
+
# Retry in case it is not persisted in S3 yet
|
33
|
+
Retryable.retryable :on => [AWS::S3::Errors::NoSuchKey], :tries => 10, :sleep => 1 do
|
34
34
|
@#{column_name} ||= Marshal.load(key.read)
|
35
|
-
else
|
36
|
-
# Retry in case it is not persisted in S3 yet
|
37
|
-
Retryable.retryable :on => [AWS::S3::Errors::NoSuchKey], :tries => 10, :sleep => 1 do
|
38
|
-
@#{column_name} ||= Marshal.load(key.read)
|
39
|
-
end
|
40
35
|
end
|
41
|
-
|
42
36
|
else
|
43
|
-
|
37
|
+
@#{column_name}
|
44
38
|
end
|
45
39
|
end
|
46
40
|
}
|
@@ -54,6 +48,7 @@ module S3Columns
|
|
54
48
|
S3Columns.s3_connection.buckets["#{options[:s3_bucket]}"].objects[key_path].write(marshalled_value, write_options)
|
55
49
|
# update column with new key
|
56
50
|
write_attribute(:#{column_name}, key_path)
|
51
|
+
@#{column_name} = value
|
57
52
|
end
|
58
53
|
}
|
59
54
|
end
|
data/tests/s3_columns_test.rb
CHANGED
@@ -45,6 +45,23 @@ describe "S3Columns" do
|
|
45
45
|
test_object = ClassWithS3Columns.create(name: 'hey')
|
46
46
|
assert_equal "hey", test_object.name
|
47
47
|
end
|
48
|
+
|
49
|
+
it "memoizes value on write" do
|
50
|
+
SimpleUUID::UUID.any_instance.stubs(:to_guid).returns('unique')
|
51
|
+
test_object = ClassWithS3Columns.new
|
52
|
+
v = {hi: 'hello'}
|
53
|
+
|
54
|
+
@key_stub.expects(:write).with(Marshal.dump(v), {})
|
55
|
+
@objects_stub.expects(:[]).with("extra_data/unique").returns(@key_stub)
|
56
|
+
@buckets_stub.expects(:[]).with("test").returns(stub(objects: @objects_stub))
|
57
|
+
@s3_stub.expects(:buckets).returns(@buckets_stub)
|
58
|
+
|
59
|
+
test_object.s3_column_extra_data = v
|
60
|
+
assert_equal test_object.s3_column_extra_data, v
|
61
|
+
|
62
|
+
test_object = ClassWithS3Columns.new(extra_data: v)
|
63
|
+
assert_equal test_object.extra_data, v
|
64
|
+
end
|
48
65
|
|
49
66
|
it "uploads marshalled value of columns to s3 and save s3 key to db" do
|
50
67
|
SimpleUUID::UUID.any_instance.stubs(:to_guid).returns('unique')
|
@@ -60,11 +77,10 @@ describe "S3Columns" do
|
|
60
77
|
assert_equal "extra_data/unique", test_object.read_attribute(:extra_data)
|
61
78
|
end
|
62
79
|
|
63
|
-
it "reads from S3 with key in db
|
80
|
+
it "reads from S3 with key in db" do
|
64
81
|
test_object = ClassWithS3Columns.create(name: "unique")
|
65
82
|
test_object.send(:write_attribute, :extra_data, 'some/key')
|
66
83
|
|
67
|
-
@key_stub.expects(:exists?).returns(true)
|
68
84
|
@key_stub.expects(:read).returns(Marshal.dump("some data"))
|
69
85
|
@objects_stub.expects(:[]).with("some/key").returns(@key_stub)
|
70
86
|
@buckets_stub.expects(:[]).with("test").returns(stub(objects: @objects_stub))
|
@@ -72,18 +88,6 @@ describe "S3Columns" do
|
|
72
88
|
assert_equal test_object.s3_column_extra_data, "some data"
|
73
89
|
end
|
74
90
|
|
75
|
-
it "retries S3 read, when S3 key in db, but does not exists (usually because S3 has not persisted object yet)" do
|
76
|
-
test_object = ClassWithS3Columns.create(name: "unique")
|
77
|
-
test_object.send(:write_attribute, :extra_data, 'some/key')
|
78
|
-
|
79
|
-
Retryable.expects(:retryable)
|
80
|
-
@key_stub.expects(:exists?).returns(false)
|
81
|
-
@objects_stub.expects(:[]).with("some/key").returns(@key_stub)
|
82
|
-
@buckets_stub.expects(:[]).with("test").returns(stub(objects: @objects_stub))
|
83
|
-
@s3_stub.expects(:buckets).returns(@buckets_stub)
|
84
|
-
test_object.s3_column_extra_data
|
85
|
-
end
|
86
|
-
|
87
91
|
it "returns nil and do not hit S3, if key is not in db" do
|
88
92
|
@s3_stub.expects(:buckets).at_most(0)
|
89
93
|
test_object = ClassWithS3Columns.create(name: "unique")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar-s3-columns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Chee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|