Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/itmammoth/constantinopolis
Setting constants solution for ruby applications.
https://github.com/itmammoth/constantinopolis
constant gem javascript rails ruby
Last synced: 3 months ago
JSON representation
Setting constants solution for ruby applications.
- Host: GitHub
- URL: https://github.com/itmammoth/constantinopolis
- Owner: itmammoth
- License: mit
- Created: 2014-04-23T15:15:47.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2022-10-03T09:44:12.000Z (about 2 years ago)
- Last Synced: 2024-09-22T22:18:16.930Z (3 months ago)
- Topics: constant, gem, javascript, rails, ruby
- Language: Ruby
- Homepage:
- Size: 15.6 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Constantinopolis
Constantinopolis allows you to set constants from your ERBed YAML file.
Remarkably, your constants are available not only in ruby context, but in javascript's.
It works with Rails, Sinatra, or any Ruby projects.
It's inspired by [settingslogic](https://github.com/binarylogic/settingslogic).## Installation
Add this line to your application's Gemfile:
gem 'constantinopolis'
And then execute:
$ bundle
Or install it yourself as:
$ gem install constantinopolis
## Usage
### Setup your Fort class
You need to create a class in your application like below.
```ruby
class Istanbul < Constantinopolis::Fort # Any class name you like
yml "#{Rails.root}/config/istanbul.yml" # Indicate your yaml file path.
namespace Rails.env # Indicate top level namespace (If you want).
end
Istanbul.build! # Don't forget this line!
```If you are setting for a rails application, it's better to put this file in ```config/initializer```
### Reload
If Constantinopolis is used on rails `development` environment, it'll automatically be reloaded when its yaml file is updated.To manually reload, just invoke the method `reload!`.
```ruby
ex)
class Istanbul < Constantinopolis::Fort
...
end
...# Anywhere you want to reload it
Istanbul.reload!
```### Define constants
Secondly, define constant YAML file.
Of course, you can use ERB expressions in it.
Top level keys are used for 'namespace' if you indicated it in your Fort class.```yaml
defaults: &defaults
common: Common valuedevelopment:
<<: *defaults
greeting: Hello, development!
number: 1
memorable_date: <%= Date.today %>
is:
located: Turkeytest:
<<: *defaults
greeting: Hello, test!
number: 2
memorable_date: <%= Date.today + 1 %>
is:
located: Turkeyproduction:
<<: *defaults
greeting: Hello, production!
number: 3
memorable_date: <%= Date.today + 2 %>
is:
located: Turkey
```### Access from Ruby
Congratulation!
you've been already able to access these constants anywhere like below.```ruby
Istanbul.common #=> "Common value"
Istanbul.greeting #=> "Hello, development!"
Istanbul.number #=> 1
Istanbul.memorable_date #=> Wed, 23 Apr 2014
Istanbul.is.located #=> Turkey
```### Access from Javascript
You can access your constants in javascript the same way as in ruby context.
Constantinopolis provides you a simple helper method to define javascript's constants.```html
<%= javascript_tag Istanbul.js_code %>Javascript context
<%= javascript_tag do %>
document.getElementById("common").innerText = Istanbul.common;
document.getElementById("greeting").innerText = Istanbul.greeting;
document.getElementById("number").innerText = Istanbul.number;
document.getElementById("memorable_date").innerText = Istanbul.memorable_date;
document.getElementById("is-located").innerText = Istanbul.is.located;
<% end %>
```It's can be a nice to define ```<%= javascript_tag Istanbul.js_code %>``` in ```layouts/application.html.erb``` if you are developing a rails application.
## Contributing
1. Fork it ( http://github.com/itmammoth/constantinopolis/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request