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