valise 0.8.2 → 0.9.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/doc/overview-diagram.svg +367 -0
- data/lib/valise/adapters/tilt.rb +47 -0
- data/lib/valise/adapters.rb +18 -0
- data/lib/valise/errors.rb +3 -6
- data/lib/valise/item-enum.rb +39 -0
- data/lib/valise/item.rb +8 -41
- data/lib/valise/path-matcher.rb +11 -4
- data/lib/valise/search-root.rb +13 -14
- data/lib/valise/set/definer.rb +9 -8
- data/lib/valise/set/extensions-decorator.rb +35 -0
- data/lib/valise/set.rb +88 -57
- data/lib/valise/stack/extensions-decorator.rb +53 -0
- data/lib/valise/stack.rb +45 -138
- data/lib/valise/stem-decorator.rb +0 -4
- data/lib/valise/strategies/merge-diff.rb +68 -0
- data/lib/valise/strategies/serialization.rb +33 -0
- data/lib/valise/strategies/set.rb +53 -0
- data/lib/valise/utils.rb +40 -1
- data/lib/valise.rb +9 -0
- data/spec/addable.rb +15 -9
- data/spec/fileset.rb +0 -44
- data/spec/glob-handling.rb +44 -0
- metadata +32 -17
- data/spec/glob_handling.rb +0 -28
- /data/spec/{dump_load.rb → dump-load.rb} +0 -0
- /data/spec/{error_handling.rb → error-handling.rb} +0 -0
- /data/spec/{merge_diff.rb → merge-diff.rb} +0 -0
- /data/spec/{search_root.rb → search-root.rb} +0 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'valise/errors'
|
2
|
+
|
3
|
+
module Valise
|
4
|
+
module Strategies
|
5
|
+
class Set
|
6
|
+
class << self
|
7
|
+
def root_class(&block)
|
8
|
+
if superclass == Valise::Strategies::Set
|
9
|
+
instance_eval(&block)
|
10
|
+
elsif self == Valise::Strategies::Set
|
11
|
+
raise "Complete class hierarchy fail"
|
12
|
+
else
|
13
|
+
superclass.root_class(&block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def classes
|
18
|
+
root_class{@classes ||= {}}
|
19
|
+
end
|
20
|
+
|
21
|
+
def instances
|
22
|
+
root_class{@instances ||= {}}
|
23
|
+
end
|
24
|
+
|
25
|
+
def [](index)
|
26
|
+
classes[index]
|
27
|
+
end
|
28
|
+
|
29
|
+
def register(index)
|
30
|
+
classes[index] = self
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_default(klass)
|
34
|
+
classes.default = klass
|
35
|
+
end
|
36
|
+
|
37
|
+
def default
|
38
|
+
set_default(self)
|
39
|
+
end
|
40
|
+
|
41
|
+
def check!(type)
|
42
|
+
classes.fetch(type)
|
43
|
+
rescue KeyError
|
44
|
+
raise Errors::UnregisteredStrategy.new(self.name, type)
|
45
|
+
end
|
46
|
+
|
47
|
+
def instance(type, options = nil)
|
48
|
+
instances[[type, options]] ||= classes[type].new(options)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/valise/utils.rb
CHANGED
@@ -17,12 +17,40 @@ module Valise
|
|
17
17
|
module_function :align
|
18
18
|
end
|
19
19
|
|
20
|
+
#XXX This has been overtaken by std-lib Pathname and should be mostly
|
21
|
+
#refactored out
|
20
22
|
module Unpath
|
21
23
|
def string_to_segments(string)
|
22
24
|
return string if string.empty?
|
23
25
|
string.split(::File::Separator)
|
24
26
|
end
|
25
27
|
|
28
|
+
def file_from_backtrace(line)
|
29
|
+
/(.*):\d+/.match(line)[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
def from_here(rel_path, base_path = nil)
|
33
|
+
base_path ||= file_from_backtrace(caller[0])
|
34
|
+
collapse(unpath(base_path) + unpath(rel_path))
|
35
|
+
end
|
36
|
+
|
37
|
+
def up_to(up_to = nil, base_path = nil)
|
38
|
+
base_path ||= file_from_backtrace(caller[0])
|
39
|
+
up_to ||= "lib"
|
40
|
+
|
41
|
+
abs_path = File::expand_path(base_path)
|
42
|
+
base_path = unpath(base_path)
|
43
|
+
until base_path.empty? or base_path.last == up_to
|
44
|
+
base_path.pop
|
45
|
+
end
|
46
|
+
|
47
|
+
if base_path.empty?
|
48
|
+
raise "Relative root #{up_to.inspect} not found in #{abs_path.inspect}"
|
49
|
+
end
|
50
|
+
|
51
|
+
return base_path
|
52
|
+
end
|
53
|
+
|
26
54
|
def unpath(parts)
|
27
55
|
if Array === parts and parts.length == 1
|
28
56
|
parts = parts[0]
|
@@ -58,8 +86,16 @@ module Valise
|
|
58
86
|
segments.each do |segment|
|
59
87
|
case segment
|
60
88
|
when '.'
|
89
|
+
when ""
|
90
|
+
if collapsed.empty?
|
91
|
+
collapsed.push segment
|
92
|
+
end
|
61
93
|
when '..'
|
62
|
-
collapsed.
|
94
|
+
if collapsed.empty?
|
95
|
+
collapsed.push segment
|
96
|
+
else
|
97
|
+
collapsed.pop
|
98
|
+
end
|
63
99
|
else
|
64
100
|
collapsed.push segment
|
65
101
|
end
|
@@ -75,5 +111,8 @@ module Valise
|
|
75
111
|
return segments
|
76
112
|
end
|
77
113
|
end
|
114
|
+
|
115
|
+
module_function :from_here, :up_to
|
116
|
+
public :from_here, :up_to
|
78
117
|
end
|
79
118
|
end
|
data/lib/valise.rb
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
require 'valise/set'
|
2
2
|
require 'valise/errors'
|
3
|
+
require 'valise/adapters'
|
3
4
|
|
4
5
|
module Valise
|
5
6
|
def self.define(&block)
|
6
7
|
Valise::Set.define(&block)
|
7
8
|
end
|
9
|
+
|
10
|
+
def self.read_only(*dirs)
|
11
|
+
Valise::Set.define do
|
12
|
+
dirs.each do |dir|
|
13
|
+
ro dir
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
8
17
|
end
|
data/spec/addable.rb
CHANGED
@@ -10,32 +10,38 @@ describe Valise do
|
|
10
10
|
sandbox.new :directory => ".conductor"
|
11
11
|
sandbox.new :directory => "spec"
|
12
12
|
sandbox.new :file => "home/.conductor/existed", :with_contents => "TEST"
|
13
|
-
|
13
|
+
end
|
14
|
+
|
15
|
+
let :one do
|
16
|
+
Valise::Set.define do
|
14
17
|
handle "test", :yaml
|
15
18
|
rw ".conductor"
|
16
19
|
end
|
20
|
+
end
|
17
21
|
|
18
|
-
|
22
|
+
let :two do
|
23
|
+
Valise::Set.define do
|
19
24
|
handle "test", nil, :hash_merge
|
20
25
|
defaults do
|
21
26
|
end
|
22
27
|
end
|
23
|
-
|
24
|
-
@sum = one + two
|
25
28
|
end
|
26
29
|
|
30
|
+
let :sum do
|
31
|
+
one + two
|
32
|
+
end
|
27
33
|
|
28
34
|
it "should be addable" do
|
29
|
-
|
35
|
+
sum.should be_an_instance_of(Valise::Set)
|
30
36
|
end
|
31
37
|
|
32
38
|
it "should add in order" do
|
33
|
-
|
34
|
-
|
39
|
+
sum[0].should be_an_instance_of(Valise::SearchRoot)
|
40
|
+
sum[1].should be_an_instance_of(Valise::DefinedDefaults)
|
35
41
|
end
|
36
42
|
|
37
43
|
it "should combine file handlers" do
|
38
|
-
|
39
|
-
|
44
|
+
sum.get("test").merge_diff.should be_a(Valise::Strategies::MergeDiff::HashMerge)
|
45
|
+
sum.get("test").dump_load.should be_a(Valise::Strategies::Serialization::YAML)
|
40
46
|
end
|
41
47
|
end
|
data/spec/fileset.rb
CHANGED
@@ -53,22 +53,6 @@ describe Valise do
|
|
53
53
|
@valise.find(:text).contents.should == "Other text"
|
54
54
|
@valise.find("text").contents.should == "Other text"
|
55
55
|
end
|
56
|
-
|
57
|
-
# it "should get yaml files named with strings" do
|
58
|
-
# @valise.find(:yaml).contents.should == {:one => 1}
|
59
|
-
# @valise.find("yaml").contents.should == {:one => 1}
|
60
|
-
# end
|
61
|
-
|
62
|
-
# it "should get yaml files from the filesystem" do
|
63
|
-
# sandbox.new :file => "home/.conductor/yaml", :with_contents => "--- \n- Coo\n"
|
64
|
-
# @valise.find(:yaml).contents.should == ["Coo"]
|
65
|
-
# @valise.find("yaml").contents.should == ["Coo"]
|
66
|
-
# end
|
67
|
-
|
68
|
-
# it "should get yaml files named with symbols" do
|
69
|
-
# @valise.find(:other).contents.should == [3,4,5]
|
70
|
-
# @valise.find("other").contents.should == [3,4,5]
|
71
|
-
# end
|
72
56
|
end
|
73
57
|
|
74
58
|
share_examples_for "a populating Valise" do
|
@@ -150,31 +134,3 @@ describe Valise do
|
|
150
134
|
end
|
151
135
|
end
|
152
136
|
end
|
153
|
-
|
154
|
-
describe Valise, " - the unpath method: " do
|
155
|
-
before do
|
156
|
-
@search_root = Valise::SearchRoot.new("")
|
157
|
-
end
|
158
|
-
|
159
|
-
it 'state => ["state"]' do
|
160
|
-
@search_root.unpath("state").should == %w{state}
|
161
|
-
end
|
162
|
-
|
163
|
-
it '["step", "step/step"] => ["step", "step", "step"]' do
|
164
|
-
@search_root.unpath(["step", "step/step"]).should == %w{step step step}
|
165
|
-
end
|
166
|
-
|
167
|
-
it '/etc/configs => ["", "etc", "configs"]' do
|
168
|
-
@search_root.unpath("/etc/configs").should == [""] + %w{etc configs}
|
169
|
-
end
|
170
|
-
|
171
|
-
it '["", "etc", "configs"] => ["", "etc", "configs"]' do
|
172
|
-
@search_root.unpath(["", "etc", "configs"]).should == [""] + %w{etc configs}
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'a File => #path' do
|
176
|
-
@file = File.new(__FILE__)
|
177
|
-
@path = __FILE__.split("/")
|
178
|
-
@search_root.unpath(@file)
|
179
|
-
end
|
180
|
-
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'valise'
|
2
|
+
require 'file-sandbox'
|
3
|
+
|
4
|
+
describe Valise, "glob handling" do
|
5
|
+
include FileSandbox
|
6
|
+
|
7
|
+
let :valise do
|
8
|
+
sandbox.new :directory => "base/test"
|
9
|
+
Valise::Set.define do
|
10
|
+
handle "test/full", :yaml
|
11
|
+
handle "**/*.file", :yaml
|
12
|
+
handle "path/*.path", :yaml
|
13
|
+
rw "base"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should not recognize unmatched path" do
|
18
|
+
valise.get("not_matched/full").dump_load.should_not be_a(Valise::Strategies::Serialization::YAML)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should not recognize path like a path glob" do
|
22
|
+
valise.get("path/full.notpath").should_not be_a(Valise::Strategies::Serialization::YAML)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should recognize based on a full path" do
|
26
|
+
valise.get("test/full").dump_load.should be_a(Valise::Strategies::Serialization::YAML)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should recognize base on a file glob" do
|
30
|
+
valise.get("test/by.file").dump_load.should be_a(Valise::Strategies::Serialization::YAML)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should recognize simple files based on glob" do
|
34
|
+
valise.get("by.file").dump_load.should be_a(Valise::Strategies::Serialization::YAML)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should recognize deep files based on glob" do
|
38
|
+
valise.get("a/b/c/d/e/by.file").dump_load.should be_a(Valise::Strategies::Serialization::YAML)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should recognize based on a path glob" do
|
42
|
+
valise.get("path/by.path").dump_load.should be_a(Valise::Strategies::Serialization::YAML)
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: valise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.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:
|
12
|
+
date: 2013-03-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: corundum
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,12 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
description: ! " Valise provides an API for accessing configuration and data files
|
26
31
|
for your\n application, including the population of default values, and managing
|
27
32
|
search\n paths. Written to encourage a cross-platform approach to maintaining
|
@@ -31,6 +36,7 @@ email:
|
|
31
36
|
executables: []
|
32
37
|
extensions: []
|
33
38
|
extra_rdoc_files:
|
39
|
+
- doc/overview-diagram.svg
|
34
40
|
- doc/README
|
35
41
|
- doc/Specification
|
36
42
|
- doc/Specifications
|
@@ -100,30 +106,39 @@ files:
|
|
100
106
|
- doc/Specification
|
101
107
|
- doc/Specifications
|
102
108
|
- lib/valise.rb
|
109
|
+
- lib/valise/item-enum.rb
|
103
110
|
- lib/valise/debugging.rb
|
104
|
-
- lib/valise/
|
105
|
-
- lib/valise/set.rb
|
111
|
+
- lib/valise/utils.rb
|
106
112
|
- lib/valise/errors.rb
|
107
|
-
- lib/valise/
|
113
|
+
- lib/valise/adapters.rb
|
114
|
+
- lib/valise/strategies/set.rb
|
115
|
+
- lib/valise/strategies/merge-diff.rb
|
116
|
+
- lib/valise/strategies/serialization.rb
|
117
|
+
- lib/valise/adapters/tilt.rb
|
108
118
|
- lib/valise/path-matcher.rb
|
109
119
|
- lib/valise/search-root.rb
|
120
|
+
- lib/valise/set.rb
|
121
|
+
- lib/valise/set/definer.rb
|
122
|
+
- lib/valise/set/extensions-decorator.rb
|
110
123
|
- lib/valise/stack.rb
|
124
|
+
- lib/valise/stack/extensions-decorator.rb
|
111
125
|
- lib/valise/stem-decorator.rb
|
112
|
-
- lib/valise/
|
126
|
+
- lib/valise/item.rb
|
113
127
|
- spec/addable.rb
|
114
|
-
- spec/
|
115
|
-
- spec/
|
128
|
+
- spec/dump-load.rb
|
129
|
+
- spec/error-handling.rb
|
116
130
|
- spec/fileset.rb
|
117
|
-
- spec/
|
131
|
+
- spec/glob-handling.rb
|
118
132
|
- spec/item.rb
|
119
|
-
- spec/
|
133
|
+
- spec/merge-diff.rb
|
120
134
|
- spec/population.rb
|
121
|
-
- spec/
|
135
|
+
- spec/search-root.rb
|
122
136
|
- spec/stemming.rb
|
123
137
|
- spec_help/file-sandbox.rb
|
124
138
|
- spec_help/gem_test_suite.rb
|
125
139
|
- spec_help/spec_helper.rb
|
126
140
|
- spec_help/ungemmer.rb
|
141
|
+
- doc/overview-diagram.svg
|
127
142
|
- doc/coverage/lib-fileset-utils_rb.html
|
128
143
|
- doc/coverage/rcov.js
|
129
144
|
- doc/coverage/jquery-1.3.2.min.js
|
@@ -188,13 +203,13 @@ files:
|
|
188
203
|
homepage: http://valise.rubyforge.org/
|
189
204
|
licenses:
|
190
205
|
- MIT
|
191
|
-
post_install_message:
|
206
|
+
post_install_message:
|
192
207
|
rdoc_options:
|
193
208
|
- --inline-source
|
194
209
|
- --main
|
195
210
|
- doc/README
|
196
211
|
- --title
|
197
|
-
- valise-0.
|
212
|
+
- valise-0.9.0 RDoc
|
198
213
|
require_paths:
|
199
214
|
- lib/
|
200
215
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -205,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
205
220
|
version: '0'
|
206
221
|
segments:
|
207
222
|
- 0
|
208
|
-
hash:
|
223
|
+
hash: -29894543
|
209
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
225
|
none: false
|
211
226
|
requirements:
|
@@ -214,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
229
|
version: '0'
|
215
230
|
requirements: []
|
216
231
|
rubyforge_project: valise
|
217
|
-
rubygems_version: 1.8.
|
232
|
+
rubygems_version: 1.8.24
|
218
233
|
signing_key:
|
219
234
|
specification_version: 3
|
220
235
|
summary: Manage configuration and data files simply
|
data/spec/glob_handling.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'valise'
|
2
|
-
require 'file-sandbox'
|
3
|
-
|
4
|
-
describe Valise, "glob handling" do
|
5
|
-
include FileSandbox
|
6
|
-
|
7
|
-
let :valise do
|
8
|
-
sandbox.new :directory => "base/test"
|
9
|
-
Valise::Set.define do
|
10
|
-
handle "test/full", :yaml
|
11
|
-
handle "**/*.file", :yaml
|
12
|
-
handle "path/*.path", :yaml
|
13
|
-
rw "base"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should recognize based on a full path" do
|
18
|
-
valise.serialization("test/full").should == Valise::Serialization::YAML
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should recognize base on a file glob" do
|
22
|
-
valise.serialization("test/by.file").should == Valise::Serialization::YAML
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should recognize based on a path glob" do
|
26
|
-
valise.serialization("path/by.path").should == Valise::Serialization::YAML
|
27
|
-
end
|
28
|
-
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|