Skip to content
This repository has been archived by the owner on Jun 27, 2019. It is now read-only.

2355 - 2 #243

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Enable some rubocop's and reek's offences
Aleksei12942 committed Jul 22, 2018
commit c93ee85496ac32fd2884805b915a24ae03b6213c
67 changes: 30 additions & 37 deletions 2355/2/find_obscenity.rb
Original file line number Diff line number Diff line change
@@ -1,58 +1,51 @@
require 'russian_obscenity'

# rubocop:disable Metrics/MethodLength
# rubocop:disable Metrics/AbcSize
# rubocop:disable Style/IfUnlessModifier
# rubocop:disable Lint/ImplicitStringConcatenation
# rubocop:disable Performance/RedundantMatch
# This class is needed to find and collect all obscenity from text files
# This class smells of :reek:Attribute
# This class smells of :reek:InstanceVariableAssumption
class FindObscenity
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't name classes with verbs.

attr_accessor :obscenity
attr_reader :obscenity

def initialize(battler)
@battler = battler
@mistakes = []
@obscenity = []
end

def dir_count
Dir[File.join("./rap-battles/#{@battler}/", '**', '*')].count { |file| File.file?(file) }
end

def initialize_mistakes
@mistakes = []
file = File.new('./mistakes')
file.each { |line| @mistakes << line.delete("\n") }
File.new('./mistakes').each { |line| @mistakes << line.delete("\n") }
end

# This method smells of :reek:DuplicateMethodCall
# This method smells of :reek:NestedIterators
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# This method smells of :reek:TooManyStatements
# This method smells of :reek:UncommunicativeVariableName
def check_battles_for_obscenity
initialize_mistakes
@obscenity = []
1.upto(Dir[File.join("./rap-battles/#{@battler}/", '**', '*')].count { |file| File.file?(file) }) do |i|
file = File.new("./rap-battles/#{@battler}/#{i}")
file.each do |line|
mass = line.split
mass.each do |word|
if word.match(/.*\*.*[А-Яа-я.,]$/)
word = word.delete '.' ',' '?»' '&quot' '!' ';'
def first_check
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please fix all reek smells.

1.upto(dir_count) do |text|
File.new("./rap-battles/#{@battler}/#{text}").each do |line|
line.split.each do |word|
if word =~ /.*\*.*[А-Яа-я.,]$/
word = word.delete '.', ',', '?»', '&quot', '!', ';'
@obscenity << word
end
end
rus_obs = RussianObscenity.find(line)
rus_obs.each do |word|
@mistakes.each do |mis|
if mis.casecmp(word)
rus_obs.delete(word)
end
end
end
end
end

# This method smells of :reek:NestedIterators
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

def check_rus_obs
1.upto(dir_count) do |text|
File.new("./rap-battles/#{@battler}/#{text}").each do |line|
RussianObscenity.find(line).each do |word|
@mistakes.each { |mis| @obscenity << word unless mis.casecmp(word) }
end
rus_obs.each { |word| @obscenity << word }
end
end
end

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Layout/TrailingBlankLines: 1 trailing blank lines detected.

def check_battles_for_obscenity
initialize_mistakes
first_check
check_rus_obs
end
end
# rubocop:enable Metrics/MethodLength
# rubocop:enable Metrics/AbcSize
# rubocop:enable Style/IfUnlessModifier
# rubocop:enable Lint/ImplicitStringConcatenation
# rubocop:enable Performance/RedundantMatch
53 changes: 25 additions & 28 deletions 2355/2/main.rb
Original file line number Diff line number Diff line change
@@ -3,53 +3,55 @@
require 'optparse'
require 'terminal-table'

# rubocop:disable Lint/UnusedBlockArgument
# rubocop:disable Metrics/LineLength
# rubocop:disable Metrics/BlockLength
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# rubocop:disable Style/UnneededInterpolation
# rubocop:disable Style/ConditionalAssignment
# rubocop:disable Layout/TrailingWhitespace
# This disable is needed because this block is the main logic of the program.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment means that you just wanted to pass, but not to solve it. Please look through all videos about OOP we had. You should change 'the main logic of the program'

OptionParser.new do |opts|
opts.on('--top-bad-words=') do |bad|
if !bad.empty?
bad_words = bad.to_i
else
bad_words = 1
end
bad_words = if !bad.empty?
bad.to_i
else
1
end
top = TopBad.new
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it doesn't look like OOP. you've just moved all methods to class and calling them.

top.set_battlers_names
top.set_top_obscenity
top_bad_words = top.top_obscenity.sort_by { |key, val| val }
top_bad_words = top.top_obscenity.sort_by { |_key, val| val }
top_bad_words = top_bad_words.reverse
table = Terminal::Table.new do |t|
(bad_words - 1).times do |i|
t << ["#{top_bad_words[i][0]}", "#{top_bad_words[i][1]}" + ' нецензурных слов(а)', "#{top.average_bad_words_in_battle("#{top_bad_words[i][0]}")}" + ' слов(а) на баттл', "#{top.average_words_in_round("#{top_bad_words[i][0]}")}" + ' слов(а) в раунде']
t << [top_bad_words[i][0],
top_bad_words[i][1].to_s + ' нецензурных слов(а)',
top.average_bad_words_in_battle(top_bad_words[i][0]).to_s + ' слов(а) на баттл',
top.average_words_in_round(top_bad_words[i][0]).to_s + ' слов(а) в раунде']
t << :separator
end
i = bad_words - 1
t << ["#{top_bad_words[i][0]}", "#{top_bad_words[i][1]}" + ' нецензурных слов(а)', "#{top.average_bad_words_in_battle("#{top_bad_words[i][0]}")}" + ' слов(а) на баттл', "#{top.average_words_in_round("#{top_bad_words[i][0]}")}" + ' слов(а) в раунде']
t << [top_bad_words[i][0],
top_bad_words[i][1].to_s + ' нецензурных слов(а)',
top.average_bad_words_in_battle(top_bad_words[i][0]).to_s + ' слов(а) на баттл',
top.average_words_in_round(top_bad_words[i][0]).to_s + ' слов(а) в раунде']
end
puts table
end

opts.on('--top-words=') do |top_w|
if !top_w.empty?
top_words = top_w.to_i
else
top_words = 30
end
top_words = if !top_w.empty?
top_w.to_i
else
30
end
opts.on('--name=') do |b_name|
if b_name.empty?
if b_name.empty?
puts 'Choose your destiny!'
else
name_b = b_name
top = TopBad.new
top.set_battlers_names
if top.battlers.index("#{name_b}").nil?
puts 'Я не знаю рэпера ' + "#{name_b}" + ', но знаю таких: '
top.battlers.each { |battl| puts battl }
if !top.battlers.include?(name_b)
puts 'Я не знаю рэпера ' + name_b + ', но знаю таких: '
top.battlers.each { |battler| puts battler }
else
t_w = TopWord.new("#{name_b}")
t_w = TopWord.new(name_b)
t_w.check_all_words
t_w.top_words_counter
t_w.res(top_words)
@@ -58,9 +60,4 @@
end
end
end.parse!
# rubocop:enable Lint/UnusedBlockArgument
# rubocop:enable Metrics/LineLength
# rubocop:enable Metrics/BlockLength
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# rubocop:enable Style/UnneededInterpolation
# rubocop:enable Style/ConditionalAssignment
# rubocop:enable Layout/TrailingWhitespace
35 changes: 16 additions & 19 deletions 2355/2/top_bad_words.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
require './find_obscenity.rb'

# rubocop:disable Lint/Syntax
# This class is needed for first level of Task 2
# This class smells of :reek:Attribute
class TopBad

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lint/Syntax: class definition in method body

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Syntax: This file has class definition in method body. More info.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lint/Syntax: class definition in method body

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Syntax: This file has class definition in method body. More info.

attr_accessor :battlers, :top_obscenity
attr_reader :battlers, :top_obscenity

def initialize
@battlers = []
@@ -16,33 +14,32 @@ def set_battlers_names
file.each { |line| @battlers << line.delete("\n") }
end

# This method smells of :reek:UtilityFunction
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

def dir_count(battler)
Dir[File.join("./rap-battles/#{battler}/", '**', '*')].count { |file| File.file?(file) }
end

# This method smells of :reek:DuplicateMethodCall
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

def set_top_obscenity
0.upto(battlers.size - 1) do |index
check = FindObscenity.new(@battlers[indexx])
0.upto(battlers.size - 1) do |index|
check = FindObscenity.new(@battlers[index])
check.check_battles_for_obscenity
top_obscenity["#{@battlers[indexx]}"] = check.obscenity.size
top_obscenity[@battlers[index]] = check.obscenity.size
end
end

# This method smells of :reek:DuplicateMethodCall
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# This method smells of :reek:NestedIterators
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# This method smells of :reek:TooManyStatements
# This method smells of :reek:UtilityFunction
def average_words_in_round(battler)
counter = 0
1.upto(Dir[File.join("./rap-battles/#{battler}/", '**', '*')].count { |file| File.file?(file) }) do |indexx|
file = File.new("./rap-battles/#{battler}/#{indexx}")
file.each do |line|
mass = line.split
mass.each { counter += 1 }
def average_words_in_round(battler, counter = 0)
1.upto(dir_count(battler)) do |text|
File.new("./rap-battles/#{battler}/#{text}").each do |line|
line.split.each { counter += 1 }
end
end
counter / ((Dir[File.join("./rap-battles/#{battler}/", '**', '*')].count { |file| File.file?(file) }) * 3)
counter / (dir_count(battler) * 3)
end

def average_bad_words_in_battle(battler)
top_obscenity["#{battler}"] / (Dir[File.join("./rap-battles/#{battler}/", '**', '*')].count { |file| File.file?(file) })
end
top_obscenity[battler] / dir_count(battler)
end
end

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lint/Syntax: unexpected token kEND

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Syntax: This file has unexpected token kEND. More info.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lint/Syntax: unexpected token kEND

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Syntax: This file has unexpected token kEND. More info.

# rubocop:enable Lint/Syntax
59 changes: 17 additions & 42 deletions 2355/2/top_words.rb
Original file line number Diff line number Diff line change
@@ -1,71 +1,46 @@
# rubocop:disable Metrics/AbcSize
# rubocop:disable Metrics/MethodLength
# rubocop:disable Style/UnneededInterpolation
# rubocop:disable Style/IfUnlessModifier
# rubocop:disable Style/NegatedWhile
# rubocop:disable Lint/UnusedBlockArgument
# rubocop:disable Lint/ImplicitStringConcatenation
# This class is needed to find most popular words from text files
# This class smells of :reek:Attribute
class TopWord
attr_accessor :battler
attr_reader :battler

def initialize(battler)
@battler = battler
@words = []
@top_words = {}
end

def dir_count
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you have code duplication between two classes.

Dir[File.join("./rap-battles/#{@battler}/", '**', '*')].count { |file| File.file?(file) }
end

# This method smells of :reek:NestedIterators
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# This method smells of :reek:TooManyStatements
# This method smells of :reek:UncommunicativeVariableName
def check_all_words
1.upto(Dir[File.join("./rap-battles/#{@battler}/", '**', '*')].count { |file| File.file?(file) }) do |i|
file = File.new("./rap-battles/#{@battler}/#{i}")
file.each do |line|
mass = line.split
mass.each do |word|
word = word.delete '.' ',' '?»' '&quot' '!' ';'
1.upto(dir_count) do |text|
File.new("./rap-battles/#{@battler}/#{text}").each do |line|
line.split.each do |word|
word = word.delete '.', ',', '?»', '&quot', '!', ';'
@words << word
end
end
end
end

# This method smells of :reek:DuplicateMethodCall
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# This method smells of :reek:NilCheck
# This method smells of :reek:TooManyStatements
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

def top_words_counter
mistakes = []
file = File.new('./pretexts')
file.each { |line| mistakes << line.delete("\n") }
while !@words.empty?
pretexts = []
File.new('./pretexts').each { |line| pretexts << line.delete("\n") }
while @words.any?
counter = 0
@words.each do |word|
if word == @words[0] && mistakes.index(word).nil?
counter += 1
end
end
@top_words["#{@words[0]}"] = counter
@words.delete("#{@words[0]}")
@words.each { |word| counter += 1 if word == @words[0] && !pretexts.include?(word) }
@top_words[@words[0]] = counter
@words.delete(@words[0])
end
end

# This method smells of :reek:DuplicateMethodCall
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wtf?

# This method smells of :reek:TooManyStatements
# This method smells of :reek:UncommunicativeVariableName
def res(value)
res = []
@top_words = @top_words.sort_by { |key, val| val }
@top_words = @top_words.sort_by { |_key, val| val }
@top_words = @top_words.reverse
0.upto(value - 1) { |i| res << @top_words[i] }
res.size.times { |i| puts "#{res[i][0]}" + ' - ' + "#{res[i][1]}" + ' раз(а)' }
0.upto(value - 1) { |index| puts @top_words[index][0] + ' - ' + @top_words[index][1].to_s + ' раз(а)' }
end
end
# rubocop:enable Metrics/AbcSize
# rubocop:enable Metrics/MethodLength
# rubocop:enable Style/UnneededInterpolation
# rubocop:enable Style/IfUnlessModifier
# rubocop:enable Style/NegatedWhile
# rubocop:enable Lint/UnusedBlockArgument
# rubocop:enable Lint/ImplicitStringConcatenation