diff --git a/app/admin/post.rb b/app/admin/post.rb index 77abe8d..57f5b65 100644 --- a/app/admin/post.rb +++ b/app/admin/post.rb @@ -3,7 +3,7 @@ ActiveAdmin.register Post do # See permitted parameters documentation: # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters # - permit_params :blocked, :processed, :good_format, :type + permit_params :blocked, :processed, :good_format, :type, :css_selector, :type, :url # # or # diff --git a/app/models/article.rb b/app/models/article.rb index 7f0601d..86440aa 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -1,4 +1,14 @@ class Article < Post + before_update :update_content + + private + + def update_content + if self.changed? && self.css_selector_changed? + PostContentWorker.perform_async self.id, self.url, self.css_selector + end + end + end diff --git a/app/workers/post_content_worker.rb b/app/workers/post_content_worker.rb new file mode 100644 index 0000000..17bd465 --- /dev/null +++ b/app/workers/post_content_worker.rb @@ -0,0 +1,15 @@ +class PostContentWorker + include Sidekiq::Worker + + sidekiq_options queue: :post, retry: 3 + + def perform id, url, css_selector + post = Post.find id + page = Nokogiri::HTML RestClient.get(url) + content_html = page.css(css_selector)[0].try(:to_html) + post.title = page.css("title").text if post.title.nil? + post.content = content_html + post.good_format = true if post.type != 'WebPage' + post.save! + end +end \ No newline at end of file diff --git a/db/migrate/20151125153022_add_css_slector_to_article.rb b/db/migrate/20151125153022_add_css_slector_to_article.rb new file mode 100644 index 0000000..9b1853a --- /dev/null +++ b/db/migrate/20151125153022_add_css_slector_to_article.rb @@ -0,0 +1,5 @@ +class AddCssSlectorToArticle < ActiveRecord::Migration + def change + add_column :posts, :css_selector, :string, default: nil + end +end diff --git a/db/schema.rb b/db/schema.rb index 2d1fbf3..37acbe9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20151125145909) do +ActiveRecord::Schema.define(version: 20151125153022) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -146,6 +146,7 @@ ActiveRecord::Schema.define(version: 20151125145909) do t.integer "bookmarks_count", default: 0 t.datetime "deleted_at" t.boolean "blocked", default: false + t.string "css_selector" end add_index "posts", ["deleted_at"], name: "index_posts_on_deleted_at", using: :btree