Project

slimdown

0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
A system for using Markdown from a folder and turning it into web pages.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.9
~> 2.12
~> 0.10
~> 12.0
~> 0.9.11

Runtime

~> 2.3
 Project Readme

Slimdown

Slimdown is a simple gem to allow you to easily add static pages to your app via a folder full of Markdown files.

Justin Heideman conceived and built the original version in PHP.

Build Status

Installation

Add this line to your application's Gemfile:

gem 'slimdown'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install slimdown

Usage

To add to your app, create a controller with one action, such as show. In that action, add code to pull in the action:

class SlimdownController < ApplicationController
  def show
    @page = Slimdown::Page.find(params[:slug])
  end
end

Then add a view for the show action.

<%= @page.body.to_html.html_safe %>

<h2>Sibling Pages</h2>
<ul>
  <% @page.siblings.each do |sibling| %>
    <li><%= link_to sibling.title, "/#{sibling.path}" %></li>
  <% end %>
</ul>

<h2>Child Pages</h2>
<ul>
  <% @page.children.each do |child| %>
    <li><%= link_to child.title, "/#{child.path}" %></li>
  <% end %>
</ul>

Add a route to direct all unhandled requests to your controller. Make sure that it is at the end of your routes.rb so it doesn't supersede other routes.

get '/*slug', to: 'slimdown#show'

Finally, add an initializer in config/initializers/slimdown.rb to set the path to your pages.

Slimdown.config do |c|
  c.location = Rails.root.join('lib/pages')
end

Testing

Testing using a controller spec is not possible because you are testing for an arbitrary url. You can do a feature test with Capybara or friends. However, given that you are just returning content, you can use a request spec. For example, you have an about.md in your remote repo or lib/pages then in your spec/requests/slimdown_request_spec.rb. Additionally, you can override the page path for the test, allowing you to use a fixture directory.

RSpec.describe "Static Pages", type: :request do
  before :each do
    Slimdown.config do |c|
      c.location = Rails.root.join '/spec/fixtures/test_pages'
    end
  end

  describe "GET /" do
    it "#show" do
      get "/about"
      expect(response).to render_template(:show)
      expect(response.status).to be(200)
    end
  end
end

General notes

The use case for us is that we have a distinct repo containing the markdown (and some other files) which is editable by producers. This is autodeployed to a location on our servers which is accessible from our Rails app.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release to create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

  1. Fork it ( https://github.com/apmg/ruby-slimdown/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request