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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 49dae63eba24bc9843965bb2868b89d8538fae5f
4
- data.tar.gz: 7704451803cbe91f568ab8c77627b0a9d54aa905
3
+ metadata.gz: da7812a54694e701a54b68149934790811a5caeb
4
+ data.tar.gz: aa5c4c93a992ed1de295c096cfa2d4036d34f712
5
5
  SHA512:
6
- metadata.gz: 1a2108e137c5898a15a47e993ada63e3ed2f8e537c0d25ee1bdea1d199381bd0a668a42ae68ddcca8c38fb106a41bc8bd2a43724bad15df46f8df16c79d38602
7
- data.tar.gz: b71412a2b2e4e95d68c3914a1da097a518d13bf76f222e45f025d5d24f7ffe7c0ba7f2f9d8514370723c1524c7be0ecfad59e4b07e281f6be873a2e311dd607d
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.png)](http://travis-ci.org/diogob/carrierwave-postgresql)[![Code Climate](https://codeclimate.com/github/diogob/carrierwave-postgresql.png)](https://codeclimate.com/github/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,3 +1,2 @@
1
1
  # encoding: utf-8
2
-
3
2
  require 'carrierwave/postgresql'
@@ -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 ||= connection.lo_creat
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.1.5
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: '0'
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: '0'
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: '0'
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: '0'
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: []