Giter VIP home page Giter VIP logo

easy_breadcrumbs's Introduction

EasyBreadcrumbs

Provides an easy_breadcrumbs view helper for automatically generating bootstrap breadcrumbs for your Sinatra Application.

  • It's able to properly generate the html for many different types of complex routes (See Below).
  • It only generates breadcrumbs for the routes you've defined, so if you have a route /categories/10/contacts/5, but haven't defined an index view route for /categories, that item will be left out.
  • It can automatically detect certain name attributes for specific resources.

Installation

Add this line to your application's Gemfile:

gem 'easy_breadcrumbs'

And then execute:

$ bundle

Or install it yourself as:

$ gem install easy_breadcrumbs

Usage

Step 1

If you're building a classic style Sinatra app, simply add this line to your sinatra application file:

require "easy_breadcrumbs"

If you're building a modular style Sinatra app, you'll also need to explicitly register the module within your application.

class HelloApp < Sinatra::Base
  helpers Sinatra::EasyBreadcrumbs

  get "/hello" do
    h "1 < 2"
  end
end

Step 2

And then use the helper method in your layout or view:

<%= easy_breadcrumbs %>

Step 3

And last but not least, make sure you have bootstrap installed. You can install bootstrap's css by adding this line to your applications layout template.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" crossorigin="anonymous">

Details

NEW: Auto Name Detection

Easy Breadcrumbs can now detect names for specific resources.

Path: /contacts/10
Old Breadcrumb Format: Home > Contacts > Contact
New Breadcrumb Format: Home > Contacts > Ada Lovelace

It's able to detect the name with the following limitations:

  • The resource is either a Hash or a Custom object
  • The resource has a key (Hash) or accessor method (custom object) of one of the following 3 commonly used name attributes:
    • :name
    • :title
    • :subject

If this condition fails, it will default to the old format.

Easy Breadcrumbs is able to handle a variety of complex routes.

Here are some examples:

Simple path to page

Path: /about
Breadcrumb: Home > About

Path to resource index page

Path: /contacts
Breadcrumb: Home > Contacts

###Path to specific resource

Path: /contacts/28
Breadcrumb: Home > Contacts > Contact

Path to resource new view

Path: /contacts/new
Breadcrumb: Home > Contacts > New Contact

Path to edit specific resource

Path: /contacts/28/edit
Breadcrumb: Home > Contacts > Contact > Edit Contact

Path to nested resource index page

Path: /categories/5/contacts
Breadcrumb: Home > Categories > Category > Contacts

Path to specific nested resource

Path: /categories/5/contacts/10
Breadcrumb: Home > Categories > Category > Contacts > Contact

Path to nested resource new view

Path: /categories/5/contacts/new
Breadcrumb: Home > Categories > Category > Contacts > New Contact

Path to edit specific nested resource

Path: /categories/5/contacts/10/edit
Breadcrumb: Home > Categories > Category > Contacts > Contact > Edit Contact

Road Map

  • Don't render breadcrumbs if current page is home
  • Allow for manual turning off of breadcrumbs for specific routes or sets of routes
  • Allow for custom configuration of name attributes for resources
    • Should be able to do something like set :easy_breadcrumbs, user: :name, post: :title
  • More robust spec suite
    • Explore more edge cases for both unit and integration tests
    • Eliminate repetition in specs
    • Other development gems that would help with this?
  • Update gemspec with depencency version restrictions and bump gem version to 1.0

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/nerboda/easy_breadcrumbs.

License

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

easy_breadcrumbs's People

Contributors

nerboda avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.