ContextProvider

This is the Ruby version of the context pattern originally outlined in React.

The context patter is a solution for a problem that in React is called prop drilling.

We have found this pattern to be quite useful for Rails applications.

Installation

Add this line to your application's Gemfile:

gem 'context_provider'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install contextprovider

Usage

A ContextProvider allows data to be passed down the call stack in a explicit way while avoiding having to pass parameters just so it can be used by a nested function.

fooContext = ContextProvider.new

fooContext.value_provided? #=> false
fooContext.get # raises ContextNotProvidedError

fooContext.provide("bar") do
  if fooContext.value_provided? #=> true
    fooContext.get #=> "bar"
  end

  fooContext.provide("baz") do # raise ContextAlreadyProvidedError
    # ...
  end

  fooContext.where_provide_was_called #=> `provide` caller call stack
end

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also 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, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

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