diff --git a/.rubocop.yml b/.rubocop.yml index 3b8d266ea..bc92e3f6d 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -173,43 +173,10 @@ Style/Documentation: Description: 'Document classes and non-namespace modules.' Enabled: false -Style/EmptyLineBetweenDefs: - Description: 'Use empty lines between defs.' - StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#empty-lines-between-methods' - Enabled: false - Rails/ActionFilter: Description: 'Enforces consistent use of action filter methods.' Enabled: false -Rails/FindBy: - Description: 'Prefer find_by over where.first.' - Enabled: false - -Style/NilComparison: - Description: 'Prefer x.nil? to x == nil.' - StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#predicate-methods' - Enabled: false - -Style/SymbolProc: - Description: 'Use symbols as procs instead of blocks when possible.' - Enabled: false - -Style/RedundantBegin: - Description: "Don't use begin blocks when they are not needed." - StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#begin-implicit' - Enabled: false - -Lint/UnusedBlockArgument: - Description: 'Checks for unused block arguments.' - StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars' - Enabled: false - -Lint/UnusedMethodArgument: - Description: 'Checks for unused method arguments.' - StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars' - Enabled: false - Style/SignalException: Description: 'Checks for proper usage of fail and raise.' StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#fail-method' @@ -223,8 +190,6 @@ Metrics/AbcSize: Style/RedundantSelf: Enabled: false -Style/Next: - Enabled: false Style/CommentIndentation: Enabled: false Metrics/CyclomaticComplexity: diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 8e1692fe8..1cd46423b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -64,6 +64,7 @@ class ApplicationController < ActionController::Base return if !session[:user_id] @_current_user = User.find( session[:user_id] ) end + def current_user_set(user) session[:user_id] = user.id @_current_user = user @@ -282,97 +283,92 @@ class ApplicationController < ActionController::Base # model helper def model_create_render (object, params) - begin - # create object - generic_object = object.new( object.param_cleanup( params[object.to_app_model_url], true ) ) + # create object + generic_object = object.new( object.param_cleanup( params[object.to_app_model_url], true ) ) - # save object - generic_object.save! + # save object + generic_object.save! - # set relations - generic_object.param_set_associations( params ) + # set relations + generic_object.param_set_associations( params ) - model_create_render_item(generic_object) - rescue Exception => e - logger.error e.message - logger.error e.backtrace.inspect - render json: { error: e.message }, status: :unprocessable_entity - end + model_create_render_item(generic_object) + rescue Exception => e + logger.error e.message + logger.error e.backtrace.inspect + render json: { error: e.message }, status: :unprocessable_entity end + def model_create_render_item (generic_object) render json: generic_object.attributes_with_associations, status: :created end def model_update_render (object, params) - begin - # find object - generic_object = object.find( params[:id] ) + # find object + generic_object = object.find( params[:id] ) - # save object - generic_object.update_attributes!( object.param_cleanup( params[object.to_app_model_url] ) ) + # save object + generic_object.update_attributes!( object.param_cleanup( params[object.to_app_model_url] ) ) - # set relations - generic_object.param_set_associations( params ) + # set relations + generic_object.param_set_associations( params ) - model_update_render_item( generic_object ) - rescue Exception => e - logger.error e.message - logger.error e.backtrace.inspect - render json: { error: e.message }, status: :unprocessable_entity - end + model_update_render_item( generic_object ) + rescue Exception => e + logger.error e.message + logger.error e.backtrace.inspect + render json: { error: e.message }, status: :unprocessable_entity end + def model_update_render_item (generic_object) render json: generic_object.attributes_with_associations, status: :ok end def model_destory_render (object, params) - begin - generic_object = object.find( params[:id] ) - generic_object.destroy - model_destory_render_item() - rescue Exception => e - logger.error e.message - logger.error e.backtrace.inspect - render json: { error: e.message }, status: :unprocessable_entity - end + generic_object = object.find( params[:id] ) + generic_object.destroy + model_destory_render_item() + rescue Exception => e + logger.error e.message + logger.error e.backtrace.inspect + render json: { error: e.message }, status: :unprocessable_entity end + def model_destory_render_item () render json: {}, status: :ok end def model_show_render (object, params) - begin - if params[:full] - generic_object_full = object.full( params[:id] ) - render json: generic_object_full, status: :ok - return - end - - generic_object = object.find( params[:id] ) - model_show_render_item(generic_object) - rescue Exception => e - logger.error e.message - logger.error e.backtrace.inspect - render json: { error: e.message }, status: :unprocessable_entity + if params[:full] + generic_object_full = object.full( params[:id] ) + render json: generic_object_full, status: :ok + return end + + generic_object = object.find( params[:id] ) + model_show_render_item(generic_object) + rescue Exception => e + logger.error e.message + logger.error e.backtrace.inspect + render json: { error: e.message }, status: :unprocessable_entity end + def model_show_render_item (generic_object) render json: generic_object.attributes_with_associations, status: :ok end - def model_index_render (object, params) - begin - generic_objects = object.all - model_index_render_result( generic_objects ) - rescue Exception => e - logger.error e.message - logger.error e.backtrace.inspect - render json: { error: e.message }, status: :unprocessable_entity - end + def model_index_render (object, _params) + generic_objects = object.all + model_index_render_result( generic_objects ) + rescue Exception => e + logger.error e.message + logger.error e.backtrace.inspect + render json: { error: e.message }, status: :unprocessable_entity end + def model_index_render_result (generic_objects) render json: generic_objects, status: :ok end diff --git a/app/controllers/getting_started_controller.rb b/app/controllers/getting_started_controller.rb index c34034240..7f77410cb 100644 --- a/app/controllers/getting_started_controller.rb +++ b/app/controllers/getting_started_controller.rb @@ -231,30 +231,30 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password} if mail_exchangers && mail_exchangers[0] && mail_exchangers[0][0] domains.push mail_exchangers[0][0] end - provider_map.each {|provider, settings| + provider_map.each {|_provider, settings| domains.each {|domain_to_check| - if domain_to_check =~ /#{settings[:domain]}/i - # probe inbound - result = email_probe_inbound( settings[:inbound] ) - if result[:result] != 'ok' - render json: result - return # rubocop:disable Lint/NonLocalExitFromIterator - end + next if domain_to_check !~ /#{settings[:domain]}/i - # probe outbound - result = email_probe_outbound( settings[:outbound], params[:email] ) - if result[:result] != 'ok' - render json: result - return # rubocop:disable Lint/NonLocalExitFromIterator - end - - render json: { - result: 'ok', - setting: settings, - } + # probe inbound + result = email_probe_inbound( settings[:inbound] ) + if result[:result] != 'ok' + render json: result return # rubocop:disable Lint/NonLocalExitFromIterator end + + # probe outbound + result = email_probe_outbound( settings[:outbound], params[:email] ) + if result[:result] != 'ok' + render json: result + return # rubocop:disable Lint/NonLocalExitFromIterator + end + + render json: { + result: 'ok', + setting: settings, + } + return # rubocop:disable Lint/NonLocalExitFromIterator } } @@ -394,11 +394,12 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password} logger.info "INBOUND PROBE: #{config.inspect}" result = email_probe_inbound( config ) logger.info "INBOUND RESULT: #{result.inspect}" - if result[:result] == 'ok' - success = true - settings[:inbound] = config - break - end + + next if result[:result] != 'ok' + + success = true + settings[:inbound] = config + break } if !success @@ -543,11 +544,12 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password} logger.info "OUTBOUND PROBE: #{config.inspect}" result = email_probe_outbound( config, params[:email] ) logger.info "OUTBOUND RESULT: #{result.inspect}" - if result[:result] == 'ok' - success = true - settings[:outbound] = config - break - end + + next if result[:result] != 'ok' + + success = true + settings[:outbound] = config + break } if !success @@ -614,7 +616,7 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password} end result = email_probe_outbound( params[:outbound], params[:meta][:email], subject ) - (1..5).each {|loop| + (1..5).each { sleep 10 # fetch mailbox @@ -635,66 +637,66 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password} return # rubocop:disable Lint/NonLocalExitFromIterator end - if found && found == 'verify ok' + next if !found + next if found != 'verify ok' - # remember address - address = EmailAddress.where( email: params[:meta][:email] ).first - if !address - address = EmailAddress.first - end - if address - address.update_attributes( - realname: params[:meta][:realname], - email: params[:meta][:email], - active: 1, - updated_by_id: 1, - created_by_id: 1, - ) - else - EmailAddress.create( - realname: params[:meta][:realname], - email: params[:meta][:email], - active: 1, - updated_by_id: 1, - created_by_id: 1, - ) - end - - # store mailbox - Channel.create( - area: 'Email::Inbound', - adapter: params[:inbound][:adapter], - options: params[:inbound][:options], - group_id: 1, + # remember address + address = EmailAddress.where( email: params[:meta][:email] ).first + if !address + address = EmailAddress.first + end + if address + address.update_attributes( + realname: params[:meta][:realname], + email: params[:meta][:email], + active: 1, + updated_by_id: 1, + created_by_id: 1, + ) + else + EmailAddress.create( + realname: params[:meta][:realname], + email: params[:meta][:email], active: 1, updated_by_id: 1, created_by_id: 1, ) - - # save settings - if params[:outbound][:adapter] =~ /^smtp$/i - smtp = Channel.where( adapter: 'SMTP', area: 'Email::Outbound' ).first - smtp.options = params[:outbound][:options] - smtp.active = true - smtp.save! - sendmail = Channel.where( adapter: 'Sendmail' ).first - sendmail.active = false - sendmail.save! - else - sendmail = Channel.where( adapter: 'Sendmail', area: 'Email::Outbound' ).first - sendmail.options = {} - sendmail.active = true - sendmail.save! - smtp = Channel.where( adapter: 'SMTP' ).first - smtp.active = false - smtp.save - end - - render json: { - result: 'ok', - } - return # rubocop:disable Lint/NonLocalExitFromIterator end + + # store mailbox + Channel.create( + area: 'Email::Inbound', + adapter: params[:inbound][:adapter], + options: params[:inbound][:options], + group_id: 1, + active: 1, + updated_by_id: 1, + created_by_id: 1, + ) + + # save settings + if params[:outbound][:adapter] =~ /^smtp$/i + smtp = Channel.where( adapter: 'SMTP', area: 'Email::Outbound' ).first + smtp.options = params[:outbound][:options] + smtp.active = true + smtp.save! + sendmail = Channel.where( adapter: 'Sendmail' ).first + sendmail.active = false + sendmail.save! + else + sendmail = Channel.where( adapter: 'Sendmail', area: 'Email::Outbound' ).first + sendmail.options = {} + sendmail.active = true + sendmail.save! + smtp = Channel.where( adapter: 'SMTP' ).first + smtp.active = false + smtp.save + end + + render json: { + result: 'ok', + } + return # rubocop:disable Lint/NonLocalExitFromIterator } # check delivery for 30 sek. @@ -767,15 +769,16 @@ curl http://localhost/api/v1/getting_started -v -u #{login}:#{password} white_map = { 'Recipient address rejected' => true, } - white_map.each {|key, message| - if e.message =~ /#{Regexp.escape(key)}/i - result = { - result: 'ok', - settings: params, - notice: e.message, - } - return result - end + white_map.each {|key, _message| + + next if e.message !~ /#{Regexp.escape(key)}/i + + result = { + result: 'ok', + settings: params, + notice: e.message, + } + return result } end message_human = '' diff --git a/app/controllers/long_polling_controller.rb b/app/controllers/long_polling_controller.rb index 302d49fdd..c09c2cd18 100644 --- a/app/controllers/long_polling_controller.rb +++ b/app/controllers/long_polling_controller.rb @@ -112,7 +112,7 @@ class LongPollingController < ApplicationController begin # update last ping - 4.times {|loop| + 4.times { sleep 0.25 } #sleep 1 @@ -128,7 +128,7 @@ class LongPollingController < ApplicationController render json: queue return end - 8.times {|loop| + 8.times { sleep 0.25 } #sleep 2 diff --git a/app/controllers/rss_controller.rb b/app/controllers/rss_controller.rb index 256505bdb..832124e3a 100644 --- a/app/controllers/rss_controller.rb +++ b/app/controllers/rss_controller.rb @@ -20,7 +20,7 @@ curl http://localhost/api/v1/rss_fetch.json -v -u #{login}:#{password} -H "Conte def fetch items = Rss.fetch(params[:url], params[:limit]) - if items == nil + if items.nil? render json: { message: "failed to fetch #{ params[:url] }", status: :unprocessable_entity } return end diff --git a/app/controllers/sessions/collection_network.rb b/app/controllers/sessions/collection_network.rb index 4a6d8d579..d50c98fdc 100644 --- a/app/controllers/sessions/collection_network.rb +++ b/app/controllers/sessions/collection_network.rb @@ -1,7 +1,7 @@ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ module ExtraCollection - def session( collections, assets, user ) + def session( collections, assets, _user ) collections[ Network.to_app_model ] = Network.all collections[ Network::Category.to_app_model ] = Network::Category.all diff --git a/app/models/application_model.rb b/app/models/application_model.rb index caee214d1..bd23ebfb0 100644 --- a/app/models/application_model.rb +++ b/app/models/application_model.rb @@ -69,7 +69,7 @@ returns def self.param_cleanup(params, newObject = false) - if params == nil + if params.nil? raise "No params for #{self}!" end @@ -107,17 +107,18 @@ returns # set relations self.class.reflect_on_all_associations.map { |assoc| real_key = assoc.name.to_s[0, assoc.name.to_s.length - 1] + '_ids' - if params.key?( real_key.to_sym ) - list_of_items = params[ real_key.to_sym ] - if params[ real_key.to_sym ].class != Array - list_of_items = [ params[ real_key.to_sym ] ] - end - list = [] - list_of_items.each {|item| - list.push( assoc.klass.find(item) ) - } - self.send( assoc.name.to_s + '=', list ) + + next if !params.key?( real_key.to_sym ) + + list_of_items = params[ real_key.to_sym ] + if params[ real_key.to_sym ].class != Array + list_of_items = [ params[ real_key.to_sym ] ] end + list = [] + list_of_items.each {|item| + list.push( assoc.klass.find(item) ) + } + self.send( assoc.name.to_s + '=', list ) } end @@ -311,7 +312,7 @@ returns cache = self.cache_get( data[:id] ) return cache if cache - record = self.where( id: data[:id] ).first + record = self.find_by( id: data[:id] ) self.cache_set( data[:id], record ) return record elsif data[:name] @@ -357,7 +358,7 @@ returns def self.create_if_not_exists(data) if data[:id] - record = self.where( id: data[:id] ).first + record = self.find_by( id: data[:id] ) return record if record elsif data[:name] records = self.where( name: data[:name] ) @@ -458,6 +459,7 @@ end def latest_change_set_from_observer self.class.latest_change_set(self.updated_at) end + def latest_change_set_from_observer_destroy self.class.latest_change_set(nil) end @@ -466,7 +468,7 @@ end key = "#{self.new.class.name}_latest_change" expires_in = 31_536_000 # 1 year - if updated_at == nil + if updated_at.nil? Cache.delete( key ) else Cache.write( key, updated_at, { expires_in: expires_in } ) @@ -760,7 +762,7 @@ log object update activity stream, if configured - will be executed automaticall end log = false - self.changes.each {|key, value| + self.changes.each {|key, _value| # do not log created_at and updated_at attributes next if ignore_attributes[key.to_sym] == true @@ -1029,6 +1031,7 @@ get assets of object list def attachments_buffer @attachments_buffer_data end + def attachments_buffer=(attachments) @attachments_buffer_data = attachments end @@ -1036,7 +1039,7 @@ get assets of object list def attachments_buffer_check # do nothing if no attachment exists - return 1 if attachments_buffer == nil + return 1 if attachments_buffer.nil? # store attachments article_store = [] diff --git a/app/models/authorization.rb b/app/models/authorization.rb index 53c5e13a2..2206df77d 100644 --- a/app/models/authorization.rb +++ b/app/models/authorization.rb @@ -10,7 +10,7 @@ class Authorization < ApplicationModel validates :provider, presence: true def self.find_from_hash(hash) - auth = Authorization.where( provider: hash['provider'], uid: hash['uid'] ).first + auth = Authorization.find_by( provider: hash['provider'], uid: hash['uid'] ) if auth # update auth tokens diff --git a/app/models/avatar.rb b/app/models/avatar.rb index 2b6287205..a95cb0609 100644 --- a/app/models/avatar.rb +++ b/app/models/avatar.rb @@ -89,11 +89,11 @@ add a avatar # check if avatar with url already exists avatar_already_exists = nil if data[:source] && !data[:source].empty? - avatar_already_exists = Avatar.where( + avatar_already_exists = Avatar.find_by( object_lookup_id: object_id, o_id: data[:o_id], source: data[:source], - ).first + ) end # fetch image @@ -208,11 +208,11 @@ set avatars as default def self.set_default( object_name, o_id, avatar_id ) object_id = ObjectLookup.by_name( object_name ) - avatar = Avatar.where( + avatar = Avatar.find_by( object_lookup_id: object_id, o_id: o_id, id: avatar_id, - ).first + ) avatar.default = true avatar.save! @@ -308,9 +308,9 @@ returns: =end def self.get_by_hash(hash) - avatar = Avatar.where( + avatar = Avatar.find_by( store_hash: hash, - ).first + ) return if !avatar file = Store.find(avatar.store_resize_id) end @@ -329,11 +329,11 @@ returns: def self.get_default(object_name, o_id) object_id = ObjectLookup.by_name( object_name ) - Avatar.where( + Avatar.find_by( object_lookup_id: object_id, o_id: o_id, default: true, - ).first + ) end def self.set_default_items(object_id, o_id, avatar_id) diff --git a/app/models/channel/email_parser.rb b/app/models/channel/email_parser.rb index 4491f8241..1d782241b 100644 --- a/app/models/channel/email_parser.rb +++ b/app/models/channel/email_parser.rb @@ -66,35 +66,37 @@ class Channel::EmailParser # set all headers mail.header.fields.each { |field| - if field.name - # full line, encode, ready for storage - data[field.name.to_s.downcase.to_sym] = Encode.conv( 'utf8', field.to_s ) + next if !field.name - # if we need to access the lines by objects later again - data[ "raw-#{field.name.downcase}".to_sym ] = field - end + # full line, encode, ready for storage + data[field.name.to_s.downcase.to_sym] = Encode.conv( 'utf8', field.to_s ) + + # if we need to access the lines by objects later again + data[ "raw-#{field.name.downcase}".to_sym ] = field } # get sender from = nil ['from', 'reply-to', 'return-path'].each { |item| - if !from - if mail[ item.to_sym ] - from = mail[ item.to_sym ].value - end - end + + next if !mail[ item.to_sym ] + + from = mail[ item.to_sym ].value + + break if from } # set x-any-recipient data['x-any-recipient'.to_sym] = '' ['to', 'cc', 'delivered-to', 'x-original-to', 'envelope-to'].each { |item| - if mail[item.to_sym] - if data['x-any-recipient'.to_sym] != '' - data['x-any-recipient'.to_sym] += ', ' - end - data['x-any-recipient'.to_sym] += mail[item.to_sym].to_s + + next if !mail[item.to_sym] + + if data['x-any-recipient'.to_sym] != '' + data['x-any-recipient'.to_sym] += ', ' end + data['x-any-recipient'.to_sym] += mail[item.to_sym].to_s } # set extra headers @@ -333,7 +335,7 @@ class Channel::EmailParser } # filter( channel, mail ) - filters.each {|prio, backend| + filters.each {|_prio, backend| begin backend.run( channel, mail ) rescue Exception => e @@ -358,10 +360,10 @@ class Channel::EmailParser # create sender if mail[ 'x-zammad-customer-login'.to_sym ] - user = User.where( login: mail[ 'x-zammad-customer-login'.to_sym ] ).first + user = User.find_by( login: mail[ 'x-zammad-customer-login'.to_sym ] ) end if !user - user = User.where( email: mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email] ).first + user = User.find_by( email: mail[ 'x-zammad-customer-email'.to_sym ] || mail[:from_email] ) end if !user user = user_create( @@ -374,16 +376,18 @@ class Channel::EmailParser # create to and cc user ['raw-to', 'raw-cc'].each { |item| - if mail[item.to_sym] && mail[item.to_sym].tree - items = mail[item.to_sym].tree - items.addresses.each {|item| - user_create( - firstname: item.display_name, - lastname: '', - email: item.address, - ) - } - end + + next if !mail[item.to_sym] + next if !mail[item.to_sym].tree + + items = mail[item.to_sym].tree + items.addresses.each {|item| + user_create( + firstname: item.display_name, + lastname: '', + email: item.address, + ) + } } # set current user @@ -403,7 +407,7 @@ class Channel::EmailParser end if state_type.name != 'new' - ticket.state = Ticket::State.where( name: 'open' ).first + ticket.state = Ticket::State.find_by( name: 'open' ) ticket.save end end @@ -416,8 +420,8 @@ class Channel::EmailParser group_id: channel[:group_id] || 1, customer_id: user.id, title: mail[:subject] || '', - state_id: Ticket::State.where( name: 'new' ).first.id, - priority_id: Ticket::Priority.where( name: '2 normal' ).first.id, + state_id: Ticket::State.find_by( name: 'new' ).id, + priority_id: Ticket::Priority.find_by( name: '2 normal' ).id, ) set_attributes_by_x_headers( ticket, 'ticket', mail ) @@ -431,8 +435,8 @@ class Channel::EmailParser # set attributes article = Ticket::Article.new( ticket_id: ticket.id, - type_id: Ticket::Article::Type.where( name: 'email' ).first.id, - sender_id: Ticket::Article::Sender.where( name: 'Customer' ).first.id, + type_id: Ticket::Article::Type.find_by( name: 'email' ).id, + sender_id: Ticket::Article::Sender.find_by( name: 'Customer' ).id, body: mail[:body], from: mail[:from], to: mail[:to], @@ -480,7 +484,7 @@ class Channel::EmailParser } # filter( channel, mail ) - filters.each {|prio, backend| + filters.each {|_prio, backend| begin backend.run( channel, mail, ticket, article, user ) rescue Exception => e @@ -496,7 +500,7 @@ class Channel::EmailParser def user_create(data) # return existing - user = User.where( login: data[:email].downcase ).first + user = User.find_by( login: data[:email].downcase ) return user if user # create new user @@ -504,7 +508,7 @@ class Channel::EmailParser # fillup %w(firstname lastname).each { |item| - if data[item.to_sym] == nil + if data[item.to_sym].nil? data[item.to_sym] = '' end } @@ -525,7 +529,7 @@ class Channel::EmailParser def set_attributes_by_x_headers( item_object, header_name, mail ) # loop all x-zammad-hedaer-* headers - item_object.attributes.each {|key, value| + item_object.attributes.each {|key, _value| # ignore read only attributes next if key == 'updated_at' @@ -541,18 +545,19 @@ class Channel::EmailParser if mail[ header.to_sym ] Rails.logger.info "header #{header} found #{mail[ header.to_sym ]}" item_object.class.reflect_on_all_associations.map { |assoc| - if assoc.name.to_s == key_short - Rails.logger.info "ASSOC found #{assoc.class_name} lookup #{mail[ header.to_sym ]}" - item = assoc.class_name.constantize - if item.respond_to?(:name) - if item.lookup( name: mail[ header.to_sym ] ) - item_object[key] = item.lookup( name: mail[ header.to_sym ] ).id - end - elsif item.respond_to?(:login) - if item.lookup( login: mail[ header.to_sym ] ) - item_object[key] = item.lookup( login: mail[ header.to_sym ] ).id - end + next if assoc.name.to_s != key_short + + Rails.logger.info "ASSOC found #{assoc.class_name} lookup #{mail[ header.to_sym ]}" + item = assoc.class_name.constantize + + if item.respond_to?(:name) + if item.lookup( name: mail[ header.to_sym ] ) + item_object[key] = item.lookup( name: mail[ header.to_sym ] ).id + end + elsif item.respond_to?(:login) + if item.lookup( login: mail[ header.to_sym ] ) + item_object[key] = item.lookup( login: mail[ header.to_sym ] ).id end end } diff --git a/app/models/channel/email_send.rb b/app/models/channel/email_send.rb index 54fc83654..38acfd626 100644 --- a/app/models/channel/email_send.rb +++ b/app/models/channel/email_send.rb @@ -4,7 +4,7 @@ require 'net/imap' module Channel::EmailSend def self.send(attr, notification = false) - channel = Channel.where( area: 'Email::Outbound', active: true ).first + channel = Channel.find_by( area: 'Email::Outbound', active: true ) begin c = eval 'Channel::' + channel[:adapter] + '.new' c.send(attr, channel, notification) diff --git a/app/models/channel/filter/database.rb b/app/models/channel/filter/database.rb index 980cc1b6b..a03a2ee1e 100644 --- a/app/models/channel/filter/database.rb +++ b/app/models/channel/filter/database.rb @@ -3,16 +3,16 @@ # process all database filter module Channel::Filter::Database - def self.run( channel, mail ) + def self.run( _channel, mail ) # process postmaster filter filters = PostmasterFilter.where( active: true, channel: 'email' ) filters.each {|filter| Rails.logger.info " proccess filter #{filter.name} ..." match = true - loop = false + looped = false filter[:match].each {|key, value| - loop = true + looped = true begin scan = [] if mail @@ -31,12 +31,14 @@ module Channel::Filter::Database Rails.logger.error e.inspect end } - if loop && match - filter[:perform].each {|key, value| - Rails.logger.info " perform '#{ key.downcase }' = '#{value}'" - mail[ key.downcase.to_sym ] = value - } - end + + next if !looped + next if !match + + filter[:perform].each {|key, value| + Rails.logger.info " perform '#{ key.downcase }' = '#{value}'" + mail[ key.downcase.to_sym ] = value + } } end diff --git a/app/models/channel/filter/trusted.rb b/app/models/channel/filter/trusted.rb index e37cb12bb..131b3371a 100644 --- a/app/models/channel/filter/trusted.rb +++ b/app/models/channel/filter/trusted.rb @@ -7,10 +7,11 @@ module Channel::Filter::Trusted # check if trust x-headers if !channel[:trusted] - mail.each {|key, value| - if key =~ /^x-zammad/i - mail.delete(key) - end + mail.each {|key, _value| + + next if key !~ /^x-zammad/i + + mail.delete(key) } end diff --git a/app/models/channel/sendmail.rb b/app/models/channel/sendmail.rb index 21b81426a..e0ce4cc93 100644 --- a/app/models/channel/sendmail.rb +++ b/app/models/channel/sendmail.rb @@ -1,7 +1,7 @@ # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ class Channel::Sendmail - def send(attr, channel, notification = false) + def send(attr, _channel, notification = false) # return if we run import mode return if Setting.get('import_mode') diff --git a/app/models/channel/twitter2.rb b/app/models/channel/twitter2.rb index 82b800e81..cb71db0d1 100644 --- a/app/models/channel/twitter2.rb +++ b/app/models/channel/twitter2.rb @@ -75,7 +75,7 @@ class Channel::TWITTER2 all_tweets.each do |tweet| # check if tweet is already imported - article = Ticket::Article.where( message_id: tweet.id.to_s ).first + article = Ticket::Article.find_by( message_id: tweet.id.to_s ) # check if sender already exists next if article @@ -137,15 +137,15 @@ class Channel::TWITTER2 [user, ticket, article] end - def fetch_user_create(tweet, sender) + def fetch_user_create(_tweet, sender) # create sender in db # puts tweet.inspect # user = User.where( :login => tweet.sender.screen_name ).first - auth = Authorization.where( uid: sender.id, provider: 'twitter' ).first + auth = Authorization.find_by( uid: sender.id, provider: 'twitter' ) user = nil if auth Rails.logger.info 'user_id', auth.user_id - user = User.where( id: auth.user_id ).first + user = User.find_by( id: auth.user_id ) end if !user Rails.logger.info 'create user...' @@ -180,13 +180,13 @@ class Channel::TWITTER2 user end - def fetch_ticket_create(user, tweet, sender, channel, group) + def fetch_ticket_create(user, tweet, _sender, _channel, group) #Rails.logger.info '+++++++++++++++++++++++++++' + tweet.inspect # check if ticket exists if tweet.respond_to?('in_reply_to_status_id') && tweet.in_reply_to_status_id && tweet.in_reply_to_status_id.to_s != '' Rails.logger.info 'tweet.in_reply_to_status_id found: ' + tweet.in_reply_to_status_id.to_s - article = Ticket::Article.where( message_id: tweet.in_reply_to_status_id.to_s ).first + article = Ticket::Article.find_by( message_id: tweet.in_reply_to_status_id.to_s ) if article Rails.logger.info 'article with id found tweet.in_reply_to_status_id found: ' + tweet.in_reply_to_status_id.to_s return article.ticket @@ -194,14 +194,14 @@ class Channel::TWITTER2 end # find if record already exists - article = Ticket::Article.where( message_id: tweet.id.to_s ).first + article = Ticket::Article.find_by( message_id: tweet.id.to_s ) if article return article.ticket end ticket = nil if @article_type == 'twitter direct-message' - ticket = Ticket.where( customer_id: user.id ).first + ticket = Ticket.find_by( customer_id: user.id ) if ticket state_type = Ticket::StateType.where( ticket.state.state_type_id ) if state_type.name == 'closed' || state_type.name == 'closed' @@ -210,17 +210,17 @@ class Channel::TWITTER2 end end if !ticket - group = Group.where( name: group ).first + group = Group.find_by( name: group ) group_id = 1 if group group_id = group.id end - state = Ticket::State.where( name: 'new' ).first + state = Ticket::State.find_by( name: 'new' ) state_id = 1 if state state_id = state.id end - priority = Ticket::Priority.where( name: '2 normal' ).first + priority = Ticket::Priority.find_by( name: '2 normal' ) priority_id = 1 if priority priority_id = priority.id @@ -237,15 +237,15 @@ class Channel::TWITTER2 ticket end - def fetch_article_create( user, ticket, tweet, sender ) + def fetch_article_create( _user, ticket, tweet, sender ) # find if record already exists - article = Ticket::Article.where( message_id: tweet.id.to_s ).first + article = Ticket::Article.find_by( message_id: tweet.id.to_s ) return article if article # set ticket state to open if not new if ticket.state.name != 'new' - ticket.state = Ticket::State.where( name: 'open' ).first + ticket.state = Ticket::State.find_by( name: 'open' ) ticket.save end @@ -257,8 +257,8 @@ class Channel::TWITTER2 article = Ticket::Article.create( ticket_id: ticket.id, - type_id: Ticket::Article::Type.where( name: @article_type ).first.id, - sender_id: Ticket::Article::Sender.where( name: 'Customer' ).first.id, + type_id: Ticket::Article::Type.find_by( name: @article_type ).id, + sender_id: Ticket::Article::Sender.find_by( name: 'Customer' ).id, body: tweet.text, from: sender.name, to: to, @@ -268,9 +268,9 @@ class Channel::TWITTER2 end - def send(attr, notification = false) + def send(attr, _notification = false) # Rails.logger.debug('tweeeeettttt!!!!!!') - channel = Channel.where( area: 'Twitter::Inbound', active: true ).first + channel = Channel.find_by( area: 'Twitter::Inbound', active: true ) client = Twitter::REST::Client.new do |config| config.consumer_key = channel[:options][:consumer_key] diff --git a/app/models/history.rb b/app/models/history.rb index 0526bb93b..1b7005486 100644 --- a/app/models/history.rb +++ b/app/models/history.rb @@ -76,7 +76,7 @@ add a new history entry for an object } history_record = nil if data[:id] - history_record = History.where( id: data[:id] ).first + history_record = History.find_by( id: data[:id] ) end if history_record history_record.update_attributes(record) @@ -98,7 +98,7 @@ remove whole history entries of an object =end def self.remove( requested_object, requested_object_id ) - history_object = History::Object.where( name: requested_object ).first + history_object = History::Object.find_by( name: requested_object ) return if !history_object History.where( history_object_id: history_object.id, @@ -185,11 +185,11 @@ returns data.delete('history_attribute_id') data.delete( 'updated_at' ) - if data['id_to'] == nil && data['id_from'] == nil + if data['id_to'].nil? && data['id_from'].nil? data.delete( 'id_to' ) data.delete( 'id_from' ) end - if data['value_to'] == nil && data['value_from'] == nil + if data['value_to'].nil? && data['value_from'].nil? data.delete( 'value_to' ) data.delete( 'value_from' ) end @@ -198,7 +198,7 @@ returns end data.delete( 'related_history_object_id' ) - if data['related_o_id'] == nil + if data['related_o_id'].nil? data.delete( 'related_o_id' ) end diff --git a/app/models/link.rb b/app/models/link.rb index 57377ec82..53b521558 100644 --- a/app/models/link.rb +++ b/app/models/link.rb @@ -130,9 +130,7 @@ class Link < ApplicationModel link_object_target_id: data[:link_object_target_id], link_object_target_value: data[:link_object_target_value] ) - links.each { |link| - link.destroy - } + links.each(&:destroy) # from the other site if data.key?(:link_type) @@ -146,13 +144,11 @@ class Link < ApplicationModel link_object_source_id: data[:link_object_target_id], link_object_source_value: data[:link_object_target_value] ) - links.each { |link| - link.destroy - } + links.each(&:destroy) end def self.link_type_get(data) - linktype = Link::Type.where( name: data[:name] ).first + linktype = Link::Type.find_by( name: data[:name] ) if !linktype linktype = Link::Type.create( name: data[:name] @@ -162,7 +158,7 @@ class Link < ApplicationModel end def self.link_object_get(data) - linkobject = Link::Object.where( name: data[:name] ).first + linkobject = Link::Object.find_by( name: data[:name] ) if !linkobject linkobject = Link::Object.create( name: data[:name] diff --git a/app/models/locale.rb b/app/models/locale.rb index 802700505..0b329d19a 100644 --- a/app/models/locale.rb +++ b/app/models/locale.rb @@ -17,7 +17,7 @@ class Locale < ApplicationModel ActiveRecord::Base.transaction do result.data.each {|locale| - exists = Locale.where(locale: locale['locale']).first + exists = Locale.find_by(locale: locale['locale']) if exists exists.update(locale.symbolize_keys!) else diff --git a/app/models/object_manager.rb b/app/models/object_manager.rb index aafd10ff5..50f1f9c19 100644 --- a/app/models/object_manager.rb +++ b/app/models/object_manager.rb @@ -112,10 +112,10 @@ add a new attribute entry for an object data.delete(:object) # check newest entry - is needed - result = ObjectManager::Attribute.where( + result = ObjectManager::Attribute.find_by( object_lookup_id: data[:object_lookup_id], name: data[:name], - ).first + ) if result # raise "ERROR: attribute #{data[:name]} for #{data[:object]} already exists" return result.update_attributes(data) @@ -143,10 +143,10 @@ get the attribute model based on object and name data[:object_lookup_id] = ObjectLookup.by_name( data[:object] ) end - ObjectManager::Attribute.where( + ObjectManager::Attribute.find_by( object_lookup_id: data[:object_lookup_id], name: data[:name], - ).first + ) end =begin diff --git a/app/models/observer/organization/ref_object_touch.rb b/app/models/observer/organization/ref_object_touch.rb index 3b6ba572d..84c617edf 100644 --- a/app/models/observer/organization/ref_object_touch.rb +++ b/app/models/observer/organization/ref_object_touch.rb @@ -6,9 +6,11 @@ class Observer::Organization::RefObjectTouch < ActiveRecord::Observer def after_create(record) ref_object_touch(record) end + def after_update(record) ref_object_touch(record) end + def after_destroy(record) ref_object_touch(record) end @@ -19,9 +21,7 @@ class Observer::Organization::RefObjectTouch < ActiveRecord::Observer return if Setting.get('import_mode') # touch organizations tickets - Ticket.select('id').where( organization_id: record.id ).each {|ticket| - ticket.touch - } + Ticket.select('id').where( organization_id: record.id ).each(&:touch) # touch current members record.member_ids.uniq.each {|user_id| diff --git a/app/models/observer/session.rb b/app/models/observer/session.rb index 7bf93523e..cd051fb21 100644 --- a/app/models/observer/session.rb +++ b/app/models/observer/session.rb @@ -8,6 +8,7 @@ class Observer::Session < ActiveRecord::Observer def before_create(record) check(record) end + def before_update(record) check(record) end diff --git a/app/models/observer/tag/ticket_history.rb b/app/models/observer/tag/ticket_history.rb index 9daeaf0f5..b9ba9470f 100644 --- a/app/models/observer/tag/ticket_history.rb +++ b/app/models/observer/tag/ticket_history.rb @@ -19,6 +19,7 @@ class Observer::Tag::TicketHistory < ActiveRecord::Observer value_to: record.tag_item.name, ) end + def after_destroy(record) # just process ticket object tags diff --git a/app/models/observer/ticket/article/communicate_email.rb b/app/models/observer/ticket/article/communicate_email.rb index cf94e112d..b2efb34fd 100644 --- a/app/models/observer/ticket/article/communicate_email.rb +++ b/app/models/observer/ticket/article/communicate_email.rb @@ -10,7 +10,7 @@ class Observer::Ticket::Article::CommunicateEmail < ActiveRecord::Observer # if sender is customer, do not communication sender = Ticket::Article::Sender.lookup( id: record.sender_id ) - return 1 if sender == nil + return 1 if sender.nil? return 1 if sender['name'] == 'Customer' # only apply on emails diff --git a/app/models/observer/ticket/article/communicate_email/background_job.rb b/app/models/observer/ticket/article/communicate_email/background_job.rb index e01ef95c4..4d396fcc1 100644 --- a/app/models/observer/ticket/article/communicate_email/background_job.rb +++ b/app/models/observer/ticket/article/communicate_email/background_job.rb @@ -2,6 +2,7 @@ class Observer::Ticket::Article::CommunicateEmail::BackgroundJob def initialize(id) @article_id = id end + def perform record = Ticket::Article.find( @article_id ) @@ -37,12 +38,14 @@ class Observer::Ticket::Article::CommunicateEmail::BackgroundJob # add history record recipient_list = '' [:to, :cc].each { |key| - if record[key] && record[key] != '' - if recipient_list != '' - recipient_list += ',' - end - recipient_list += record[key] + + next if !record[key] + next if record[key] == '' + + if recipient_list != '' + recipient_list += ',' end + recipient_list += record[key] } return if recipient_list == '' diff --git a/app/models/observer/ticket/article/communicate_facebook.rb b/app/models/observer/ticket/article/communicate_facebook.rb index 82d6c56e9..ea6e4bf84 100644 --- a/app/models/observer/ticket/article/communicate_facebook.rb +++ b/app/models/observer/ticket/article/communicate_facebook.rb @@ -10,7 +10,7 @@ class Observer::Ticket::Article::CommunicateFacebook < ActiveRecord::Observer # if sender is customer, do not communication sender = Ticket::Article::Sender.lookup( id: record.sender_id ) - return 1 if sender == nil + return 1 if sender.nil? return 1 if sender['name'] == 'Customer' # only apply on emails diff --git a/app/models/observer/ticket/article/communicate_twitter.rb b/app/models/observer/ticket/article/communicate_twitter.rb index 8b38779ab..36fb70f44 100644 --- a/app/models/observer/ticket/article/communicate_twitter.rb +++ b/app/models/observer/ticket/article/communicate_twitter.rb @@ -10,7 +10,7 @@ class Observer::Ticket::Article::CommunicateTwitter < ActiveRecord::Observer # if sender is customer, do not communication sender = Ticket::Article::Sender.lookup( id: record.sender_id ) - return 1 if sender == nil + return 1 if sender.nil? return 1 if sender['name'] == 'Customer' # only apply on tweets diff --git a/app/models/observer/ticket/article/fillup_from_email.rb b/app/models/observer/ticket/article/fillup_from_email.rb index 08fcf3778..59f6adc22 100644 --- a/app/models/observer/ticket/article/fillup_from_email.rb +++ b/app/models/observer/ticket/article/fillup_from_email.rb @@ -10,7 +10,7 @@ class Observer::Ticket::Article::FillupFromEmail < ActiveRecord::Observer # if sender is customer, do not change anything sender = Ticket::Article::Sender.lookup( id: record.sender_id ) - return if sender == nil + return if sender.nil? return if sender['name'] == 'Customer' # set email attributes diff --git a/app/models/observer/ticket/article/fillup_from_general.rb b/app/models/observer/ticket/article/fillup_from_general.rb index 99a907159..f257b18e5 100644 --- a/app/models/observer/ticket/article/fillup_from_general.rb +++ b/app/models/observer/ticket/article/fillup_from_general.rb @@ -10,7 +10,7 @@ class Observer::Ticket::Article::FillupFromGeneral < ActiveRecord::Observer # if sender is customer, do not change anything sender = Ticket::Article::Sender.lookup( id: record.sender_id ) - return if sender == nil + return if sender.nil? return if sender['name'] == 'Customer' # set from if not given diff --git a/app/models/observer/ticket/article_changes.rb b/app/models/observer/ticket/article_changes.rb index f122f747d..d4beac442 100644 --- a/app/models/observer/ticket/article_changes.rb +++ b/app/models/observer/ticket/article_changes.rb @@ -73,8 +73,8 @@ class Observer::Ticket::ArticleChanges < ActiveRecord::Observer if sender.name == 'Customer' # check if last communication is done by agent, else do not set last_contact_customer - if record.ticket.last_contact_customer == nil || - record.ticket.last_contact_agent == nil || + if record.ticket.last_contact_customer.nil? || + record.ticket.last_contact_agent.nil? || record.ticket.last_contact_agent.to_i > record.ticket.last_contact_customer.to_i # set last_contact customer diff --git a/app/models/observer/ticket/notification.rb b/app/models/observer/ticket/notification.rb index 62fd1343a..c0ff9b67f 100644 --- a/app/models/observer/ticket/notification.rb +++ b/app/models/observer/ticket/notification.rb @@ -19,7 +19,7 @@ class Observer::Ticket::Notification < ActiveRecord::Observer # get uniq objects list_objects = get_uniq_changes(list) - list_objects.each {|ticket_id, item| + list_objects.each {|_ticket_id, item| # send background job Delayed::Job.enqueue( Observer::Ticket::Notification::BackgroundJob.new( item ) ) @@ -158,7 +158,7 @@ class Observer::Ticket::Notification < ActiveRecord::Observer EventBuffer.add(e) end - def after_update(record) + def after_update(_record) # return if we run import mode return if Setting.get('import_mode') diff --git a/app/models/observer/ticket/notification/background_job.rb b/app/models/observer/ticket/notification/background_job.rb index 3c68b4947..f92241ee5 100644 --- a/app/models/observer/ticket/notification/background_job.rb +++ b/app/models/observer/ticket/notification/background_job.rb @@ -4,6 +4,7 @@ class Observer::Ticket::Notification::BackgroundJob def initialize(params) @p = params end + def perform ticket = Ticket.find(@p[:ticket_id]) if @p[:article_id] @@ -225,7 +226,7 @@ class Observer::Ticket::Notification::BackgroundJob changes end - def template_create(user, ticket, article, ticket_changes) + def template_create(user, ticket, article, _ticket_changes) article_content = '' if article article_content = '<snip> @@ -348,7 +349,7 @@ Changes:
template end - def template_header(user) + def template_header(_user) '