carrierwave-postgresql 0.1.5 → 0.2.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 +4 -4
- data/README.md +6 -1
- data/lib/carrierwave-postgresql.rb +0 -1
- data/lib/carrierwave/postgresql.rb +5 -0
- data/lib/carrierwave/storage/adapters/jdbc_connection.rb +51 -0
- data/lib/carrierwave/storage/adapters/pg_connection.rb +44 -0
- data/lib/carrierwave/storage/postgresql_lo.rb +16 -33
- metadata +11 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da7812a54694e701a54b68149934790811a5caeb
|
4
|
+
data.tar.gz: aa5c4c93a992ed1de295c096cfa2d4036d34f712
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 810e2920086e32fa9df0676b841a593d7bdc8bff8db7c4358db259fea968c38c843edefdc14ec68deb8064db53c12cb3ed0ff154a2684c65173e3262b954a205
|
7
|
+
data.tar.gz: 662839a07ceac0f44114e9beae89bd9ef7c51f49e134c062e3a3557df74bdd2c34393c17b56d4ed17e3c41b93ec1175f923ba193baf99e0c7a7da6fbad6b9eae
|
data/README.md
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
-
# carrierwave-postgresql [](http://travis-ci.org/diogob/carrierwave-postgresql)[](https://codeclimate.com/github/diogob/carrierwave-postgresql)
|
2
2
|
|
3
3
|
This gem adds to [CarrierWave](https://github.com/jnicklas/carrierwave/) a storage facility which will use the PostgreSQL's oid datatype to reference a large object residing in the databse. It supports up to 2GB files, though it's better suited for smaller ones. Makes life easier for fast prototyping and put all your data in the same place, allows one backup for all your data and file storage in heroku servers.
|
4
4
|
|
5
5
|
For more information on PostgreSQL Large Objects you can take a look at the [official docs](http://www.postgresql.org/docs/9.2/static/largeobjects.html)
|
6
6
|
|
7
|
+
## Note about 0.2.0
|
8
|
+
|
9
|
+
This version drops support for ruby 1.9. If you use this version you should stick to 0.1.5.
|
10
|
+
The new adition to 0.2.0 is support to JRuby thanks to [@TheKidCoder](https://github.com/TheKidCoder).
|
11
|
+
|
7
12
|
## Installation
|
8
13
|
|
9
14
|
Install the latest release:
|
@@ -1,6 +1,11 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'carrierwave'
|
4
|
+
if defined?(JRUBY_VERSION)
|
5
|
+
require 'carrierwave/storage/adapters/jdbc_connection'
|
6
|
+
else
|
7
|
+
require 'carrierwave/storage/adapters/pg_connection'
|
8
|
+
end
|
4
9
|
require 'carrierwave/storage/postgresql_lo'
|
5
10
|
|
6
11
|
module CarrierWave
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module CarrierWave
|
3
|
+
module Storage
|
4
|
+
module Adapters
|
5
|
+
module JDBCConnection
|
6
|
+
def identifier
|
7
|
+
@oid ||= connection.connection.getLargeObjectAPI.createLO
|
8
|
+
end
|
9
|
+
|
10
|
+
def read
|
11
|
+
@uploader.model.transaction do
|
12
|
+
lo = lo_manager.java_send :open, [Java::long], identifier
|
13
|
+
bytes = lo.read(lo.size)
|
14
|
+
lo.close
|
15
|
+
String.from_java_bytes(bytes)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def write(file)
|
20
|
+
array_buf = java.nio.file.Files.readAllBytes(java.nio.file.Paths.get(file.path))
|
21
|
+
@uploader.model.transaction do
|
22
|
+
lo = lo_manager.java_send :open, [Java::long, Java::int], identifier, Java::OrgPostgresqlLargeobject::LargeObjectManager::WRITE
|
23
|
+
lo.truncate(0)
|
24
|
+
lo.write(array_buf)
|
25
|
+
size = lo.size
|
26
|
+
lo.close
|
27
|
+
size
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def delete
|
32
|
+
lo_manager.java_send :unlink, [Java::long], identifier
|
33
|
+
end
|
34
|
+
|
35
|
+
def file_length
|
36
|
+
@uploader.model.transaction do
|
37
|
+
lo = lo_manager.java_send :open, [Java::long], identifier
|
38
|
+
size = lo.size
|
39
|
+
lo.close
|
40
|
+
size
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def lo_manager
|
46
|
+
@lo_manager ||= connection.connection.getLargeObjectAPI
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module CarrierWave
|
3
|
+
module Storage
|
4
|
+
module Adapters
|
5
|
+
module PGConnection
|
6
|
+
def identifier
|
7
|
+
@oid ||= connection.lo_creat
|
8
|
+
end
|
9
|
+
|
10
|
+
def read
|
11
|
+
@uploader.model.transaction do
|
12
|
+
lo = connection.lo_open(identifier)
|
13
|
+
content = connection.lo_read(lo, file_length)
|
14
|
+
connection.lo_close(lo)
|
15
|
+
content
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def write(file)
|
20
|
+
@uploader.model.transaction do
|
21
|
+
lo = connection.lo_open(identifier, ::PG::INV_WRITE)
|
22
|
+
connection.lo_truncate(lo, 0)
|
23
|
+
size = connection.lo_write(lo, file.read)
|
24
|
+
connection.lo_close(lo)
|
25
|
+
size
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def delete
|
30
|
+
connection.lo_unlink(identifier)
|
31
|
+
end
|
32
|
+
|
33
|
+
def file_length
|
34
|
+
@uploader.model.transaction do
|
35
|
+
lo = connection.lo_open(identifier)
|
36
|
+
size = connection.lo_lseek(lo, 0, 2)
|
37
|
+
connection.lo_close(lo)
|
38
|
+
size
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -3,6 +3,12 @@ module CarrierWave
|
|
3
3
|
module Storage
|
4
4
|
class PostgresqlLo < Abstract
|
5
5
|
class File
|
6
|
+
if defined?(JRUBY_VERSION)
|
7
|
+
include CarrierWave::Storage::Adapters::JDBCConnection
|
8
|
+
else
|
9
|
+
include CarrierWave::Storage::Adapters::PGConnection
|
10
|
+
end
|
11
|
+
|
6
12
|
def initialize(uploader)
|
7
13
|
@uploader = uploader
|
8
14
|
end
|
@@ -11,41 +17,9 @@ module CarrierWave
|
|
11
17
|
"/#{@uploader.model.class.name.underscore.gsub('/', '_')}_#{@uploader.mounted_as.to_s.underscore}/#{identifier}"
|
12
18
|
end
|
13
19
|
|
14
|
-
def read
|
15
|
-
@uploader.model.transaction do
|
16
|
-
lo = connection.lo_open(identifier)
|
17
|
-
content = connection.lo_read(lo, file_length)
|
18
|
-
connection.lo_close(lo)
|
19
|
-
content
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def write(file)
|
24
|
-
@uploader.model.transaction do
|
25
|
-
lo = connection.lo_open(identifier, ::PG::INV_WRITE)
|
26
|
-
connection.lo_truncate(lo, 0)
|
27
|
-
size = connection.lo_write(lo, file.read)
|
28
|
-
connection.lo_close(lo)
|
29
|
-
size
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def delete
|
34
|
-
connection.lo_unlink(identifier)
|
35
|
-
end
|
36
|
-
|
37
20
|
def content_type
|
38
21
|
end
|
39
22
|
|
40
|
-
def file_length
|
41
|
-
@uploader.model.transaction do
|
42
|
-
lo = connection.lo_open(identifier)
|
43
|
-
size = connection.lo_lseek(lo, 0, 2)
|
44
|
-
connection.lo_close(lo)
|
45
|
-
size
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
23
|
alias :size :file_length
|
50
24
|
|
51
25
|
def connection
|
@@ -76,12 +50,21 @@ module CarrierWave
|
|
76
50
|
end
|
77
51
|
|
78
52
|
def identifier
|
79
|
-
@oid ||=
|
53
|
+
@oid ||= create_large_object
|
80
54
|
end
|
81
55
|
|
82
56
|
def connection
|
83
57
|
@connection ||= uploader.model.class.connection.raw_connection
|
84
58
|
end
|
59
|
+
|
60
|
+
private
|
61
|
+
def create_large_object
|
62
|
+
if defined?(JRUBY_VERSION)
|
63
|
+
connection.connection.getLargeObjectAPI.createLO
|
64
|
+
else
|
65
|
+
connection.lo_creat
|
66
|
+
end
|
67
|
+
end
|
85
68
|
end
|
86
69
|
end
|
87
70
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carrierwave-postgresql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Diogo Biazus
|
@@ -14,16 +14,16 @@ dependencies:
|
|
14
14
|
name: carrierwave
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.10.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:
|
26
|
+
version: 0.10.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,34 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 4.0.1
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: pg
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rspec
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
|
-
- - "
|
45
|
+
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
47
|
+
version: '2.9'
|
62
48
|
type: :development
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
|
-
- - "
|
52
|
+
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
54
|
+
version: '2.9'
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: bundler
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,6 +96,8 @@ files:
|
|
110
96
|
- Rakefile
|
111
97
|
- lib/carrierwave-postgresql.rb
|
112
98
|
- lib/carrierwave/postgresql.rb
|
99
|
+
- lib/carrierwave/storage/adapters/jdbc_connection.rb
|
100
|
+
- lib/carrierwave/storage/adapters/pg_connection.rb
|
113
101
|
- lib/carrierwave/storage/postgresql_lo.rb
|
114
102
|
homepage: https://github.com/diogob/carrierwave-postgresql
|
115
103
|
licenses: []
|