forked from AssetSync/asset_sync
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.rb
176 lines (145 loc) · 6.13 KB
/
config.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
module AssetSync
class Config
include ActiveModel::Validations
class Invalid < StandardError; end
# AssetSync
attr_accessor :existing_remote_files # What to do with your existing remote files? (keep or delete)
attr_accessor :gzip_compression
attr_accessor :manifest
attr_accessor :fail_silently
attr_accessor :always_upload
attr_accessor :ignored_files
attr_accessor :prefix
attr_accessor :public_path
attr_accessor :enabled
# FOG configuration
attr_accessor :fog_provider # Currently Supported ['AWS', 'Rackspace']
attr_accessor :fog_directory # e.g. 'the-bucket-name'
attr_accessor :fog_region # e.g. 'eu-west-1'
# Amazon AWS
attr_accessor :aws_access_key_id, :aws_secret_access_key
# Rackspace
attr_accessor :rackspace_username, :rackspace_api_key, :rackspace_auth_url
# Google Storage
attr_accessor :google_storage_secret_access_key, :google_storage_access_key_id
validates :existing_remote_files, :inclusion => { :in => %w(keep delete ignore) }
validates :fog_provider, :presence => true
validates :fog_directory, :presence => true
validates :aws_access_key_id, :presence => true, :if => :aws?
validates :aws_secret_access_key, :presence => true, :if => :aws?
validates :rackspace_username, :presence => true, :if => :rackspace?
validates :rackspace_api_key, :presence => true, :if => :rackspace?
validates :google_storage_secret_access_key, :presence => true, :if => :google?
validates :google_storage_access_key_id, :presence => true, :if => :google?
def initialize
self.fog_region = nil
self.existing_remote_files = 'keep'
self.gzip_compression = false
self.manifest = false
self.fail_silently = false
self.always_upload = []
self.ignored_files = []
self.enabled = true
load_yml! if defined?(Rails) && yml_exists?
end
def manifest_path
directory =
Rails.application.config.assets.manifest || default_manifest_directory
File.join(directory, "manifest.yml")
end
def gzip?
self.gzip_compression
end
def existing_remote_files?
['keep', 'ignore'].include?(self.existing_remote_files)
end
def aws?
fog_provider == 'AWS'
end
def fail_silently?
fail_silently == true
end
def enabled?
enabled == true
end
def rackspace?
fog_provider == 'Rackspace'
end
def google?
fog_provider == 'Google'
end
def yml_exists?
File.exists?(self.yml_path)
end
def yml
@yml ||= YAML.load(ERB.new(IO.read(yml_path)).result)[Rails.env] rescue nil || {}
end
def yml_path
Rails.root.join("config", "asset_sync.yml").to_s
end
def assets_prefix
# Fix for Issue #38 when Rails.config.assets.prefix starts with a slash
self.prefix || Rails.application.config.assets.prefix.sub(/^\//, '')
end
def public_path
@public_path || Rails.public_path
end
def load_yml!
self.enabled = yml["enabled"] if yml.has_key?('enabled')
self.fog_provider = yml["fog_provider"]
self.fog_directory = yml["fog_directory"]
self.fog_region = yml["fog_region"]
self.aws_access_key_id = yml["aws_access_key_id"]
self.aws_secret_access_key = yml["aws_secret_access_key"]
self.rackspace_username = yml["rackspace_username"]
self.rackspace_auth_url = yml["rackspace_auth_url"] if yml.has_key?("rackspace_auth_url")
self.rackspace_api_key = yml["rackspace_api_key"]
self.google_storage_secret_access_key = yml["google_storage_secret_access_key"]
self.google_storage_access_key_id = yml["google_storage_access_key_id"]
self.existing_remote_files = yml["existing_remote_files"] if yml.has_key?("existing_remote_files")
self.gzip_compression = yml["gzip_compression"] if yml.has_key?("gzip_compression")
self.manifest = yml["manifest"] if yml.has_key?("manifest")
self.fail_silently = yml["fail_silently"] if yml.has_key?("fail_silently")
self.always_upload = yml["always_upload"] if yml.has_key?("always_upload")
self.ignored_files = yml["ignored_files"] if yml.has_key?("ignored_files")
# TODO deprecate the other old style config settings. FML.
self.aws_access_key_id = yml["aws_access_key"] if yml.has_key?("aws_access_key")
self.aws_secret_access_key = yml["aws_access_secret"] if yml.has_key?("aws_access_secret")
self.fog_directory = yml["aws_bucket"] if yml.has_key?("aws_bucket")
self.fog_region = yml["aws_region"] if yml.has_key?("aws_region")
# TODO deprecate old style config settings
self.aws_access_key_id = yml["access_key_id"] if yml.has_key?("access_key_id")
self.aws_secret_access_key = yml["secret_access_key"] if yml.has_key?("secret_access_key")
self.fog_directory = yml["bucket"] if yml.has_key?("bucket")
self.fog_region = yml["region"] if yml.has_key?("region")
end
def fog_options
options = { :provider => fog_provider }
if aws?
options.merge!({
:aws_access_key_id => aws_access_key_id,
:aws_secret_access_key => aws_secret_access_key
})
elsif rackspace?
options.merge!({
:rackspace_username => rackspace_username,
:rackspace_api_key => rackspace_api_key
})
options.merge!({ :rackspace_auth_url => rackspace_auth_url }) if rackspace_auth_url
elsif google?
options.merge!({
:google_storage_secret_access_key => google_storage_secret_access_key,
:google_storage_access_key_id => google_storage_access_key_id
})
else
raise ArgumentError, "AssetSync Unknown provider: #{fog_provider} only AWS and Rackspace are supported currently."
end
options.merge!({:region => fog_region}) if fog_region
return options
end
private
def default_manifest_directory
File.join(Rails.public_path, assets_prefix)
end
end
end