Project

korgi

0.0
No commit activity in last 3 years
No release in over 3 years
Extends the Markdown syntax to allow quick generation of links to Rails resources.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

 Project Readme

Korgi

Gem Version Code Climate Test Coverage Build Status

html-pipeline filters to generate urls for Rails resources.

Usage

Korgi::FileUploadFilter

# input
$+image.1$

# filtered result
/uploads/image/file/1/thumb_pic.jpg

korgi is meant to work with CarrierWave. You will need to tell korgi how to map resources for you:

# config/initializers/korgi.rb
Korgi.configure do |config|
  config.file_uploads = { image: { model: :Image, mount: :file, default_version: :thumb }
end

This tells korgi that you have a CarrierWave uploader mounted to Image on :file, with :thumb as its default version. You can then simply write $+image.1$ or $+image.1.large$ in your markdown input, and korgi will replace the syntax with the associated url (and version).

If you are using a Null Object Pattern, you can also set an optional nil_object for unavailable files to fallback for:

image: { ..., nil_object: :NullImage }

If you need the full url instead, you should change the settings for CarrierWave:

# config/initializers/carrierwave.rb
CarrierWave.configure do |config|
  config.asset_host = "http://awesome.host.com"
end

# filtered result
http://awesome.host.com/uploads/image/file/1/thumb_pic.jpg

Korgi::NamedRouteFilter

# input
$#post.1$

# filtered result
/posts/1

You will need to tell korgi how to map resouces for you:

# config/initializers/korgi.rb
Korgi.configure do |config|
  config.named_routes = { post: { controller: :posts } }
end

In Rails speak, this means that korgi will replace $#post.1$ with the result of post_path(id: 1). If you are using FriendlyId to create url slugs, you can also do this:

# config/initializers/korgi.rb
Korgi.configure do |config|
  config.named_routes = { post: { controller: :posts, model: :Post, primary_key: :slug } }
end

This will enable korgi to interpret $#post.1$ as post_path(id: Post.find(1).slug) instead, and will then return the slugged url, e,g, /posts/slug-url.

putting it all together

I tried to keep korgi simple, so it only generates the link, not the entire html. You will most likely be using korgi along Markdown, but I'll leave that decision to you. Please do check out the documentation for html-pipeline on how to render Markdown content. Here is an example snippet:

pipeline =
  HTML::Pipeline.new [
    Korgi::FileUploadFilter,
    Korgi::NamedRouteFilter,
    HTML::Pipeline::MarkdownFilter
  ]
result = pipeline.call <<-EOD
This is a [link to post1]($#post.1$).
Here is an [image]($+image.1$).
EOD
result[:output].to_s

=>
<p>This is a <a href="/posts/1">link to post1</a>.</p>
<p>Here is an <img src="/uploads/image/file/1/thumb_pic.jpg" alt="image">.</p>

Contributing

Send me a PR!

License

The gem is available as open source under the terms of the MIT License.