Class: AssetCloud::Base
- Inherits:
-
Object
- Object
- AssetCloud::Base
- Defined in:
- lib/asset_cloud/base.rb
Constant Summary collapse
- VALID_PATHS =
/\A ( (\w) #Filename can be a single letter or underscore | #OR it is many and follows the below rules ( (\.?[\w\[\]\(\)\-\@]) #It can start with a dot but it must have a following character ( [\w\[\]\(\)\-\@] #You can have a letter without any following conditions | [\ ][\w\[\]\(\)\-\@\.] #If there is a space you need to have a normal letter afterward or a dot | [\/][\w\[\]\(\)\-\@] #If there is a slash you need to have a normal letter afterward | [\/][\.][\w\[\]\(\)\-\@] #Though a slash could be followed by a dot so long as there is a normal letter afterward | [\.]+[\w\[\]\(\)\-\@]+ #One or more dots must be followed by one (or more) normal letters )* #Zero to many of these combinations. ) )\z/x
- MATCH_BUCKET =
/^(\w+)(\/|$)/
- URI_PARSER =
URI::RFC2396_Parser.new
Instance Attribute Summary collapse
-
#root ⇒ Object
Returns the value of attribute root.
-
#url ⇒ Object
Returns the value of attribute url.
Class Method Summary collapse
Instance Method Summary collapse
- #[](key) ⇒ Object
- #[]=(key, value) ⇒ Object
- #asset_at(*args) ⇒ Object
- #asset_at!(*args) ⇒ Object
- #asset_class_for(key) ⇒ Object
- #asset_extension_classes_for_bucket(bucket) ⇒ Object
- #bucket_for(key) ⇒ Object
- #buckets ⇒ Object
- #build(key, value = nil, &block) ⇒ Object
- #copy(source, destination) ⇒ Object
- #delete(key) ⇒ Object
- #exist?(key) ⇒ Boolean
- #find(key) ⇒ Object
-
#initialize(root, url = '/') ⇒ Base
constructor
A new instance of Base.
- #ls(key) ⇒ Object
- #move(source, destination) ⇒ Object
- #path ⇒ Object
- #path_for(key) ⇒ Object
- #read(key) ⇒ Object
-
#read_version(key, version) ⇒ Object
versioning.
- #stat(key) ⇒ Object
- #supports?(key) ⇒ Boolean
- #url_for(key, options = {}) ⇒ Object
- #version_details(key) ⇒ Object
- #versions(key) ⇒ Object
- #write(key, value) ⇒ Object
Constructor Details
Instance Attribute Details
#root ⇒ Object
Returns the value of attribute root.
34 35 36 |
# File 'lib/asset_cloud/base.rb', line 34 def root @root end |
#url ⇒ Object
Returns the value of attribute url.
34 35 36 |
# File 'lib/asset_cloud/base.rb', line 34 def url @url end |
Class Method Details
.asset_extensions(*args) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/asset_cloud/base.rb', line 71 def self.asset_extensions(*args) opts = args.last.is_a?(Hash) ? args.pop.slice(:only, :except) : {} opts.each do |k,v| opts[k] = [v].flatten.map(&:to_sym) end args.each do |klass| klass = convert_to_class_name_if_possible(klass) self.asset_extension_classes = asset_extension_classes.merge(klass => opts).freeze end end |
.bucket(*args) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/asset_cloud/base.rb', line 48 def self.bucket(*args) asset_class = if args.last.is_a? Hash convert_to_class_name_if_possible(args.pop[:asset_class]) end bucket_class = if args.last.is_a? Class convert_to_class_name_if_possible(args.pop) else raise ArgumentError, 'requires a bucket class' end if bucket_name = args.first self.bucket_classes = bucket_classes.merge(bucket_name.to_sym => bucket_class).freeze self.asset_classes = asset_classes.merge(bucket_name.to_sym => asset_class).freeze if asset_class else self.root_bucket_class = bucket_class if asset_class raise ArgumentError, 'asset_class on the root bucket cannot be a proc' if asset_class.is_a?(Proc) self.root_asset_class = asset_class end end end |
Instance Method Details
#[](key) ⇒ Object
201 202 203 |
# File 'lib/asset_cloud/base.rb', line 201 def [](key) asset_at!(key) end |
#[]=(key, value) ⇒ Object
195 196 197 198 199 |
# File 'lib/asset_cloud/base.rb', line 195 def []=(key, value) asset = self[key] asset.value = value asset.store end |
#asset_at(*args) ⇒ Object
115 116 117 |
# File 'lib/asset_cloud/base.rb', line 115 def asset_at(*args) asset_class_for(args.first).at(self, *args) end |
#asset_at!(*args) ⇒ Object
119 120 121 122 |
# File 'lib/asset_cloud/base.rb', line 119 def asset_at!(*args) check_key_for_errors(args.first) asset_at(*args) end |
#asset_class_for(key) ⇒ Object
222 223 224 225 226 227 228 |
# File 'lib/asset_cloud/base.rb', line 222 def asset_class_for(key) klass = self.class.asset_classes[bucket_symbol_for_key(key)] klass = klass.call(key) if klass.is_a?(Proc) klass ||= self.class.root_asset_class constantize_if_necessary(klass) end |
#asset_extension_classes_for_bucket(bucket) ⇒ Object
230 231 232 233 234 235 236 237 238 239 |
# File 'lib/asset_cloud/base.rb', line 230 def asset_extension_classes_for_bucket(bucket) bucket = bucket.to_sym extensions = self.class.asset_extension_classes klasses = extensions.keys.select do |ext| opts = extensions[ext] (opts.key?(:only) ? opts[:only].include?(bucket) : true) && (opts.key?(:except) ? !opts[:except].include?(bucket) : true) end klasses.map {|klass| constantize_if_necessary(klass)} end |
#bucket_for(key) ⇒ Object
190 191 192 193 |
# File 'lib/asset_cloud/base.rb', line 190 def bucket_for(key) bucket = buckets[bucket_symbol_for_key(key)] bucket ? bucket : root_bucket end |
#buckets ⇒ Object
83 84 85 86 87 88 89 90 91 |
# File 'lib/asset_cloud/base.rb', line 83 def buckets @buckets ||= Hash.new do |hash, key| if klass = self.class.bucket_classes[key] hash[key] = constantize_if_necessary(klass).new(self, key) else hash[key] = nil end end end |
#build(key, value = nil, &block) ⇒ Object
142 143 144 145 |
# File 'lib/asset_cloud/base.rb', line 142 def build(key, value = nil, &block) logger.info { " [#{self.class.name}] Building asset #{key}" } if logger asset_class_for(key).new(self, key, value, Metadata.non_existing, &block) end |
#copy(source, destination) ⇒ Object
134 135 136 137 138 139 140 |
# File 'lib/asset_cloud/base.rb', line 134 def copy(source, destination) return if source == destination object = build(destination, read(source)) object.store object end |
#delete(key) ⇒ Object
184 185 186 187 188 |
# File 'lib/asset_cloud/base.rb', line 184 def delete(key) logger.info { " [#{self.class.name}] Deleting #{key}" } if logger bucket_for(key).delete(key) end |
#exist?(key) ⇒ Boolean
172 173 174 175 176 177 178 |
# File 'lib/asset_cloud/base.rb', line 172 def exist?(key) if fp = stat(key) fp.exist? else false end end |
#find(key) ⇒ Object
109 110 111 112 113 |
# File 'lib/asset_cloud/base.rb', line 109 def find(key) asset = asset_at(key) asset.value asset end |
#ls(key) ⇒ Object
166 167 168 169 170 |
# File 'lib/asset_cloud/base.rb', line 166 def ls(key) logger.info { " [#{self.class.name}] Listing objects in #{key}" } if logger bucket_for(key).ls(key) end |
#move(source, destination) ⇒ Object
124 125 126 127 128 129 130 131 132 |
# File 'lib/asset_cloud/base.rb', line 124 def move(source, destination) return if source == destination object = copy(source, destination) if object.errors.none? asset_at(source).delete end object end |
#path ⇒ Object
105 106 107 |
# File 'lib/asset_cloud/base.rb', line 105 def path root end |
#path_for(key) ⇒ Object
101 102 103 |
# File 'lib/asset_cloud/base.rb', line 101 def path_for(key) File.join(path, key) end |
#read(key) ⇒ Object
154 155 156 157 158 |
# File 'lib/asset_cloud/base.rb', line 154 def read(key) logger.info { " [#{self.class.name}] Reading from #{key}" } if logger bucket_for(key).read(key) end |
#read_version(key, version) ⇒ Object
versioning
207 208 209 210 |
# File 'lib/asset_cloud/base.rb', line 207 def read_version(key, version) logger.info { " [#{self.class.name}] Reading from #{key} at version #{version}" } if logger bucket_for(key).read_version(key, version) end |
#stat(key) ⇒ Object
160 161 162 163 164 |
# File 'lib/asset_cloud/base.rb', line 160 def stat(key) logger.info { " [#{self.class.name}] Statting #{key}" } if logger bucket_for(key).stat(key) end |
#supports?(key) ⇒ Boolean
180 181 182 |
# File 'lib/asset_cloud/base.rb', line 180 def supports?(key) key =~ VALID_PATHS end |
#url_for(key, options = {}) ⇒ Object
97 98 99 |
# File 'lib/asset_cloud/base.rb', line 97 def url_for(key, ={}) File.join(@url, URI_PARSER.escape(key)) end |
#version_details(key) ⇒ Object
217 218 219 220 |
# File 'lib/asset_cloud/base.rb', line 217 def version_details(key) logger.info { " [#{self.class.name}] Getting all version details for #{key}" } if logger bucket_for(key).version_details(key) end |
#versions(key) ⇒ Object
212 213 214 215 |
# File 'lib/asset_cloud/base.rb', line 212 def versions(key) logger.info { " [#{self.class.name}] Getting all versions for #{key}" } if logger bucket_for(key).versions(key) end |
#write(key, value) ⇒ Object
147 148 149 150 151 152 |
# File 'lib/asset_cloud/base.rb', line 147 def write(key, value) check_key_for_errors(key) logger.info { " [#{self.class.name}] Writing #{value.size} bytes to #{key}" } if logger bucket_for(key).write(key, value) end |