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+)(\/|$)/
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.
33 34 35 |
# File 'lib/asset_cloud/base.rb', line 33 def root @root end |
#url ⇒ Object
Returns the value of attribute url.
33 34 35 |
# File 'lib/asset_cloud/base.rb', line 33 def url @url end |
Class Method Details
.asset_extensions(*args) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/asset_cloud/base.rb', line 70 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[klass] = opts end end |
.bucket(*args) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/asset_cloud/base.rb', line 47 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_name.to_sym] = bucket_class self.asset_classes[bucket_name.to_sym] = asset_class 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
200 201 202 |
# File 'lib/asset_cloud/base.rb', line 200 def [](key) asset_at!(key) end |
#[]=(key, value) ⇒ Object
194 195 196 197 198 |
# File 'lib/asset_cloud/base.rb', line 194 def []=(key, value) asset = self[key] asset.value = value asset.store end |
#asset_at(*args) ⇒ Object
114 115 116 |
# File 'lib/asset_cloud/base.rb', line 114 def asset_at(*args) asset_class_for(args.first).at(self, *args) end |
#asset_at!(*args) ⇒ Object
118 119 120 121 |
# File 'lib/asset_cloud/base.rb', line 118 def asset_at!(*args) check_key_for_errors(args.first) asset_at(*args) end |
#asset_class_for(key) ⇒ Object
221 222 223 224 225 226 227 |
# File 'lib/asset_cloud/base.rb', line 221 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
229 230 231 232 233 234 235 236 237 238 |
# File 'lib/asset_cloud/base.rb', line 229 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
189 190 191 192 |
# File 'lib/asset_cloud/base.rb', line 189 def bucket_for(key) bucket = buckets[bucket_symbol_for_key(key)] bucket ? bucket : root_bucket end |
#buckets ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/asset_cloud/base.rb', line 82 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
141 142 143 144 |
# File 'lib/asset_cloud/base.rb', line 141 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
133 134 135 136 137 138 139 |
# File 'lib/asset_cloud/base.rb', line 133 def copy(source, destination) return if source == destination object = build(destination, read(source)) object.store object end |
#delete(key) ⇒ Object
183 184 185 186 187 |
# File 'lib/asset_cloud/base.rb', line 183 def delete(key) logger.info { " [#{self.class.name}] Deleting #{key}" } if logger bucket_for(key).delete(key) end |
#exist?(key) ⇒ Boolean
171 172 173 174 175 176 177 |
# File 'lib/asset_cloud/base.rb', line 171 def exist?(key) if fp = stat(key) fp.exist? else false end end |
#find(key) ⇒ Object
108 109 110 111 112 |
# File 'lib/asset_cloud/base.rb', line 108 def find(key) asset = asset_at(key) asset.value asset end |
#ls(key) ⇒ Object
165 166 167 168 169 |
# File 'lib/asset_cloud/base.rb', line 165 def ls(key) logger.info { " [#{self.class.name}] Listing objects in #{key}" } if logger bucket_for(key).ls(key) end |
#move(source, destination) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/asset_cloud/base.rb', line 123 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
104 105 106 |
# File 'lib/asset_cloud/base.rb', line 104 def path root end |
#path_for(key) ⇒ Object
100 101 102 |
# File 'lib/asset_cloud/base.rb', line 100 def path_for(key) File.join(path, key) end |
#read(key) ⇒ Object
153 154 155 156 157 |
# File 'lib/asset_cloud/base.rb', line 153 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
206 207 208 209 |
# File 'lib/asset_cloud/base.rb', line 206 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
159 160 161 162 163 |
# File 'lib/asset_cloud/base.rb', line 159 def stat(key) logger.info { " [#{self.class.name}] Statting #{key}" } if logger bucket_for(key).stat(key) end |
#supports?(key) ⇒ Boolean
179 180 181 |
# File 'lib/asset_cloud/base.rb', line 179 def supports?(key) key =~ VALID_PATHS end |
#url_for(key, options = {}) ⇒ Object
96 97 98 |
# File 'lib/asset_cloud/base.rb', line 96 def url_for(key, ={}) File.join(@url, URI.encode(key)) end |
#version_details(key) ⇒ Object
216 217 218 219 |
# File 'lib/asset_cloud/base.rb', line 216 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
211 212 213 214 |
# File 'lib/asset_cloud/base.rb', line 211 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
146 147 148 149 150 151 |
# File 'lib/asset_cloud/base.rb', line 146 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 |