uploadcare-rails 1.0.6 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/initializers/uploadcare.rb +22 -23
- data/lib/uploadcare-rails.rb +6 -5
- data/lib/uploadcare/rails/action_view/include_tags.rb +35 -26
- data/lib/uploadcare/rails/action_view/uploader_tags.rb +31 -29
- data/lib/uploadcare/rails/active_record/has_file.rb +14 -26
- data/lib/uploadcare/rails/active_record/has_group.rb +23 -22
- data/lib/uploadcare/rails/active_record/has_object.rb +3 -4
- data/lib/uploadcare/rails/engine.rb +3 -3
- data/lib/uploadcare/rails/formtastic/formtastic.rb +19 -15
- data/lib/uploadcare/rails/objects/file.rb +13 -25
- data/lib/uploadcare/rails/objects/group.rb +45 -22
- data/lib/uploadcare/rails/operations.rb +57 -0
- data/lib/uploadcare/rails/settings.rb +26 -30
- data/lib/uploadcare/rails/simple_form/simple_form.rb +22 -20
- data/lib/uploadcare/rails/version.rb +1 -1
- data/spec/caching/file_caching_spec.rb +16 -24
- data/spec/caching/group_caching_spec.rb +23 -26
- data/{app → spec/dummy/app}/assets/javascripts/uploadcare-1.5.5.min.js +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +2 -2
- data/spec/dummy/config/routes.rb +2 -2
- data/spec/helpers/include_tags_spec.rb +41 -29
- data/spec/models/has_both_file_and_group_spec.rb +19 -17
- data/spec/models/has_file_spec.rb +46 -47
- data/spec/models/has_group_spec.rb +46 -32
- data/spec/objects/file_spec.rb +9 -11
- data/spec/objects/group_spec.rb +40 -29
- data/spec/operations_spec.rb +28 -0
- data/spec/spec_helper.rb +17 -5
- metadata +235 -199
- data/MIT-LICENSE +0 -20
- data/app/assets/javascripts/uploadcare-0.17.0.js +0 -8248
- data/app/assets/javascripts/uploadcare-0.17.0.min.js +0 -17
- data/app/assets/javascripts/uploadcare-0.18.3.js +0 -8484
- data/app/assets/javascripts/uploadcare-0.18.3.min.js +0 -17
- data/app/assets/javascripts/uploadcare-1.0.1.js +0 -8430
- data/app/assets/javascripts/uploadcare-1.0.1.min.js +0 -17
- data/app/assets/javascripts/uploadcare-1.3.1.js +0 -8563
- data/app/assets/javascripts/uploadcare-1.3.1.min.js +0 -17
- data/app/assets/javascripts/uploadcare-1.5.5.js +0 -9278
- data/app/assets/javascripts/uploadcare.js +0 -1
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/test.log +0 -2166
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0113e45365a82f1af9474db0a516cae93dc19513
|
4
|
+
data.tar.gz: 4fe03ac56616d9adcff45499832871d206f1d23d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a112c863d5016ae1d7b191e64cb2a8b0a0c3d86cbac74a18a04abf95e8dbfe37afd30fec8676a39c4afc84622a6aa2d98ff66178ce423d1616c9e473523716f
|
7
|
+
data.tar.gz: de5e0f0f18f2e5ee4f8325bd8e80b368dcce7e7ac899d99fbd08708476005a93618892448bda5aa0dfddbf8c55e9d83506826c5f643d5793766720d589d02eaa
|
@@ -1,27 +1,26 @@
|
|
1
|
-
config_file =
|
1
|
+
config_file = Rails.root.join('config', 'uploadcare.yml')
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
\e[
|
14
|
-
|
15
|
-
eos
|
3
|
+
config =
|
4
|
+
if File.exist?(config_file)
|
5
|
+
YAML.load(ERB.new(File.new(config_file).read).result)
|
6
|
+
else
|
7
|
+
# output warning in red color
|
8
|
+
# use default settings just to boot up
|
9
|
+
puts <<-eos
|
10
|
+
\e[31mWarning: no uploadcare.yml config file found.\e[0m
|
11
|
+
\e[31mwhile we will use default settings please run\e[0m
|
12
|
+
\e[36mrails g uploadcare_config\e[0m
|
13
|
+
\e[31mto set up config file.\e[0m
|
14
|
+
eos
|
16
15
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
16
|
+
{
|
17
|
+
defaults: { public_key: :demopublickey, private_key: :demoprivatekey },
|
18
|
+
development: { public_key: :demopublickey, private_key: :demoprivatekey },
|
19
|
+
test: { public_key: :demopublickey, private_key: :demoprivatekey },
|
20
|
+
production: { public_key: :demopublickey, private_key: :demoprivatekey }
|
21
|
+
}
|
22
|
+
end
|
25
23
|
|
24
|
+
UPLOADCARE_SETTINGS = Uploadcare::Rails::Settings.new(config)
|
26
25
|
# shortcut for later usage
|
27
|
-
Rails.application.config.uploadcare = UPLOADCARE_SETTINGS
|
26
|
+
Rails.application.config.uploadcare = UPLOADCARE_SETTINGS
|
data/lib/uploadcare-rails.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'uploadcare/rails/engine'
|
2
|
+
require 'uploadcare/rails/settings'
|
3
|
+
require 'uploadcare/rails/operations'
|
4
|
+
require 'uploadcare'
|
4
5
|
|
5
6
|
module Uploadcare
|
6
7
|
module Rails
|
7
8
|
DEFAULT_SETTINGS = {
|
8
|
-
widget_version:
|
9
|
+
widget_version: '2.9.0'
|
9
10
|
}
|
10
11
|
end
|
11
|
-
end
|
12
|
+
end
|
@@ -1,38 +1,47 @@
|
|
1
1
|
module Uploadcare::Rails::ActionView
|
2
2
|
module IncludeTags
|
3
|
-
def include_uploadcare_widget_from_cdn
|
4
|
-
settings =
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
def include_uploadcare_widget_from_cdn(options = {})
|
4
|
+
settings =
|
5
|
+
{
|
6
|
+
min: true,
|
7
|
+
version: UPLOADCARE_SETTINGS.widget_version
|
8
|
+
}.merge!(options)
|
9
|
+
|
10
|
+
minified = settings[:min] ? 'min' : nil
|
11
|
+
|
12
|
+
path =
|
13
|
+
[
|
14
|
+
'widget',
|
15
|
+
settings[:version],
|
16
|
+
'uploadcare',
|
17
|
+
['uploadcare', minified, 'js'].compact.join('.')
|
18
|
+
].join('/')
|
19
|
+
|
20
|
+
url = URI::HTTPS.
|
21
|
+
build(host: 'ucarecdn.com', path: '/' + path, scheme: :https)
|
22
|
+
|
23
|
+
javascript_include_tag(url.to_s)
|
16
24
|
end
|
25
|
+
|
17
26
|
alias_method :inlude_uploadcare_widget, :include_uploadcare_widget_from_cdn
|
18
27
|
alias_method :uplodacare_widget, :include_uploadcare_widget_from_cdn
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
js_settings = String.new
|
28
|
+
|
29
|
+
def uploadcare_settings(options = {})
|
30
|
+
settings = UPLOADCARE_SETTINGS.widget_settings.merge!(options)
|
31
|
+
|
32
|
+
js_settings = ''
|
25
33
|
settings.each do |k, v|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
34
|
+
js_settings <<
|
35
|
+
if v.is_a?(TrueClass) || v.is_a?(FalseClass)
|
36
|
+
"UPLOADCARE_#{ k.to_s.underscore.upcase } = #{ v };\n"
|
37
|
+
else
|
38
|
+
"UPLOADCARE_#{ k.to_s.underscore.upcase } = \"#{ v }\";\n"
|
39
|
+
end
|
31
40
|
end
|
32
41
|
|
33
|
-
|
42
|
+
javascript_tag(js_settings)
|
34
43
|
end
|
35
44
|
end
|
36
45
|
end
|
37
46
|
|
38
|
-
ActionView::Base.send :include, Uploadcare::Rails::ActionView::IncludeTags
|
47
|
+
ActionView::Base.send :include, Uploadcare::Rails::ActionView::IncludeTags
|
@@ -2,55 +2,54 @@
|
|
2
2
|
|
3
3
|
module Uploadcare::Rails::ActionView
|
4
4
|
module UploaderTags
|
5
|
-
def uploadcare_uploader_options
|
6
|
-
options = options.symbolize_keys.deep_merge(
|
7
|
-
:
|
8
|
-
:
|
9
|
-
|
10
|
-
|
5
|
+
def uploadcare_uploader_options(options)
|
6
|
+
options = options.symbolize_keys.deep_merge(
|
7
|
+
role: "uploadcare-uploader #{ options[:role] }".strip,
|
8
|
+
data: { path_value: true }
|
9
|
+
)
|
10
|
+
|
11
11
|
# merge uploadcare options into data-attributes
|
12
12
|
# IMPORTANT: custome data-attrs will be overriden by
|
13
13
|
# the uploadcare options in case of collision.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
else
|
19
|
-
options
|
20
|
-
end
|
14
|
+
return options unless options[:uploadcare]
|
15
|
+
|
16
|
+
options[:data] = options[:data].merge!(options[:uploadcare])
|
17
|
+
options.except(:uploadcare)
|
21
18
|
end
|
22
19
|
|
23
|
-
def uploadcare_uploader_tag
|
24
|
-
|
25
|
-
hidden_field_tag(name, nil, options)
|
20
|
+
def uploadcare_uploader_tag(name, options = {})
|
21
|
+
hidden_field_tag(name, nil, uploadcare_uploader_options(options))
|
26
22
|
end
|
27
23
|
|
28
|
-
def uploadcare_uploader_field
|
29
|
-
|
30
|
-
hidden_field(object_name, method, options)
|
24
|
+
def uploadcare_uploader_field(object_name, method, options = {})
|
25
|
+
hidden_field(object_name, method, uploadcare_uploader_options(options))
|
31
26
|
end
|
32
27
|
|
33
|
-
def self.included(
|
34
|
-
ActionView::Helpers::FormBuilder.
|
28
|
+
def self.included(_)
|
29
|
+
ActionView::Helpers::FormBuilder.
|
30
|
+
send(:include, Uploadcare::Rails::ActionView::FormBuilder)
|
35
31
|
end
|
36
32
|
end
|
37
33
|
|
38
34
|
module FormBuilder
|
39
35
|
# call uploadcare_uploader field for form object
|
40
36
|
# none of options will be overriden and given as-is
|
41
|
-
def uploadcare_uploader
|
42
|
-
@template.
|
37
|
+
def uploadcare_uploader(method, options = {})
|
38
|
+
@template.
|
39
|
+
uploadcare_uploader_field(
|
40
|
+
@object_name, method, objectify_options(options)
|
41
|
+
)
|
43
42
|
end
|
44
43
|
|
45
44
|
# forse-set the data-multiple="false" for uploader
|
46
|
-
def uploadcare_single_uploader_field
|
45
|
+
def uploadcare_single_uploader_field(method, options = {})
|
47
46
|
options[:uploadcare] ||= {}
|
48
47
|
options[:uploadcare][:multiple] = false
|
49
48
|
uploadcare_uploader(method, options)
|
50
49
|
end
|
51
50
|
|
52
51
|
# forse-set the data-multiple="true" for uploader
|
53
|
-
def uploadcare_multiple_uploader_field
|
52
|
+
def uploadcare_multiple_uploader_field(method, options = {})
|
54
53
|
options[:uploadcare] ||= {}
|
55
54
|
options[:uploadcare][:multiple] = true
|
56
55
|
uploadcare_uploader(method, options)
|
@@ -60,10 +59,12 @@ module Uploadcare::Rails::ActionView
|
|
60
59
|
# and then choose either multiple or single-file upload.
|
61
60
|
# not that this method WILL override custom settings in order
|
62
61
|
# to prevent method collisions
|
63
|
-
def uploadcare_field
|
64
|
-
if @object.try("has_#{method}_as_uploadcare_file?".to_sym) &&
|
62
|
+
def uploadcare_field(method, options = {})
|
63
|
+
if @object.try("has_#{ method }_as_uploadcare_file?".to_sym) &&
|
64
|
+
!@object.try("has_#{ method }_as_uploadcare_group?".to_sym)
|
65
65
|
uploadcare_single_uploader_field(method, options)
|
66
|
-
elsif !@object.try("has_#{method}_as_uploadcare_file?".to_sym) &&
|
66
|
+
elsif !@object.try("has_#{ method }_as_uploadcare_file?".to_sym) &&
|
67
|
+
@object.try("has_#{ method }_as_uploadcare_group?".to_sym)
|
67
68
|
uploadcare_multiple_uploader_field(method, options)
|
68
69
|
else
|
69
70
|
uploadcare_uploader(method, options)
|
@@ -71,4 +72,5 @@ module Uploadcare::Rails::ActionView
|
|
71
72
|
end
|
72
73
|
end
|
73
74
|
end
|
74
|
-
|
75
|
+
|
76
|
+
ActionView::Base.send :include, Uploadcare::Rails::ActionView::UploaderTags
|
@@ -3,7 +3,7 @@ require "uploadcare/rails/objects/file"
|
|
3
3
|
module Uploadcare
|
4
4
|
module Rails
|
5
5
|
module ActiveRecord
|
6
|
-
def has_uploadcare_file
|
6
|
+
def has_uploadcare_file(attribute, options={})
|
7
7
|
|
8
8
|
define_method "has_#{attribute}_as_uploadcare_file?" do
|
9
9
|
true
|
@@ -13,65 +13,53 @@ module Uploadcare
|
|
13
13
|
false
|
14
14
|
end
|
15
15
|
|
16
|
-
define_method
|
16
|
+
define_method 'build_file' do
|
17
17
|
cdn_url = attributes[attribute.to_s].to_s
|
18
18
|
return nil if cdn_url.empty?
|
19
19
|
|
20
20
|
api = ::Rails.application.config.uploadcare.api
|
21
21
|
cache = ::Rails.cache
|
22
22
|
|
23
|
-
if file_obj
|
24
|
-
|
23
|
+
if file_obj ||= cache.read(cdn_url)
|
24
|
+
Uploadcare::Rails::File.new(api, cdn_url, file_obj)
|
25
25
|
else
|
26
|
-
|
26
|
+
Uploadcare::Rails::File.new(api, cdn_url)
|
27
27
|
end
|
28
|
-
|
29
|
-
file
|
30
28
|
end
|
31
29
|
|
32
30
|
# attribute method - return file object
|
33
31
|
# it is not the ::File but ::Rails::File
|
34
32
|
# it has some helpers for rails enviroment
|
35
33
|
# but it also has all the methods of Uploadcare::File so no worries.
|
36
|
-
define_method "#{attribute}" do
|
37
|
-
# cdn_url = attributes[attribute.to_s].to_s
|
38
|
-
|
39
|
-
# return nil if cdn_url.empty?
|
40
|
-
|
41
|
-
# api = Rails.application.config.uploadcare
|
42
|
-
# cache = ::Rails.cache
|
43
|
-
|
44
|
-
# if file_obj = cache.read(cdn_url)
|
45
|
-
# file = Uploadcare::Rails::File.new api, cdn_url, file_obj
|
46
|
-
# else
|
47
|
-
# file = Uploadcare::Rails::File.new api, cdn_url
|
48
|
-
# end
|
34
|
+
define_method "#{ attribute }" do
|
49
35
|
build_file
|
50
36
|
end
|
51
37
|
|
52
|
-
define_method "check_#{attribute}_for_uuid" do
|
53
|
-
url =
|
38
|
+
define_method "check_#{ attribute }_for_uuid" do
|
39
|
+
url = attributes[attribute.to_s]
|
54
40
|
if url.present?
|
55
41
|
result = Uploadcare::Parser.parse(url)
|
56
|
-
raise
|
42
|
+
raise 'Invalid Uploadcare file uuid' unless result.is_a?(Uploadcare::Parser::File)
|
57
43
|
end
|
58
44
|
end
|
59
45
|
|
60
|
-
define_method "store_#{attribute}" do
|
46
|
+
define_method "store_#{ attribute }" do
|
61
47
|
file = build_file
|
62
48
|
|
49
|
+
return unless file
|
50
|
+
|
63
51
|
begin
|
64
52
|
file.store
|
65
53
|
::Rails.cache.write(file.cdn_url, file.marshal_dump) if UPLOADCARE_SETTINGS.cache_files
|
66
54
|
rescue Exception => e
|
67
|
-
logger.error "\nError while saving a file #{cdn_url}: #{e.class} (#{e.message}):"
|
55
|
+
logger.error "\nError while saving a file #{file.cdn_url}: #{e.class} (#{e.message}):"
|
68
56
|
logger.error "#{::Rails.backtrace_cleaner.clean(e.backtrace).join("\n ")}"
|
69
57
|
end
|
70
58
|
|
71
59
|
file
|
72
60
|
end
|
73
61
|
|
74
|
-
define_method "delete_#{attribute}" do
|
62
|
+
define_method "delete_#{ attribute }" do
|
75
63
|
file = build_file
|
76
64
|
|
77
65
|
begin
|
@@ -1,48 +1,49 @@
|
|
1
|
-
require
|
1
|
+
require 'uploadcare/rails/objects/group'
|
2
2
|
|
3
3
|
module Uploadcare
|
4
4
|
module Rails
|
5
5
|
module ActiveRecord
|
6
|
-
def has_uploadcare_group
|
7
|
-
|
8
|
-
define_method "has_#{attribute}_as_uploadcare_file?" do
|
6
|
+
def has_uploadcare_group(attribute, options = {})
|
7
|
+
define_method "has_#{ attribute }_as_uploadcare_file?" do
|
9
8
|
false
|
10
9
|
end
|
11
10
|
|
12
|
-
define_method "has_#{attribute}_as_uploadcare_group?" do
|
11
|
+
define_method "has_#{ attribute }_as_uploadcare_group?" do
|
13
12
|
true
|
14
13
|
end
|
15
14
|
|
16
|
-
define_method
|
15
|
+
define_method 'build_group' do
|
17
16
|
cdn_url = attributes[attribute.to_s].to_s
|
18
17
|
return nil if cdn_url.empty?
|
19
|
-
|
18
|
+
|
20
19
|
api = ::Rails.application.config.uploadcare.api
|
21
20
|
cache = ::Rails.cache
|
22
21
|
|
23
22
|
if group_obj = cache.read(cdn_url)
|
24
|
-
|
23
|
+
Uploadcare::Rails::Group.new(api, cdn_url, group_obj)
|
25
24
|
else
|
26
|
-
|
25
|
+
Uploadcare::Rails::Group.new(api, cdn_url)
|
27
26
|
end
|
28
|
-
|
29
|
-
file
|
30
27
|
end
|
31
28
|
|
32
29
|
# attribute method - return file object
|
33
|
-
define_method "#{attribute}" do
|
30
|
+
define_method "#{ attribute }" do
|
34
31
|
build_group
|
35
32
|
end
|
36
33
|
|
37
|
-
define_method "check_#{attribute}_for_uuid" do
|
38
|
-
url =
|
39
|
-
|
34
|
+
define_method "check_#{ attribute }_for_uuid" do
|
35
|
+
url = attributes[attribute.to_s]
|
36
|
+
|
37
|
+
unless url.blank?
|
40
38
|
result = Uploadcare::Parser.parse(url)
|
41
|
-
|
39
|
+
|
40
|
+
unless result.is_a?(Uploadcare::Parser::Group)
|
41
|
+
raise 'Invalid group uuid'
|
42
|
+
end
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
|
-
define_method "store_#{attribute}" do
|
46
|
+
define_method "store_#{ attribute }" do
|
46
47
|
group = build_group
|
47
48
|
return unless group.present?
|
48
49
|
|
@@ -50,12 +51,12 @@ module Uploadcare
|
|
50
51
|
group.store
|
51
52
|
::Rails.cache.write(group.cdn_url, group.marshal_dump) if UPLOADCARE_SETTINGS.cache_groups
|
52
53
|
rescue Exception => e
|
53
|
-
logger.error "\nError while storing a group #{group.cdn_url}: #{e.class} (#{e.message}):"
|
54
|
+
logger.error "\nError while storing a group #{ group.cdn_url }: #{ e.class } (#{e.message }):"
|
54
55
|
logger.error "#{::Rails.backtrace_cleaner.clean(e.backtrace).join("\n ")}"
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
define_method "delete_#{attribute}" do
|
59
|
+
define_method "delete_#{ attribute }" do
|
59
60
|
group = build_group
|
60
61
|
|
61
62
|
begin
|
@@ -70,11 +71,11 @@ module Uploadcare
|
|
70
71
|
# before saving we checking what it is a actually file cdn url
|
71
72
|
# or uuid. uuid will do.
|
72
73
|
# group url or uuid should raise an erorr
|
73
|
-
before_save "check_#{attribute}_for_uuid"
|
74
|
+
before_save "check_#{ attribute }_for_uuid"
|
74
75
|
|
75
|
-
after_save "store_#{attribute}" if UPLOADCARE_SETTINGS.store_after_save
|
76
|
+
after_save "store_#{ attribute }" if UPLOADCARE_SETTINGS.store_after_save
|
76
77
|
|
77
|
-
after_destroy "delete_#{attribute}" if UPLOADCARE_SETTINGS.delete_after_destroy
|
78
|
+
after_destroy "delete_#{ attribute }" if UPLOADCARE_SETTINGS.delete_after_destroy
|
78
79
|
end
|
79
80
|
end
|
80
81
|
end
|