carrierwave-postgresql 0.1.5 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 [![Build Status](https://secure.travis-ci.org/diogob/carrierwave-postgresql.
|
1
|
+
# carrierwave-postgresql [![Build Status](https://secure.travis-ci.org/diogob/carrierwave-postgresql.svg)](http://travis-ci.org/diogob/carrierwave-postgresql)[![Code Climate](https://codeclimate.com/github/diogob/carrierwave-postgresql.svg)](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: []
|