carrierwave-base64 1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +39 -0
- data/Rakefile +8 -0
- data/carrierwave-base64.gemspec +33 -0
- data/lib/carrierwave/base64.rb +12 -0
- data/lib/carrierwave/base64/base64_string_io.rb +31 -0
- data/lib/carrierwave/base64/orm/activerecord.rb +21 -0
- data/lib/carrierwave/base64/version.rb +5 -0
- data/spec/base64_string_io_spec.rb +24 -0
- data/spec/fixtures/base64_image.fixture +1 -0
- data/spec/fixtures/test.jpg +1 -0
- data/spec/orm/activerecord_spec.rb +34 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/models.rb +2 -0
- data/spec/support/schema.rb +9 -0
- metadata +215 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 811d18fa4d3a16b19ae4a12c4ccac6082882fafa
|
4
|
+
data.tar.gz: fb23a6c10bcc373cedfa593fda68c1edc2d9a7f6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d9bd145ee9d9f788e03e06820c02b72346e03e4bbcd0084dc718b725f8947337e4a595cb5b4187d695ec7cedcdc2f2e8b6dc388aad42a61668160475168233e1
|
7
|
+
data.tar.gz: 116ea41a692ede244088fddd0aa7e9e67e5bcf208770e7343e7db5f72305da847ed2b0aaab6590b11ec66beac9c43a57bb2da5c879f2730436f192f5e03ad825
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Yury Lebedev
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Carrierwave::Base64
|
2
|
+
|
3
|
+
Upload files encoded as base64 to carrierwave.
|
4
|
+
|
5
|
+
This small gem can be useful for API's that interact with mobile devices.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add the gem to your Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'carrierwave-base64'
|
13
|
+
```
|
14
|
+
|
15
|
+
## ActiveRecord
|
16
|
+
|
17
|
+
Mount the uploader:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
mount_base64_uploader :image, ImageUploader
|
21
|
+
```
|
22
|
+
|
23
|
+
Now you can also upload files by passing an encoded base64 string to the attribute.
|
24
|
+
|
25
|
+
## Data format
|
26
|
+
|
27
|
+
The string with the encoded data, should be prefixed with Data URI scheme format:
|
28
|
+
|
29
|
+
```
|
30
|
+
data:image/jpg;base64,(base64 encoded data)
|
31
|
+
```
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
1. Fork it ( https://github.com/[my-github-username]/carrierwave-base64/fork )
|
36
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
37
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
38
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
39
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require "carrierwave/base64/version"
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "carrierwave-base64"
|
9
|
+
spec.version = Carrierwave::Base64::VERSION
|
10
|
+
spec.authors = ["Yury Lebedev"]
|
11
|
+
spec.email = ["lebedev.yurii@gmail.com"]
|
12
|
+
spec.summary = %q{Upload images encoded as base64 to carrierwave.}
|
13
|
+
spec.description = %q{This gem can be useful, if you need to upload files to your API from mobile devises.}
|
14
|
+
spec.homepage = "https://github.com/lebedev-yury/carrierwave-base64"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency "carrierwave", [">= 0.8.0", "< 0.11.0"]
|
23
|
+
|
24
|
+
spec.add_development_dependency "rails", ">= 3.2.0"
|
25
|
+
spec.add_dependency "activerecord", ">= 3.2.0"
|
26
|
+
spec.add_dependency "activesupport", ">= 3.2.0"
|
27
|
+
spec.add_development_dependency "sqlite3"
|
28
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
29
|
+
spec.add_development_dependency "rake", ["~> 10.0"]
|
30
|
+
spec.add_development_dependency "rspec", ["~> 2.14"]
|
31
|
+
spec.add_development_dependency "sham_rack"
|
32
|
+
spec.add_development_dependency "pry"
|
33
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require "carrierwave/base64/version"
|
2
|
+
require "carrierwave/base64/base64_string_io"
|
3
|
+
|
4
|
+
module Carrierwave
|
5
|
+
module Base64
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
ActiveSupport.on_load :active_record do
|
8
|
+
require "carrierwave/base64/orm/activerecord"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Carrierwave
|
2
|
+
module Base64
|
3
|
+
class Base64StringIO < StringIO
|
4
|
+
class ArgumentError < StandardError; end
|
5
|
+
|
6
|
+
attr_accessor :image_format
|
7
|
+
|
8
|
+
def initialize(encoded_image)
|
9
|
+
description, encoded_bytes = encoded_image.split(",")
|
10
|
+
|
11
|
+
raise ArgumentError unless encoded_bytes
|
12
|
+
|
13
|
+
@image_format = get_image_format description
|
14
|
+
bytes = ::Base64.decode64 encoded_bytes
|
15
|
+
|
16
|
+
super bytes
|
17
|
+
end
|
18
|
+
|
19
|
+
def original_filename
|
20
|
+
File.basename("image.#{@image_format}")
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def get_image_format(description)
|
26
|
+
regex = /\Adata:image\/([a-z]+);base64\z/i
|
27
|
+
regex.match(description).try(:[], 1)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "active_record"
|
2
|
+
|
3
|
+
module Carrierwave
|
4
|
+
module Base64
|
5
|
+
module ActiveRecord
|
6
|
+
def mount_base64_uploader(attribute, uploader_class)
|
7
|
+
mount_uploader attribute, uploader_class
|
8
|
+
|
9
|
+
define_method "#{attribute}=" do |data|
|
10
|
+
if data.present? && data.end_with?("==")
|
11
|
+
super(Carrierwave::Base64::Base64StringIO.new(data)) if data.end_with?("==")
|
12
|
+
else
|
13
|
+
super(data)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
ActiveRecord::Base.extend Carrierwave::Base64::ActiveRecord
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Carrierwave::Base64::Base64StringIO do
|
4
|
+
context "correct image data" do
|
5
|
+
let(:image_data) { "data:image/jpg;base64,/9j/4AAQSkZJRgABAQEASABKdhH//2Q==" }
|
6
|
+
subject { described_class.new image_data }
|
7
|
+
|
8
|
+
it "determines the image format from the Dara URI scheme" do
|
9
|
+
expect(subject.image_format).to eql("jpg")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should respond to :original_filename" do
|
13
|
+
expect(subject.original_filename).to eql("image.jpg")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "incorrect image data" do
|
18
|
+
it "raises an ArgumentError if Data URI scheme format is missing" do
|
19
|
+
expect do
|
20
|
+
described_class.new("/9j/4AAQSkZJRgABAQEASABIAADKdhH//2Q==")
|
21
|
+
end.to raise_error(Carrierwave::Base64::Base64StringIO::ArgumentError)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
data:image/jpg;base64,/9j/4AAQSkZJRgYN9pQYSVQOD7GuSeR8tSjOKutFJfrq//2Q==
|
@@ -0,0 +1 @@
|
|
1
|
+
File contents
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require "carrierwave/base64/orm/activerecord"
|
4
|
+
|
5
|
+
RSpec.describe Carrierwave::Base64::ActiveRecord do
|
6
|
+
describe ".mount_base64_uploader" do
|
7
|
+
let(:uploader) { Class.new CarrierWave::Uploader::Base }
|
8
|
+
|
9
|
+
subject do
|
10
|
+
Post.mount_base64_uploader(:image, uploader)
|
11
|
+
Post.new
|
12
|
+
end
|
13
|
+
|
14
|
+
it "mounts the uploader on the image field" do
|
15
|
+
expect(subject.image).to be_an_instance_of(uploader)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should work with normal file uploads" do
|
19
|
+
sham_rack_app = ShamRack.at('www.example.com').stub
|
20
|
+
sham_rack_app.register_resource("/test.jpg", file_path("fixtures", "test.jpg"), "images/jpg")
|
21
|
+
subject[:image] = "test.jpg"
|
22
|
+
subject.save!
|
23
|
+
subject.reload
|
24
|
+
expect(subject.image.current_path).to eq file_path("../uploads", "test.jpg")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should work with base64 file uploads" do
|
28
|
+
subject.image = File.read(file_path("fixtures", "base64_image.fixture")).strip
|
29
|
+
subject.save!
|
30
|
+
subject.reload
|
31
|
+
expect(subject.image.current_path).to eq file_path("../uploads", "image.jpg")
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
|
4
|
+
require "pry"
|
5
|
+
require "sham_rack"
|
6
|
+
|
7
|
+
require "rails"
|
8
|
+
require "active_record"
|
9
|
+
|
10
|
+
require "carrierwave"
|
11
|
+
require "carrierwave/orm/activerecord"
|
12
|
+
|
13
|
+
require "carrierwave/base64"
|
14
|
+
|
15
|
+
ActiveRecord::Base.extend CarrierWave::ActiveRecord
|
16
|
+
|
17
|
+
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
|
18
|
+
|
19
|
+
load "support/schema.rb"
|
20
|
+
require "support/models"
|
21
|
+
|
22
|
+
def file_path(*paths)
|
23
|
+
File.expand_path(File.join(File.dirname(__FILE__), *paths))
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,215 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: carrierwave-base64
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yury Lebedev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: carrierwave
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.8.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.11.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.8.0
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.11.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rails
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 3.2.0
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 3.2.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activerecord
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 3.2.0
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 3.2.0
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: activesupport
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 3.2.0
|
68
|
+
type: :runtime
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 3.2.0
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: sqlite3
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: bundler
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.7'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.7'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '10.0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '10.0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rspec
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '2.14'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '2.14'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: sham_rack
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ">="
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: pry
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - ">="
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
description: This gem can be useful, if you need to upload files to your API from
|
160
|
+
mobile devises.
|
161
|
+
email:
|
162
|
+
- lebedev.yurii@gmail.com
|
163
|
+
executables: []
|
164
|
+
extensions: []
|
165
|
+
extra_rdoc_files: []
|
166
|
+
files:
|
167
|
+
- ".gitignore"
|
168
|
+
- Gemfile
|
169
|
+
- LICENSE.txt
|
170
|
+
- README.md
|
171
|
+
- Rakefile
|
172
|
+
- carrierwave-base64.gemspec
|
173
|
+
- lib/carrierwave/base64.rb
|
174
|
+
- lib/carrierwave/base64/base64_string_io.rb
|
175
|
+
- lib/carrierwave/base64/orm/activerecord.rb
|
176
|
+
- lib/carrierwave/base64/version.rb
|
177
|
+
- spec/base64_string_io_spec.rb
|
178
|
+
- spec/fixtures/base64_image.fixture
|
179
|
+
- spec/fixtures/test.jpg
|
180
|
+
- spec/orm/activerecord_spec.rb
|
181
|
+
- spec/spec_helper.rb
|
182
|
+
- spec/support/models.rb
|
183
|
+
- spec/support/schema.rb
|
184
|
+
homepage: https://github.com/lebedev-yury/carrierwave-base64
|
185
|
+
licenses:
|
186
|
+
- MIT
|
187
|
+
metadata: {}
|
188
|
+
post_install_message:
|
189
|
+
rdoc_options: []
|
190
|
+
require_paths:
|
191
|
+
- lib
|
192
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
requirements: []
|
203
|
+
rubyforge_project:
|
204
|
+
rubygems_version: 2.4.5
|
205
|
+
signing_key:
|
206
|
+
specification_version: 4
|
207
|
+
summary: Upload images encoded as base64 to carrierwave.
|
208
|
+
test_files:
|
209
|
+
- spec/base64_string_io_spec.rb
|
210
|
+
- spec/fixtures/base64_image.fixture
|
211
|
+
- spec/fixtures/test.jpg
|
212
|
+
- spec/orm/activerecord_spec.rb
|
213
|
+
- spec/spec_helper.rb
|
214
|
+
- spec/support/models.rb
|
215
|
+
- spec/support/schema.rb
|