Sha256: 75febd04efee0a4a228a29dc1f944419dfbec931c7b54dd8c5d22177327526e3
Contents?: true
Size: 1.8 KB
Versions: 3
Compression:
Stored size: 1.8 KB
Contents
module RailsConnector # A binary containing the blob data of a Content or CMS management # data of Attribute (fields), ObjClass (object classes), for example. class Blob < CmsBaseModel self.primary_key = "blob_name" class << self # Does not retrieve the column blob_data. def find_with_excluded_blob_data(primary_key) select(:blob_name, :blob_length).find(primary_key) end alias_method_chain :find, :excluded_blob_data end def length blob_length end def data @data ||= self.class.find_without_excluded_blob_data(id).blob_data end def path_of_stored_data(use_cached_file_if_older_than = Time.now) store_data if !File.exists?(path) || file_size_differs? || stale?(use_cached_file_if_older_than) path end def self.cache_dir Configuration.blob_cache_dir || File.join(Rails.root, %w(tmp cache)) end def self.initialize_blob_streaming_for(adapter_name) # Redefines store_data: case adapter_name when /mysql$/i raise "Adapter 'mysql' no longer supported. " + "Please change adapter in your database.yml to 'mysql2'." when /mysql2/i require "rails_connector/blob_mysql" include BlobMysql when /oracle/i require "rails_connector/blob_oracle" include BlobOracle end end private def path "#{Blob.cache_dir}/#{id}" end def store_data store_data_atomically do |f| f << data end end def store_data_atomically(&block) tmp_file = "#{path}.#{Process.pid}" File.open(tmp_file, "wb", &block) File.rename(tmp_file, path) end def stale?(time) time > File.mtime(path) end def file_size_differs? blob_length != File.stat(path).size end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
infopark_fiona_connector-7.0.1 | lib/rails_connector/blob.rb |
infopark_fiona_connector-7.0.1.beta2 | lib/rails_connector/blob.rb |
infopark_fiona_connector-7.0.0 | lib/rails_connector/blob.rb |