initial commit
This commit is contained in:
0
whatforlunch.com/app/models/.keep
Normal file
0
whatforlunch.com/app/models/.keep
Normal file
0
whatforlunch.com/app/models/concerns/.keep
Normal file
0
whatforlunch.com/app/models/concerns/.keep
Normal file
72
whatforlunch.com/app/models/recipe.rb
Normal file
72
whatforlunch.com/app/models/recipe.rb
Normal file
@@ -0,0 +1,72 @@
|
||||
# encoding: utf-8
|
||||
|
||||
class Recipe < ActiveRecord::Base
|
||||
before_create :setup_ordinal
|
||||
|
||||
def scrape!
|
||||
scrape_document Nokogiri::HTML(open(self.original_url))
|
||||
end
|
||||
|
||||
def scrape_document(doc)
|
||||
r = self
|
||||
r.name = doc.css('h1')[0].text.to_s.strip
|
||||
r.duration = doc.xpath('//*[@id="recipe_preparation"]/div[1]/dl/dd[1]/text()').text.to_s.strip
|
||||
r.process = doc.css(".recipe_step_description").map { |el| el.text.to_s.strip }.join("\n")
|
||||
|
||||
r.ingredients = doc.xpath('//*[@id="recipe_ingredients"]/ul/li').map { |x|
|
||||
if x.css('span').length == 2
|
||||
x.css('span')[0].text.strip + " | " + x.css('span')[1].text.strip
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
||||
}.compact.join("\n")
|
||||
end
|
||||
|
||||
def search_url
|
||||
name = URI::escape(self.name)
|
||||
return "https://www.google.com/search?q=#{name}&source=lnms&tbm=isch&sa=X"
|
||||
end
|
||||
|
||||
def ingredients_fit?
|
||||
ing = self.ingredients.to_s.split("\n")
|
||||
return false if ing.length < 1
|
||||
return false if ing.length > 20
|
||||
return false unless ing.select { |x| x.length > 22 }.empty?
|
||||
true
|
||||
end
|
||||
|
||||
def process_fits?
|
||||
pro = self.process.to_s
|
||||
return false if pro.length < 1
|
||||
return false if pro.length > 15 * 44
|
||||
true
|
||||
end
|
||||
|
||||
def picture_ok?
|
||||
!picture_url.to_s.include?("coolinarika") and picture_url.to_s.length > 0
|
||||
end
|
||||
|
||||
def is_it_valid?
|
||||
ingredients_fit? and process_fits? and name.to_s.length <= 14 and duration.to_s.length <= 10 and picture_ok?
|
||||
end
|
||||
|
||||
def ordinal_date
|
||||
Date.ordinal(2014,self.ordinal)
|
||||
end
|
||||
|
||||
def ingredients_safe
|
||||
unless self.ingredients.nil?
|
||||
ingred = self.ingredients.gsub("\r\n", "/").gsub("|"," ").gsub("/", "\n")
|
||||
return ingred
|
||||
end
|
||||
|
||||
""
|
||||
end
|
||||
|
||||
private
|
||||
def setup_ordinal
|
||||
self.ordinal = Recipe.all.length + 1
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user