courtier 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.ruby ADDED
@@ -0,0 +1,63 @@
1
+ ---
2
+ source:
3
+ - var
4
+ - var/
5
+ authors:
6
+ - name: Trans
7
+ email: transfire@gmail.com
8
+ copyrights:
9
+ - holder: Rubyworks
10
+ year: '2011'
11
+ license: BSD-2-Clause
12
+ requirements:
13
+ - name: finder
14
+ - name: loaded
15
+ - name: detroit
16
+ groups:
17
+ - build
18
+ development: true
19
+ - name: qed
20
+ groups:
21
+ - test
22
+ development: true
23
+ - name: ae
24
+ groups:
25
+ - test
26
+ development: true
27
+ dependencies: []
28
+ alternatives: []
29
+ conflicts: []
30
+ repositories:
31
+ - uri: git://github.com/rubyworks/courtier.git
32
+ scm: git
33
+ name: upstream
34
+ resources:
35
+ - uri: http://rubyworks.github.com/courtier
36
+ name: home
37
+ type: home
38
+ - uri: http://rubydoc.info/gems/courtier/frames
39
+ name: docs
40
+ type: doc
41
+ - uri: http://github.com/rubyworks/courtier
42
+ name: code
43
+ type: code
44
+ - uri: http://groups.google.com/group/rubyworks-mailinglist
45
+ name: mail
46
+ type: mail
47
+ - uri: http://chat.us.freenode.net/rubyworks
48
+ name: chat
49
+ type: chat
50
+ extra: {}
51
+ load_path:
52
+ - lib
53
+ revision: 0
54
+ created: '2011-11-06'
55
+ summary: The best way to manage your application's configuration.
56
+ title: Courtier
57
+ version: 0.2.0
58
+ name: courtier
59
+ description: ! 'Courtier is a multi-tenant configuration system for Ruby projects.
60
+
61
+ Courtier can configure almost any Ruby tool or library.'
62
+ organization: Rubyworks
63
+ date: '2012-04-28'
@@ -0,0 +1,8 @@
1
+ --title "Runtime Configuration"
2
+ --readme README.rdoc
3
+ --protected
4
+ --private
5
+ lib/**/*.rb
6
+ -
7
+ [A-Z]*.*
8
+
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ config 'pry' do
4
+ puts "RC on Pry!"
5
+ $LOAD_PATH.unshift('lib')
6
+ end
7
+
8
+ #
9
+ # Detroit assembly.
10
+ #
11
+ config 'detroit' do
12
+ service :email do |s|
13
+ s.mailto = ['ruby-talk@ruby-lang.org',
14
+ 'rubyworks-mailinglist@googlegroups.com']
15
+ end
16
+
17
+ service :gem do |s|
18
+ s.gemspec = 'pkg/courtier.gemspec'
19
+ end
20
+
21
+ service :github do |s|
22
+ s.folder = 'web'
23
+ end
24
+
25
+ service :dnote do |s|
26
+ s.title = 'Source Notes'
27
+ s.output = 'log/notes.html'
28
+ end
29
+
30
+ service :locat do |s|
31
+ s.output = 'log/locat.html'
32
+ end
33
+
34
+ service :vclog do |s|
35
+ s.output = ['log/history.html',
36
+ 'log/changes.html']
37
+ end
38
+ end
39
+
40
+ #
41
+ # QED test coverage report using SimpleCov.
42
+ #
43
+ # Use `$properties.coverage_folder` to set directory in which to store
44
+ # coverage report this defaults to `log/coverage`.
45
+ #
46
+ # IMPORTANT! Unfortunately this will not give us a reliable report
47
+ # b/c QED uses the RC gem, so SimpleCov can't differentiate the two.
48
+ #
49
+ config 'qed', profile: 'cov' do
50
+ puts "QED w/coverage!"
51
+
52
+ require 'simplecov'
53
+
54
+ dir = $properties.coverage_folder
55
+
56
+ SimpleCov.start do
57
+ coverage_dir(dir || 'log/coverage')
58
+ #add_group "Label", "lib/qed/directory"
59
+ end
60
+ end
61
+
62
+ config 'qed' do
63
+ puts "QED!"
64
+ end
65
+
66
+ #
67
+ # Rake tasks
68
+ #
69
+ config 'rake' do
70
+ desc 'run unit tests'
71
+ task 'test' do
72
+ puts "Rake Boo!"
73
+ end
74
+ end
75
+
76
+ #
77
+ # Example configuration.
78
+ #
79
+ config 'example' do
80
+ puts "Configuration Example!"
81
+ end
82
+
@@ -0,0 +1,20 @@
1
+ # RELEASE HISTORY
2
+
3
+ ## 0.2.0 | 2012-04-16
4
+
5
+ Continued improvements to design and API. Basically,
6
+ just read the README to see what is new.
7
+
8
+ Changes:
9
+
10
+ *
11
+
12
+
13
+ ## 0.1.1 | 2012-04-09
14
+
15
+ Initial release of RC.
16
+
17
+ Changes:
18
+
19
+ * Happy first release.
20
+
@@ -0,0 +1,27 @@
1
+ (BSD-2-Clause license)
2
+
3
+ Ruby Confection (http://rubyworks.github.com/rc)
4
+
5
+ Copyright (c) 2011 Rubyworks. All rights reserved.
6
+
7
+ Redistribution and use in source and binary forms, with or without
8
+ modification, are permitted provided that the following conditions are met:
9
+
10
+ 1. Redistributions of source code must retain the above copyright notice,
11
+ this list of conditions and the following disclaimer.
12
+
13
+ 2. Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer in the
15
+ documentation and/or other materials provided with the distribution.
16
+
17
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
19
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20
+ COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
@@ -0,0 +1,38 @@
1
+ # Developer Notes
2
+
3
+
4
+ ## 2012-04-07 | Toplevel DSLs
5
+
6
+ If it were not for Ruby's mixing toplevel definitions into all
7
+ objects, I likely would have used the simpler design of
8
+ just loading the config files directly (via `#load`).
9
+
10
+ It's dissapointing that Ruby continues to insist on mixing toplevel
11
+ methods into all objects. It would be much easier to write script
12
+ DSLs if it did not, saving a good bit of code. In this case, for
13
+ instance, I probably could have shaved off 20% to 40% of the
14
+ current code --neither the Config or the Configuration class
15
+ would be needed, and the parser could be stripped down to just
16
+ enough code to collect a list of profiles since that is all it
17
+ would really be useful for then.
18
+
19
+
20
+ ## 2012-04-05 | Multiple Configurations
21
+
22
+ Should multiple definitions for the same tool and profile be
23
+ allowed?
24
+
25
+ config :qed, :cov do
26
+ ...
27
+ end
28
+
29
+ config :qed, :cov do
30
+ ...
31
+ end
32
+
33
+ configuration.invoke(:qed, :cov)
34
+
35
+ Should both definitions be called, or just the later? I have decide
36
+ that both will be called. If this becomes a concern, I may add a `#reconfig`
37
+ method which would first clear the list of matching configurations.
38
+
@@ -0,0 +1,185 @@
1
+ # Ruby Courtier
2
+
3
+ [Homepage](http://rubyworks.github.com/courtier) /
4
+ [Source Code](http://github.com/rubyworks/courtier) /
5
+ [Report Issue](http://github.com/rubyworks/courtier/issues) /
6
+ [Mailing List](http://googlegroups.com/group/rubyworks-mailinglist) /
7
+ [IRC Channel](http://chat.us.freenode.net/rubyworks)
8
+
9
+ [![Build Status](https://secure.travis-ci.org/rubyworks/courtier.png)](http://travis-ci.org/rubyworks/courtier)
10
+
11
+
12
+ ## About
13
+
14
+ *Ruby Courtier*, RC for short, is a is multi-tenant runtime configuration system
15
+ for Ruby tools. If was designed to facilitate Ruby-based configuration for
16
+ multiple tools in a single file. It is extremely simple, and univerally applicable
17
+ which makes it easy to understand and flexible in use.
18
+
19
+
20
+ ## Installation
21
+
22
+ To use RC via tools that support RC directly, there is nothing you need to
23
+ install. Installing the said tool should install `courtier` via a dependency and
24
+ load `courtier` when the tool is used.
25
+
26
+ To use RC with tools that don't provide direct support, first install RC
27
+ in the usual manner via RubyGems.
28
+
29
+ $ gem install courtier
30
+
31
+ Then add `-rc` to your system's `RUBYOPT` environment variable.
32
+
33
+ $ export RUBYOPT='-rc'
34
+
35
+ You will want to add that to your `.bashrc`, `.profile` or equivalent configuration
36
+ script.
37
+
38
+
39
+ ## Instruction
40
+
41
+ To use RC in a project create a master configuration file for the project called
42
+ `Config.rb`. The file can have any name that matches `.config.rb`, `Config.rb`
43
+ or `config.rb`, in that order of precedence. In this file add configuration
44
+ blocks by name of the commandline tool. For example, let's demonstrate how we could
45
+ use this to configure Rake tasks.
46
+
47
+ $ cat Config.rb
48
+ config :rake do
49
+ desc 'generate yard docs'
50
+ task :yard do
51
+ sh 'yard'
52
+ end
53
+ end
54
+
55
+ Now when `rake` is run the tasks defined in this configuration will be available.
56
+
57
+ You might wonder why anyone would do this. That's where the *multi-tenancy*
58
+ comes into play. Let's add another configuration.
59
+
60
+ $ cat Config.rb
61
+ title = "MyApp"
62
+
63
+ config :rake do
64
+ desc 'generate yard docs'
65
+ task :yard do
66
+ sh "yard doc --title #{title}"
67
+ end
68
+ end
69
+
70
+ config :qedoc do |doc|
71
+ doc.title = "#{title} Demos"
72
+ end
73
+
74
+ Now we have configuration for both the rake tool and the qedoc tool in
75
+ a single file. Thus we gain the advantage of reducing the file count of our
76
+ project while pulling our tool configurations together into one place.
77
+ Moreover, these configurations can potentially share settings as demonstrated
78
+ here via the `title` local variable.
79
+
80
+ RC also supports profiles, either via a `profile` block:
81
+
82
+ profile :cov
83
+ config :qed do
84
+ require 'simplecov'
85
+ ...
86
+ end
87
+ end
88
+
89
+ Or via a second config argument:
90
+
91
+ config :qed, :cov do
92
+ require 'simplecov'
93
+ ...
94
+ end
95
+
96
+ When utilizing the tool, set the profile via an environment variable.
97
+
98
+ $ profile='cov' qed
99
+
100
+ Some tools that support RC out-of-the-box, may support a profile command
101
+ line option for specifying the profile.
102
+
103
+ $ qed -p cov
104
+
105
+ Still other tools might utilize profiles to a more specific purpose of
106
+ the tool at hand. Consult the tool's documentation for details.
107
+
108
+
109
+ ## Qualifications
110
+
111
+ RC can be used with any Ruby-based commandline tool and there exists some
112
+ means of configuring the tool via a toplevel/global interface, or the tool
113
+ has been desinged to directly support RC.
114
+
115
+
116
+ ## Customization
117
+
118
+ A tool can provide dedicated support for RC by loading `rc` or `courtier`
119
+ and using the `court` method to define a configuration procedure. For example,
120
+ the `detroit` project defines:
121
+
122
+ require 'rc'
123
+
124
+ court 'detroit' do |config|
125
+ if config.command?
126
+ Detroit.rc_config << config
127
+ end
128
+ end
129
+
130
+ In our example, `detroit` is required this configuration will be proccessed.
131
+ The `if config.command?` condition ensures that it only happens if the config's
132
+ `command` property matches the current command, i.e. `$0 == 'detroit'`. We can
133
+ see that Detroit stores the configuration for later us. When Detroit gets
134
+ around to loading a project's build assemblies, it will check this `rc_config`
135
+ setting and evaluate the configurations found there via Detroit's own DSL.
136
+
137
+ It is important that Courtier be required first, ideally before anything else. This
138
+ ensures it will pick up all configured features.
139
+
140
+ Some tools will want to support a command line option for selecting a
141
+ configuration profile. RC has a convenience method to make this very
142
+ easy to do.
143
+
144
+ Courtier.profile_switch('qed', '-p', '--profile')
145
+
146
+ It does not remove the argument from `ARGV`, so the tool's command line option
147
+ parser should still account for it. This simply ensures RC will know what the
148
+ profile is by setting `ENV['profile']` to the entry following the switch.
149
+
150
+
151
+ ## Dependencies
152
+
153
+ ### Libraries
154
+
155
+ RC depends on the [Finder](http://rubyworks.github.com/finder) library
156
+ to provide reliable load path and Gem searching. This is used when importing
157
+ configurations from other projects.
158
+
159
+ ### Core Extensions
160
+
161
+ RC uses two core extensions, `#to_h`, which applies to a few different
162
+ classes, and `String#tabto`. These are *copied* from
163
+ [Ruby Facets](http://rubyworks.github.com/facets) to ensure a high
164
+ standard of interoperability.
165
+
166
+ Both of these methods have been suggested for inclusion in Ruby proper.
167
+ Please head over to Ruby Issue Tracker and add your support.
168
+
169
+ * http://bugs.ruby-lang.org/issues/749
170
+ * http://bugs.ruby-lang.org/issues/6056
171
+
172
+
173
+ ## Release Notes
174
+
175
+ Please see HISTORY.rdoc file.
176
+
177
+
178
+ ## Copyrights
179
+
180
+ Copyright (c) 2011 Rubyworks
181
+
182
+ Confection is distributable in accordance with the **BSD-2-Clause** license.
183
+
184
+ See LICENSE.txt file for details.
185
+
@@ -0,0 +1,7 @@
1
+ # This script is for use in the RUBYOPT, e.g. RUBYOPT="-rc".
2
+ #
3
+ # My apologies to the author of the `c` gem, but honestly
4
+ # I think it would be much better off that functionality
5
+ # were provided via some other gems, e.g. the `github` gem.
6
+
7
+ require 'courtier'
@@ -0,0 +1,8 @@
1
+ # Runtime Configuration for Ruby
2
+ #
3
+ module Courtier
4
+ require 'courtier/interface'
5
+ autoconfigure
6
+ end
7
+
8
+ # Copyright (c) 2011 Rubyworks (BSD-2-Clause)