module Neutrino::AudiomaticRails::Model::InstanceMethods

Constants

To_file

Public Instance Methods

_parse_options(options) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 120
def _parse_options(options)
  if self.class.callback_url.nil?
    {callback_url: Neutrino::AudiomaticRails.gen_callback_path(self)}
  else
    {callback_url: self.send(self.class.callback_url)}
  end
end
_save_to(answer) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 128
def _save_to answer
  ans_processor, value = convert_answer(answer) 
  to_field, processor, field, transformation = find_processor answer
  if to_field.nil? && !processor.nil?
    if To_file.include?(processor)
      save_file processor, value
    else
      self.send(self.class.save_to(processor), answer)
    end        
  else 
    if to_field
      transformation.each { |fun| value = self.send(fun, value) } unless transformation.nil?
      self.write_attribute(field.to_s, value)   
      true
    end 
  end   
rescue Exception => e
  Rails.logger.error(e) and false
end
audiomatic_error(message) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 111
def audiomatic_error message
  @audiomatic_error ||= []
  @audiomatic_error = message
end
convert_answer(answer) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 163
def convert_answer answer
  [answer['key'].intern, answer['value']]
end
default_file_url() click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 53
def default_file_url
  url = Rails.application.routes.url_helpers.send( "neutrino_audiomatic_file_#{ self.class.to_s.underscore }_url")
  url + "?id=#{self.id}"
end
error_interpreter(answers) click to toggle source

Reacts on error during sending request to Audiomatic. Two strategy:

 -Sets ActiveRecor errors and model is removed from database.
 -Replays sending request until successfull answer, and allows customize rection on error
=== Example (seccond strategy, using Neutrino::AudiomaticRails.audiomatic_error)

  audiomatic_error :audiomatic_error=

    def audiomatic_error= errors
      errors.each do |error|
         Rails.logger.errors(error)
      end 
      true   
    end
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 99
def error_interpreter answers
  if self.class.user_error_solution.nil?
    answers.each { |ans| audiomatic_error ans[:message] if ans.include?(:error) }
    raise ActiveRecord::RecordInvalid.new(self) unless save
  else
    unless  answers.all? { |ans| ans.include?(:success)} 
      Neutrino::AudiomaticRails::SendToAudiomaticJob.set(wait: 5.second).perform_later ({id: self.id, klass: self.class.to_s})
      self.send((self.class.user_error_solution), answers) 
    end
  end
end
find_processor(answer) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 171
def find_processor answer
  keys = self.class.processors.keys
  user_processor = self.class.processors  
  keys.each do |key|  
    if user_processor[key].include?(answer['key'].intern)
      case user_processor[key]
      when Array then
        field = answer['key'].intern
        transformation = nil
      when Hash then  
        field = user_processor[key][answer['key'].intern][:field] || key
        transformation = user_processor[key][answer['key'].intern][:transformation]
      end 
      return [true, key, field, transformation] 
    else
      if !user_processor[answer['key'].intern].nil? && [:save_to, :mount_on].include?( user_processor[ processor = answer['key'].intern].keys[0])
        return [nil, processor, nil, nil]
      end 
    end
  end
  if answer[/^replaygain.*/]
    [nil, :replaygain, nil, nil]
  else
    [nil, :tags , nil, nil]
  end
end
gen_callback_url(file) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 167
def gen_callback_url(file)
  Neutrino::AudiomaticRails.route_for(file.class, file.id)
end
mount_file() click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 43
def mount_file
  unless block_analyze
    unless @cache_file.nil?
      path = FileUtils.mkdir_p "#{Rails.root}/tmp/audio/#{self.class.to_s}/"
      file = File.new(path[0] + "#{self.id}", "w") 
      FileUtils.cp @cache_file.path, file.path
    end
  end
end
save_file(processor, value) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 148
def save_file processor, value
  require 'open-uri' 
  path = Rails.root.join('tmp','audiomatic')
  Dir.mkdir(path) unless path.exist?
  path = path.join("#{processor.to_s}#{Time.now.to_i}")
  _file = open(path, "wb") do |file|
    file <<  open(value).read
  end
  if self.class.mount_on(processor).nil?
    self.send(self.class.save_to(processor), _file)
  else
    self.send(self.class.mount_on(processor)).store! open(_file)
  end
end
send_to_audiomatic() click to toggle source

Sends all processors to Auidomatic. Works after save model.

# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 73
def send_to_audiomatic
  processors = self.class.processors
  unless  block_analyze
    self.block_analyze = true
    answers = processors.keys.map { | processor | single_processor_request(processor) } 
    error_interpreter answers
  end
end
single_processor_request(processor) click to toggle source

Prepares and sands request to Audiomatic

# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 62
def single_processor_request(processor)
  options = _parse_options(self.class.options)
  ::Neutrino::Audiomatic::Processor.send_request(
    ::Neutrino::Audiomatic::Processor.processor_url(processor), 
    options.merge(url: self.send(self.class.file_url)))
end
store(file) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 39
def store file 
  @cache_file = file      
end
update_attributes_manualy(attributes, option = {}) click to toggle source

Allows update_attributes without sending request to Auiomatic.

# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 200
def update_attributes_manualy(attributes, option = {})
  self.block_analyze = true
  update_attributes(attributes, option)
end
update_manualy(attribute, value) click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 204
def update_manualy(attribute, value)
  self.block_analyze = true
  self[attribute] = value
  save
end
valid_audiomatic() click to toggle source
# File lib/neutrino_audiomatic_rails/neutrino_audiomatic_rails_model.rb, line 116
def valid_audiomatic
  Array.wrap(@audiomatic_error).each { |error| errors.add(:audiomatic_error, error) }
end