Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - bigcommerce/settingslogic: A simple and straightforward settings solution that uses an ERB enabled YAML file and a singleton design pattern. · GitHub
Skip to content

Repository files navigation

Settingslogic is a simple configuration / settings solution that uses an ERB enabled YAML file. It has been great for our apps, maybe you will enjoy it too. Settingslogic works with Rails, Sinatra, or any Ruby project.

<img src=“https://badge.fury.io/rb/settingslogic.svg” alt=“Gem Version” /><img src=“https://travis-ci.org/settingslogic/settingslogic.svg” alt=“Build Status” /><img src=“http://inch-ci.org/github/settingslogic/settingslogic.png?branch=master” alt=“Inline docs” />

geminstallsettingslogic

Instead of defining a Settings constant for you, that task is left to you. Simply create a class in your application that looks like:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envend

Name it Settings, name it Config, name it whatever you want. Add as many or as few as you like. A good place to put this file in a rails app is app/models/settings.rb

I felt adding a settings file in your app was more straightforward, less tricky, and more flexible.

Notice above we specified an absolute path to our settings file called “application.yml”. This is just a typical YAML file. Also notice above that we specified a namespace for our environment. A namespace is just an optional string that corresponds to a key in the YAML file.

Using a namespace allows us to change our configuration depending on our environment:

# config/application.yml
defaults: &defaults
cool:
saweet: nested settings
neat_setting: 24
awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>
development:
<<: *defaults
neat_setting: 800
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'
>> Rails.env
=> "development"
>> Settings.cool
=> "#<Settingslogic::Settings ... >"
>> Settings.cool.saweet
=> "nested settings"
>> Settings.neat_setting
=> 800
>> Settings.awesome_setting
=> "Did you know 5 + 5 = 10?"

You can use these settings anywhere, for example in a model:

classPost<ActiveRecord::Baseself.per_page = Settings.pagination.posts_per_pageend

Often, you will want to handle defaults in your application logic itself, to reduce the number of settings you need to put in your YAML file. You can access an optional setting by using Hash notation:

>> Settings.messaging.queue_name
=> Exception: Missing setting 'queue_name' in 'message' section in 'application.yml'
>> Settings.messaging['queue_name']
=> nil
>> Settings.messaging['queue_name'] ||= 'user_mail'
=> "user_mail"
>> Settings.messaging.queue_name
=> "user_mail"

Modifying our model example:

classPost<ActiveRecord::Baseself.per_page = Settings.posts['per_page'] ||Settings.pagination.per_pageend

This would allow you to specify a custom value for per_page just for posts, or to fall back to your default value if not specified.

Raising exceptions for missing settings helps highlight configuration problems. However, in a Rails app it may make sense to suppress this in production and return nil for missing settings. While it’s useful to stop and highlight an error in development or test environments, this is often not the right answer for production.

class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
suppress_errors Rails.env.production?
end
>> Settings.non_existent_key
=> nil

Each of these frameworks uses a set convention for settings, which actually defines methods in the global Object namespace:

set:application, "myapp"# does "def application" globally

This can cause collisions with Settingslogic, since those methods are global. Luckily, the solution is to just add a call to load! in your class:

classSettings<Settingslogicsource"#{Rails.root}/config/application.yml"namespaceRails.envload!end

It’s probably always safest to add load! to your class, since this guarantees settings will be loaded at that time, rather than lazily later via method_missing.

Finally, you can reload all your settings later as well:

Settings.reload!

This is useful if you want to support changing your settings YAML without restarting your app.

Copyright © 2008-2010 Ben Johnson of Binary Logic, released under the MIT license. Support for optional settings and reloading by Nate Wiger.

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages