У меня есть метод, который принимает условие и элемент из массива условий и массива элементов, где любое количество условий проверяется на любое количество элементов. Условия и элементы - это хэши. В принципе, для условия и элемента, поданного методу, выясните, какой атрибут элемента необходимо проверить. Список на самом деле длиннее и, глядя на то, чтобы сделать это лучше (кажется, что это может быть более кратким и, возможно, более рубиновым), ничего больше не работало (пока), поэтому я хотел бы внести свой вклад в то, как вы могли бы реорганизовать это:Репликатор case case, basic ruby
def check_condition(condition, item)
case condition.attribute
when :author
i = item.author.name;
when :title
i = item.title
when :body
i = item.body
when :domain
i = URI(item.url).host
when :account_age
i = item.author.author_age
end
@logger.info "#{i} to be checked if #{condition.query} #{condition.attribute}"
test_condition(condition, item, i)
end
EDIT:
Просто, чтобы сделать более ясным, пункты и условия Хэши (Hashie :: Mash, чтобы быть точным), где условия в целом, построенные из конфигурационного файла, который может быть что-то вроде:
[submitted_link, account_age, is_less_than, 30, remove]
что-то вроде:
{subject: submitted_link, attribute: account_age, query: is_less_than, what: 30 action:remove}
И вы можете увидеть, что происходит в целом здесь, если вы так склонны: https://github.com/blueblank/reddit_modbot/blob/master/lib/modbot/modbot_check.rb
EDIT2:
Действительность решения было несколько легализовать мою переменную терминологию для условия и пункт таким образом это может быть уменьшено до 1 линии
i = item.send(condition.attribute)
не бардак, минимальное воздействие