refinerycms-dragonfly 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/Rakefile +8 -0
- data/lib/generators/refinery/dragonfly/dragonfly_generator.rb +20 -0
- data/lib/generators/refinery/dragonfly/templates/config/initializers/refinery/dragonfly.rb.erb +59 -0
- data/lib/refinery/dragonfly.rb +23 -0
- data/lib/refinery/dragonfly/configuration.rb +87 -0
- data/lib/refinery/dragonfly/dragonfly.rb +95 -0
- data/lib/refinery/dragonfly/engine.rb +26 -0
- data/lib/refinery/dragonfly/extension_configuration.rb +189 -0
- data/lib/refinerycms-dragonfly.rb +1 -0
- data/refinerycms-dragonfly.gemspec +27 -0
- data/spec/lib/generators/refinery/dragonfly/dragonfly_generator_spec.rb +29 -0
- data/spec/lib/refinery/dragonfly/dragonfly_spec.rb +36 -0
- data/spec/support/custom_datastore_one.rb +1 -0
- data/spec/support/custom_datastore_two.rb +1 -0
- data/spec/support/shared_examples/adds_dragonfly_app_to_middlewares.rb +10 -0
- data/spec/support/shared_examples/creates_a_dragonfly_app.rb +73 -0
- data/tasks/rspec.rake +4 -0
- metadata +137 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4d11bd9be648efd9d063d5a489296ad0568ef12303a859b149530777924ab637
|
4
|
+
data.tar.gz: 4040f71450f7c2df28c48e63c25002fcd24e854b4223ca0e3165d8fc9e5ef625
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 254b0753d946efe7acea73a163ec5fda529258c06bc84b4b32d6828ef0b38dc414dc400fdba2a28579b9793bb8c5dfe679bfcefaf097db484cb93ec477a65f9a
|
7
|
+
data.tar.gz: a2edb4ea5c3db95db85c706519671e8aa3e8cf58c5a15b26f73dca67c196b293849a3cd38d7789c19ab8832ac03b235eeed6f6a4e0e5e3696c9668e3a5bb956e
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Refinery
|
2
|
+
class DragonflyGenerator < Rails::Generators::Base
|
3
|
+
|
4
|
+
# Dragonfly has no migrations. Make skip_migrations the default
|
5
|
+
class_option :skip_migrations, :type => :boolean, :default => true, :aliases => nil, :group => :runtime,
|
6
|
+
:desc => 'Skip over installing or running migrations.'
|
7
|
+
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
|
10
|
+
def rake_db
|
11
|
+
rake 'refinery_dragonfly:install:migrations' unless self.options[:skip_migrations]
|
12
|
+
end
|
13
|
+
|
14
|
+
def generate_dragonfly_initializer
|
15
|
+
template 'config/initializers/refinery/dragonfly.rb.erb',
|
16
|
+
File.join(destination_root, 'config', 'initializers', 'refinery', 'dragonfly.rb')
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
data/lib/generators/refinery/dragonfly/templates/config/initializers/refinery/dragonfly.rb.erb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
Refinery::Dragonfly.configure do |config|
|
3
|
+
|
4
|
+
# Should set this if concerned about DOS attacks. See
|
5
|
+
# http://markevans.github.com/dragonfly/file.Configuration.html#Configuration
|
6
|
+
|
7
|
+
# config.secret = <%= Refinery::Dragonfly.secret.inspect %>
|
8
|
+
# config.verify_urls = <%= Refinery::Dragonfly.verify_urls.inspect %>
|
9
|
+
|
10
|
+
# Refinery passes all options to Dragonfly. See refinerycms/dragonfly/lib/refinery/dragonfly/configuration.rb and
|
11
|
+
# http://markevans.github.com/dragonfly/file.Configuration.html#Configuration
|
12
|
+
|
13
|
+
# config.url_format = <%= Refinery::Dragonfly.url_format.inspect %>
|
14
|
+
# config.url_host = <%= Refinery::Dragonfly.url_host.inspect %>
|
15
|
+
# config.url_path_prefix = <%= Refinery::Dragonfly.url_path_prefix.inspect %>
|
16
|
+
|
17
|
+
# config.allow_legacy_urls = <%= Refinery::Dragonfly.allow_legacy_urls.inspect %>
|
18
|
+
# config.analysers = <%= Refinery::Dragonfly.analysers.inspect %>
|
19
|
+
# config.before_serve = <%= Refinery::Dragonfly.before_serve.inspect %>
|
20
|
+
# config.datastore_root_path = <%= Refinery::Dragonfly.datastore_root_path.inspect %>
|
21
|
+
# config.define_url = <%= Refinery::Dragonfly.define_url.inspect %>
|
22
|
+
# config.dragonfly_url = <%= Refinery::Dragonfly.dragonfly_url.inspect %>
|
23
|
+
# config.fetch_file_whitelist = <%= Refinery::Dragonfly.fetch_file_whitelist.inspect %>
|
24
|
+
# config.fetch_url_whitelist = <%= Refinery::Dragonfly.fetch_url_whitelist.inspect %>
|
25
|
+
# config.generators = <%= Refinery::Dragonfly.generators.inspect %>
|
26
|
+
# config.mime_types = <%= Refinery::Dragonfly.mime_types.inspect %>
|
27
|
+
# config.name = <%= Refinery::Dragonfly.name.inspect %>
|
28
|
+
# config.path_prefix = <%= Refinery::Dragonfly.path_prefix.inspect %>
|
29
|
+
# config.plugin = <%= Refinery::Dragonfly.plugin.inspect %>
|
30
|
+
# config.processors = <%= Refinery::Dragonfly.processors.inspect %>
|
31
|
+
# config.response_header = <%= Refinery::Dragonfly.response_header.inspect %>
|
32
|
+
|
33
|
+
|
34
|
+
# Set the S3 options using means other than securely by environment variables.
|
35
|
+
# If you have to.
|
36
|
+
# config.s3_bucket_name = ENV['S3_BUCKET']
|
37
|
+
# config.s3_region = ENV['S3_REGION']
|
38
|
+
# config.s3_access_key_id = ENV['S3_KEY']
|
39
|
+
# config.s3_secret_access_key = ENV['S3_SECRET']
|
40
|
+
|
41
|
+
# When true will use Amazon's Simple Storage Service instead of the default file system for storing resources and images
|
42
|
+
config.s3_datastore = config.s3_access_key_id.present? || config.s3_secret_access_key.present?
|
43
|
+
|
44
|
+
# config.s3_fog_storage_options = <%= Refinery::Dragonfly.s3_fog_storage_options.inspect %>
|
45
|
+
# config.s3_root_path = <%= Refinery::Dragonfly.s3_root_path.inspect %>
|
46
|
+
# config.s3_storage_path = <%= Refinery::Dragonfly.s3_storage_path.inspect %>
|
47
|
+
# config.s3_storage_headers = <%= Refinery::Dragonfly.s3_storage_headers.inspect %>
|
48
|
+
# config.s3_url_host = <%= Refinery::Dragonfly.s3_url_host.inspect %>
|
49
|
+
# config.s3_url_scheme = <%= Refinery::Dragonfly.s3_url_scheme.inspect %>
|
50
|
+
# config.s3_use_iam_profile = <%= Refinery::Dragonfly.s3_use_iam_profile.inspect %>
|
51
|
+
|
52
|
+
# Configure a custom Dragonfly datastore instead of the default (filesystem).
|
53
|
+
# Dragonfly offers gems for datastores on S3, Couch, Mongo
|
54
|
+
# See http://markevans.github.io/dragonfly/data-stores#building-a-custom-data-store
|
55
|
+
#
|
56
|
+
# config.custom_datastore_class = <%= Refinery::Dragonfly.custom_datastore_class.inspect %>
|
57
|
+
# config.custom_datastore_opts = <%= Refinery::Dragonfly.custom_datastore_opts.inspect %>
|
58
|
+
|
59
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'active_support/configurable'
|
2
|
+
require 'dragonfly'
|
3
|
+
|
4
|
+
module Refinery
|
5
|
+
autoload :DragonflyGenerator, 'generators/refinery/dragonfly/dragonfly_generator'
|
6
|
+
|
7
|
+
module Dragonfly
|
8
|
+
require 'refinery/dragonfly/configuration'
|
9
|
+
require 'refinery/dragonfly/dragonfly'
|
10
|
+
require 'refinery/dragonfly/engine'
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def root
|
14
|
+
@root ||= Pathname.new(File.expand_path('../../../', __FILE__))
|
15
|
+
end
|
16
|
+
|
17
|
+
def factory_paths
|
18
|
+
@factory_paths ||= [ root.join("spec/factories").to_s ]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Dragonfly
|
3
|
+
|
4
|
+
include ActiveSupport::Configurable
|
5
|
+
|
6
|
+
# All dragonfly options allowed
|
7
|
+
config_accessor :allow_legacy_urls, :analysers,
|
8
|
+
:before_serve,
|
9
|
+
:cache_log_level, :cache_store_root,
|
10
|
+
:custom_datastore_class, :custom_datastore_opts,
|
11
|
+
:datastore_root_path, :define_url, :dragonfly_url,
|
12
|
+
:fetch_file_whitelist, :fetch_url_whitelist,
|
13
|
+
:generators,
|
14
|
+
:mime_types,
|
15
|
+
:name,
|
16
|
+
:path_prefix, :plugin, :processors,
|
17
|
+
:response_header,
|
18
|
+
:secret,
|
19
|
+
:url_format, :url_host, :url_path_prefix,
|
20
|
+
:verify_urls,
|
21
|
+
|
22
|
+
# s3 options
|
23
|
+
|
24
|
+
:s3_access_key_id,
|
25
|
+
:s3_datastore, :s3_bucket_name,
|
26
|
+
|
27
|
+
:s3_fog_storage_options,
|
28
|
+
:s3_region, :s3_root_path,
|
29
|
+
:s3_secret_access_key, :s3_storage_path, :s3_storage_headers,
|
30
|
+
:s3_url_host, :s3_url_scheme, :s3_use_iam_profile
|
31
|
+
|
32
|
+
|
33
|
+
self.allow_legacy_urls = false
|
34
|
+
self.analysers = []
|
35
|
+
self.before_serve = nil
|
36
|
+
|
37
|
+
self.cache_log_level = 'verbose'
|
38
|
+
self.cache_store_root = 'tmp/dragonfly'
|
39
|
+
self.custom_datastore_class = nil
|
40
|
+
self.custom_datastore_opts = {}
|
41
|
+
|
42
|
+
self.datastore_root_path = 'public/system/refinery/dragonfly'
|
43
|
+
self.define_url = nil
|
44
|
+
self.dragonfly_url = nil
|
45
|
+
self.fetch_file_whitelist = nil
|
46
|
+
self.fetch_url_whitelist = nil
|
47
|
+
self.generators = []
|
48
|
+
self.mime_types = []
|
49
|
+
self.name = 'dragonfly'
|
50
|
+
self.path_prefix = nil
|
51
|
+
self.plugin = ''
|
52
|
+
self.processors = []
|
53
|
+
self.response_header = nil
|
54
|
+
self.secret = Array.new(24) { rand(256) }.pack('C*').unpack('H*').first
|
55
|
+
self.url_path_prefix = ''
|
56
|
+
self.url_host = ''
|
57
|
+
self.verify_urls = true
|
58
|
+
|
59
|
+
# s3 Data Store Config
|
60
|
+
|
61
|
+
self.s3_datastore = false
|
62
|
+
self.s3_bucket_name = ENV['S3_BUCKET']
|
63
|
+
self.s3_access_key_id = ENV['S3_KEY']
|
64
|
+
self.s3_secret_access_key = ENV['S3_SECRET']
|
65
|
+
self.s3_region = ENV['S3_REGION'] # default 'us-east-1' see Dragonfly S3DataStore :s3_REGIONS for options
|
66
|
+
self.s3_url_scheme = nil # defaults to "http"
|
67
|
+
self.s3_url_host = nil # defaults to "<bucket-name>.s3.amazonaws.com" or "s3.amazonaws.com/<bucket-name>" if not a valid subdomain
|
68
|
+
self.s3_use_iam_profile = nil # boolean - if true no need for access_key_id or secret_access_key
|
69
|
+
self.s3_root_path = nil # store all content under a subdirectory - uids will be relative to this - defaults to nil
|
70
|
+
self.s3_fog_storage_options = nil # hash for passing any extra options to Fog
|
71
|
+
|
72
|
+
# Per-storage options
|
73
|
+
self.s3_storage_path = nil
|
74
|
+
self.s3_storage_headers = nil
|
75
|
+
|
76
|
+
|
77
|
+
def self.custom_datastore?
|
78
|
+
config.custom_datastore_class.present? && config.custom_datastore_opts.present?
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.url_format(url_segment='dragonfly')
|
82
|
+
"/system/refinery/#{url_segment}/:job/:basename.:ext"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Dragonfly
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def configure!(extension)
|
7
|
+
::ActiveRecord::Base.extend ::Dragonfly::Model
|
8
|
+
::ActiveRecord::Base.extend ::Dragonfly::Model::Validations
|
9
|
+
|
10
|
+
::Dragonfly.app(extension.dragonfly_name).configure do
|
11
|
+
|
12
|
+
datastore :file, {root_path: extension.dragonfly_datastore_root_path}
|
13
|
+
plugin extension.dragonfly_plugin if extension.dragonfly_plugin
|
14
|
+
secret extension.dragonfly_secret
|
15
|
+
|
16
|
+
if extension.dragonfly_custom_datastore?
|
17
|
+
datastore extension.dragonfly_custom_datastore_class.new(extension.dragonfly_custom_datastore_opts)
|
18
|
+
end
|
19
|
+
|
20
|
+
url_format extension.dragonfly_url_format
|
21
|
+
url_host extension.dragonfly_url_host
|
22
|
+
url_path_prefix extension.dragonfly_url_path_prefix
|
23
|
+
|
24
|
+
allow_legacy_urls extension.dragonfly_allow_legacy_urls
|
25
|
+
dragonfly_url extension.dragonfly_dragonfly_url
|
26
|
+
fetch_file_whitelist extension.dragonfly_fetch_file_whitelist
|
27
|
+
fetch_url_whitelist extension.dragonfly_fetch_url_whitelist
|
28
|
+
|
29
|
+
response_header extension.dragonfly_response_header
|
30
|
+
|
31
|
+
verify_urls extension.dragonfly_verify_urls
|
32
|
+
|
33
|
+
# These options require a name and block
|
34
|
+
define_url extension.dragonfly_define_url if extension.dragonfly_define_url.present?
|
35
|
+
before_serve extension.dragonfly_before_serve if extension.dragonfly_before_serve.present?
|
36
|
+
|
37
|
+
|
38
|
+
# There can be more than one instance of each of these options.
|
39
|
+
extension.dragonfly_mime_types.each do |mt|
|
40
|
+
mime_type mt[:ext], mt[:mimetype]
|
41
|
+
end
|
42
|
+
|
43
|
+
extension.dragonfly_analysers.each do |a|
|
44
|
+
analyser a[:name], a[:block]
|
45
|
+
end unless extension.dragonfly_analysers.blank?
|
46
|
+
|
47
|
+
extension.dragonfly_generators.each do |g|
|
48
|
+
generator g[:name], g[:block]
|
49
|
+
end unless extension.dragonfly_generators.blank?
|
50
|
+
|
51
|
+
extension.dragonfly_processors.each do |p|
|
52
|
+
processor p[:name], p[:block]
|
53
|
+
end unless extension.dragonfly_processors.blank?
|
54
|
+
|
55
|
+
if extension.s3_datastore
|
56
|
+
require 'dragonfly/s3_data_store'
|
57
|
+
datastore :s3,{
|
58
|
+
s3_access_key_id: extension.s3_access_key_id,
|
59
|
+
s3_datastore: extension.s3_datastore,
|
60
|
+
s3_bucket_name: extension.s3_bucket_name,
|
61
|
+
s3_fog_storage_options: extension.s3_fog_storage_options,
|
62
|
+
s3_region: extension.s3_region,
|
63
|
+
s3_root_path: extension.s3_root_path,
|
64
|
+
s3_secret_access_key: extension.s3_secret_access_key,
|
65
|
+
s3_storage_path: extension.s3_storage_path,
|
66
|
+
s3_storage_headers: extension.s3_storage_headers,
|
67
|
+
s3_url_host: extension.s3_url_host,
|
68
|
+
s3_url_scheme: extension.s3_url_scheme,
|
69
|
+
s3_use_iam_profile: extension.s3_use_iam_profile
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def attach!(app, extension)
|
77
|
+
|
78
|
+
# Injects Dragonfly::Middleware into the stack
|
79
|
+
|
80
|
+
if defined?(::Rack::Cache)
|
81
|
+
unless app.config.action_controller.perform_caching && app.config.action_dispatch.rack_cache
|
82
|
+
app.config.middleware.insert 0, ::Rack::Cache, {
|
83
|
+
verbose: extension.dragonfly_cache_log_level =='verbose',
|
84
|
+
metastore: URI.encode("file:#{extension.dragonfly_cache_store_root}/meta"), # URI encoded in case of spaces
|
85
|
+
entitystore: URI.encode("file:#{extension.dragonfly_cache_store_root}/body")
|
86
|
+
}
|
87
|
+
end
|
88
|
+
app.config.middleware.insert_after ::Rack::Cache, ::Dragonfly::Middleware, extension.dragonfly_name
|
89
|
+
else
|
90
|
+
app.config.middleware.use ::Dragonfly::Middleware, extension.dragonfly_name
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Dragonfly
|
3
|
+
class Engine < ::Rails::Engine
|
4
|
+
include Refinery::Engine
|
5
|
+
|
6
|
+
isolate_namespace Refinery
|
7
|
+
engine_name :refinery_dragonfly
|
8
|
+
|
9
|
+
config.autoload_paths += %W( #{config.root}/lib )
|
10
|
+
|
11
|
+
before_inclusion do
|
12
|
+
Refinery::Plugin.register do |plugin|
|
13
|
+
plugin.pathname = root
|
14
|
+
plugin.name = "refinerycms_dragonfly"
|
15
|
+
plugin.hide_from_menu = true
|
16
|
+
plugin.menu_match = %r{refinery/dragonfly}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
config.after_initialize do
|
21
|
+
Refinery.register_engine Refinery::Dragonfly
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,189 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Dragonfly
|
3
|
+
module ExtensionConfiguration
|
4
|
+
include ActiveSupport::Configurable
|
5
|
+
|
6
|
+
config_accessor :dragonfly_allow_legacy_urls, :dragonfly_analysers,
|
7
|
+
:dragonfly_before_serve,
|
8
|
+
:dragonfly_cache_store_root, :dragonfly_cache_log_level,
|
9
|
+
:dragonfly_custom_datastore_class, :dragonfly_custom_datastore_opts,
|
10
|
+
:dragonfly_datastore_root_path, :dragonfly_define_url, :dragonfly_dragonfly_url,
|
11
|
+
:dragonfly_fetch_file_whitelist, :dragonfly_fetch_url_whitelist,
|
12
|
+
:dragonfly_generators,
|
13
|
+
:dragonfly_mime_types,
|
14
|
+
:dragonfly_name,
|
15
|
+
:dragonfly_path_prefix, :dragonfly_plugin, :dragonfly_processors,
|
16
|
+
:dragonfly_response_header,
|
17
|
+
:dragonfly_secret,
|
18
|
+
:dragonfly_url_format, :dragonfly_url_host, :dragonfly_url_path_prefix, :dragonfly_url_segment,
|
19
|
+
:dragonfly_verify_urls,
|
20
|
+
|
21
|
+
:s3_access_key_id,
|
22
|
+
:s3_datastore, :s3_bucket_name,
|
23
|
+
:s3_fog_storage_options,
|
24
|
+
:s3_region, :s3_root_path,
|
25
|
+
:s3_secret_access_key, :s3_storage_path, :s3_storage_headers,
|
26
|
+
:s3_url_host, :s3_url_scheme, :s3_use_iam_profiles
|
27
|
+
|
28
|
+
|
29
|
+
def short_name
|
30
|
+
config.dragonfly_name.to_s.remove('refinery_')
|
31
|
+
end
|
32
|
+
|
33
|
+
def dragonfly_allow_legacy_urls
|
34
|
+
config.dragonfly_allow_legacy_urls.presence || Refinery::Dragonfly.allow_legacy_urls
|
35
|
+
end
|
36
|
+
|
37
|
+
def dragonfly_analysers
|
38
|
+
config.dragonfly_analysers.presence || Refinery::Dragonfly.analysers
|
39
|
+
end
|
40
|
+
|
41
|
+
def dragonfly_before_serve
|
42
|
+
config.dragonfly_before_serve.presence || Refinery::Dragonfly.before_serve
|
43
|
+
end
|
44
|
+
|
45
|
+
def dragonfly_cache_store_root
|
46
|
+
config.dragonfly_cache_store.presence || Rails.root.join('tmp', 'dragonfly')
|
47
|
+
end
|
48
|
+
|
49
|
+
def dragonfly_cache_log_level
|
50
|
+
config.dragonfly_cache_log_level || Refinery::Dragonfly.cache_log_level
|
51
|
+
end
|
52
|
+
|
53
|
+
def dragonfly_custom_datastore?
|
54
|
+
config.dragonfly_custom_datastore_class.nil? ? Refinery::Dragonfly.custom_datastore? : config.custom_datastore_class.present?
|
55
|
+
end
|
56
|
+
|
57
|
+
def dragonfly_custom_datastore_class
|
58
|
+
config.dragonfly_custom_datastore_class.nil? ? Refinery::Dragonfly.custom_datastore_class : config.dragonfly_custom_datastore_class.constantize
|
59
|
+
end
|
60
|
+
|
61
|
+
def dragonfly_custom_datastore_opts
|
62
|
+
config.dragonfly_custom_datastore_opts.presence || Refinery::Dragonfly.custom_datastore_opts
|
63
|
+
end
|
64
|
+
|
65
|
+
def dragonfly_datastore_root_path
|
66
|
+
config.dragonfly_datastore_root_path.presence || Rails.root.join('public', 'system', 'refinery', short_name).to_s if Rails.root
|
67
|
+
end
|
68
|
+
|
69
|
+
def dragonfly_define_url
|
70
|
+
config.dragonfly_define_url || Refinery::Dragonfly.define_url
|
71
|
+
end
|
72
|
+
|
73
|
+
def dragonfly_dragonfly_url
|
74
|
+
config.dragonfly_dragonfly_url || Refinery::Dragonfly.dragonfly_url
|
75
|
+
end
|
76
|
+
|
77
|
+
def dragonfly_fetch_file_whitelist
|
78
|
+
config.dragonfly_fetch_file_whitelist || Refinery::Dragonfly.fetch_file_whitelist
|
79
|
+
end
|
80
|
+
|
81
|
+
def dragonfly_fetch_url_whitelist
|
82
|
+
config.dragonfly_fetch_url_whitelist || Refinery::Dragonfly.fetch_url_whitelist
|
83
|
+
end
|
84
|
+
|
85
|
+
def dragonfly_generators
|
86
|
+
config.dragonfly_generators || Refinery::Dragonfly.generators
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
# define one or more new mimetypes
|
91
|
+
# dragonfly_mimetypes = [
|
92
|
+
# {ext: 'egg', mimetype: 'fried/egg'},
|
93
|
+
# {ext: 'avo', mimetype: 'smashed/avo'}
|
94
|
+
# ]
|
95
|
+
#
|
96
|
+
|
97
|
+
def dragonfly_mime_types
|
98
|
+
config.dragonfly_mime_types || Refinery::Dragonfly.mime_types
|
99
|
+
end
|
100
|
+
|
101
|
+
def dragonfly_name
|
102
|
+
config.dragonfly_name || Refinery::Dragonfly.name
|
103
|
+
end
|
104
|
+
|
105
|
+
def dragonfly_path_prefix
|
106
|
+
config.dragonfly_path_prefix || Refinery::Dragonfly.path_prefix
|
107
|
+
end
|
108
|
+
|
109
|
+
def dragonfly_response_header
|
110
|
+
config.dragonfly_response_header || Refinery::Dragonfly.response_header
|
111
|
+
end
|
112
|
+
|
113
|
+
def dragonfly_secret
|
114
|
+
config.dragonfly_secret || Refinery::Dragonfly.secret
|
115
|
+
end
|
116
|
+
|
117
|
+
def dragonfly_url
|
118
|
+
config.dragonfly_url || Refinery::Dragonfly.url
|
119
|
+
end
|
120
|
+
|
121
|
+
def dragonfly_url_format
|
122
|
+
config.dragonfly_url_format || Refinery::Dragonfly.url_format(short_name)
|
123
|
+
end
|
124
|
+
|
125
|
+
def dragonfly_url_host
|
126
|
+
config.dragonfly_url_host || Refinery::Dragonfly.url_host
|
127
|
+
end
|
128
|
+
|
129
|
+
def dragonfly_url_path_prefix
|
130
|
+
config.dragonfly_url_path_prefix || Refinery::Dragonfly.url_path_prefix
|
131
|
+
end
|
132
|
+
|
133
|
+
def dragonfly_url_segment
|
134
|
+
config.dragonfly_url_segment || short_name
|
135
|
+
end
|
136
|
+
|
137
|
+
def dragonfly_verify_urls
|
138
|
+
config.dragonfly_verify_urls.nil? ? Refinery::Dragonfly.verify_urls : config.dragonfly_verify_urls
|
139
|
+
end
|
140
|
+
|
141
|
+
# -------------------
|
142
|
+
# Options for s3_datastore
|
143
|
+
|
144
|
+
def s3_datastore?
|
145
|
+
config.s3_datastore.presence || Refinery::Dragonfly.s3_datastore
|
146
|
+
end
|
147
|
+
|
148
|
+
def s3_access_key_id
|
149
|
+
config.s3_access_key_id.presence || Refinery::Dragonfly.s3_access_key_id
|
150
|
+
end
|
151
|
+
|
152
|
+
def s3_bucket_name
|
153
|
+
config.s3_bucket_name.presence || Refinery::Dragonfly.s3_bucket_name
|
154
|
+
end
|
155
|
+
|
156
|
+
def s3_fog_storage_options
|
157
|
+
config.s3_fog_storage_options.presence || Refinery::Dragonfly.s3_fog_storage_options
|
158
|
+
end
|
159
|
+
|
160
|
+
def s3_host
|
161
|
+
config.s3_host.presence || Refinery::Dragonfly.s3_host
|
162
|
+
end
|
163
|
+
|
164
|
+
def s3_region
|
165
|
+
config.s3_region.presence || Refinery::Dragonfly.s3_region
|
166
|
+
end
|
167
|
+
|
168
|
+
def s3_root_path
|
169
|
+
config.s3_root_path.presence || Refinery::Dragonfly.s3_root_path
|
170
|
+
end
|
171
|
+
|
172
|
+
def s3_scheme
|
173
|
+
config.s3_scheme.presence || Refinery::Dragonfly.s3_scheme
|
174
|
+
end
|
175
|
+
|
176
|
+
def s3_secret_access_key
|
177
|
+
config.s3_secret_access_key.presence || Refinery::Dragonfly.s3_secret_access_key
|
178
|
+
end
|
179
|
+
|
180
|
+
def s3_storage_headers
|
181
|
+
config.s3_storage_headers.presence || Refinery::Dragonfly.s3_storage_headers
|
182
|
+
end
|
183
|
+
|
184
|
+
def s3_use_iam_profile
|
185
|
+
config.s3_use_iam_profile.presence || Refinery::Dragonfly.s3_use_iam_profile
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'refinery/dragonfly'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.platform = Gem::Platform::RUBY
|
6
|
+
s.name = %q{refinerycms-dragonfly}
|
7
|
+
s.version = '1.0.0'
|
8
|
+
s.summary = %q{Dragonfly interface for Refinery CMS}
|
9
|
+
s.description = %q{Allows Refinery to use dragonfly for file storage and processing}
|
10
|
+
s.email = %q{anita@joli.com.au}
|
11
|
+
s.homepage = %q{http://refinerycms.com}
|
12
|
+
s.authors = ['Anita Graham', 'Philip Arndt']
|
13
|
+
s.license = %q{MIT}
|
14
|
+
s.require_paths = %w(lib)
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
18
|
+
|
19
|
+
s.add_dependency 'dragonfly', '~> 1.1'
|
20
|
+
s.add_dependency 'dragonfly-s3_data_store'
|
21
|
+
s.add_dependency 'refinerycms-core', ['~> 4.0', '>= 4.0.2']
|
22
|
+
|
23
|
+
s.cert_chain = [File.expand_path("../../certs/parndt.pem", __FILE__)]
|
24
|
+
if $0 =~ /gem\z/ && ARGV.include?("build") && ARGV.include?(__FILE__)
|
25
|
+
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem")
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'generator_spec/test_case'
|
3
|
+
require 'generators/refinery/dragonfly/dragonfly_generator'
|
4
|
+
|
5
|
+
module Refinery
|
6
|
+
describe DragonflyGenerator do
|
7
|
+
include GeneratorSpec::TestCase
|
8
|
+
destination File.expand_path("../../../../tmp", __FILE__)
|
9
|
+
|
10
|
+
before do
|
11
|
+
prepare_destination
|
12
|
+
run_generator %w[--skip-migrations]
|
13
|
+
end
|
14
|
+
|
15
|
+
specify do
|
16
|
+
expect(destination_root).to have_structure {
|
17
|
+
directory "config" do
|
18
|
+
directory "initializers" do
|
19
|
+
directory "refinery" do
|
20
|
+
file "dragonfly.rb" do
|
21
|
+
contains "Refinery::Dragonfly.configure"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
describe Dragonfly do
|
5
|
+
describe 'default configuration' do
|
6
|
+
|
7
|
+
it 'defines a default secret' do
|
8
|
+
expect(Refinery::Dragonfly.secret).to_not be nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "doesn't use S3" do
|
12
|
+
expect(Refinery::Dragonfly.s3_datastore).to be false
|
13
|
+
end
|
14
|
+
|
15
|
+
it "doesn't use a custom datastore" do
|
16
|
+
expect(Refinery::Dragonfly.custom_datastore_class).to eq(nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'using custom configuration' do
|
21
|
+
describe 'datastore' do
|
22
|
+
before {
|
23
|
+
class DummyBackend;
|
24
|
+
end}
|
25
|
+
after {Refinery::Dragonfly.custom_datastore_class = nil}
|
26
|
+
let(:datastore) {DummyBackend.new}
|
27
|
+
|
28
|
+
it 'uses the custom setting' do
|
29
|
+
Refinery::Dragonfly.custom_datastore_class = DummyBackend
|
30
|
+
expect(Refinery::Dragonfly.custom_datastore_class).to eq(datastore.class)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
CustomDatastoreOne = Class.new
|
@@ -0,0 +1 @@
|
|
1
|
+
CustomDatastoreTwo = Class.new
|
@@ -0,0 +1,10 @@
|
|
1
|
+
shared_examples_for 'adds the dragonfly app to the middleware stack' do
|
2
|
+
|
3
|
+
let(:middleware_array){ Rails.application.config.middleware.to_a}
|
4
|
+
|
5
|
+
describe 'middleware stack:' do
|
6
|
+
it 'includes Dragonfly::Middleware' do
|
7
|
+
expect(middleware_array).to include(Dragonfly::Middleware)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative '../custom_datastore_one'
|
2
|
+
require_relative '../custom_datastore_two'
|
3
|
+
shared_examples_for 'Creates a dragonfly App:' do
|
4
|
+
|
5
|
+
describe 'app creation' do
|
6
|
+
::Refinery::Dragonfly.configure!(described_class)
|
7
|
+
it 'exists' do
|
8
|
+
expect(::Dragonfly.app(described_class.dragonfly_name).name).to eq(described_class.dragonfly_name.to_sym)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'app configuration' do
|
13
|
+
# These are just some of the configuration parameters which can be passed to Dragonfly
|
14
|
+
it 'sets the datastore_root_path' do
|
15
|
+
expect(Dragonfly.app(described_class.dragonfly_name).datastore.root_path).to eq(described_class.dragonfly_datastore_root_path)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'sets the url host' do
|
19
|
+
expect(Dragonfly.app(described_class.dragonfly_name).server.url_host).to eq(described_class.dragonfly_url_host)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'sets the url format' do
|
23
|
+
expect(Dragonfly.app(described_class.dragonfly_name).server.url_format).to eq(described_class.dragonfly_url_format)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'configuring Amazon S3' do
|
28
|
+
context "using custom settings" do
|
29
|
+
it "uses the custom values" do
|
30
|
+
Refinery::Dragonfly.s3_bucket_name = "kfc"
|
31
|
+
described_class.s3_bucket_name = "buckethead"
|
32
|
+
|
33
|
+
expect(described_class.s3_bucket_name).to eq("buckethead")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "without custom settings" do
|
38
|
+
it "uses the defaults" do
|
39
|
+
described_class.s3_bucket_name = nil
|
40
|
+
Refinery::Dragonfly.s3_bucket_name = "kfc"
|
41
|
+
|
42
|
+
expect(described_class.s3_bucket_name).to eq("kfc")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "defining a custom datastore" do
|
48
|
+
|
49
|
+
before(:each) do
|
50
|
+
allow(Refinery::Dragonfly).to receive_messages(custom_datastore_class: CustomDatastoreOne)
|
51
|
+
end
|
52
|
+
|
53
|
+
after(:each) do
|
54
|
+
described_class.dragonfly_custom_datastore_class = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
context "with the default configuration" do
|
58
|
+
it "uses the default values" do
|
59
|
+
expect(described_class.dragonfly_custom_datastore_class).to eq(CustomDatastoreOne)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context "with a custom configuration" do
|
64
|
+
it "uses custom values" do
|
65
|
+
described_class.dragonfly_custom_datastore_class = 'CustomDatastoreTwo'
|
66
|
+
expect(described_class.dragonfly_custom_datastore_class).to eq(CustomDatastoreTwo)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
data/tasks/rspec.rake
ADDED
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: refinerycms-dragonfly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Anita Graham
|
8
|
+
- Philip Arndt
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain:
|
12
|
+
- |
|
13
|
+
-----BEGIN CERTIFICATE-----
|
14
|
+
MIIDhjCCAm6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBNMQ0wCwYDVQQDDARnZW1z
|
15
|
+
MREwDwYKCZImiZPyLGQBGRYBcDEVMBMGCgmSJomT8ixkARkWBWFybmR0MRIwEAYK
|
16
|
+
CZImiZPyLGQBGRYCaW8wHhcNMTcwNzI1MTMxMjIwWhcNMTgwNzI1MTMxMjIwWjBN
|
17
|
+
MQ0wCwYDVQQDDARnZW1zMREwDwYKCZImiZPyLGQBGRYBcDEVMBMGCgmSJomT8ixk
|
18
|
+
ARkWBWFybmR0MRIwEAYKCZImiZPyLGQBGRYCaW8wggEiMA0GCSqGSIb3DQEBAQUA
|
19
|
+
A4IBDwAwggEKAoIBAQDrjwB8be48TFEvGweP7BwWFnmsL2IMU9Ts2UKKWK9GYr7Z
|
20
|
+
5uNZFmO1yVBCrmUQHHDlpku6SN6HDO8ChDL7LNugz/4eapRTifHZl8jhPRsOLBcF
|
21
|
+
1hANy/V2v5NNkL5Zvb+vsUa7lyjbIOoD5yYzSDl4/T0nOe6xYzxJgBuxZK/nWSOe
|
22
|
+
Db8Uffc7B4yhA2kuayUiQUXPYAoPdfUSxoTKDohw17Sm6LKTpg8GkT0ttof1a/xu
|
23
|
+
vdsTvZHIcTsYv16e+8SrwLRZ/iBVVsyZFkMYPMxemw7WHxmWElWIgW9S7pUK5Q7J
|
24
|
+
oMS5uJVbtV2EmV+cOnhOWDz1A16P7QRFmGje5L+vAgMBAAGjcTBvMAkGA1UdEwQC
|
25
|
+
MAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ7G/yxuQIzgszkOkaZBgoKBJ1rozAa
|
26
|
+
BgNVHREEEzARgQ9nZW1zQHAuYXJuZHQuaW8wGgYDVR0SBBMwEYEPZ2Vtc0BwLmFy
|
27
|
+
bmR0LmlvMA0GCSqGSIb3DQEBBQUAA4IBAQB12WMsC+yuuIeM0Ib6HUYZ2IbhRnuW
|
28
|
+
4uydNRvKDPdwzjChnOI0POGpcL8O1s1gh+19o/ITq6zRfTLhkwR2ir7XfwHJNppJ
|
29
|
+
yg48wbdL5gpZwggKWggKX5G9pqv9LjRsSAew6r0WB+5KW+ArCl/iNo9+AdeR3nUx
|
30
|
+
I+L/QiUxYU6XAXSrczL/i7kF5Xc3ZXQYuFsyGW9plA3i9faWUMvGKQc6pvUHIUZC
|
31
|
+
jOQmH9VbgbfUrXYM1YOKdlwW5sPR1f4PKLDlvEE+bppIUgKOgLOIv3i7KwrGvFOq
|
32
|
+
5r7Wz/HY31SM47mkK21saPJG4NvUFEycf0wlpzP657Pl9aVo47aKKbxX
|
33
|
+
-----END CERTIFICATE-----
|
34
|
+
date: 2018-05-23 00:00:00.000000000 Z
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: dragonfly
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '1.1'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '1.1'
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: dragonfly-s3_data_store
|
52
|
+
requirement: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
type: :runtime
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: refinerycms-core
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '4.0'
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: 4.0.2
|
74
|
+
type: :runtime
|
75
|
+
prerelease: false
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '4.0'
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 4.0.2
|
84
|
+
description: Allows Refinery to use dragonfly for file storage and processing
|
85
|
+
email: anita@joli.com.au
|
86
|
+
executables: []
|
87
|
+
extensions: []
|
88
|
+
extra_rdoc_files: []
|
89
|
+
files:
|
90
|
+
- Rakefile
|
91
|
+
- lib/generators/refinery/dragonfly/dragonfly_generator.rb
|
92
|
+
- lib/generators/refinery/dragonfly/templates/config/initializers/refinery/dragonfly.rb.erb
|
93
|
+
- lib/refinery/dragonfly.rb
|
94
|
+
- lib/refinery/dragonfly/configuration.rb
|
95
|
+
- lib/refinery/dragonfly/dragonfly.rb
|
96
|
+
- lib/refinery/dragonfly/engine.rb
|
97
|
+
- lib/refinery/dragonfly/extension_configuration.rb
|
98
|
+
- lib/refinerycms-dragonfly.rb
|
99
|
+
- refinerycms-dragonfly.gemspec
|
100
|
+
- spec/lib/generators/refinery/dragonfly/dragonfly_generator_spec.rb
|
101
|
+
- spec/lib/refinery/dragonfly/dragonfly_spec.rb
|
102
|
+
- spec/support/custom_datastore_one.rb
|
103
|
+
- spec/support/custom_datastore_two.rb
|
104
|
+
- spec/support/shared_examples/adds_dragonfly_app_to_middlewares.rb
|
105
|
+
- spec/support/shared_examples/creates_a_dragonfly_app.rb
|
106
|
+
- tasks/rspec.rake
|
107
|
+
homepage: http://refinerycms.com
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.7.6
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Dragonfly interface for Refinery CMS
|
131
|
+
test_files:
|
132
|
+
- spec/lib/generators/refinery/dragonfly/dragonfly_generator_spec.rb
|
133
|
+
- spec/lib/refinery/dragonfly/dragonfly_spec.rb
|
134
|
+
- spec/support/custom_datastore_one.rb
|
135
|
+
- spec/support/custom_datastore_two.rb
|
136
|
+
- spec/support/shared_examples/adds_dragonfly_app_to_middlewares.rb
|
137
|
+
- spec/support/shared_examples/creates_a_dragonfly_app.rb
|
metadata.gz.sig
ADDED
Binary file
|