Skip to content

A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern.

License

Notifications You must be signed in to change notification settings

Volopay/configlogic

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

https://github.com/Volopay/configlogic.git

Configlogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been based on github.com/settingslogic/settingslogic

Installation

gem 'configlogic', git: 'https://github.com/Volopay/configlogic.git' 
in your Gemfile

Usage (Make sure to follow conventions)

1. Define your class

Create a class in lib initializer like (Please add ‘Vp` in the class name)

Rails.application.config.to_prepare do
  class VpClientConfig < Configlogic
      namespace Rails.env

      cache_values_to_redis true
      get_value_from_db true
      config_class 'ClientConfig'
      config_class_column :config #this has to be a json column
      redis_key { Apartment::Tenant.current } # this has to be proc

      source "#{Rails.root}/config/configsetting/client_config.yml" #This has to be very last call and mandatory
    end
  end
end

Few things to notice, source has to be last call. Options:

  • cache_values_to_redis : If you want to have cache the values, by default Rails.cache will be used

  • get_value_from_db : true If you want to store config values in DB, otherwise the json file supplied in source would be used

  • config_class : Class in which config json needs to be stored

  • config_class_column : Column of above class in which config json needs to be stored

  • redis_key : This needs to be a Proc, identifying a unique key prefix for keys, what gets saved in REDIS is something like this key ‘config-517aa5ee0eaef2d5c6b91d705de0bba1-modules.payments-enabled`

2. Create your settings

Using a namespace allows us to change our configuration depending on our environment: Make sure to have yml file name exactly same as initialize file name without Vp, in this example ‘client_config.yml` to `configsetting` folder `config/configsetting/client_config.yml`

defaults: &defaults
host: "volopay.com"
modules:
  payments:
    enabled: false
    ocr:
      UI: Rajesh Raikwar
      billing:
      data: something
      enabled: true
      column_value: "OCR"
    international_payments:
      enabled: true
    bulk_payments:
      enabled: true
  cards:
    enabled: true
    card_request:
      enabled: true
  reimbursement:
    enabled: true
development:
  <<: *defaults
test:
  <<: *defaults
production:
  <<: *defaults

Note: Certain Ruby/Bundler versions include a version of the Psych YAML parser which incorrectly handles merges (the ‘<<` in the example above.) If your default settings seem to be overwriting your environment-specific settings, including the following lines in your config/boot.rb file may solve the problem:

require 'yaml'
YAML::ENGINE.yamler= 'syck'

3. Access your settings

>> Rails.env
=> "development"

>> VpConfig.get('host')
=> volopay.com

>> VpConfig.get('modules.payments.ocr.enabled')
=> "true"

Things to know if you try to access in between hash, it will throw `OperationNotAllowed` exception

=== 3. Access your settings

>> Rails.env
=> "development"

>> VpConfig.get('host')
=> volopay.com

>> VpConfig.get('modules.payments.ocr.enabled')
=> "true"

Things to know if you try to access in between hash, it will throw `OperationNotAllowed` exception

4. Added rake file

`rake configlogic:load` this gem also adds a rake task, which can be used to merge new settings the settings, whenever there are any changes in main config yml in code. it will basically loop all clients(if Apartment present, otherwise in public schema). and update the settings in all clients.

5. Added cache burst after commit to class

It adds a after commit hooks into the config_class provided that burset the cache variables as soon as there is a commit to config_class_column

About

A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Ruby 100.0%