У меня следующий код создает класс Parser
, который имеет множество методов parse_something
. Затем, наконец, они объединяются в методе parse
:Как использовать Class_name.method вместо Class_name.new.method?
class Parser
def parse(html)
@data = Nokogiri.HTML(open(html))
merged_hashes = {}
array_of_hashes = [
parse_department,
parse_super_saver,
parse_new_arrivals,
parse_out_of_stock,
parse_categories,
parse_results
]
array_of_hashes.inject(merged_hashes,:update)
return merged_hashes
end
def parse_department
department = @data.css('#ref_2619534011')
@department_hash = {}
department.css('li').drop(1).each do | department |
department_title = department.css('.refinementLink').text
department_count = department.css('.narrowValue').text[/[\d,]+/].delete(",").to_i
@department_hash[:department] ||= {}
@department_hash[:department]["Pet Supplies"] ||= {}
@department_hash[:department]["Pet Supplies"][department_title] = department_count
end
return @department_hash
end
def parse_super_saver
(и т.д ...)
Так прямо сейчас, я использую это так:
def html_pet_supplies
File.open("amazon_pet_supplies.html")
end
Parser.new.parse html_pet_supplies
Но я хотел бы чтобы использовать его как это вместо: Parser.parse html_pet_supplies
Я попытался удалить new
но я получил эту ошибку:
NoMethodError: undefined method `parse' for Parser:Class
Что такое самый простой способ изменения кода, так что я просто делаю Parser.parse
?
Я добавил 'self.' перед всеми другими методами и работал. Это тоже вариант, не так ли? – alexchenco
Конечно, хотя писать тесты, например, обычно проще (вы пишете тесты, не так ли?). – Stefan
Да, я ничего не менял в тестах. Они все равно прошли. – alexchenco