From 895ac0e0dbf97d097f88dab5eec31fc7e4519211 Mon Sep 17 00:00:00 2001 From: Yuri Solyanik Date: Fri, 11 Dec 2015 09:02:47 +0500 Subject: [PATCH 1/3] Fix routes, add link to show entries on selected feed --- app/controllers/entries_controller.rb | 4 ++-- app/views/entries/index.html.erb | 2 +- app/views/entries/show.html.erb | 2 +- config/routes.rb | 4 +--- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/controllers/entries_controller.rb b/app/controllers/entries_controller.rb index f2a64ba..6a66729 100644 --- a/app/controllers/entries_controller.rb +++ b/app/controllers/entries_controller.rb @@ -1,5 +1,5 @@ class EntriesController < ApplicationController - before_action :set_feed, only: :index + before_action :set_feed, only: [:index, :show] def index @entries = @feed.entries.order('published desc') @@ -12,6 +12,6 @@ def show private def set_feed - @feed = Feed.find(params[:id]) + @feed = Feed.find(params[:feed_id]) end end diff --git a/app/views/entries/index.html.erb b/app/views/entries/index.html.erb index 67b261f..0e0aad9 100644 --- a/app/views/entries/index.html.erb +++ b/app/views/entries/index.html.erb @@ -2,7 +2,7 @@ <% @entries.each do |entry| %>
- <%= link_to entry.title, entry %> - published <%= time_ago_in_words(entry.published) %> ago. + <%= link_to entry.title, feed_entry_path(@feed, entry) %> - published <%= time_ago_in_words(entry.published) %> ago.
<% end %> diff --git a/app/views/entries/show.html.erb b/app/views/entries/show.html.erb index 0a0ca1f..20300ef 100644 --- a/app/views/entries/show.html.erb +++ b/app/views/entries/show.html.erb @@ -2,6 +2,6 @@

<%= link_to @entry.title, @entry.url %>

published on <%= @entry.published %> by <%= @entry.author %>

- <%= @entry.content.html_safe %> + <%= @entry.content.html_safe if @entry.content.present? %>

diff --git a/config/routes.rb b/config/routes.rb index cfef835..41072a7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,8 +1,6 @@ Rails.application.routes.draw do resources :feeds do - member do - resources :entries, only: [:index, :show] - end + resources :entries, only: [:index, :show] end From c743df6dd73a9aafb5c2e9a8d7274f53dee8eba6 Mon Sep 17 00:00:00 2001 From: Yuri Solyanik Date: Sat, 12 Dec 2015 20:16:07 +0000 Subject: [PATCH 2/3] Change Bootstrap gem, add slim, fix views --- .gitignore | 2 + .ruby-version | 1 + Gemfile | 12 ++- Gemfile.lock | 33 +++++--- README.md | 2 +- README.rdoc | 28 ------- app/assets/images/favicon.png | Bin 0 -> 61430 bytes app/assets/javascripts/application.js | 16 +--- app/assets/javascripts/bootstrap.js.coffee | 3 - app/assets/javascripts/entries.coffee | 3 - app/assets/javascripts/feeds.coffee | 3 - app/assets/stylesheets/application.css | 15 ---- app/assets/stylesheets/application.scss | 3 + .../stylesheets/bootstrap_and_overrides.css | 7 -- app/assets/stylesheets/entries.scss | 3 - app/assets/stylesheets/feeds.scss | 3 - app/controllers/entries_controller.rb | 8 +- app/helpers/application_helper.rb | 9 +++ app/helpers/entries_helper.rb | 2 - app/helpers/feeds_helper.rb | 2 - app/views/entries/index.html.erb | 9 --- app/views/entries/index.slim | 19 +++++ app/views/entries/show.html.erb | 7 -- app/views/entries/show.slim | 11 +++ app/views/feeds/_form.html.erb | 29 ------- app/views/feeds/_form.slim | 24 ++++++ app/views/feeds/edit.html.erb | 6 -- app/views/feeds/edit.slim | 10 +++ app/views/feeds/index.html.erb | 33 -------- app/views/feeds/index.json.jbuilder | 4 - app/views/feeds/index.slim | 33 ++++++++ app/views/feeds/new.html.erb | 5 -- app/views/feeds/new.slim | 6 ++ app/views/feeds/show.html.erb | 6 -- app/views/feeds/show.json.jbuilder | 1 - app/views/feeds/show.slim | 13 +++ app/views/layouts/_footer.slim | 0 app/views/layouts/_header.slim | 0 app/views/layouts/application.html.erb | 14 ---- app/views/layouts/application.slim | 24 ++++++ config/database.yml | 75 +----------------- config/locales/en.bootstrap.yml | 23 ------ lib/tasks/sync.rake | 1 + 43 files changed, 197 insertions(+), 311 deletions(-) create mode 100644 .ruby-version delete mode 100644 README.rdoc create mode 100644 app/assets/images/favicon.png delete mode 100644 app/assets/javascripts/bootstrap.js.coffee delete mode 100644 app/assets/javascripts/entries.coffee delete mode 100644 app/assets/javascripts/feeds.coffee delete mode 100644 app/assets/stylesheets/application.css create mode 100644 app/assets/stylesheets/application.scss delete mode 100644 app/assets/stylesheets/bootstrap_and_overrides.css delete mode 100644 app/assets/stylesheets/entries.scss delete mode 100644 app/assets/stylesheets/feeds.scss delete mode 100644 app/helpers/entries_helper.rb delete mode 100644 app/helpers/feeds_helper.rb delete mode 100644 app/views/entries/index.html.erb create mode 100644 app/views/entries/index.slim delete mode 100644 app/views/entries/show.html.erb create mode 100644 app/views/entries/show.slim delete mode 100644 app/views/feeds/_form.html.erb create mode 100644 app/views/feeds/_form.slim delete mode 100644 app/views/feeds/edit.html.erb create mode 100644 app/views/feeds/edit.slim delete mode 100644 app/views/feeds/index.html.erb delete mode 100644 app/views/feeds/index.json.jbuilder create mode 100644 app/views/feeds/index.slim delete mode 100644 app/views/feeds/new.html.erb create mode 100644 app/views/feeds/new.slim delete mode 100644 app/views/feeds/show.html.erb delete mode 100644 app/views/feeds/show.json.jbuilder create mode 100644 app/views/feeds/show.slim create mode 100644 app/views/layouts/_footer.slim create mode 100644 app/views/layouts/_header.slim delete mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/layouts/application.slim delete mode 100644 config/locales/en.bootstrap.yml diff --git a/.gitignore b/.gitignore index 5b61ab0..1a7325f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ /log/* !/log/.keep /tmp + +.byebug_history diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..5859406 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.2.3 diff --git a/Gemfile b/Gemfile index 7847421..83cad65 100644 --- a/Gemfile +++ b/Gemfile @@ -17,15 +17,12 @@ gem 'coffee-rails', '~> 4.1.0' # Use jquery as the JavaScript library gem 'jquery-rails' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks -gem 'turbolinks' +# gem 'turbolinks' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.0' # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc -gem 'feedjira' -gem 'twitter-bootstrap-rails' - # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' @@ -35,6 +32,10 @@ gem 'twitter-bootstrap-rails' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development +group :development do + gem 'quiet_assets' +end + group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' @@ -46,3 +47,6 @@ group :development, :test do gem 'spring' end +gem 'feedjira' +gem 'bootstrap-sass', '~> 3.3.6' +gem 'slim-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 5d60463..877b9f8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -37,8 +37,14 @@ GEM thread_safe (~> 0.3, >= 0.3.4) tzinfo (~> 1.1) arel (6.0.3) + autoprefixer-rails (6.1.2) + execjs + json binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) + bootstrap-sass (3.3.6) + autoprefixer-rails (>= 5.2.1) + sass (>= 3.3.4) builder (3.2.2) byebug (8.2.0) coffee-rails (4.1.0) @@ -83,6 +89,8 @@ GEM nokogiri (1.6.6.4) mini_portile (~> 0.6.0) pg (0.18.4) + quiet_assets (1.1.0) + railties (>= 3.1, < 5.0) rack (1.6.4) rack-test (0.6.3) rack (>= 1.0) @@ -124,6 +132,15 @@ GEM sdoc (0.4.1) json (~> 1.7, >= 1.7.7) rdoc (~> 4.0) + slim (3.0.6) + temple (~> 0.7.3) + tilt (>= 1.3.3, < 2.1) + slim-rails (3.0.1) + actionmailer (>= 3.1, < 5.0) + actionpack (>= 3.1, < 5.0) + activesupport (>= 3.1, < 5.0) + railties (>= 3.1, < 5.0) + slim (~> 3.0) spring (1.4.4) sprockets (3.4.0) rack (> 1, < 3) @@ -131,16 +148,10 @@ GEM actionpack (>= 3.0) activesupport (>= 3.0) sprockets (>= 2.8, < 4.0) + temple (0.7.6) thor (0.19.1) thread_safe (0.3.5) tilt (2.0.1) - turbolinks (2.5.3) - coffee-rails - twitter-bootstrap-rails (3.2.0) - actionpack (~> 4.1) - execjs (~> 2.2) - rails (~> 4.1) - railties (~> 4.1) tzinfo (1.2.2) thread_safe (~> 0.1) uglifier (2.7.2) @@ -156,17 +167,21 @@ PLATFORMS ruby DEPENDENCIES + bootstrap-sass (~> 3.3.6) byebug coffee-rails (~> 4.1.0) feedjira jbuilder (~> 2.0) jquery-rails pg + quiet_assets rails (= 4.2.2) sass-rails (~> 5.0) sdoc (~> 0.4.0) + slim-rails spring - turbolinks - twitter-bootstrap-rails uglifier (>= 1.3.0) web-console (~> 2.0) + +BUNDLED WITH + 1.10.6 diff --git a/README.md b/README.md index f693153..4efa0f8 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# feedreader-demo +# feedreader diff --git a/README.rdoc b/README.rdoc deleted file mode 100644 index dd4e97e..0000000 --- a/README.rdoc +++ /dev/null @@ -1,28 +0,0 @@ -== README - -This README would normally document whatever steps are necessary to get the -application up and running. - -Things you may want to cover: - -* Ruby version - -* System dependencies - -* Configuration - -* Database creation - -* Database initialization - -* How to run the test suite - -* Services (job queues, cache servers, search engines, etc.) - -* Deployment instructions - -* ... - - -Please feel free to use a different markup language if you do not plan to run -rake doc:app. diff --git a/app/assets/images/favicon.png b/app/assets/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..14afe76a49245b0bc3422fa174195c4400ba3a46 GIT binary patch literal 61430 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ਛ+ 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 OPy5<+^%7NF#Qy=6pw2u1 literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index bcb49bf..fef814a 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -1,17 +1,5 @@ -// This is a manifest file that'll be compiled into application.js, which will include all the files -// listed below. -// -// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, -// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. -// -// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -// compiled file. -// -// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details -// about supported directives. -// //= require jquery +//= require bootstrap-sprockets //= require jquery_ujs -//= require twitter/bootstrap -//= require turbolinks +// require turbolinks //= require_tree . diff --git a/app/assets/javascripts/bootstrap.js.coffee b/app/assets/javascripts/bootstrap.js.coffee deleted file mode 100644 index 9440679..0000000 --- a/app/assets/javascripts/bootstrap.js.coffee +++ /dev/null @@ -1,3 +0,0 @@ -jQuery -> - $("a[rel~=popover], .has-popover").popover() - $("a[rel~=tooltip], .has-tooltip").tooltip() diff --git a/app/assets/javascripts/entries.coffee b/app/assets/javascripts/entries.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/entries.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/feeds.coffee b/app/assets/javascripts/feeds.coffee deleted file mode 100644 index 24f83d1..0000000 --- a/app/assets/javascripts/feeds.coffee +++ /dev/null @@ -1,3 +0,0 @@ -# Place all the behaviors and hooks related to the matching controller here. -# All this logic will automatically be available in application.js. -# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css deleted file mode 100644 index f9cd5b3..0000000 --- a/app/assets/stylesheets/application.css +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This is a manifest file that'll be compiled into application.css, which will include all the files - * listed below. - * - * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, - * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. - * - * You're free to add application-wide styles to this file and they'll appear at the bottom of the - * compiled file so the styles you add here take precedence over styles defined in any styles - * defined in the other CSS/SCSS files in this directory. It is generally better to create a new - * file per style scope. - * - *= require_tree . - *= require_self - */ diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss new file mode 100644 index 0000000..3f2850c --- /dev/null +++ b/app/assets/stylesheets/application.scss @@ -0,0 +1,3 @@ +// "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables" +@import "bootstrap-sprockets"; +@import "bootstrap"; diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css b/app/assets/stylesheets/bootstrap_and_overrides.css deleted file mode 100644 index 131fcfd..0000000 --- a/app/assets/stylesheets/bootstrap_and_overrides.css +++ /dev/null @@ -1,7 +0,0 @@ -/* - =require twitter-bootstrap-static/bootstrap - - Use Font Awesome icons (default) - To use Glyphicons sprites instead of Font Awesome, replace with "require twitter-bootstrap-static/sprites" - =require twitter-bootstrap-static/fontawesome - */ \ No newline at end of file diff --git a/app/assets/stylesheets/entries.scss b/app/assets/stylesheets/entries.scss deleted file mode 100644 index 53d6246..0000000 --- a/app/assets/stylesheets/entries.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the entries controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/feeds.scss b/app/assets/stylesheets/feeds.scss deleted file mode 100644 index a00cb5b..0000000 --- a/app/assets/stylesheets/feeds.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the feeds controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/entries_controller.rb b/app/controllers/entries_controller.rb index 6a66729..5ba4f2e 100644 --- a/app/controllers/entries_controller.rb +++ b/app/controllers/entries_controller.rb @@ -1,17 +1,13 @@ class EntriesController < ApplicationController - before_action :set_feed, only: [:index, :show] def index + @feed = Feed.find(params[:feed_id]) @entries = @feed.entries.order('published desc') end def show + @feed = Feed.find(params[:feed_id]) @entry = Entry.find(params[:id]) end - private - - def set_feed - @feed = Feed.find(params[:feed_id]) - end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index de6be79..aa92bd4 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,2 +1,11 @@ module ApplicationHelper + def full_title(page_title) + base_title = 'Feed reader' + + if @title.nil? + base_title + else + "#{base_title} | #{@title}" + end + end end diff --git a/app/helpers/entries_helper.rb b/app/helpers/entries_helper.rb deleted file mode 100644 index ed8c595..0000000 --- a/app/helpers/entries_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module EntriesHelper -end diff --git a/app/helpers/feeds_helper.rb b/app/helpers/feeds_helper.rb deleted file mode 100644 index d48dcc2..0000000 --- a/app/helpers/feeds_helper.rb +++ /dev/null @@ -1,2 +0,0 @@ -module FeedsHelper -end diff --git a/app/views/entries/index.html.erb b/app/views/entries/index.html.erb deleted file mode 100644 index 0e0aad9..0000000 --- a/app/views/entries/index.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -
- <% @entries.each do |entry| %> -
-
- <%= link_to entry.title, feed_entry_path(@feed, entry) %> - published <%= time_ago_in_words(entry.published) %> ago. -
-
- <% end %> -
diff --git a/app/views/entries/index.slim b/app/views/entries/index.slim new file mode 100644 index 0000000..c4466d2 --- /dev/null +++ b/app/views/entries/index.slim @@ -0,0 +1,19 @@ +- @title = "Entries of feed: #{@feed.name}" + +h1 + = @feed.name + +hr + +- @entries.each do |entry| + .panel.panel-default + .panel-body + ' + = link_to entry.title, feed_entry_path(@feed, entry) + ' + ' - + i + ' published + = time_ago_in_words(entry.published) + ' + ' ago. diff --git a/app/views/entries/show.html.erb b/app/views/entries/show.html.erb deleted file mode 100644 index 20300ef..0000000 --- a/app/views/entries/show.html.erb +++ /dev/null @@ -1,7 +0,0 @@ -
-

<%= link_to @entry.title, @entry.url %>

- published on <%= @entry.published %> by <%= @entry.author %> -

- <%= @entry.content.html_safe if @entry.content.present? %> -

-
diff --git a/app/views/entries/show.slim b/app/views/entries/show.slim new file mode 100644 index 0000000..27404f6 --- /dev/null +++ b/app/views/entries/show.slim @@ -0,0 +1,11 @@ +- @title = "Entry of feed: #{@feed.name}" + +h3 + = link_to @entry.title, @entry.url +i + ' published on + = @entry.published + | by + = @entry.author +p + = @entry.content.html_safe if @entry.content.present? diff --git a/app/views/feeds/_form.html.erb b/app/views/feeds/_form.html.erb deleted file mode 100644 index 3ba6042..0000000 --- a/app/views/feeds/_form.html.erb +++ /dev/null @@ -1,29 +0,0 @@ -<%= form_for(@feed) do |f| %> - <% if @feed.errors.any? %> -
-

<%= pluralize(@feed.errors.count, "error") %> prohibited this feed from being saved:

- -
    - <% @feed.errors.full_messages.each do |message| %> -
  • <%= message %>
  • - <% end %> -
-
- <% end %> - -
- <%= f.label :name %>
- <%= f.text_field :name %> -
-
- <%= f.label :url %>
- <%= f.text_field :url %> -
-
- <%= f.label :description %>
- <%= f.text_area :description %> -
-
- <%= f.submit %> -
-<% end %> diff --git a/app/views/feeds/_form.slim b/app/views/feeds/_form.slim new file mode 100644 index 0000000..d97b85a --- /dev/null +++ b/app/views/feeds/_form.slim @@ -0,0 +1,24 @@ += form_for(@feed) do |f| + - if @feed.errors.any? + #error_explanation + h2 + = pluralize(@feed.errors.count, "error") + | prohibited this feed from being saved: + ul + - @feed.errors.full_messages.each do |message| + li + = message + .field + = f.label :name + br + = f.text_field :name + .field + = f.label :url + br + = f.text_field :url + .field + = f.label :description + br + = f.text_area :description + .actions + = f.submit diff --git a/app/views/feeds/edit.html.erb b/app/views/feeds/edit.html.erb deleted file mode 100644 index 48274f0..0000000 --- a/app/views/feeds/edit.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -

Editing Feed

- -<%= render 'form' %> - -<%= link_to 'Show', @feed %> | -<%= link_to 'Back', feeds_path %> diff --git a/app/views/feeds/edit.slim b/app/views/feeds/edit.slim new file mode 100644 index 0000000..dcda563 --- /dev/null +++ b/app/views/feeds/edit.slim @@ -0,0 +1,10 @@ +- @title = "Edit feed: #{@feed.name}" + +h1 + | Editing Feed + += render 'form' += link_to 'Show', @feed +' +' | += link_to 'Back', feeds_path diff --git a/app/views/feeds/index.html.erb b/app/views/feeds/index.html.erb deleted file mode 100644 index d3c1047..0000000 --- a/app/views/feeds/index.html.erb +++ /dev/null @@ -1,33 +0,0 @@ -
-

<%= notice %>

- -

Listing Feeds

- - - - - - - - - - - - - <% @feeds.each do |feed| %> - - - - - - - - - <% end %> - -
NameUrlDescription
<%= feed.name %><%= feed.url %><%= feed.description %><%= link_to 'Show', feed %><%= link_to 'Edit', edit_feed_path(feed) %><%= link_to 'Destroy', feed, method: :delete, data: { confirm: 'Are you sure?' } %>
- -
- -<%= link_to 'New Feed', new_feed_path %> -
diff --git a/app/views/feeds/index.json.jbuilder b/app/views/feeds/index.json.jbuilder deleted file mode 100644 index 2dbf7f6..0000000 --- a/app/views/feeds/index.json.jbuilder +++ /dev/null @@ -1,4 +0,0 @@ -json.array!(@feeds) do |feed| - json.extract! feed, :id, :name, :url, :description - json.url feed_url(feed, format: :json) -end diff --git a/app/views/feeds/index.slim b/app/views/feeds/index.slim new file mode 100644 index 0000000..df73436 --- /dev/null +++ b/app/views/feeds/index.slim @@ -0,0 +1,33 @@ +- @title = 'Main page' + +p#notice + = notice +h1 + | Listing Feeds +table.table + thead + tr + th + | Name + th + | Url + th + | Description + th[colspan="3"] + tbody + - @feeds.each do |feed| + tr + td + = link_to feed.name, feed_entries_path(feed) + td + = feed.url + td + = feed.description + td + = link_to 'Show', feed + td + = link_to 'Edit', edit_feed_path(feed) + td + = link_to 'Destroy', feed, method: :delete, data: { confirm: 'Are you sure?' } +br += link_to 'New Feed', new_feed_path diff --git a/app/views/feeds/new.html.erb b/app/views/feeds/new.html.erb deleted file mode 100644 index ea150be..0000000 --- a/app/views/feeds/new.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -

New Feed

- -<%= render 'form' %> - -<%= link_to 'Back', feeds_path %> diff --git a/app/views/feeds/new.slim b/app/views/feeds/new.slim new file mode 100644 index 0000000..cc2fb09 --- /dev/null +++ b/app/views/feeds/new.slim @@ -0,0 +1,6 @@ +- @title = 'New feed' + +h1 + | New Feed += render 'form' += link_to 'Back', feeds_path diff --git a/app/views/feeds/show.html.erb b/app/views/feeds/show.html.erb deleted file mode 100644 index 3b1a2ae..0000000 --- a/app/views/feeds/show.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -
-

There are <%= link_to "#{@feed.entries.count} entries", entries_path %> available for the feed <%= @feed.name %>

-
- <%= link_to 'Edit', edit_feed_path %> - <%= link_to 'Back', feeds_path %> -
diff --git a/app/views/feeds/show.json.jbuilder b/app/views/feeds/show.json.jbuilder deleted file mode 100644 index db600e1..0000000 --- a/app/views/feeds/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.extract! @feed, :id, :name, :url, :description, :created_at, :updated_at diff --git a/app/views/feeds/show.slim b/app/views/feeds/show.slim new file mode 100644 index 0000000..74385df --- /dev/null +++ b/app/views/feeds/show.slim @@ -0,0 +1,13 @@ +- @title = "Feed: #{@feed.name}" + +h3 + ' There are + = link_to "#{@feed.entries.count} entries", feed_entries_path(@feed) + ' + ' available for the feed + = @feed.name +hr += link_to 'Edit', edit_feed_path +' +' | += link_to 'Back', feeds_path diff --git a/app/views/layouts/_footer.slim b/app/views/layouts/_footer.slim new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/_header.slim b/app/views/layouts/_header.slim new file mode 100644 index 0000000..e69de29 diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb deleted file mode 100644 index 1fd3293..0000000 --- a/app/views/layouts/application.html.erb +++ /dev/null @@ -1,14 +0,0 @@ - - - - Feedreader - <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> - <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> - <%= csrf_meta_tags %> - - - -<%= yield %> - - - diff --git a/app/views/layouts/application.slim b/app/views/layouts/application.slim new file mode 100644 index 0000000..97ad19d --- /dev/null +++ b/app/views/layouts/application.slim @@ -0,0 +1,24 @@ +doctype html +html + head + title = full_title(yield(:title)) + = stylesheet_link_tag 'application', media: 'all' + = javascript_include_tag 'application' + = javascript_include_tag 'http://html5shim.googlecode.com/svn/trunk/html5.js' + + meta name="keywords" content="feed reader" + meta content="text/html; charset=utf-8" http-equiv="Content-Type" + meta name="author" content="Solyanik Yuri" + meta name="description" content="Feed reader" + + meta content="width=device-width, initial-scale=1" name="viewport" + meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" + + = favicon_link_tag 'favicon.png', rel: 'icon', type: 'image/png' + = csrf_meta_tags + + body + = render 'layouts/header' + .container + = yield + = render 'layouts/footer' diff --git a/config/database.yml b/config/database.yml index f6dd668..b471f80 100644 --- a/config/database.yml +++ b/config/database.yml @@ -1,85 +1,18 @@ -# PostgreSQL. Versions 8.2 and up are supported. -# -# Install the pg driver: -# gem install pg -# On OS X with Homebrew: -# gem install pg -- --with-pg-config=/usr/local/bin/pg_config -# On OS X with MacPorts: -# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config -# On Windows: -# gem install pg -# Choose the win32 build. -# Install PostgreSQL and put its /bin directory on your path. -# -# Configure Using Gemfile -# gem 'pg' -# default: &default adapter: postgresql encoding: unicode - # For details on connection pooling, see rails configuration guide - # http://guides.rubyonrails.org/configuring.html#database-pooling pool: 5 + user: <%= ENV["DB_USER"] %> + password: <%= ENV["DB_PASS"] %> development: <<: *default - database: feedreader_development + database: feedreader_dev - # The specified database role being used to connect to postgres. - # To create additional roles in postgres see `$ createuser --help`. - # When left blank, postgres will use the default role. This is - # the same name as the operating system user that initialized the database. - #username: feedreader - - # The password associated with the postgres role (username). - #password: - - # Connect on a TCP socket. Omitted by default since the client uses a - # domain socket that doesn't need configuration. Windows does not have - # domain sockets, so uncomment these lines. - #host: localhost - - # The TCP port the server listens on. Defaults to 5432. - # If your server runs on a different port number, change accordingly. - #port: 5432 - - # Schema search path. The server defaults to $user,public - #schema_search_path: myapp,sharedapp,public - - # Minimum log levels, in increasing order: - # debug5, debug4, debug3, debug2, debug1, - # log, notice, warning, error, fatal, and panic - # Defaults to warning. - #min_messages: notice - -# Warning: The database defined as "test" will be erased and -# re-generated from your development database when you run "rake". -# Do not set this db to the same as development or production. test: <<: *default database: feedreader_test -# As with config/secrets.yml, you never want to store sensitive information, -# like your database password, in your source code. If your source code is -# ever seen by anyone, they now have access to your database. -# -# Instead, provide the password as a unix environment variable when you boot -# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database -# for a full rundown on how to provide these environment variables in a -# production deployment. -# -# On Heroku and other platform providers, you may have a full connection URL -# available as an environment variable. For example: -# -# DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase" -# -# You can use this database configuration with: -# -# production: -# url: <%= ENV['DATABASE_URL'] %> -# production: <<: *default - database: feedreader_production - username: feedreader - password: <%= ENV['FEEDREADER_DATABASE_PASSWORD'] %> + database: feedreader_prod diff --git a/config/locales/en.bootstrap.yml b/config/locales/en.bootstrap.yml deleted file mode 100644 index 8d75119..0000000 --- a/config/locales/en.bootstrap.yml +++ /dev/null @@ -1,23 +0,0 @@ -# Sample localization file for English. Add more files in this directory for other locales. -# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. - -en: - breadcrumbs: - application: - root: "Index" - pages: - pages: "Pages" - helpers: - actions: "Actions" - links: - back: "Back" - cancel: "Cancel" - confirm: "Are you sure?" - destroy: "Delete" - new: "New" - edit: "Edit" - titles: - edit: "Edit %{model}" - save: "Save %{model}" - new: "New %{model}" - delete: "Delete %{model}" diff --git a/lib/tasks/sync.rake b/lib/tasks/sync.rake index 52cc3c9..cdeee6d 100644 --- a/lib/tasks/sync.rake +++ b/lib/tasks/sync.rake @@ -3,6 +3,7 @@ namespace :sync do Feed.all.each do |feed| content = Feedjira::Feed.fetch_and_parse feed.url content.entries.each do |entry| + byebug local_entry = feed.entries.where(title: entry.title).first_or_initialize local_entry.update_attributes(content: entry.content, author: entry.author, url: entry.url, published: entry.published) p "Synced Entry - #{entry.title}" From c0100e14f95b02e8fb00126d59ca4f7c824588e7 Mon Sep 17 00:00:00 2001 From: Yuri Solyanik Date: Sun, 13 Dec 2015 19:10:33 +0000 Subject: [PATCH 3/3] Add basic navigation --- app/views/entries/index.slim | 4 +++- app/views/entries/show.slim | 12 ++++++++++-- db/migrate/20151213185941_add_summary_to_entries.rb | 5 +++++ db/schema.rb | 3 ++- lib/tasks/sync.rake | 3 +-- 5 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20151213185941_add_summary_to_entries.rb diff --git a/app/views/entries/index.slim b/app/views/entries/index.slim index c4466d2..84dd08f 100644 --- a/app/views/entries/index.slim +++ b/app/views/entries/index.slim @@ -2,9 +2,11 @@ h1 = @feed.name - hr +p + = link_to 'Back', feeds_path + - @entries.each do |entry| .panel.panel-default .panel-body diff --git a/app/views/entries/show.slim b/app/views/entries/show.slim index 27404f6..9280ae3 100644 --- a/app/views/entries/show.slim +++ b/app/views/entries/show.slim @@ -5,7 +5,15 @@ h3 i ' published on = @entry.published - | by - = @entry.author + ' + - if @entry.author.present? + ' by + = @entry.author p = @entry.content.html_safe if @entry.content.present? +hr +p + = @entry.summary.html_safe if @entry.summary.present? + +hr += link_to 'Back', feed_entries_path(@feed) diff --git a/db/migrate/20151213185941_add_summary_to_entries.rb b/db/migrate/20151213185941_add_summary_to_entries.rb new file mode 100644 index 0000000..9ae9074 --- /dev/null +++ b/db/migrate/20151213185941_add_summary_to_entries.rb @@ -0,0 +1,5 @@ +class AddSummaryToEntries < ActiveRecord::Migration + def change + add_column :entries, :summary, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index c6bdc93..6800240 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: 20151128141751) do +ActiveRecord::Schema.define(version: 20151213185941) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,6 +25,7 @@ t.integer "feed_id" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.text "summary" end create_table "feeds", force: :cascade do |t| diff --git a/lib/tasks/sync.rake b/lib/tasks/sync.rake index cdeee6d..7a6a9bd 100644 --- a/lib/tasks/sync.rake +++ b/lib/tasks/sync.rake @@ -3,9 +3,8 @@ namespace :sync do Feed.all.each do |feed| content = Feedjira::Feed.fetch_and_parse feed.url content.entries.each do |entry| - byebug local_entry = feed.entries.where(title: entry.title).first_or_initialize - local_entry.update_attributes(content: entry.content, author: entry.author, url: entry.url, published: entry.published) + local_entry.update_attributes(content: entry.content, author: entry.author, url: entry.url, published: entry.published, summary: entry.summary) p "Synced Entry - #{entry.title}" end p "Synced Feed - #{feed.name}"