refile-postgres 1.3.0 → 1.4.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: b8bef59aba0412348cf839d73d050fe0884d0a76
4
- data.tar.gz: 67e92c6a6f7ff603458ffa802c45af72468f2c4a
3
+ metadata.gz: 3af65c53e11c0e9bfe133c1f90e96ad49129adab
4
+ data.tar.gz: aab1a3e85982632372366006e96757a221da3b62
5
5
  SHA512:
6
- metadata.gz: fb11435d032ab11d7b3f7fe05ca49b2d9d50b3bce200d08d6d8b706b3b4d4c47f647c43483b10c3806424e8b62c051ed2d18c9b6ef8216d6c7fd8c4c56e683d1
7
- data.tar.gz: ffce481c8f6aafd7c3a8665c496cab13d598b123ba662e06fd1b1bc169a999be377f3e32084ec970833cccbd864807fc73c889110ad2b715dc992a64893811f2
6
+ metadata.gz: a2183cb351ee8b23d8a428f11777b210f64bc9a29ca644a86282ccb2d834bdce6999a30ca1e744a9f04ee636e3734d58464766e7f28059989f7d52a125c7fd27
7
+ data.tar.gz: 30cfa3e996a15e175f80716a23fea44dc81f1c023293de14963e7140233edb84175e38cddd8751c90b222d1605525e2a1051dbba31b76ea33dbc9d79a7ddc05c
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ cache: bundler
3
3
  rvm:
4
4
  - 2.1.6
5
5
  - 2.2.2
6
+ - 2.3.1
6
7
  - ruby-head
7
8
  matrix:
8
9
  allow_failures:
@@ -7,7 +7,7 @@ module Refile
7
7
  DEFAULT_REGISTRY_TABLE = "refile_attachments"
8
8
  DEFAULT_NAMESPACE = "default"
9
9
  PG_LARGE_OBJECT_METADATA_TABLE = "pg_largeobject_metadata"
10
- READ_CHUNK_SIZE = 3000
10
+ READ_CHUNK_SIZE = 16384
11
11
 
12
12
  def initialize(connection_or_proc, max_size: nil, namespace: DEFAULT_NAMESPACE, registry_table: DEFAULT_REGISTRY_TABLE)
13
13
  @connection_or_proc = connection_or_proc
@@ -108,7 +108,7 @@ module Refile
108
108
  }, [id.to_s.to_i])
109
109
  oid = rez[0]['oid'].to_i
110
110
  connection.lo_unlink(oid)
111
- connection.exec_params("DELETE FROM #{registry_table} WHERE oid = $1::integer;", [oid])
111
+ connection.exec_params("DELETE FROM #{registry_table} WHERE oid = $1::oid;", [oid])
112
112
  end
113
113
  end
114
114
  end
@@ -2,6 +2,7 @@ module Refile
2
2
  module Postgres
3
3
  class Backend
4
4
  class Reader
5
+ STREAM_CHUNK_SIZE = 16384
5
6
  include SmartTransaction
6
7
 
7
8
  def initialize(connection_or_proc, oid)
@@ -43,6 +44,16 @@ module Refile
43
44
  end
44
45
  end
45
46
 
47
+ def each
48
+ if block_given?
49
+ until eof?
50
+ yield(read(STREAM_CHUNK_SIZE))
51
+ end
52
+ else
53
+ to_enum
54
+ end
55
+ end
56
+
46
57
  def size
47
58
  @size ||= fetch_size
48
59
  end
@@ -1,5 +1,5 @@
1
1
  module Refile
2
2
  module Postgres
3
- VERSION = "1.3.0"
3
+ VERSION = "1.4.0"
4
4
  end
5
5
  end
@@ -1,4 +1,5 @@
1
1
  require "spec_helper"
2
+ require "tempfile"
2
3
 
3
4
  describe Refile::Postgres::Backend do
4
5
  let(:connection) { test_connection }
@@ -80,4 +81,39 @@ describe Refile::Postgres::Backend do
80
81
  let(:connection_or_proc) { connection }
81
82
  it_behaves_like :backend
82
83
  end
84
+
85
+ describe "Content streaming" do
86
+ let(:connection_or_proc) { test_connection }
87
+ let(:backend) { Refile::Postgres::Backend.new(connection_or_proc, max_size: 1000000 ) }
88
+ it "allows to steam large file" do
89
+ expect(Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE).to eq(16384)
90
+ uploadable = Tempfile.new("test-file")
91
+ uploadable.write "A" * Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE
92
+ uploadable.write "B" * Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE
93
+ uploadable.write "C" * Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE
94
+ uploadable.close
95
+ uploadable.open
96
+ file = backend.upload(uploadable)
97
+ expect(backend.exists?(file.id)).to eq(true)
98
+ reader = backend.open(file.id)
99
+ enum = reader.each
100
+ expect(enum.next).to eq("A" * Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE)
101
+ expect(enum.next).to eq("B" * Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE)
102
+ expect(enum.next).to eq("C" * Refile::Postgres::Backend::Reader::STREAM_CHUNK_SIZE)
103
+ expect { enum.next }.to raise_error(StopIteration)
104
+ end
105
+
106
+ it "allows to steam small file" do
107
+ uploadable = Tempfile.new("test-file")
108
+ uploadable.write "QWERTY"
109
+ uploadable.close
110
+ uploadable.open
111
+ file = backend.upload(uploadable)
112
+ expect(backend.exists?(file.id)).to eq(true)
113
+ reader = backend.open(file.id)
114
+ enum = reader.each
115
+ expect(enum.next).to eq("QWERTY")
116
+ expect { enum.next }.to raise_error(StopIteration)
117
+ end
118
+ end
83
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refile-postgres
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krists Ozols
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-27 00:00:00.000000000 Z
11
+ date: 2016-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: refile