use-config 0.1.1 → 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/LICENSE +1 -1
- data/README.md +77 -0
- data/Rakefile +20 -50
- data/lib/use_config.rb +8 -6
- data/lib/use_config/configuration.rb +166 -64
- data/lib/use_config/version.rb +4 -0
- data/spec/use_config_configuration_spec.rb +294 -0
- data/spec/use_config_spec.rb +51 -0
- metadata +30 -24
- data/README +0 -34
- data/config/asd.yml +0 -7
- data/config/qwe.yml +0 -10
- data/test/test_010_configuration.rb +0 -90
- data/test/test_020_use_config.rb +0 -74
data/LICENSE
CHANGED
data/README.md
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
# UseConfig
|
2
|
+
|
3
|
+
Easy configuration solution for any Ruby class.
|
4
|
+
|
5
|
+
[UseConfig](https://github.com/slavach/use-config) allows a Ruby class to use
|
6
|
+
configuration stored in a YAML file.
|
7
|
+
|
8
|
+
Configuration is loaded by a single line of code, like:
|
9
|
+
|
10
|
+
use_config :conf
|
11
|
+
|
12
|
+
Once been loaded, configuration values are accessible by calling to the
|
13
|
+
corresponding methods:
|
14
|
+
|
15
|
+
conf.project.name
|
16
|
+
|
17
|
+
## Installation
|
18
|
+
|
19
|
+
UseConfig is available as the gem use-config.
|
20
|
+
|
21
|
+
gem ins use-config
|
22
|
+
|
23
|
+
## Usage Example
|
24
|
+
|
25
|
+
First, create the configuration file conf.yaml, containing a hash
|
26
|
+
representation:
|
27
|
+
|
28
|
+
project:
|
29
|
+
name: use-config-demo
|
30
|
+
title: UseConfig Demo Project
|
31
|
+
|
32
|
+
messages:
|
33
|
+
welcome: Welcome to the UseConfig Demo
|
34
|
+
lorem: Lorem ipsum dolor sit amet, consectetur adipisicing elit
|
35
|
+
|
36
|
+
Next, create a ruby program that uses the above configuration:
|
37
|
+
|
38
|
+
require 'use_config'
|
39
|
+
include UseConfig
|
40
|
+
|
41
|
+
class UseConfigDemo
|
42
|
+
use_config :conf # Creates a hash accessible by the 'conf' method
|
43
|
+
|
44
|
+
def show_project
|
45
|
+
print 'Name: ', conf.project.name, "\n"
|
46
|
+
print 'Title: ', conf.project.title, "\n"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
demo = UseConfigDemo.new
|
51
|
+
|
52
|
+
demo.show_project
|
53
|
+
|
54
|
+
print demo.conf.messages.welcome, "\n"
|
55
|
+
print demo.conf.messages.lorem, "\n"
|
56
|
+
|
57
|
+
## Development
|
58
|
+
|
59
|
+
Clone the latest code from Github:
|
60
|
+
|
61
|
+
git clone git://github.com/slavach/use-config.git
|
62
|
+
|
63
|
+
Install bundler:
|
64
|
+
|
65
|
+
gem install bundler
|
66
|
+
|
67
|
+
Install required gems:
|
68
|
+
|
69
|
+
bundle install
|
70
|
+
|
71
|
+
To invoke tests - run `rake spec` or simply `rake`.
|
72
|
+
|
73
|
+
## Author
|
74
|
+
|
75
|
+
UseConfig has been written by Svetoslav Chernobay <slava@chernobay.info>.
|
76
|
+
Feel free to contact him if you have any questions or comments.
|
77
|
+
|
data/Rakefile
CHANGED
@@ -1,67 +1,37 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
3
|
require 'rake/clean'
|
4
|
-
require 'rake/testtask'
|
5
4
|
require 'rake/rdoctask'
|
6
|
-
require 'rake/gempackagetask'
|
7
5
|
|
8
|
-
|
6
|
+
require 'yard'
|
7
|
+
require 'rspec'
|
8
|
+
require 'rspec/core/rake_task'
|
9
9
|
|
10
|
-
require
|
10
|
+
require File.dirname(__FILE__) + "/lib/use_config/version.rb"
|
11
11
|
|
12
|
-
|
13
|
-
s.name = 'use-config'
|
14
|
-
s.version = UseConfig::VERSION
|
15
|
-
s.platform = Gem::Platform::RUBY
|
16
|
-
s.has_rdoc = true
|
17
|
-
s.extra_rdoc_files = %w[ README LICENSE ]
|
18
|
-
s.rdoc_options = %w[ --main=README --line-numbers --inline-source ]
|
19
|
-
s.summary = 'UseConfig. Allows Ruby classes to use configuration, stored in YAML files.'
|
20
|
-
s.description = s.summary
|
21
|
-
s.author = 'Slava Chernobai'
|
22
|
-
s.email = 'chernobai@gmail.com'
|
23
|
-
s.homepage = 'http://code.slava.pp.ru/use-config/'
|
24
|
-
s.files = %w[ README LICENSE Rakefile ] + Dir.glob("{config,lib,test}/*") + Dir.glob('lib/*/*')
|
25
|
-
s.require_path = 'lib'
|
26
|
-
s.add_dependency 'hash-access', '>= 0.1.0'
|
27
|
-
end
|
28
|
-
|
29
|
-
task :default => [ :test ]
|
12
|
+
task :default => [ :spec ]
|
30
13
|
|
31
|
-
CLEAN.include(%w[ pkg doc
|
32
|
-
|
33
|
-
desc 'Generate README'
|
34
|
-
file 'README' do
|
35
|
-
%x[erb -T 1 README.erb > README] if File.exists?('README.erb')
|
36
|
-
end
|
14
|
+
CLEAN.include(%w[ pkg doc .yardoc use-config-*.gem ])
|
37
15
|
|
38
|
-
desc '
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
rd.title = 'UseConfig'
|
43
|
-
rd.rdoc_dir = 'doc'
|
44
|
-
rd.template = 'jamis'
|
45
|
-
rd.options = %w[ --line-numbers --inline-source ]
|
46
|
-
rd.rdoc_files.include('README', 'LICENSE', 'lib/*.rb', 'lib/*/*.rb')
|
16
|
+
desc 'Run RSpec examples'
|
17
|
+
RSpec::Core::RakeTask.new :spec do |t|
|
18
|
+
t.rspec_opts = "--colour --format documentation"
|
19
|
+
t.pattern = 'spec/*.rb'
|
47
20
|
end
|
48
21
|
|
49
|
-
desc
|
50
|
-
task :
|
51
|
-
|
22
|
+
desc "Build the gem"
|
23
|
+
task :build do
|
24
|
+
system "gem build use-config.gemspec"
|
52
25
|
end
|
53
26
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
t.test_files = FileList[ 'test/test*.rb' ].sort
|
58
|
-
t.verbose = true
|
27
|
+
desc "Push the gem to rubygems.org"
|
28
|
+
task :push do
|
29
|
+
system "gem push use-config-#{UseConfig::VERSION}.gem"
|
59
30
|
end
|
60
31
|
|
61
|
-
|
62
|
-
Rake::
|
63
|
-
|
64
|
-
|
65
|
-
p.need_zip = true
|
32
|
+
desc "Generate documentation"
|
33
|
+
YARD::Rake::YardocTask.new :doc do |t|
|
34
|
+
t.files = %w[ README.md, LICENSE, lib/**/*.rb ]
|
35
|
+
t.options = %w[ --title UseConfig ]
|
66
36
|
end
|
67
37
|
|
data/lib/use_config.rb
CHANGED
@@ -1,21 +1,22 @@
|
|
1
|
-
require '
|
1
|
+
require 'use_config/version'
|
2
2
|
require 'use_config/configuration'
|
3
3
|
|
4
|
-
# Extends calling class with UseConfig::ClassMethods
|
4
|
+
# Extends the calling class with UseConfig::ClassMethods
|
5
5
|
module UseConfig
|
6
|
-
VERSION = '0.1.1'
|
7
|
-
|
8
6
|
def self.included(base) # :nodoc:
|
9
7
|
base.extend ClassMethods
|
10
8
|
end
|
11
9
|
|
12
|
-
# Extends Object class with UseConfig::ClassMethods
|
10
|
+
# Extends the Object class with UseConfig::ClassMethods
|
11
|
+
# When UseConfig::ObjectExtend included, all the UseConfig::ClassMethods
|
12
|
+
# methods been added to Object and all its derivatives.
|
13
13
|
module ObjectExtend
|
14
14
|
def self.included(base) # :nodoc:
|
15
15
|
Object.extend ClassMethods
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
# This module contains class methods use_config and drop_config.
|
19
20
|
module ClassMethods
|
20
21
|
# Adds configuration hash readed from config/name.yaml file
|
21
22
|
# to configuration class, and generates configuration access methods.
|
@@ -29,11 +30,13 @@ module UseConfig
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
|
33
|
+
# Generates class accessor.
|
32
34
|
metaclass.instance_eval do
|
33
35
|
attr_accessor name
|
34
36
|
end
|
35
37
|
self.send "#{name}=".to_sym, UseConfig::Configuration.add_conf(self, name, options, &block)
|
36
38
|
|
39
|
+
# Generates instance accessor.
|
37
40
|
class_eval <<-EVAL
|
38
41
|
def #{name}
|
39
42
|
self.class.#{name}
|
@@ -56,6 +59,5 @@ module UseConfig
|
|
56
59
|
end
|
57
60
|
end
|
58
61
|
end
|
59
|
-
|
60
62
|
end
|
61
63
|
|
@@ -1,49 +1,110 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require 'hash_access'
|
3
2
|
require 'yaml'
|
4
3
|
require 'thread'
|
5
4
|
|
6
|
-
|
7
|
-
include HashAccess
|
5
|
+
require 'hash_access'
|
8
6
|
|
7
|
+
module UseConfig
|
8
|
+
# UseConfig::Configuration class plays two roles.
|
9
|
+
#
|
10
|
+
# An instance of the class is a hash, a configuration placeholder.
|
11
|
+
# It contents could be loaded from a YAML file or could be populated
|
12
|
+
# manually. Configuration values can be accessed using the hash notation
|
13
|
+
# +object['key']+ as well as using the method notation +object.key+.
|
14
|
+
#
|
15
|
+
# The class itself is a container. It containas above-mentioned configuration
|
16
|
+
# objects that are stored in the +conf+ hash attribute which is accessible
|
17
|
+
# by the +conf+ method.
|
18
|
+
#
|
19
|
+
# A particular instance should be created with the +add_conf+ method.
|
20
|
+
# It is not intended to use an instance as a standalone object.
|
21
|
+
#
|
22
|
+
# Usage example:
|
23
|
+
#
|
24
|
+
# UseConfig::Configuration.add_conf self, :qwerty, :empty => true
|
25
|
+
# UseConfig::Configuration.conf.qwerty.param_1 = 'Value 1'
|
26
|
+
# print UseConfig::Configuration.conf.qwerty.to_s, "\n"
|
27
|
+
#
|
28
|
+
# This class is designed as the UseConfig supplemental class. It is not very
|
29
|
+
# useful by its own.
|
9
30
|
class Configuration < Hash
|
31
|
+
include HashAccess
|
32
|
+
|
10
33
|
class << self
|
11
|
-
attr_accessor :
|
12
|
-
attr_accessor :default_config_path
|
34
|
+
attr_accessor :path
|
13
35
|
attr_accessor :extentions
|
36
|
+
attr_accessor :reload_when_add
|
37
|
+
attr_accessor :default_instance_properties
|
14
38
|
attr_accessor :conf
|
15
|
-
attr_accessor :settings
|
16
39
|
attr_accessor :mutex
|
17
40
|
end
|
18
41
|
|
19
|
-
self.
|
42
|
+
self.path = %w[. config]
|
43
|
+
self.extentions = %w[yml yaml]
|
44
|
+
self.reload_when_add = false
|
45
|
+
|
46
|
+
self.default_instance_properties = {
|
47
|
+
:name => nil,
|
48
|
+
:file => nil,
|
49
|
+
:use_file => true,
|
50
|
+
:path => self.path,
|
51
|
+
:extentions => self.extentions,
|
52
|
+
:used_by => [],
|
53
|
+
}
|
20
54
|
|
21
55
|
self.conf = {}
|
22
|
-
self.settings = {}
|
23
56
|
|
24
|
-
self.
|
25
|
-
self.default_config_path = [ '.', 'config' ]
|
26
|
-
self.extentions = [ 'yml', 'yaml' ]
|
57
|
+
self.mutex = Mutex.new
|
27
58
|
|
28
|
-
self
|
29
|
-
|
59
|
+
# Passes self to calling block.
|
60
|
+
#
|
61
|
+
# Example:
|
62
|
+
#
|
63
|
+
# UseConfig::Configuration.configure do |c|
|
64
|
+
# c.path << APP_ROOT + 'config'
|
65
|
+
# end
|
66
|
+
#
|
67
|
+
def self.configure
|
68
|
+
yield self if block_given?
|
30
69
|
end
|
31
70
|
|
71
|
+
# Creates a new config (an instance of +self+) (calls +self.new+)
|
72
|
+
# and inserts the result object it into +self.conf+ hash as
|
73
|
+
# +self.conf[name]+ element. If the config already exists and the
|
74
|
+
# +:reload_when_add+ class setting is set - reloads config contents.
|
75
|
+
#
|
76
|
+
# Returns the created config object.
|
77
|
+
#
|
78
|
+
# Parameters
|
79
|
+
#
|
80
|
+
# * +used_by+ - The class that uses the config. After the config created
|
81
|
+
# created, this class is assotiated with it. This prevents the config to
|
82
|
+
# be deleted if any class uses it.
|
83
|
+
# * +name+ - Config name. It is used as the +conf+ hash key as well as the
|
84
|
+
# attribute of the config itself.
|
85
|
+
# * +options+ - The options hash to be passed to +new+.
|
86
|
+
#
|
87
|
+
# Options
|
88
|
+
#
|
89
|
+
# * +:empty+ - Create an empty config. Don't load config from file.
|
90
|
+
# * +:file+ - Use the mentioned file instead of the default.
|
91
|
+
# files' search path.
|
32
92
|
def self.add_conf(used_by, name, options = {}, &block)
|
33
93
|
sname = name.to_s
|
34
94
|
self.mutex.synchronize do
|
35
95
|
if self.conf[sname]
|
36
|
-
self.conf[sname].reload! if self.
|
96
|
+
self.conf[sname].reload! if self.reload_when_add
|
37
97
|
self.conf[sname].used_by_add(used_by)
|
38
98
|
yield self.conf[sname] if block_given?
|
39
99
|
else
|
40
|
-
self.conf[sname] =
|
100
|
+
self.conf[sname] = self.new(sname, options, &block)
|
41
101
|
self.conf[sname].used_by_add(used_by)
|
42
102
|
end
|
43
103
|
self.conf[sname]
|
44
104
|
end # self.mutex.synchronize do
|
45
105
|
end
|
46
106
|
|
107
|
+
# Deletes the config if it is not in use.
|
47
108
|
def self.drop_conf(used_by, name)
|
48
109
|
sname = name.to_s
|
49
110
|
self.mutex.synchronize do
|
@@ -56,96 +117,137 @@ module UseConfig
|
|
56
117
|
end # self.mutex.synchronize do
|
57
118
|
end
|
58
119
|
|
59
|
-
#
|
120
|
+
# Deletes all configs.
|
121
|
+
def self.reset!
|
122
|
+
self.mutex.synchronize do
|
123
|
+
self.conf = {}
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# Instance behavior
|
60
128
|
|
129
|
+
attr_accessor :instance_properties
|
130
|
+
|
131
|
+
# What's this?
|
61
132
|
def configuration?
|
62
133
|
true
|
63
134
|
end
|
64
135
|
|
65
|
-
|
66
|
-
|
67
|
-
self
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
136
|
+
# Passes self to a calling block.
|
137
|
+
def configure(&block)
|
138
|
+
yield self if block_given?
|
139
|
+
end
|
140
|
+
|
141
|
+
# Initializes a new instance. Load configuration from file if given.
|
142
|
+
#
|
143
|
+
# Parameters:
|
144
|
+
#
|
145
|
+
# * +name+ - The object's name.
|
146
|
+
# * +options+ - Options' hash.
|
147
|
+
#
|
148
|
+
# Options:
|
149
|
+
#
|
150
|
+
# * +:empty: - Create empty object, don't read configuration from file.
|
151
|
+
# * No other options yet.
|
152
|
+
#
|
153
|
+
# Notes:
|
154
|
+
#
|
155
|
+
# Doesn't add any +use_by+ properties, even being passed in +options+.
|
156
|
+
# +use_by+ should be added later, by the caller, using +add_use_by+
|
157
|
+
# method.
|
158
|
+
def initialize(name, options, &block)
|
159
|
+
self.instance_properties = {}.access_by_methods
|
160
|
+
self.class.default_instance_properties.keys.each do |key|
|
161
|
+
if options[key].nil?
|
162
|
+
instance_properties[key] = self.class.default_instance_properties[key]
|
80
163
|
else
|
81
|
-
|
164
|
+
instance_properties[key] = options[key]
|
82
165
|
end
|
83
166
|
end
|
167
|
+
instance_properties.name = name.to_s
|
168
|
+
instance_properties.used_by = []
|
84
169
|
if options[:empty]
|
85
|
-
|
170
|
+
instance_properties.use_file = false
|
86
171
|
end
|
87
|
-
if
|
172
|
+
if instance_properties.use_file and instance_properties.file.nil?
|
88
173
|
config_file_find
|
89
|
-
if
|
174
|
+
if instance_properties.file.nil?
|
90
175
|
raise "Configuration file not found"
|
91
176
|
end
|
92
177
|
load_configuration
|
93
178
|
end
|
94
|
-
access_by_methods
|
179
|
+
self.access_by_methods
|
95
180
|
yield self if block_given?
|
96
181
|
self
|
97
|
-
end # def initialize
|
182
|
+
end # def initialize
|
183
|
+
|
184
|
+
private
|
98
185
|
|
186
|
+
# Sets +name+ property.
|
187
|
+
def set_name(name)
|
188
|
+
if name
|
189
|
+
self.instance_properties.name = name.to_s
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
# Adds the class to usage list.
|
99
194
|
def used_by_add(used_by)
|
100
|
-
|
101
|
-
|
195
|
+
unless self.instance_properties.used_by.include?(used_by)
|
196
|
+
self.instance_properties.used_by.push(used_by)
|
197
|
+
end
|
102
198
|
end
|
103
199
|
|
200
|
+
# Removes the class from usage list.
|
104
201
|
def used_by_drop(used_by)
|
105
|
-
if self.used_by.include?(used_by)
|
106
|
-
self.used_by.delete(used_by)
|
202
|
+
if self.instance_properties.used_by.include?(used_by)
|
203
|
+
self.instance_properties.used_by.delete(used_by)
|
107
204
|
end
|
108
|
-
self
|
109
205
|
end
|
110
206
|
|
207
|
+
# Returns +used_by+ property
|
208
|
+
def used_by
|
209
|
+
self.instance_properties.used_by
|
210
|
+
end
|
211
|
+
|
212
|
+
# Serches for configuration file.
|
111
213
|
def config_file_find
|
112
|
-
|
113
|
-
|
114
|
-
file = "#{dir}/#{name}.#{ext}"
|
214
|
+
instance_properties.path.each do |dir|
|
215
|
+
instance_properties.extentions.each do |ext|
|
216
|
+
file = "#{dir}/#{self.instance_properties.name}.#{ext}"
|
115
217
|
if File.exist?(file)
|
116
|
-
self.
|
117
|
-
|
218
|
+
self.instance_properties.use_file = true
|
219
|
+
self.instance_properties.file = file
|
118
220
|
end
|
119
221
|
end
|
120
222
|
end
|
121
|
-
self
|
122
223
|
end # def config_file_find
|
123
224
|
|
225
|
+
# Loads configuration from the +config_file+.
|
226
|
+
# TODO: rename this function to +load+
|
124
227
|
def load_configuration
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
228
|
+
begin
|
229
|
+
cfg = YAML.load_file(instance_properties.file)
|
230
|
+
cfg.each do |key, value|
|
231
|
+
self[key] = value
|
232
|
+
end
|
233
|
+
true
|
234
|
+
rescue
|
235
|
+
false
|
129
236
|
end
|
130
|
-
self
|
131
237
|
end
|
132
238
|
|
239
|
+
# Removes all the keys from itself.
|
133
240
|
def clear!
|
134
|
-
|
135
|
-
next if self.class.accessors.include?(key.to_sym)
|
136
|
-
delete(key)
|
137
|
-
end
|
138
|
-
yield self if block_given?
|
139
|
-
self
|
241
|
+
self.clear
|
140
242
|
end
|
141
243
|
|
244
|
+
# Reloads configuration from file.
|
142
245
|
def reload!
|
143
|
-
clear!
|
144
|
-
|
145
|
-
|
146
|
-
|
246
|
+
self.clear!
|
247
|
+
if (instance_properties.file && instance_properties.use_file)
|
248
|
+
load_configuration
|
249
|
+
end
|
147
250
|
end
|
148
|
-
|
149
251
|
end # class Configuration
|
150
252
|
end # module UseConfig
|
151
253
|
|
@@ -0,0 +1,294 @@
|
|
1
|
+
# vim foldmethod=syntax
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rspec'
|
5
|
+
|
6
|
+
require File.dirname(__FILE__) + "/../lib/use_config/configuration.rb"
|
7
|
+
|
8
|
+
describe UseConfig::Configuration, "instance public interface" do
|
9
|
+
before :each do
|
10
|
+
UseConfig::Configuration.reset!
|
11
|
+
UseConfig::Configuration.configure do |c|
|
12
|
+
c.path << "#{File.dirname(__FILE__)}/config"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#initialize" do
|
17
|
+
describe "correct usage" do
|
18
|
+
context "when option :empty given" do
|
19
|
+
before :each do
|
20
|
+
@conf = UseConfig::Configuration.new :empty_conf,
|
21
|
+
:empty => true
|
22
|
+
end
|
23
|
+
|
24
|
+
it "is empty after creation" do
|
25
|
+
@conf.should == {}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "assigns values by methods" do
|
29
|
+
@conf.core.name = 'conf'
|
30
|
+
@conf.core.name.should == 'conf'
|
31
|
+
end
|
32
|
+
|
33
|
+
it "has instance_properties" do
|
34
|
+
@conf.instance_properties.should_not == nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has instance_properties.name" do
|
38
|
+
@conf.instance_properties.name.should == 'empty_conf'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when option :file given" do
|
43
|
+
it "loads configuration from file" do
|
44
|
+
c = UseConfig::Configuration.new :the_first_conf,
|
45
|
+
:file => 'first_conf.yaml'
|
46
|
+
c.core.name.should = 'first_conf'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "incorrect usage" do
|
52
|
+
context "when config file missing" do
|
53
|
+
it "raises an error" do
|
54
|
+
expect {
|
55
|
+
UseConfig::Configuration.new :none_conf
|
56
|
+
}.to raise_error
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe UseConfig::Configuration, "private instance methods" do
|
64
|
+
before :each do
|
65
|
+
module ::UseConfig
|
66
|
+
class Configuration
|
67
|
+
public :set_name, :used_by_add, :used_by_drop, :used_by,
|
68
|
+
:config_file_find, :load_configuration,
|
69
|
+
:clear!, :reload!
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
@conf = UseConfig::Configuration.new :empty_conf,
|
74
|
+
:empty => true
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#set_name" do
|
78
|
+
it "changes name property" do
|
79
|
+
@conf.set_name :empty_conf_changed
|
80
|
+
@conf.instance_properties.name.should == 'empty_conf_changed'
|
81
|
+
end
|
82
|
+
|
83
|
+
it "doesn't change name when no parameter given" do
|
84
|
+
expect {
|
85
|
+
@conf.set_name
|
86
|
+
}.should raise_error
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe "#used_by_add" do
|
91
|
+
it "adds the element" do
|
92
|
+
@conf.used_by_add :class_one
|
93
|
+
@conf.used_by.include?(:class_one).should == true
|
94
|
+
@conf.used_by.count.should == 1
|
95
|
+
end
|
96
|
+
|
97
|
+
it "doesn't add the same element twice" do
|
98
|
+
@conf.used_by_add :class_two
|
99
|
+
@conf.used_by_add :class_two
|
100
|
+
@conf.used_by.count.should == 1
|
101
|
+
end
|
102
|
+
|
103
|
+
it "adds two different elements" do
|
104
|
+
@conf.used_by_add :class_three
|
105
|
+
@conf.used_by_add :class_four
|
106
|
+
@conf.used_by.count.should == 2
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#used_by_drop" do
|
111
|
+
it "removes the element" do
|
112
|
+
@conf.used_by_add :class_five
|
113
|
+
@conf.used_by_drop :class_five
|
114
|
+
@conf.used_by.count.should == 0
|
115
|
+
end
|
116
|
+
|
117
|
+
it "doesn't remove anything if the key is unknown" do
|
118
|
+
@conf.used_by_add :class_six
|
119
|
+
@conf.used_by_drop :non_existing_class
|
120
|
+
@conf.used_by.count.should == 1
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "#used_by" do
|
125
|
+
it "returns used_by array" do
|
126
|
+
@conf.used_by_add :class_seven
|
127
|
+
@conf.used_by.should == [ :class_seven ]
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "#config_file_find" do
|
132
|
+
it "finds the existing file" do
|
133
|
+
@conf.set_name :first_conf
|
134
|
+
@conf.config_file_find
|
135
|
+
@conf.instance_properties.file.should_not == nil
|
136
|
+
end
|
137
|
+
|
138
|
+
it "doesn't find any non-existent file" do
|
139
|
+
@conf.set_name :first_conf_missing
|
140
|
+
@conf.config_file_find
|
141
|
+
@conf.instance_properties.file.should == nil
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "#load_configuration" do
|
146
|
+
it "loads configuration from the existing file" do
|
147
|
+
@conf.set_name :first_conf
|
148
|
+
@conf.config_file_find
|
149
|
+
@conf.load_configuration
|
150
|
+
@conf.core.name.should == 'first_conf'
|
151
|
+
end
|
152
|
+
|
153
|
+
it "doesn't load configuration if the file is missing" do
|
154
|
+
@conf.name = :first_conf
|
155
|
+
@conf.config_file = 'missing_file'
|
156
|
+
@conf.load_configuration.should == false
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "#clear!" do
|
161
|
+
it "clears itself" do
|
162
|
+
@conf.qwerty = 'qwerty'
|
163
|
+
@conf.asdfgh = 'asdfgh'
|
164
|
+
@conf.clear!
|
165
|
+
@conf.keys.should == []
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe "#reload!" do
|
170
|
+
context "when uses config file" do
|
171
|
+
it "clears itself and loads configuration" do
|
172
|
+
@conf.set_name :first_conf
|
173
|
+
@conf.config_file_find
|
174
|
+
@conf.load_configuration
|
175
|
+
@conf.core.name = 'changed'
|
176
|
+
@conf.reload!
|
177
|
+
@conf.core.name.should == 'first_conf'
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context "when doesn't use config file" do
|
182
|
+
it "clears itself" do
|
183
|
+
@conf.core.name = 'changed'
|
184
|
+
@conf.reload!
|
185
|
+
@conf.keys.should == []
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
describe UseConfig::Configuration, "class" do
|
192
|
+
before :each do
|
193
|
+
UseConfig::Configuration.reset!
|
194
|
+
UseConfig::Configuration.configure do |c|
|
195
|
+
c.path << "#{File.dirname(__FILE__)}/config"
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "general class behaivior" do
|
200
|
+
end
|
201
|
+
|
202
|
+
describe ".add_conf" do
|
203
|
+
context "config file is not used" do
|
204
|
+
before :each do
|
205
|
+
UseConfig::Configuration.add_conf :some_class, :cfg,
|
206
|
+
:empty => true
|
207
|
+
end
|
208
|
+
|
209
|
+
it "creates a new empty config hash" do
|
210
|
+
UseConfig::Configuration.conf['cfg'].should == {}
|
211
|
+
end
|
212
|
+
|
213
|
+
it "hash values are accessible by methods" do
|
214
|
+
UseConfig::Configuration.conf['cfg'].a_key = 'a_value'
|
215
|
+
UseConfig::Configuration.conf['cfg'].a_key.should == 'a_value'
|
216
|
+
end
|
217
|
+
|
218
|
+
it "child hash values are accessinle by methods" do
|
219
|
+
UseConfig::Configuration.conf['cfg'].one.two.three = 'a_value'
|
220
|
+
UseConfig::Configuration.conf['cfg'].one.two.three == 'a_value'
|
221
|
+
end
|
222
|
+
|
223
|
+
it "keeps configuration when called the next time" do
|
224
|
+
UseConfig::Configuration.conf['cfg'].a_key = 'a_value'
|
225
|
+
UseConfig::Configuration.add_conf :another_class, :cfg,
|
226
|
+
:empty => true
|
227
|
+
UseConfig::Configuration.conf['cfg'].a_key.should == 'a_value'
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
context "config file present" do
|
232
|
+
before :each do
|
233
|
+
UseConfig::Configuration.add_conf :some_class, :first_conf
|
234
|
+
UseConfig::Configuration.add_conf :another_class, :second_conf
|
235
|
+
end
|
236
|
+
|
237
|
+
it "loads first configuration" do
|
238
|
+
UseConfig::Configuration.conf['first_conf'].should_not == nil
|
239
|
+
end
|
240
|
+
|
241
|
+
it "loads second configuration" do
|
242
|
+
UseConfig::Configuration.conf['second_conf'].should_not == nil
|
243
|
+
end
|
244
|
+
|
245
|
+
it "first configuration is correct" do
|
246
|
+
UseConfig::Configuration.conf['first_conf'].core.name.should == 'first_conf'
|
247
|
+
end
|
248
|
+
|
249
|
+
it "second configuration is correct" do
|
250
|
+
UseConfig::Configuration.conf['second_conf'].name.should == 'second_conf'
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
context "config file missing" do
|
255
|
+
it "raises error" do
|
256
|
+
expect {
|
257
|
+
UseConfig::Configuration.add_conf :some_class, :missing_conf
|
258
|
+
}.to raise_error
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
describe ".drop_conf" do
|
264
|
+
before :each do
|
265
|
+
UseConfig::Configuration.add_conf :some_class, :cfg,
|
266
|
+
:empty => true
|
267
|
+
end
|
268
|
+
|
269
|
+
context "configuration is used by a single class" do
|
270
|
+
it "destroys configuration" do
|
271
|
+
UseConfig::Configuration.drop_conf :some_class, :cfg
|
272
|
+
UseConfig::Configuration.conf['cfg'].should == nil
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
context "configuration is used by two classes" do
|
277
|
+
it "keeps configuration when called once" do
|
278
|
+
UseConfig::Configuration.add_conf :another_class, :cfg,
|
279
|
+
:empty => true
|
280
|
+
UseConfig::Configuration.drop_conf :some_class, :cfg
|
281
|
+
UseConfig::Configuration.conf['cfg'].should_not == nil
|
282
|
+
end
|
283
|
+
|
284
|
+
it "destroys configuration when called a second time" do
|
285
|
+
UseConfig::Configuration.add_conf :another_class, :cfg,
|
286
|
+
:empty => true
|
287
|
+
UseConfig::Configuration.drop_conf :some_class, :cfg
|
288
|
+
UseConfig::Configuration.drop_conf :another_class, :cfg
|
289
|
+
UseConfig::Configuration.conf['cfg'].should == nil
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec'
|
3
|
+
|
4
|
+
require File.dirname(__FILE__) + "/../lib/use_config.rb"
|
5
|
+
|
6
|
+
class Sample; include UseConfig; end
|
7
|
+
|
8
|
+
describe UseConfig do
|
9
|
+
before :each do
|
10
|
+
UseConfig::Configuration.reset!
|
11
|
+
UseConfig::Configuration.configure do |c|
|
12
|
+
c.path << "#{File.dirname(__FILE__)}/config"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "Sample class includes UseConfig" do
|
17
|
+
it "has method use_config" do
|
18
|
+
Sample.respond_to?(:use_config).should == true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "has method drop_config" do
|
22
|
+
Sample.respond_to?(:drop_config).should == true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "uses configuration" do
|
26
|
+
Sample.use_config :first_conf
|
27
|
+
Sample.respond_to?(:first_conf).should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "loads configuration" do
|
31
|
+
Sample.use_config :first_conf
|
32
|
+
Sample.first_conf.core.name.should == 'first_conf'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "Samle class instance" do
|
37
|
+
before :each do
|
38
|
+
Sample.use_config :first_conf
|
39
|
+
@sample = Sample.new
|
40
|
+
end
|
41
|
+
|
42
|
+
it "has configuration accessor" do
|
43
|
+
@sample.respond_to? :first_conf
|
44
|
+
end
|
45
|
+
|
46
|
+
it "has the actual configuration" do
|
47
|
+
@sample.first_conf.core.name.should == 'first_conf'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
metadata
CHANGED
@@ -1,48 +1,54 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: use-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
|
-
-
|
8
|
+
- Svetoslav Chernobay
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
12
|
|
12
|
-
date:
|
13
|
+
date: 2011-03-08 00:00:00 +03:00
|
13
14
|
default_executable:
|
14
15
|
dependencies:
|
15
16
|
- !ruby/object:Gem::Dependency
|
16
17
|
name: hash-access
|
17
|
-
|
18
|
-
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
19
21
|
requirements:
|
20
22
|
- - ">="
|
21
23
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
version: "0.2"
|
25
|
+
- - <=
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: "0.3"
|
28
|
+
type: :runtime
|
29
|
+
version_requirements: *id001
|
30
|
+
description: UseConfig library allows a Ruby class to use configuration stored in a YAML file
|
31
|
+
email: slava@chernobay.info
|
26
32
|
executables: []
|
27
33
|
|
28
34
|
extensions: []
|
29
35
|
|
30
36
|
extra_rdoc_files:
|
31
|
-
- README
|
37
|
+
- README.md
|
32
38
|
- LICENSE
|
33
39
|
files:
|
34
|
-
- README
|
40
|
+
- README.md
|
35
41
|
- LICENSE
|
36
42
|
- Rakefile
|
37
|
-
- config/asd.yml
|
38
|
-
- config/qwe.yml
|
39
43
|
- lib/use_config.rb
|
40
|
-
- lib/use_config
|
41
|
-
- test/test_020_use_config.rb
|
42
|
-
- test/test_010_configuration.rb
|
43
44
|
- lib/use_config/configuration.rb
|
45
|
+
- lib/use_config/version.rb
|
46
|
+
- spec/use_config_spec.rb
|
47
|
+
- spec/use_config_configuration_spec.rb
|
44
48
|
has_rdoc: true
|
45
|
-
homepage: http://
|
49
|
+
homepage: http://github.com/slavach/use-config
|
50
|
+
licenses: []
|
51
|
+
|
46
52
|
post_install_message:
|
47
53
|
rdoc_options:
|
48
54
|
- --main=README
|
@@ -51,23 +57,23 @@ rdoc_options:
|
|
51
57
|
require_paths:
|
52
58
|
- lib
|
53
59
|
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
54
61
|
requirements:
|
55
62
|
- - ">="
|
56
63
|
- !ruby/object:Gem::Version
|
57
64
|
version: "0"
|
58
|
-
version:
|
59
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
60
67
|
requirements:
|
61
68
|
- - ">="
|
62
69
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
64
|
-
version:
|
70
|
+
version: 1.3.6
|
65
71
|
requirements: []
|
66
72
|
|
67
|
-
rubyforge_project:
|
68
|
-
rubygems_version: 1.
|
73
|
+
rubyforge_project: use-config
|
74
|
+
rubygems_version: 1.5.2
|
69
75
|
signing_key:
|
70
|
-
specification_version:
|
71
|
-
summary:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Easy configuration solution for any Ruby class
|
72
78
|
test_files: []
|
73
79
|
|
data/README
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
== UseConfig 0.1.1
|
2
|
-
|
3
|
-
This library allows Ruby classes to use configuration stored in YAML file,
|
4
|
-
or several configurations in several files.
|
5
|
-
|
6
|
-
=== Installation
|
7
|
-
|
8
|
-
gem ins use-config
|
9
|
-
|
10
|
-
=== Usage
|
11
|
-
|
12
|
-
Create configuration file 'qwe.yaml'.
|
13
|
-
|
14
|
-
project:
|
15
|
-
name: my_project
|
16
|
-
title: Project using UseConfig
|
17
|
-
|
18
|
-
Sample code:
|
19
|
-
|
20
|
-
$:.unshift 'lib'
|
21
|
-
|
22
|
-
require 'use_config'
|
23
|
-
include UseConfig
|
24
|
-
|
25
|
-
class UseConfigExample
|
26
|
-
use_config :qwe
|
27
|
-
end
|
28
|
-
|
29
|
-
print 'UseConfig Example', "\n"
|
30
|
-
|
31
|
-
ex = UseConfigExample.new
|
32
|
-
print ' ex.qwe.common.name: ', ex.qwe.common.name, "\n"
|
33
|
-
print ' ex.qwe.common.title: ', ex.qwe.common.title, "\n"
|
34
|
-
|
data/config/asd.yml
DELETED
data/config/qwe.yml
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'use_config/configuration'
|
3
|
-
|
4
|
-
class UseConfigConfigurationTest < Test::Unit::TestCase
|
5
|
-
def test_010
|
6
|
-
cfg = UseConfig::Configuration.new(:zxc, :empty => true)
|
7
|
-
assert_instance_of(UseConfig::Configuration, cfg)
|
8
|
-
assert_respond_to(cfg, :name)
|
9
|
-
assert_respond_to(cfg, :config_path)
|
10
|
-
assert_respond_to(cfg, :config_file)
|
11
|
-
assert_respond_to(cfg, :config_file_find)
|
12
|
-
assert_respond_to(cfg, :configuration?)
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_020
|
16
|
-
cfg = UseConfig::Configuration.new(:zxc, :empty => true)
|
17
|
-
assert_equal(true, cfg.configuration?)
|
18
|
-
assert_equal('zxc', cfg.name)
|
19
|
-
assert_equal([ '.', 'config' ], cfg.config_path)
|
20
|
-
assert_nil(cfg.config_file)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_030
|
24
|
-
assert_raise RuntimeError do
|
25
|
-
UseConfig::Configuration.new :zxc
|
26
|
-
end
|
27
|
-
assert_raise RuntimeError do
|
28
|
-
UseConfig::Configuration.new(:zxc, :empty => false)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_040
|
33
|
-
cfg = UseConfig::Configuration.new(:qwe)
|
34
|
-
assert_equal(true, cfg.configuration?)
|
35
|
-
assert_equal('qwe', cfg.name)
|
36
|
-
assert_equal([ '.', 'config' ], cfg.config_path)
|
37
|
-
assert_equal('config/qwe.yml', cfg.config_file)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_050
|
41
|
-
cfg = UseConfig::Configuration.new(:qwe, :path_insert => '123456')
|
42
|
-
assert_equal([ '123456', '.', 'config' ], cfg.config_path)
|
43
|
-
cfg = UseConfig::Configuration.new(:qwe, :path_insert => [ '123456', '654321' ])
|
44
|
-
assert_equal([ '123456', '654321', '.', 'config' ], cfg.config_path)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_060
|
48
|
-
cfg = UseConfig::Configuration.new(:zxc, :empty => true) do |c|
|
49
|
-
c.qwerty = 11
|
50
|
-
c.asdfgh = 22
|
51
|
-
c.zxcvbn = 33
|
52
|
-
c.one.two.three.four = 44
|
53
|
-
end
|
54
|
-
assert_equal(11, cfg.qwerty)
|
55
|
-
assert_equal(22, cfg.asdfgh)
|
56
|
-
assert_equal(33, cfg.zxcvbn)
|
57
|
-
assert_equal(44, cfg.one.two.three.four)
|
58
|
-
cfg.reload! do |c|
|
59
|
-
c.qwerty = 1111
|
60
|
-
c.asdfgh = 2222
|
61
|
-
end
|
62
|
-
assert_equal(1111, cfg.qwerty)
|
63
|
-
assert_equal(2222, cfg.asdfgh)
|
64
|
-
assert_equal({}, cfg.zxcvbn)
|
65
|
-
assert_equal({}, cfg.one.two.three.four)
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_070
|
69
|
-
cfg = UseConfig::Configuration.new(:qwe)
|
70
|
-
assert_equal('use_config_example', cfg.common.name)
|
71
|
-
assert_equal('UseConfig Example', cfg.common.title)
|
72
|
-
assert_equal('First', cfg.common.other.first)
|
73
|
-
end
|
74
|
-
|
75
|
-
def test_080
|
76
|
-
cfg = UseConfig::Configuration.new(:qwe)
|
77
|
-
cfg.common = 'Common'
|
78
|
-
assert_equal('Common', cfg.common)
|
79
|
-
cfg.clear!
|
80
|
-
assert_nil(cfg['common'])
|
81
|
-
cfg.common = 'Common'
|
82
|
-
cfg.reload!
|
83
|
-
assert_equal('use_config_example', cfg.common.name)
|
84
|
-
assert_equal('UseConfig Example', cfg.common.title)
|
85
|
-
assert_equal('First', cfg.common.other.first)
|
86
|
-
cfg.common.other.first = 'Another First'
|
87
|
-
assert_equal('Another First', cfg.common.other.first)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
data/test/test_020_use_config.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'use_config'
|
3
|
-
|
4
|
-
class UsesUseConfig
|
5
|
-
include UseConfig
|
6
|
-
use_config :qwe
|
7
|
-
use_config :asd
|
8
|
-
def self.name_in_use
|
9
|
-
true
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class UsesUseConfigSecond
|
14
|
-
include UseConfig
|
15
|
-
end
|
16
|
-
|
17
|
-
class UsesUseConfigThird
|
18
|
-
include UseConfig
|
19
|
-
end
|
20
|
-
|
21
|
-
class UseConfigTest < Test::Unit::TestCase
|
22
|
-
def test_010_sender_class_extend
|
23
|
-
assert_respond_to(UsesUseConfig, :use_config)
|
24
|
-
assert_respond_to(UsesUseConfig, :qwe)
|
25
|
-
assert_respond_to(UsesUseConfig, :asd)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_020_object_class_extend
|
29
|
-
UsesUseConfig.send :include, UseConfig::ObjectExtend
|
30
|
-
assert_respond_to(Object, :use_config)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_030
|
34
|
-
5.times do
|
35
|
-
UsesUseConfig.use_config :qwe
|
36
|
-
end
|
37
|
-
assert_equal(1, UsesUseConfig.qwe.used_by.size)
|
38
|
-
UsesUseConfigSecond.use_config :qwe
|
39
|
-
assert_equal(2, UsesUseConfig.qwe.used_by.size)
|
40
|
-
UsesUseConfigThird.use_config :qwe
|
41
|
-
assert_equal(3, UsesUseConfig.qwe.used_by.size)
|
42
|
-
UsesUseConfigThird.drop_config :qwe
|
43
|
-
assert_equal(2, UsesUseConfig.qwe.used_by.size)
|
44
|
-
UsesUseConfigSecond.drop_config :qwe
|
45
|
-
assert_equal(1, UsesUseConfig.qwe.used_by.size)
|
46
|
-
UsesUseConfig.drop_config :qwe
|
47
|
-
assert_equal(false, UsesUseConfig.respond_to?(:qwe))
|
48
|
-
assert_equal(false, UsesUseConfig.instance_methods.include?(:qwe))
|
49
|
-
UsesUseConfig.drop_config :qwe
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_040
|
53
|
-
UsesUseConfig.use_config :qwe
|
54
|
-
assert_equal('use_config_example', UsesUseConfig.qwe.common.name)
|
55
|
-
UsesUseConfig.qwe.clear!
|
56
|
-
assert_equal({}, UsesUseConfig.qwe.common)
|
57
|
-
UsesUseConfig.qwe.reload!
|
58
|
-
assert_equal('use_config_example', UsesUseConfig.qwe.common.name)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_050
|
62
|
-
assert_raise RuntimeError do
|
63
|
-
UsesUseConfig.use_config :name_in_use
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_050
|
68
|
-
UsesUseConfig.use_config :qwe
|
69
|
-
inst = UsesUseConfig.new
|
70
|
-
assert_respond_to(inst, :qwe)
|
71
|
-
assert_equal('use_config_example', inst.qwe.common.name)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|