confection 0.0.2 → 0.1.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 CHANGED
@@ -28,7 +28,7 @@ repositories:
28
28
  name: upstream
29
29
  resources:
30
30
  home: http://rubyworks.github.com/confection
31
- docs: http://rubydoc.info/gems/confection
31
+ docs: http://rubydoc.info/gems/confection/frames
32
32
  code: http://github.com/rubyworks/confection
33
33
  mail: http://groups.google.com/group/rubyworks-mailinglist
34
34
  extra: {}
@@ -38,8 +38,8 @@ revision: 0
38
38
  created: '2011-11-06'
39
39
  summary: Multi-tenant configuration for Ruby
40
40
  title: Confection
41
- version: 0.0.2
41
+ version: 0.1.0
42
42
  name: confection
43
43
  description: Confection is a multi-tenant configuration system for Ruby projects.
44
44
  organization: Rubyworks
45
- date: '2011-11-07'
45
+ date: '2011-11-17'
data/HISTORY.rdoc CHANGED
@@ -1,6 +1,23 @@
1
1
  = RELEASE HISTORY
2
2
 
3
- == 0.0.2 / 2011-11-07
3
+ == 0.1.0 | 2011-11-17
4
+
5
+ This major release, probably the first truly usable release,
6
+ adds support for multiple configration files by storing them
7
+ on a per working directory basis, renames the default config
8
+ file name to `.confile` or `confile` with or without an optional
9
+ `.rb` extension, and adds a class method for changing the file
10
+ name (though using the global variable still works if needed).
11
+
12
+ Changes:
13
+
14
+ * Configuration file default is '{.,}confile{.rb,}'.
15
+ * Default can be changed via class method or global.
16
+ * Configrations are stored per-working directory, to
17
+ support multiple configurations at once.
18
+
19
+
20
+ == 0.0.2 | 2011-11-07
4
21
 
5
22
  You can now use $CONFIG_FILE to change the default config file.
6
23
  Just set the variable prior to using confection. Confection
@@ -13,7 +30,7 @@ Changes:
13
30
  * Add $CONFIG_FILE to allow default config file to be adjusted.
14
31
 
15
32
 
16
- == 0.0.1 / 2011-11-06
33
+ == 0.0.1 | 2011-11-06
17
34
 
18
35
  This is the initial release of Confection.
19
36
 
data/README.rdoc CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  {Homepage}[http://rubyworks.github.com/confection] |
4
4
  {Source Code}[http://github.com/rubyworks/confection] |
5
+ {Report Issue}[http://github.com/rubyworks/confection/issues] |
5
6
  {Mailing List}[http://googlegroups.com/group/rubyworks-mailinglist]
6
7
 
7
8
  {<img src="http://travis-ci.org/rubyworks/confection.png" />}[http://travis-ci.org/rubyworks/confection]
@@ -10,17 +11,19 @@
10
11
  == Description
11
12
 
12
13
  Confection is multi-tenant configuration system for Ruby projects. If was
13
- designed to faciliate Ruby-based configuration for multiple tools in a
14
- single file. If is extremely simple, which makes it easy to understand
14
+ designed to facilitate Ruby-based configuration for multiple tools in a
15
+ single file. It is extremely simple, which makes it easy to understand
15
16
  and flexible in use.
16
17
 
17
18
 
18
19
  == Synopsis
19
20
 
20
- Create a file in you project called `config.rb`. In it, add configuration blocks
21
- by name. As an example let's demonstrate how we could use this for Rake tasks.
21
+ Create a file in you project called `Confile`. By default the file can have any
22
+ name tha matches the glob `{.,}confile{.rb,}` case insensitive. In this file
23
+ add configuration blocks by name. For example, let's demonstrate how we could
24
+ use this to configure Rake tasks.
22
25
 
23
- $ cat config.rb
26
+ $ cat Confile
24
27
  rake do
25
28
  desc 'generate yard docs'
26
29
  task :yard do
@@ -34,11 +37,11 @@ In our Rakefile:
34
37
  require 'confection'
35
38
  confection(:rake).call
36
39
 
37
- Now you might wonder why the heck you would do this. That's where the
38
- *multi-tenancy* comes into play. Let's add another configuration. This time
39
- for a tool that has native support for Confection.
40
+ Now you might wonder why the heck you would do this. That's where the *multi-tenancy*
41
+ comes into play. Let's add another configuration, and this time for a tool that has
42
+ native support for Confection.
40
43
 
41
- $ cat config.rb
44
+ $ cat Confile
42
45
  title = "myapp"
43
46
 
44
47
  rake do
@@ -54,12 +57,12 @@ for a tool that has native support for Confection.
54
57
 
55
58
  Now we have configuration for both the rake tool and the qed test tool in
56
59
  a single file. Thus we gain the advantage of reducing the file count of our
57
- project while pulling our project configuration together into one place.
60
+ project while pulling our tool configurations together into one place.
58
61
  Moreover, these configurations can potentially share settings as demonstrated
59
- here via the `TITLE` constant.
62
+ here via the `title` variable.
60
63
 
61
- Using Confection in your libraries is very simele. As you can see from our
62
- example Rakefile the #confection method is used to get a handle on a name
64
+ Using Confection in your libraries is very simple. As you can see from our
65
+ example Rakefile. The `#confection` method is used to get a handle on a named
63
66
  configuration. With it you have two options, `#call` or `#exec`. The first
64
67
  evaluates the configuration block at the toplevel, while the later evaluates
65
68
  the block in the context of the caller.
@@ -74,7 +77,7 @@ Please see HISTORY.rdoc file.
74
77
 
75
78
  Copyright (c) 2011 Rubyworks
76
79
 
77
- Confection is distributable in accordance with the terms of the BSD-2-Clause license.
80
+ Confection is distributable in accordance with the terms of the *BSD-2-Clause* license.
78
81
 
79
- See COPYING.rdoc for detiails.
82
+ See COPYING.rdoc for details.
80
83
 
data/lib/confection.rb CHANGED
@@ -5,30 +5,45 @@ require 'confection/basic_object'
5
5
  module Confection
6
6
 
7
7
  #
8
- if $CONFIG_FILE
9
- FILENAMES = [$CONFIG_FILE].flatten.compact
10
- else
11
- FILENAMES = ['.config.rb', 'config.rb']
8
+ @config = Hash.new{|h,k| h[k]={}}
9
+
10
+ #
11
+ def self.filename
12
+ @filename ||= (
13
+ $CONFIG_FILE ? $CONFIG_FILE : '{.,}confile{.rb,}'
14
+ )
15
+ end
16
+
17
+ # Configuration file can be changed using this method.
18
+ # Alternatively it can be changed using `$CONFIG_FILE`.
19
+ def self.filename=(glob)
20
+ @filename = glob
12
21
  end
13
22
 
14
23
  # Bootstrap the system, loading current configurations.
15
24
  #
16
25
  def self.bootstrap
17
- @config = {}
18
- begin
19
- ::Kernel.eval(read, Evaluator.binding, file)
20
- rescue => e
21
- raise e if $DEBUG
22
- abort e.message
26
+ if file
27
+ @config[Dir.pwd] = {}
28
+ begin
29
+ ::Kernel.eval(read, Evaluator.binding, file)
30
+ rescue => e
31
+ raise e if $DEBUG
32
+ warn e.message
33
+ end
23
34
  end
24
- @config
35
+ @config[Dir.pwd]
25
36
  end
26
37
 
27
38
  # Stores the configuration blocks.
28
39
  #
29
40
  # @return [Hash] configuration store
30
41
  def self.config
31
- @config ||= bootstrap
42
+ if @config.key?(Dir.pwd)
43
+ @config[Dir.pwd]
44
+ else
45
+ bootstrap
46
+ end
32
47
  end
33
48
 
34
49
  # Look-up configuration block.
@@ -55,30 +70,26 @@ module Confection
55
70
 
56
71
  # Read config file.
57
72
  #
58
- # @return [String] contents of the `.co.rb` file
73
+ # @return [String] contents of the `.conf.rb` file
59
74
  def self.read
60
75
  File.read(file)
61
76
  end
62
77
 
63
- # Find config file by looking up the '.co.rb' file.
78
+ # Find config file by looking up the '.conf.rb' file.
64
79
  #
65
80
  # @param dir [String]
66
81
  # Optional directory to begin search.
67
82
  #
68
83
  # @return [String] file path
69
84
  def self.file(dir=nil)
70
- @file ||= (
71
- file = nil
72
- dir = dir || Dir.pwd
73
- while dir != '/'
74
- FILENAMES.each do |fname|
75
- f = File.join(dir, fname)
76
- break(file = f) if File.exist?(f)
77
- end
78
- dir = File.dirname(dir)
85
+ dir = dir || Dir.pwd
86
+ while dir != '/'
87
+ if file = Dir.glob(File.join(dir,filename),File::FNM_CASEFOLD).first
88
+ return file
79
89
  end
80
- file
81
- )
90
+ dir = File.dirname(dir)
91
+ end
92
+ nil
82
93
  end
83
94
 
84
95
  # Root directory, where config file is located.
@@ -99,7 +110,7 @@ module Confection
99
110
  new.__binding__
100
111
  end
101
112
  def __binding__
102
- ::Kernel.binding
113
+ binding
103
114
  end
104
115
  def method_missing(sym, *args, &block)
105
116
  #def block.call
@@ -113,18 +124,26 @@ module Confection
113
124
  # that are posible on configuration blocks.
114
125
  #
115
126
  class Controller
116
- def initialize(block, &exec_block)
117
- @block = block
118
- @exec_block = exec_block
127
+ def initialize(scope, &block)
128
+ @scope = scope
129
+ @block = block
119
130
  end
120
- def exec(*args)
121
- @exec_block.call(*args)
131
+ def exec(*args) # should this be named #call instead?
132
+ @scope.instance_exec(*args, &@block)
122
133
  end
123
134
  def call(*args)
124
135
  ::Kernel.eval('self',::TOPLEVEL_BINDING).instance_exec(*args, &@block)
125
136
  end
137
+ def to_proc
138
+ @block
139
+ end
126
140
  end
127
141
 
142
+ class NullController
143
+ def exec(*); end
144
+ def call(*); end
145
+ def to_proc; Proc.new{}; end
146
+ end
128
147
  end
129
148
 
130
149
  # Confection's primary use method.
@@ -133,11 +152,10 @@ end
133
152
  def confection(name, *args)
134
153
  config_block = Confection[name.to_sym]
135
154
  if config_block
136
- Confection::Controller.new(config_block) do |*args|
137
- instance_exec *args, &config_block
138
- end
155
+ Confection::Controller.new(self, &config_block)
139
156
  else
140
- warn "no configuration -- `#{name}'"
157
+ #warn "no configuration -- `#{name}'"
158
+ Confection::NullController.new
141
159
  end
142
160
  end
143
161
 
@@ -1,5 +1,5 @@
1
- if !defined?(BasicObject)
1
+ unless Object.const_defined?(:BasicObject)
2
2
  require 'blankslate'
3
- ::BasicObject == ::BlankSlate
3
+ Object::BasicObject = Object::BlankSlate
4
4
  end
5
5
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: confection
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-08 00:00:00.000000000 Z
12
+ date: 2011-11-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: blankslate
16
- requirement: &23201580 !ruby/object:Gem::Requirement
16
+ requirement: &26062180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *23201580
24
+ version_requirements: *26062180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: detroit
27
- requirement: &23200860 !ruby/object:Gem::Requirement
27
+ requirement: &26077440 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *23200860
35
+ version_requirements: *26077440
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: qed
38
- requirement: &23200280 !ruby/object:Gem::Requirement
38
+ requirement: &26076620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *23200280
46
+ version_requirements: *26076620
47
47
  description: Confection is a multi-tenant configuration system for Ruby projects.
48
48
  email:
49
49
  - transfire@gmail.com