Sha256: c9802eb32a231bb92b780efae6778a272ac01fd421624da3f8f638b56e787d6c

Contents?: true

Size: 1.74 KB

Versions: 15

Compression:

Stored size: 1.74 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(*args)
        args << Hash.new unless Hash === args.last
        args.last[:select] = 'blob_name, blob_length'
        find_without_excluded_blob_data(*args)
      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) || use_cached_file_if_older_than > File.mtime(path)
      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
  end

end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
infopark_fiona_connector-6.9.4 lib/rails_connector/blob.rb
infopark_fiona_connector-6.9.3.1.36404185 lib/rails_connector/blob.rb
infopark_fiona_connector-6.9.2.1.125136549 lib/rails_connector/blob.rb
infopark_fiona_connector-6.9.1.3.22208381 lib/rails_connector/blob.rb
infopark_fiona_connector-6.9.0.3.197272233 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.3.174.51542603 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.3.115.227021242 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.3.73.75172665 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.3.2.153416031 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.3.67.110847540 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.3.1.23895778 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.2.36.82613853 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.2.7.128454143 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.1.26.236500544 lib/rails_connector/blob.rb
infopark_fiona_connector-6.8.1 lib/rails_connector/blob.rb