ruby-configurable 1.0.1 → 1.0.2
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/History.txt +9 -0
- data/README.txt +2 -2
- data/lib/configurable.rb +27 -15
- data/test/test_configurable.rb +29 -0
- metadata +5 -7
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 1.0.2 / 2011-05-10
|
2
|
+
|
3
|
+
* 1 minor enhancement
|
4
|
+
|
5
|
+
* Default config is now accessible thru the generated Config module,
|
6
|
+
as Config.defaults. The default_config method added to your class
|
7
|
+
when you include Configurable is deprecated, but will continue to
|
8
|
+
work (on both your class and instances of it).
|
9
|
+
|
1
10
|
=== 1.0.1 / 2011-05-06
|
2
11
|
|
3
12
|
* 2 bugfixes
|
data/README.txt
CHANGED
@@ -53,13 +53,13 @@ Lets you make your Ruby class configurable with a simple mixin.
|
|
53
53
|
Doodad::Config # => a ConfigStruct::Struct
|
54
54
|
Doodad::Config::Bar # => another ConfigStruct::Struct
|
55
55
|
|
56
|
-
Doodad.
|
56
|
+
Doodad::Config.defaults # => #<struct Doodad::Config
|
57
57
|
# bar=#<struct Doodad::Config::Bar
|
58
58
|
# quux=42, wibble=nil>,
|
59
59
|
# baz=nil,
|
60
60
|
# foo="default">
|
61
61
|
|
62
|
-
Doodad.config # => a (deep) copy of
|
62
|
+
Doodad.config # => a (deep) copy of Doodad::Config.defaults,
|
63
63
|
# ready for use
|
64
64
|
|
65
65
|
Doodad.config.replace( # replaces config with passed values
|
data/lib/configurable.rb
CHANGED
@@ -14,7 +14,7 @@ require 'configurable/core_ext/inflections'
|
|
14
14
|
#
|
15
15
|
# This creates a ConfigStruct::Struct called Doodad::Config, along with
|
16
16
|
# a frozen instance of it containing the default options accessible with
|
17
|
-
# the Doodad.
|
17
|
+
# the Doodad::Config.defaults method (see ConfigStructDefaults).
|
18
18
|
#
|
19
19
|
# You can then use Doodad.config (see ConfigAccessors.config) to store
|
20
20
|
# the configuration for your class. See ConfigStruct::Struct for the
|
@@ -30,15 +30,14 @@ require 'configurable/core_ext/inflections'
|
|
30
30
|
# Doodad.config.one # => 1
|
31
31
|
#
|
32
32
|
module Configurable
|
33
|
-
VERSION = '1.0.
|
33
|
+
VERSION = '1.0.2' #:nodoc:
|
34
34
|
|
35
35
|
def self.included(klass) #:nodoc:
|
36
36
|
klass.extend Macros
|
37
37
|
klass.extend ConfigAccessors
|
38
38
|
end
|
39
39
|
|
40
|
-
|
41
|
-
def default_config
|
40
|
+
def default_config #:nodoc:
|
42
41
|
self.class.default_config
|
43
42
|
end
|
44
43
|
|
@@ -64,10 +63,10 @@ module Configurable
|
|
64
63
|
# configuration struct will be created as Doodad::Config.)
|
65
64
|
#
|
66
65
|
# You may also declare options with default settings, which will
|
67
|
-
# then be available thru the
|
68
|
-
# (e.g. Doodad.
|
69
|
-
#
|
70
|
-
#
|
66
|
+
# then be available thru the Config::defaults method on the
|
67
|
+
# generated struct (e.g. Doodad::Config.defaults; see documentation
|
68
|
+
# on ConfigStructDefaults). To declare defaults, pass them as hash
|
69
|
+
# parameters:
|
71
70
|
#
|
72
71
|
# configurable_options :one => 1, :two => 2
|
73
72
|
#
|
@@ -86,6 +85,8 @@ module Configurable
|
|
86
85
|
def configurable_options(*args)
|
87
86
|
@_config_struct, @_default_config =
|
88
87
|
create_struct(self, 'Config', *args)
|
88
|
+
@_config_struct.extend ConfigStructDefaults
|
89
|
+
@_config_struct.defaults = @_default_config
|
89
90
|
end
|
90
91
|
|
91
92
|
|
@@ -110,10 +111,25 @@ module Configurable
|
|
110
111
|
end
|
111
112
|
|
112
113
|
def config_struct #:nodoc:
|
114
|
+
# the ||= nil quashes an 'instance variable not initialized' warning
|
113
115
|
@_config_struct ||= nil
|
114
116
|
end
|
115
117
|
end
|
116
118
|
|
119
|
+
# Accessors for the class' default configuration to add to the
|
120
|
+
# generated Config module.
|
121
|
+
module ConfigStructDefaults
|
122
|
+
# The class' default configuration object. This object is a frozen
|
123
|
+
# instance of the Config struct (which is a ConfigStruct::Struct
|
124
|
+
# created by the Macros.configurable_options method).
|
125
|
+
attr_reader :defaults
|
126
|
+
|
127
|
+
def defaults=(new_defaults)
|
128
|
+
raise TypeError, 'defaults can only be assigned once' if defaults
|
129
|
+
@defaults = new_defaults
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
117
133
|
# Methods to access the class' current configuration and default
|
118
134
|
# configuration.
|
119
135
|
module ConfigAccessors
|
@@ -125,17 +141,13 @@ module Configurable
|
|
125
141
|
def config
|
126
142
|
raise NameError, 'use configurable_options to define settings' unless
|
127
143
|
config_struct
|
128
|
-
@_config ||=
|
144
|
+
@_config ||= config_struct.defaults.dup # dup unfreezes
|
129
145
|
end
|
130
146
|
|
131
|
-
|
132
|
-
# frozen instance of the class' Config struct (which is a
|
133
|
-
# ConfigStruct::Struct created by the Macros.configurable_options
|
134
|
-
# method).
|
135
|
-
def default_config
|
147
|
+
def default_config #:nodoc:
|
136
148
|
raise NameError, 'use configurable_options to define settings' unless
|
137
149
|
config_struct
|
138
|
-
|
150
|
+
config_struct.defaults
|
139
151
|
end
|
140
152
|
end
|
141
153
|
end
|
data/test/test_configurable.rb
CHANGED
@@ -119,6 +119,35 @@ describe Configurable do
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
+
describe 'generated Config class' do
|
123
|
+
before do
|
124
|
+
@struct = @test_class.const_get('Config')
|
125
|
+
refute_equal ::Config, @struct
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should return the default config' do
|
129
|
+
assert_respond_to @struct, :defaults
|
130
|
+
@defaults = @struct.defaults
|
131
|
+
assert_equal 1, @defaults.one
|
132
|
+
assert_nil @defaults.two
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'should return the same instance as the class default_config' do
|
136
|
+
assert_equal @test_class.default_config, @struct.defaults
|
137
|
+
assert_equal @test_class.default_config.object_id,
|
138
|
+
@struct.defaults.object_id
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should raise an error if you try to reassign to defaults' do
|
142
|
+
begin
|
143
|
+
@struct.defaults = @struct.new
|
144
|
+
flunk 'expected TypeError'
|
145
|
+
rescue TypeError
|
146
|
+
# passed test if #defaults= raises TypeError
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
122
151
|
describe 'an instance' do
|
123
152
|
before do
|
124
153
|
@test_inst = @test_class.new
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-configurable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- 2
|
10
|
+
version: 1.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kevin R. Bullock
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-05-11 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: rubyforge
|
@@ -75,7 +74,6 @@ files:
|
|
75
74
|
- lib/configurable/core_ext/inflections.rb
|
76
75
|
- test/test_config_struct.rb
|
77
76
|
- test/test_configurable.rb
|
78
|
-
has_rdoc: true
|
79
77
|
homepage: http://bitbucket.org/krbullock/configurable
|
80
78
|
licenses: []
|
81
79
|
|
@@ -106,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
104
|
requirements: []
|
107
105
|
|
108
106
|
rubyforge_project: handtools
|
109
|
-
rubygems_version: 1.
|
107
|
+
rubygems_version: 1.7.2
|
110
108
|
signing_key:
|
111
109
|
specification_version: 3
|
112
110
|
summary: Lets you make your Ruby class configurable with a simple mixin.
|