Class: Backend::File
Overview
ActiveModel for representing the backend files (special ones and source files too)
Constant Summary
- BUFFER_SIZE =
- 40_960
Instance Attribute Summary collapse
- 
  
    
      #name  ⇒ Object 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    Returns the value of attribute name. 
- 
  
    
      #response  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Returns the value of attribute response. 
Class Method Summary collapse
- 
  
    
      .query_from_list(params, key_list = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    TODO: Replace SuseBackend.build_query_from_hash with this function asap. 
Instance Method Summary collapse
- 
  
    
      #destroy(query = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Tries to destroy the file from the backend. 
- 
  
    
      #destroy!(query = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Tries to destroy the file from the backend, freeze the object and return the response, otherwise will raise an StandardError. 
- 
  
    
      #file(query = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns a File object (closed) that have the content of the Backend file. 
- 
  
    
      #file=(input_stream)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sets the content File object for that model instance, calculates the right response data. 
- 
  
    
      #file_from_path(path)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sets the content File object from a path. 
- 
  
    
      #initialize(attributes = {})  ⇒ File 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of File. 
- 
  
    
      #reload  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Reloads from Backend the file content. 
- 
  
    
      #save(query = {}, content = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Tries to save the file to the backend. 
- 
  
    
      #save!(query = {}, content = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Tries to save the file to the backend and return the response, otherwise will raise an StandardError If “content” parameter is provided then is passed directly to the backend, otherwise it creates a temp file and then send it to the backend. 
- 
  
    
      #to_s(query = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Converts file into a String if it's valid. 
Constructor Details
#initialize(attributes = {}) ⇒ File
Returns a new instance of File
| 14 15 16 17 18 19 | # File 'file.rb', line 14 def initialize(attributes = {}) super @file ||= nil @response = {} @last_read_query = {} end | 
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name
| 8 9 10 | # File 'file.rb', line 8 def name @name end | 
#response ⇒ Object (readonly)
Returns the value of attribute response
| 9 10 11 | # File 'file.rb', line 9 def response @response end | 
Class Method Details
.query_from_list(params, key_list = nil) ⇒ Object
TODO: Replace SuseBackend.build_query_from_hash with this function asap
| 115 116 117 118 119 | # File 'file.rb', line 115 def self.query_from_list(params, key_list = nil) key_list ||= params.keys query = params.slice(*key_list).to_query query.present? ? "?#{query}" : query end | 
Instance Method Details
#destroy(query = {}) ⇒ Object
Tries to destroy the file from the backend. Returns nil if some StandardError is raised
| 106 107 108 109 110 111 112 | # File 'file.rb', line 106 def destroy(query = {}) destroy!(query) rescue => e @backend_file_errors = e. valid? nil end | 
#destroy!(query = {}) ⇒ Object
Tries to destroy the file from the backend, freeze the object and return the response, otherwise will raise an StandardError
| 98 99 100 101 102 103 | # File 'file.rb', line 98 def destroy!(query = {}) backend_response = Connection.delete(full_path(query)) @response = { type: backend_response['Content-Type'], status: backend_response.code, size: backend_response.content_length } freeze @response end | 
#file(query = {}) ⇒ Object
Returns a File object (closed) that have the content of the Backend file
| 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # File 'file.rb', line 38 def file(query = {}) if @file.nil? && valid? # Read it from Backend Connection.get(full_path(query)) do |backend_response| Tempfile.open('backend_file', Dir.tmpdir, encoding: 'ascii-8bit') do |tempfile| backend_response.read_body do |buffer| tempfile.write(buffer) end @file = tempfile @response = { type: backend_response['Content-Type'], status: backend_response.code, size: @file.size } end end @last_read_query = query end @file rescue => e @backend_file_errors = e. valid? nil end | 
#file=(input_stream) ⇒ Object
Sets the content File object for that model instance, calculates the right response data
| 22 23 24 25 26 27 28 | # File 'file.rb', line 22 def file=(input_stream) Tempfile.open('backend_file', "#{Rails.root}/tmp", encoding: 'ascii-8bit') do |tempfile| buffer = '' tempfile.write(buffer) while input_stream.read(BUFFER_SIZE, buffer) @file = tempfile end end | 
#file_from_path(path) ⇒ Object
Sets the content File object from a path
| 31 32 33 34 35 | # File 'file.rb', line 31 def file_from_path(path) @file = ::File.open(path) @response = { type: MiniMime.lookup_by_filename(@file.path).try(:content_type), status: 200, size: @file.size } @file.close end | 
#reload ⇒ Object
Reloads from Backend the file content
| 65 66 67 68 69 | # File 'file.rb', line 65 def reload @file = nil @response = {} file(@last_read_query) end | 
#save(query = {}, content = nil) ⇒ Object
Tries to save the file to the backend. Returns nil if some StandardError is raised
| 89 90 91 92 93 94 95 | # File 'file.rb', line 89 def save(query = {}, content = nil) save!(query, content) rescue => e @backend_file_errors = e. valid? nil end | 
#save!(query = {}, content = nil) ⇒ Object
Tries to save the file to the backend and return the response, otherwise will raise an StandardError If “content” parameter is provided then is passed directly to the backend, otherwise it creates a temp file and then send it to the backend
| 74 75 76 77 78 79 80 81 82 83 84 85 86 | # File 'file.rb', line 74 def save!(query = {}, content = nil) backend_response = nil if content backend_response = Connection.put(full_path(query), content) reload else @file.open backend_response = Connection.put(full_path(query), @file) @response = { type: backend_response['Content-Type'], status: backend_response.code, size: backend_response.content_length } @file.close end backend_response end | 
#to_s(query = {}) ⇒ Object
Converts file into a String if it's valid
| 59 60 61 62 | # File 'file.rb', line 59 def to_s(query = {}) file(query) !@file.nil? && valid? ? ::File.open(@file.path).read : nil end |