diff --git a/Gemfile b/Gemfile
index 76753b3..88b198c 100644
--- a/Gemfile
+++ b/Gemfile
@@ -32,10 +32,6 @@ gem "oauth"
# for parsing incoming mail
gem "mail"
-# for planet rss aggregation
-gem "feed-normalizer"
-gem "loofah"
-
group :test, :development do
gem "rspec-rails", "~> 2.6"
gem "machinist"
diff --git a/Gemfile.lock b/Gemfile.lock
index d4c693b..bb49e40 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -39,11 +39,7 @@ GEM
execjs (2.2.1)
faker (1.4.2)
i18n (~> 0.5)
- feed-normalizer (1.5.2)
- hpricot (>= 0.6)
- simple-rss (>= 1.1)
hike (1.2.3)
- hpricot (0.8.6)
htmlentities (4.3.2)
i18n (0.6.11)
innertube (1.1.0)
@@ -52,8 +48,6 @@ GEM
thor (>= 0.14, < 2.0)
json (1.8.1)
kgio (2.9.2)
- loofah (2.0.0)
- nokogiri (>= 1.5.9)
machinist (2.0)
mail (2.5.4)
mime-types (~> 1.16)
@@ -103,7 +97,6 @@ GEM
rspec-core (~> 2.99.0)
rspec-expectations (~> 2.99.0)
rspec-mocks (~> 2.99.0)
- simple-rss (1.3.1)
sprockets (2.12.1)
hike (~> 1.2)
multi_json (~> 1.0)
@@ -143,10 +136,8 @@ DEPENDENCIES
dynamic_form
exception_notification
faker
- feed-normalizer
htmlentities
jquery-rails
- loofah
machinist
mail
mysql2 (>= 0.3.14)
diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css
index 9860960..f440608 100644
--- a/app/assets/stylesheets/application.css
+++ b/app/assets/stylesheets/application.css
@@ -494,10 +494,6 @@ li .domain {
font-size: 8.5pt;
vertical-align: middle;
}
-li .domain a {
- color: #888;
- text-decoration: none;
-}
.merge {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAD8GlDQ1BJQ0MgUHJvZmlsZQAAOMuNVd1v21QUP4lvXKQWP6Cxjg4Vi69VU1u5GxqtxgZJk6XpQhq5zdgqpMl1bhpT1za2021Vn/YCbwz4A4CyBx6QeEIaDMT2su0BtElTQRXVJKQ9dNpAaJP2gqpwrq9Tu13GuJGvfznndz7v0TVAx1ea45hJGWDe8l01n5GPn5iWO1YhCc9BJ/RAp6Z7TrpcLgIuxoVH1sNfIcHeNwfa6/9zdVappwMknkJsVz19HvFpgJSpO64PIN5G+fAp30Hc8TziHS4miFhheJbjLMMzHB8POFPqKGKWi6TXtSriJcT9MzH5bAzzHIK1I08t6hq6zHpRdu2aYdJYuk9Q/881bzZa8Xrx6fLmJo/iu4/VXnfH1BB/rmu5ScQvI77m+BkmfxXxvcZcJY14L0DymZp7pML5yTcW61PvIN6JuGr4halQvmjNlCa4bXJ5zj6qhpxrujeKPYMXEd+q00KR5yNAlWZzrF+Ie+uNsdC/MO4tTOZafhbroyXuR3Df08bLiHsQf+ja6gTPWVimZl7l/oUrjl8OcxDWLbNU5D6JRL2gxkDu16fGuC054OMhclsyXTOOFEL+kmMGs4i5kfNuQ62EnBuam8tzP+Q+tSqhz9SuqpZlvR1EfBiOJTSgYMMM7jpYsAEyqJCHDL4dcFFTAwNMlFDUUpQYiadhDmXteeWAw3HEmA2s15k1RmnP4RHuhBybdBOF7MfnICmSQ2SYjIBM3iRvkcMki9IRcnDTthyLz2Ld2fTzPjTQK+Mdg8y5nkZfFO+se9LQr3/09xZr+5GcaSufeAfAww60mAPx+q8u/bAr8rFCLrx7s+vqEkw8qb+p26n11Aruq6m1iJH6PbWGv1VIY25mkNE8PkaQhxfLIF7DZXx80HD/A3l2jLclYs061xNpWCfoB6WHJTjbH0mV35Q/lRXlC+W8cndbl9t2SfhU+Fb4UfhO+F74GWThknBZ+Em4InwjXIyd1ePnY/Psg3pb1TJNu15TMKWMtFt6ScpKL0ivSMXIn9QtDUlj0h7U7N48t3i8eC0GnMC91dX2sTivgloDTgUVeEGHLTizbf5Da9JLhkhh29QOs1luMcScmBXTIIt7xRFxSBxnuJWfuAd1I7jntkyd/pgKaIwVr3MgmDo2q8x6IdB5QH162mcX7ajtnHGN2bov71OU1+U0fqqoXLD0wX5ZM005UHmySz3qLtDqILDvIL+iH6jB9y2x83ok898GOPQX3lk3Itl0A+BrD6D7tUjWh3fis58BXDigN9yF8M5PJH4B8Gr79/F/XRm8m241mw/wvur4BGDj42bzn+Vmc+NL9L8GcMn8F1kAcXi1s/XUAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsSAAALEgHS3X78AAAAB3RJTUUH3gQIECAcSXeCTQAAAdhJREFUKM9dkDFoE1Ecxr/vvbvkBiEgFaSDg6uDBBJvEl2kOBaEIrgEAle4xxUKFnGR4mCCLiFZ3MVCBzOIdHBx6CIhgoNKQESsS7GKLVbv8u69v4NNof7Gb/h9fB9FBIPBIAHQwT/uGGMe4z9IkoPB4KKIbAM4BQACOSR4yRjzvtfrtUXkrFJqK8uyMfv9/pUwDF/leS4AWK1WUZbl1bIsL4dheF8phaIoPgFYUmEYvrPWvgyCgGEYoizL5yR3RMR471EUxZ8ois5TeF0lSbLnnLvpvf/ivf86nU5vzc/Pfya5SxIiEllrIZQd1e129crKyncA30jurq6uHiwuLnqSaVmWH0jCe/+oVqttqPF47GaLvfcAgCPBttb6dRAEh1EU3Wu1WoXa3NxEu90+vihJEgA4kc1Q3W5XO3csh7X2RMuM9fV1BJPJxDWbzdPOuTMAEMfx3Gg02ms0GnXn3BKAF8vLy79FBEEcx3PT6fSp1vrckflJvV5/5r2/S1IAPBARDIdDFVhrL1QqlWt5ngOAVCqVBRFZEJGPJG+kafqGJEXEK5I/rbW/tNbQWtM5t++cW1NKxcaYLZIEICShjDFvSd4GsA/ggORalmUP0zT90el0NACZjfwLrcfo3fIgR6gAAAAASUVORK5CYII=) no-repeat;
@@ -1122,10 +1118,3 @@ div.fieldWithErrors {
font-style: italic;
padding-left: 0.5em;
}
-
-
-
-div.weblog_content {
- padding: 0 2em;
- overflow-x: auto;
-}
diff --git a/app/controllers/settings_controller.rb b/app/controllers/settings_controller.rb
index 7cbaed8..1804026 100644
--- a/app/controllers/settings_controller.rb
+++ b/app/controllers/settings_controller.rb
@@ -38,7 +38,7 @@ private
:email_replies, :email_messages, :email_mentions,
:pushover_replies, :pushover_messages, :pushover_mentions,
:pushover_user_key, :pushover_device, :pushover_sound,
- :mailing_list_mode, :weblog_feed_url
+ :mailing_list_mode
)
end
end
diff --git a/app/controllers/weblogs_controller.rb b/app/controllers/weblogs_controller.rb
deleted file mode 100644
index 8345690..0000000
--- a/app/controllers/weblogs_controller.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-class WeblogsController < ApplicationController
- before_filter { @page = page }
-
- WEBLOGS_PER_PAGE = 10
-
- def index
- @pages = (Weblog.count / WEBLOGS_PER_PAGE.to_f).ceil
- if @page > @pages
- @page = @pages
- end
- @show_more = @page < @pages
-
- @weblogs = Weblog.order("created_at DESC").
- offset((@page - 1) * WEBLOGS_PER_PAGE).
- limit(WEBLOGS_PER_PAGE)
-
- render :action => "index"
- end
-
-private
- def page
- params[:page].to_i > 0 ? params[:page].to_i : 1
- end
-end
diff --git a/app/models/user.rb b/app/models/user.rb
index 81e8caa..876528c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -19,7 +19,6 @@ class User < ActiveRecord::Base
belongs_to :banned_by_user,
:class_name => "User"
has_many :invitations
- has_many :weblogs
has_many :votes
has_many :voted_stories, -> { where('votes.comment_id' => nil) },
:through => :votes,
@@ -40,10 +39,6 @@ class User < ActiveRecord::Base
:format => { :with => /\A[A-Za-z0-9][A-Za-z0-9_-]{0,24}\Z/ },
:uniqueness => { :case_sensitive => false }
- validates :weblog_feed_url,
- :format => { :with => /\Ahttps?:\/\/([^\.]+\.)+[a-z]+(\/|\z)/ },
- :allow_blank => true
-
validates_each :username do |record,attr,value|
if BANNED_USERNAMES.include?(value.to_s.downcase)
record.errors.add(attr, "is not permitted")
diff --git a/app/models/weblog.rb b/app/models/weblog.rb
deleted file mode 100644
index 7bca796..0000000
--- a/app/models/weblog.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-class Weblog < ActiveRecord::Base
- belongs_to :user
-
- serialize :tags, Array
-
- def sanitized_content
- Loofah.fragment(self.content).scrub!(:strip).scrub!(:nofollow).to_s.html_safe
- end
-end
diff --git a/app/views/layouts/weblogs.html.erb b/app/views/layouts/weblogs.html.erb
deleted file mode 100644
index 75da804..0000000
--- a/app/views/layouts/weblogs.html.erb
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
- <% if @short_url %>
-
- <% end %>
- <%= @title.present? ? "#{@title} | " : "" %>Planet <%=
- Rails.application.name %>
- <%= stylesheet_link_tag "application", :media => "all" %>
- <% if @user %>
- <%= javascript_include_tag "application" %>
-
- <% end %>
- <%= csrf_meta_tags %>
-
-
-
-
-
-
- <% if flash[:error] %>
-
<%= flash[:error] %>
- <% elsif flash[:success] %>
-
<%= flash[:success] %>
- <% end %>
-
- <%= yield %>
-
-
-
-
-
-
-
diff --git a/app/views/settings/index.html.erb b/app/views/settings/index.html.erb
index b3b7578..e3b12fa 100644
--- a/app/views/settings/index.html.erb
+++ b/app/views/settings/index.html.erb
@@ -65,18 +65,6 @@
-
- <%= f.label :weblog_feed_url, "Weblog Feed URL:",
- :class => "required" %>
- <%= f.text_field :weblog_feed_url, :placeholder => "optional",
- :size => 40 %>
-
- For RSS/Atom feed aggregation; restrict to a technical feed if possible
-
-
-
-
-
<%= f.label :about, "About:", :class => "required" %>
<%= f.text_area :about, :size => "100x5", :style => "width: 600px;" %>
diff --git a/app/views/weblogs/index.html.erb b/app/views/weblogs/index.html.erb
deleted file mode 100644
index 5a1968d..0000000
--- a/app/views/weblogs/index.html.erb
+++ /dev/null
@@ -1,44 +0,0 @@
-
-<% @weblogs.each do |weblog| %>
- -
-
-
- <%= weblog.sanitized_content %>
-
-
-<% end %>
-
-
-
diff --git a/config/routes.rb b/config/routes.rb
index 3f72ff3..195207b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,128 +1,117 @@
Lobsters::Application.routes.draw do
- constraints(:subdomain => "planet") do
- root :to => "weblogs#index",
- :subdomain => "planet",
- :as => "weblogs_root",
- :protocol => (Rails.env == "production" ? "https://" : "http://")
+ scope :format => "html" do
+ root :to => "home#index",
+ :protocol => (Rails.env == "production" ? "https://" : "http://"),
+ :as => "root"
- get "/page/:page" => "weblogs#index"
- end
+ get "/rss" => "home#index", :format => "rss"
+ get "/hottest" => "home#index", :format => "json"
- constraints do
- scope :format => "html" do
- root :to => "home#index",
- :protocol => (Rails.env == "production" ? "https://" : "http://"),
- :as => "root"
+ get "/page/:page" => "home#index"
- get "/rss" => "home#index", :format => "rss"
- get "/hottest" => "home#index", :format => "json"
+ get "/newest" => "home#newest", :format => /html|json|rss/
+ get "/newest/page/:page" => "home#newest"
+ get "/newest/:user" => "home#newest_by_user"
+ get "/newest/:user/page/:page" => "home#newest_by_user"
+ get "/recent" => "home#recent"
+ get "/recent/page/:page" => "home#recent"
+ get "/hidden" => "home#hidden"
+ get "/hidden/page/:page" => "home#hidden"
- get "/page/:page" => "home#index"
+ get "/upvoted(.format)" => "home#upvoted"
+ get "/upvoted/page/:page" => "home#upvoted"
- get "/newest" => "home#newest", :format => /html|json|rss/
- get "/newest/page/:page" => "home#newest"
- get "/newest/:user" => "home#newest_by_user"
- get "/newest/:user/page/:page" => "home#newest_by_user"
- get "/recent" => "home#recent"
- get "/recent/page/:page" => "home#recent"
- get "/hidden" => "home#hidden"
- get "/hidden/page/:page" => "home#hidden"
+ get "/top" => "home#top"
+ get "/top/page/:page" => "home#top"
+ get "/top/:length" => "home#top"
+ get "/top/:length/page/:page" => "home#top"
- get "/upvoted(.format)" => "home#upvoted"
- get "/upvoted/page/:page" => "home#upvoted"
+ get "/threads" => "comments#threads"
+ get "/threads/:user" => "comments#threads"
- get "/top" => "home#top"
- get "/top/page/:page" => "home#top"
- get "/top/:length" => "home#top"
- get "/top/:length/page/:page" => "home#top"
+ get "/login" => "login#index"
+ post "/login" => "login#login"
+ post "/logout" => "login#logout"
- get "/threads" => "comments#threads"
- get "/threads/:user" => "comments#threads"
+ get "/signup" => "signup#index"
+ post "/signup" => "signup#signup"
+ get "/signup/invite" => "signup#invite"
- get "/login" => "login#index"
- post "/login" => "login#login"
- post "/logout" => "login#logout"
+ get "/login/forgot_password" => "login#forgot_password",
+ :as => "forgot_password"
+ post "/login/reset_password" => "login#reset_password",
+ :as => "reset_password"
+ match "/login/set_new_password" => "login#set_new_password",
+ :as => "set_new_password", :via => [:get, :post]
- get "/signup" => "signup#index"
- post "/signup" => "signup#signup"
- get "/signup/invite" => "signup#invite"
+ get "/t/:tag" => "home#tagged", :as => "tag", :format => /html|rss/
+ get "/t/:tag/page/:page" => "home#tagged"
- get "/login/forgot_password" => "login#forgot_password",
- :as => "forgot_password"
- post "/login/reset_password" => "login#reset_password",
- :as => "reset_password"
- match "/login/set_new_password" => "login#set_new_password",
- :as => "set_new_password", :via => [:get, :post]
+ get "/search" => "search#index"
- get "/t/:tag" => "home#tagged", :as => "tag", :format => /html|rss/
- get "/t/:tag/page/:page" => "home#tagged"
+ resources :stories do
+ post "upvote"
+ post "downvote"
+ post "unvote"
+ post "undelete"
+ post "hide"
+ post "unhide"
+ end
+ post "/stories/fetch_url_title", :format => "json"
+ post "/stories/preview" => "stories#preview"
- get "/search" => "search#index"
-
- resources :stories do
+ resources :comments do
+ member do
+ get "reply"
post "upvote"
post "downvote"
post "unvote"
+
+ post "delete"
post "undelete"
- post "hide"
- post "unhide"
end
- post "/stories/fetch_url_title", :format => "json"
- post "/stories/preview" => "stories#preview"
-
- resources :comments do
- member do
- get "reply"
- post "upvote"
- post "downvote"
- post "unvote"
-
- post "delete"
- post "undelete"
- end
- end
- get "/comments/page/:page" => "comments#index"
-
- get "/messages/sent" => "messages#sent"
- post "/messages/batch_delete" => "messages#batch_delete",
- :as => "batch_delete_messages"
- resources :messages do
- post "keep_as_new"
- end
-
- get "/s/:id/:title/comments/:comment_short_id" => "stories#show"
- get "/s/:id/(:title)" => "stories#show", :format => /html|json/
-
- get "/u" => "users#tree"
- get "/u/:username" => "users#show", :as => "user"
-
- get "/settings" => "settings#index"
- post "/settings" => "settings#update"
- post "/settings/delete_account" => "settings#delete_account",
- :as => "delete_account"
-
- get "/filters" => "filters#index"
- post "/filters" => "filters#update"
-
- post "/invitations" => "invitations#create"
- get "/invitations" => "invitations#index"
- get "/invitations/request" => "invitations#build"
- post "/invitations/create_by_request" => "invitations#create_by_request",
- :as => "create_invitation_by_request"
- get "/invitations/confirm/:code" => "invitations#confirm_email"
- post "/invitations/send_for_request" => "invitations#send_for_request",
- :as => "send_invitation_for_request"
- get "/invitations/:invitation_code" => "signup#invited"
- post "/invitations/delete_request" => "invitations#delete_request",
- :as => "delete_invitation_request"
-
- get "/moderations" => "moderations#index"
- get "/moderations/page/:page" => "moderations#index"
-
- get "/privacy" => "home#privacy"
- get "/about" => "home#about"
-
- get "/resettraffic" => "home#resettraffic"
end
+ get "/comments/page/:page" => "comments#index"
+
+ get "/messages/sent" => "messages#sent"
+ post "/messages/batch_delete" => "messages#batch_delete",
+ :as => "batch_delete_messages"
+ resources :messages do
+ post "keep_as_new"
+ end
+
+ get "/s/:id/:title/comments/:comment_short_id" => "stories#show"
+ get "/s/:id/(:title)" => "stories#show", :format => /html|json/
+
+ get "/u" => "users#tree"
+ get "/u/:username" => "users#show", :as => "user"
+
+ get "/settings" => "settings#index"
+ post "/settings" => "settings#update"
+ post "/settings/delete_account" => "settings#delete_account",
+ :as => "delete_account"
+
+ get "/filters" => "filters#index"
+ post "/filters" => "filters#update"
+
+ post "/invitations" => "invitations#create"
+ get "/invitations" => "invitations#index"
+ get "/invitations/request" => "invitations#build"
+ post "/invitations/create_by_request" => "invitations#create_by_request",
+ :as => "create_invitation_by_request"
+ get "/invitations/confirm/:code" => "invitations#confirm_email"
+ post "/invitations/send_for_request" => "invitations#send_for_request",
+ :as => "send_invitation_for_request"
+ get "/invitations/:invitation_code" => "signup#invited"
+ post "/invitations/delete_request" => "invitations#delete_request",
+ :as => "delete_invitation_request"
+
+ get "/moderations" => "moderations#index"
+ get "/moderations/page/:page" => "moderations#index"
+
+ get "/privacy" => "home#privacy"
+ get "/about" => "home#about"
+
+ get "/resettraffic" => "home#resettraffic"
end
end
diff --git a/db/migrate/20140901013149_drop_weblogs.rb b/db/migrate/20140901013149_drop_weblogs.rb
new file mode 100644
index 0000000..01fdc04
--- /dev/null
+++ b/db/migrate/20140901013149_drop_weblogs.rb
@@ -0,0 +1,6 @@
+class DropWeblogs < ActiveRecord::Migration
+ def change
+ drop_table :weblogs
+ remove_column :users, :weblog_feed_url
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 54bccea..d6fa1ec 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: 20140825225915) do
+ActiveRecord::Schema.define(version: 20140901013149) do
create_table "comments", force: true do |t|
t.datetime "created_at", null: false
@@ -168,7 +168,6 @@ ActiveRecord::Schema.define(version: 20140825225915) do
t.string "banned_reason", limit: 200
t.datetime "deleted_at"
t.string "pushover_sound"
- t.string "weblog_feed_url"
end
add_index "users", ["mailing_list_mode"], name: "mailing_list_enabled", using: :btree
@@ -189,19 +188,4 @@ ActiveRecord::Schema.define(version: 20140825225915) do
add_index "votes", ["user_id", "comment_id"], name: "user_id_comment_id", using: :btree
add_index "votes", ["user_id", "story_id"], name: "user_id_story_id", using: :btree
- create_table "weblogs", force: true do |t|
- t.datetime "created_at"
- t.datetime "updated_at"
- t.integer "user_id"
- t.string "title", limit: 512
- t.string "url", limit: 512
- t.string "site_title", limit: 512
- t.string "site_url", limit: 512
- t.text "content", limit: 16777215
- t.text "tags"
- t.string "uuid", limit: 200
- end
-
- add_index "weblogs", ["user_id", "uuid"], name: "user_and_uuid", unique: true, using: :btree
-
end
diff --git a/script/update_weblogs b/script/update_weblogs
deleted file mode 100755
index b2e1cf8..0000000
--- a/script/update_weblogs
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env ruby
-
-ENV["RAILS_ENV"] ||= "production"
-
-APP_PATH = File.expand_path('../../config/application', __FILE__)
-require File.expand_path('../../config/boot', __FILE__)
-require APP_PATH
-Rails.application.require_environment!
-
-require "feed-normalizer"
-
-User.where("weblog_feed_url <> ''").each do |u|
- begin
- s = Sponge.new
- data = s.fetch(u.weblog_feed_url, :get, nil, nil, {
- "User-Agent" => "Mozilla/5.0 (compatible; Planet Lobsters; " <<
- "https://#{Rails.application.domain}/)" })
- if !data
- raise "no data returned"
- end
-
- feed = FeedNormalizer::FeedNormalizer.parse(data)
- if !feed
- raise "could not parse feed"
- end
- rescue => e
- puts "error updating user #{u.id} from #{u.weblog_feed_url}: #{e}"
- # TODO: send the user a private message on failure, probably limit to every
- # x tries/days
- next
- end
-
- feed.entries.each do |e|
- w = u.weblogs.where(:uuid => e.id).first
- if !w
- w = u.weblogs.build(:uuid => e.id)
- end
-
- # prevent entries with bogus or future times from dominating the front page
- if e.last_updated > Time.now
- puts "skipping future entry #{e.id} with time #{e.last_updated}"
- next
- end
-
- # TODO: compare these manually, AR seems to always mark them dirty even if
- # the content is the same
- w.created_at = e.last_updated
- w.url = e.url
- w.title = e.title
- w.content = e.content
- w.tags = e.categories
-
- w.site_url = feed.url
- w.site_title = feed.title
-
- w.save
- end
-end