Project

blogue

0.0
No commit activity in last 3 years
No release in over 3 years
If it wasn't in BLOGUE, it wasn't in blogue.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

>= 4.2
 Project Readme

Blogue

Build Status

Blogue is a rails model for static blog posts, wrapped in an engine. It means that you can have blog posts as static files (kind of like views) inside your rails app, and hook up posts like any other resource. The only reason this is an engine and not just a class in a gem is because it also adds an asset path and a handler for .md views.

Check out my blogue article for some fun stuff it can do: http://hakunin.com/blogue

What you get

  • A Blogue::Post model
  • Handler for ".md" views (kramdown by default)
  • Syntax highlighting for code blocks (rouge by default)

What you don't get

  • Mountable endpoint
  • Default controllers
  • Default views
  • Generators
  • Comments, tags or pretty much any functionality

There are thousands of gems that you can pick from to do that stuff.

Usage

  1. Generate a rails app (or use existing)
  2. Add all needed gems to Gemfile and bundle
  gem 'kramdown'
  gem 'rouge', '~> 1.11.1' # 2.x and newer is not supported yet
  gem 'blogue'
  1. Create a model app/models/post.rb (the name 'Post' is chosen at random)
  class Post < Blogue::Post
    # Here you can override inherited methods any way you like.
    # See app/models/blogue/post.rb to see what you have
  end
  1. Create a controller app/controllers/posts_controller.rb
  class PostsController < ApplicationController
    def index
      @posts = Post.all
    end

    def show
      @post = Post.find(params[:id]) ||
        raise(ActionController::RoutingError.new('Not Found'))
    end
  end
  1. Add a route to your config/routes.rb like this
  root to: 'posts#index' # if you want an index page
  get '/:id', to: 'posts#show'
  1. Add app/views/posts/index.html.erb for your index page
  <% @posts.each do |post| %>
  <p>
    <%= link_to post.title, post.id %>

    <% if post.tldr %>
    <blockquote>
      <%= post.tldr %>
    </blockquote>
    <% end %>
  </p>
  <% end %>
  1. Add app/views/posts/show.html.erb for your post page
  <%= link_to 'index', root_path %>

  <%=raw render file: @post.path %>

  <% if @post.date %>
  <p>Published on <%= @post.date.to_s(:long) %></p>
  <% end %>
  1. Create a directory app/posts (that's default location of posts)

  2. Create a directory app/posts/assets (it's added to assets paths by default)

  3. Add a post like app/posts/my-first-post.md

    # Yay my first post
    
    This is some text.
    
    ![picture](/assets/picture.jpg)
    
    ~~~ruby
    foo = 'foo' # a codeblock
    ~~~
    
    <!--meta
      date: 2013-10-21
      tldr: Awesome
    -->
    
  4. Start server and go to http://localhost:3000/my-first-post