-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
51 changed files
with
1,012 additions
and
244 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,3 +13,4 @@ | |
# Ignore all logfiles and tempfiles. | ||
/log/*.log | ||
/tmp | ||
.rvmrc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
$(document).ready(function() { | ||
$("#feed_item_kind").change(function(e) { | ||
$("input[data-enable-on]").each(function() { | ||
$(this).attr('disabled', 'disabled'); | ||
}); | ||
|
||
$("input[data-enable-on="+$(e.target).val()+"]").removeAttr('disabled'); | ||
}); | ||
|
||
var enable = $("#feed_item_kind").val(); | ||
$("input[data-enable-on="+enable+"]").removeAttr('disabled'); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,12 @@ | ||
class ApplicationController < ActionController::Base | ||
protect_from_forgery | ||
|
||
before_filter :require_login | ||
|
||
protected | ||
|
||
def not_authenticated | ||
redirect_to root_path, :alert => "Please login first." | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
class FeedItemsController < ApplicationController | ||
before_filter :require_login, :except => [:index] | ||
|
||
def new | ||
@feed_item = FeedItem.new | ||
|
||
respond_to do |format| | ||
format.html | ||
format.json { render json: @feed_item } | ||
end | ||
end | ||
|
||
def edit | ||
@feed_item = current_user.feed.feed_items.find(params[:id]) | ||
end | ||
|
||
def create | ||
kind = params[:feed_item].delete(:kind) | ||
@feed_item = current_user.feed.feed_item_of(kind).new(params[:feed_item]) | ||
|
||
respond_to do |format| | ||
if @feed_item.save | ||
format.html { redirect_to current_user.feed, notice: 'Feed item was successfully created.' } | ||
format.json { render json: @feed_item, status: :created, location: @feed_item } | ||
else | ||
format.html { render action: "new" } | ||
format.json { render json: @feed_item.errors, status: :unprocessable_entity } | ||
end | ||
end | ||
end | ||
|
||
def update | ||
@feed_item = current_user.feed.feed_items.find(params[:id]) | ||
|
||
respond_to do |format| | ||
if @feed_item.update_attributes(params[:feed_item]) | ||
format.html { redirect_to current_user.feed, notice: 'Feed item was successfully updated.' } | ||
format.json { head :no_content } | ||
else | ||
format.html { render action: "edit" } | ||
format.json { render json: @feed_item.errors, status: :unprocessable_entity } | ||
end | ||
end | ||
end | ||
|
||
def destroy | ||
@feed_item = current_user.feed.feed_items.find(params[:id]) | ||
@feed_item.destroy | ||
|
||
respond_to do |format| | ||
format.html { redirect_to root_url } | ||
format.json { head :no_content } | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
class FeedsController < ApplicationController | ||
before_filter :require_login, :except => [:index] | ||
|
||
def index | ||
@feed_items = FeedItem.last_first | ||
|
||
respond_to do |format| | ||
format.html { render action: :show } | ||
format.json { render json: @feed_items } | ||
end | ||
end | ||
|
||
def show | ||
@feed_items = Feed.find_by_name!(params[:id]).feed_items.last_first | ||
|
||
respond_to do |format| | ||
format.html | ||
format.json { render json: @feed } | ||
end | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
class SessionsController < ApplicationController | ||
skip_before_filter :require_login, :except => [:destroy] | ||
|
||
def new | ||
@user = User.new | ||
end | ||
|
||
def create | ||
respond_to do |format| | ||
if @user = login(params[:username], params[:password]) | ||
format.html { redirect_back_or_to(:feed_items, :notice => 'Login successful.') } | ||
else | ||
format.html { flash.now[:alert] = "Login failed."; render :action => "new" } | ||
end | ||
end | ||
end | ||
|
||
def destroy | ||
logout | ||
redirect_to(:feed_items, :notice => 'Logged out!') | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
class UsersController < ApplicationController | ||
skip_before_filter :require_login, :only => [:new, :create] | ||
|
||
def new | ||
@user = User.new | ||
|
||
respond_to do |format| | ||
format.html | ||
end | ||
end | ||
|
||
def create | ||
@user = User.new(params[:user]) | ||
|
||
respond_to do |format| | ||
if @user.save | ||
auto_login(@user) | ||
format.html { redirect_to(login_path, :notice => 'Creation successful.') } | ||
else | ||
format.html { render :action => "new" } | ||
end | ||
end | ||
end | ||
|
||
end | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
module FeedItemsHelper | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
class Feed < ActiveRecord::Base | ||
belongs_to :user, inverse_of: :feed | ||
has_many :feed_items, inverse_of: :feed | ||
has_many :image_items | ||
has_many :text_items | ||
has_many :link_items | ||
|
||
delegate :gravatar, to: :user | ||
|
||
def feed_item_of(kind) | ||
send(kind.tableize.to_sym) | ||
end | ||
|
||
def to_param | ||
name | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
class FeedItem < ActiveRecord::Base | ||
belongs_to :feed, inverse_of: :feed_items | ||
|
||
def self.last_first | ||
order("created_at DESC") | ||
end | ||
|
||
def kind | ||
read_attribute(:type) || "TextItem" | ||
end | ||
|
||
def username | ||
feed.name | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
class ImageItem < FeedItem | ||
attr_accessible :title, :body, :image_url | ||
|
||
validates :image_url, presence: true, format: /^https?:\/\/.+\.(?:jpg|jpeg|gif|png)$/i, length: {maximum: 2048} | ||
validates :body, length: {minumum: 1, maximum: 256} | ||
|
||
def to_partial_path | ||
'feed_items/image_item' | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
class LinkItem < FeedItem | ||
attr_accessible :title, :body, :link_url | ||
|
||
validates :link_url, presence: true, format: /^https?:\/\/.+$/i, length: {maximum: 2048} | ||
validates :body, presence: true, length: {minumum: 1, maximum: 256} | ||
|
||
def to_partial_path | ||
'feed_items/link_item' | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
class TextItem < FeedItem | ||
attr_accessible :body, :title | ||
|
||
validates :body, presence: true, length: {minumum: 1, maximum: 256} | ||
|
||
def to_partial_path | ||
'feed_items/text_item' | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
require 'digest/md5' | ||
|
||
class User < ActiveRecord::Base | ||
has_one :feed, inverse_of: :user | ||
attr_accessible :email, :password, :password_confirmation | ||
authenticates_with_sorcery! | ||
|
||
validates :username, presence: true, format: /^[\d\w]+$/,length: {minimum: 2, message: "password must be at least 2 characters long"} | ||
validates_length_of :password, :minimum => 6, :message => "password must be at least 6 characters long", :if => :password | ||
validates_confirmation_of :password, :message => "should match confirmation", :if => :password | ||
|
||
before_validation :clean_email | ||
before_create :setup_feed | ||
|
||
def created?(item) | ||
item.feed == feed | ||
end | ||
|
||
def gravatar(s='40') | ||
@gravatar ||= {} | ||
@gravatar[s] ||= "http://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email)}?s=#{s}" | ||
end | ||
|
||
private | ||
|
||
def setup_feed | ||
build_feed | ||
feed.name = username | ||
end | ||
|
||
def clean_email | ||
if email.respond_to? :trim | ||
email.trim!.downcase! | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
.well | ||
- form_url = @feed_item.new_record? ? feed_items_path : feed_item_path(@feed_item) | ||
= simple_form_for(@feed_item, as: :feed_item, url: form_url, html: {class: "form-horizontal"}) do |f| | ||
= f.error_notification | ||
|
||
.form-inputs | ||
= f.input :kind, as: :select, collection: [%w(Text TextItem), %w(Image ImageItem), %w(Link LinkItem)], disabled: !@feed_item.new_record? | ||
= f.input :link_url, disabled: true, input_html: {data: {'enable-on' => 'LinkItem'}} | ||
= f.input :image_url, disabled: true, input_html: {data: {'enable-on' => 'ImageItem'}} | ||
= f.input :body, input_html: {rows: 10} | ||
|
||
= f.button :submit |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
%img{class: "feed_item", src: feed_item.image_url} | ||
%p | ||
%i(class="icon-eye-open") | ||
= feed_item.body |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
%i(class="icon-tags") | ||
= link_to feed_item.body, feed_item.link_url |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
%i(class="icon-comment") | ||
= feed_item.body |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
%h1 Edit item | ||
|
||
= render 'form' | ||
|
||
= link_to 'Back', feed_items_path |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
%h1 New item | ||
|
||
= render 'form' | ||
|
||
= link_to 'Back', feed_items_path |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
- if logged_in? | ||
= link_to 'Add to the feed', new_feed_item_path, class: "btn btn-primary pull-right" | ||
- @feed_items.each do |feed_item| | ||
.row | ||
.span6.offset3.well | ||
%div | ||
%img{src: feed_item.feed.gravatar} | ||
%strong= link_to(feed_item.username, feed_item.feed) | ||
= distance_of_time_in_words_to_now(feed_item.created_at) + " ago" | ||
%div.feed-item= render partial: feed_item, as: :feed_item | ||
- if current_user.created?(feed_item) | ||
= link_to 'Edit', edit_feed_item_path(feed_item), class: "btn" | ||
= link_to 'Destroy', feed_item_path(feed_item), :confirm => 'Are you sure?', :method => :delete, class: "btn btn-danger" | ||
|
Oops, something went wrong.