Skip to content

A 'easy' mixin to make configurable Ruby application

License

Notifications You must be signed in to change notification settings

rike422/topping

Repository files navigation

Topping Gem Version Build Status Code Climate Coverage Status

Configuration library for like a Lita style application

Installation

Add this line to your application's Gemfile:

gem 'topping'

Usage

require 'topping'

module MockApplication
  class BaseApplication
    extend Topping::Configurable::HQ
    config :store, default: :memory
    config :name, default: 'myapp'
    config :dir, type: String
  end
end

module MockApplication
  class Application < MockApplication::BaseApplication
  	config.store = :redis
  	config.name = 'topping_app'
  	config.dir = 'work'
  end
end

module MockApplication
  module Features
    class Base
      include Topping::Configurable::Branch
    end
    
    class Net < MockApplication::Features::Base
      config :host, required: true, type: String
      config :port, required: true, type: Integer
    end
    
    class User < MockApplication::Features::Base
      config :username, required: true, type: String
      config :password, required: true, type: String
    end
  end
end

Topping.build

MockApplication::Application.configure do |c|
	c.features.net.host = 'github.com'
	c.features.net.port = 80
	
	c.features.user.username = 'akira takahashi'
	c.features.user.password = 'password'	
end

net = MockApplication::Features::Net.new
user = MockApplication::Features::User.new 

p MockApplication::Application.config.name
# => 'topping_app'
p MockApplication::Application.config.store
# => :redis
p MockApplication::Application.config.dir
# => 'work'

p net.config.host 
# => 'github.com'
p net.config.port 
# => 89
p user.config.username
# => 'akira takahashi'
p user.config.password
# => 'password'

or

require 'topping'

module MockApplication
  class BaseApplication
    extend Topping::Configurable::HQ
    config :store, default: :memory
    config :name, default: 'myapp'
    config :dir, type: String
  end
end

module MockApplication
  class Application < MockApplication::BaseApplication
  end
end

module MockApplication
  module Features
    class Base
      include Topping::Configurable::Branch
    end
    
    class Net < MockApplication::Features::Base
      config :host, required: true, type: String
      config :port, required: true, type: Integer
    end
    
    class User < MockApplication::Features::Base
      config :username, required: true, type: String
      config :password, required: true, type: String
    end
  end
end

Topping.build

MockApplication::Features::Net.configure do |c|
	c.host = 'github.com'
	c.port = 80
end
	
MockApplication::Features::User.configure do |c|
	c.username = 'akira takahashi'
	c.password = 'password'	
end

p MockApplication::Application.config.name
# => 'topping_app'

p MockApplication::Application.config.store
# => :redis

p MockApplication::Application.config.dir
# => 'work'

p MockApplication::Application.config.features.net.host
# => 'github.com'
p MockApplication::Application.config.features.net.port
# => 80
p MockApplication::Application.config.features.user.username
# => 'akira takahashi'
p MockApplication::Application.config.features.user.password
# => 'password'

About

A 'easy' mixin to make configurable Ruby application

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published