jsus 0.2.5 → 0.2.6
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/CHANGELOG +6 -2
- data/VERSION +1 -1
- data/bin/jsus +15 -6
- data/jsus.gemspec +16 -15
- data/lib/jsus.rb +13 -13
- data/lib/jsus/container.rb +31 -28
- data/lib/jsus/package.rb +5 -6
- data/lib/jsus/packager.rb +6 -6
- data/lib/jsus/pool.rb +9 -12
- data/lib/jsus/source_file.rb +15 -15
- data/lib/jsus/tag.rb +5 -5
- data/lib/jsus/util.rb +7 -0
- data/lib/jsus/util/documenter.rb +118 -0
- data/lib/jsus/util/tree.rb +201 -0
- data/lib/jsus/util/validator.rb +8 -0
- data/lib/jsus/util/validator/base.rb +48 -0
- data/lib/jsus/util/validator/mooforge.rb +25 -0
- data/spec/jsus/pool_spec.rb +3 -3
- data/spec/jsus/{documenter_spec.rb → util/documenter_spec.rb} +3 -3
- data/spec/jsus/{tree_spec.rb → util/tree_spec.rb} +111 -27
- data/spec/jsus/{validator → util/validator}/base_spec.rb +5 -5
- data/spec/jsus/{validator → util/validator}/mooforge_spec.rb +7 -7
- metadata +18 -17
- data/lib/jsus/documenter.rb +0 -99
- data/lib/jsus/tree.rb +0 -124
- data/lib/jsus/validator.rb +0 -2
- data/lib/jsus/validator/base.rb +0 -38
- data/lib/jsus/validator/mooforge.rb +0 -19
@@ -1,14 +1,14 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Jsus::Documenter do
|
3
|
+
describe Jsus::Util::Documenter do
|
4
4
|
subject { described_class.new }
|
5
|
-
let(:input_dir) { "
|
5
|
+
let(:input_dir) { "spec/data/Basic/app/javascripts/Orwik" }
|
6
6
|
let(:pool) { Jsus::Pool.new(input_dir) }
|
7
7
|
|
8
8
|
describe "<<" do
|
9
9
|
it "should add source files to tree" do
|
10
10
|
pool.sources.each {|s| subject << s}
|
11
|
-
subject.tree["/Orwik/Color.js"].
|
11
|
+
subject.tree["/Orwik/Color.js"].should be_a(Jsus::SourceFile)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe Jsus::Tree::Node do
|
3
|
+
describe Jsus::Util::Tree::Node do
|
4
4
|
describe "#initialize" do
|
5
5
|
it "should accept full path" do
|
6
6
|
described_class.new("/path/node", nil).full_path.should == "/path/node"
|
@@ -17,7 +17,7 @@ describe Jsus::Tree::Node do
|
|
17
17
|
|
18
18
|
describe "#children" do
|
19
19
|
subject { described_class.new("/") }
|
20
|
-
|
20
|
+
|
21
21
|
it "should be initialized with an empty array" do
|
22
22
|
subject.children.should == []
|
23
23
|
end
|
@@ -38,7 +38,7 @@ describe Jsus::Tree::Node do
|
|
38
38
|
it "if it matches a child name, it should return that child" do
|
39
39
|
subject.find_children_matching("one").should == [nodes[0]]
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
it "if it is *, it should return children, not containing other children" do
|
43
43
|
subject.find_children_matching("*").should == [nodes[1]]
|
44
44
|
end
|
@@ -53,12 +53,12 @@ describe Jsus::Tree::Node do
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
describe Jsus::Tree do
|
57
|
-
subject {
|
56
|
+
describe Jsus::Util::Tree do
|
57
|
+
subject { described_class.new }
|
58
58
|
|
59
59
|
describe "#root" do
|
60
60
|
it "should create node if needed" do
|
61
|
-
subject.root.should be_a(Jsus::Tree::Node)
|
61
|
+
subject.root.should be_a(Jsus::Util::Tree::Node)
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should not recreate node" do
|
@@ -72,7 +72,7 @@ describe Jsus::Tree do
|
|
72
72
|
subject.root.children.should have_exactly(1).element
|
73
73
|
subject.root.children[0].value.should == "Value"
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
it "should create all underlying nodes if needed" do
|
77
77
|
subject.insert("/hello/world", "value")
|
78
78
|
subject.root.children[0].children[0].value.should == "value"
|
@@ -96,26 +96,76 @@ describe Jsus::Tree do
|
|
96
96
|
it "should return a node" do
|
97
97
|
subject.insert("/hello/world", "value").value.should == "value"
|
98
98
|
end
|
99
|
+
|
100
|
+
it "should prepend leading slash" do
|
101
|
+
subject.insert("hello", "world")
|
102
|
+
subject.root.children[0].full_path.should == "/hello"
|
103
|
+
subject.root.children[0].value.should == "world"
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should allow tags for nodes insertion" do
|
107
|
+
subject.insert(Jsus::Tag["hello"], "world")
|
108
|
+
subject.root.children[0].full_path.should == "/hello"
|
109
|
+
subject.root.children[0].value.should == "world"
|
110
|
+
end
|
99
111
|
end
|
100
112
|
|
101
|
-
describe "#
|
102
|
-
it "should
|
103
|
-
|
113
|
+
describe "#lookup" do
|
114
|
+
it "should return nil if node is not found" do
|
115
|
+
subject.lookup("/hello").should be_nil
|
116
|
+
subject.lookup("/hello/world").should be_nil
|
104
117
|
end
|
105
118
|
|
106
119
|
it "should allow to get node by path" do
|
107
|
-
subject
|
108
|
-
subject
|
120
|
+
subject["/hello/world"] = 123
|
121
|
+
subject.lookup("/hello/world").value.should == 123
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should prepend leading slash if needed" do
|
125
|
+
subject["/hello"] = "world"
|
126
|
+
subject.lookup("hello").should_not be_nil
|
127
|
+
end
|
128
|
+
|
129
|
+
it "should raise error for empty paths" do
|
130
|
+
lambda { subject.lookup("") }.should raise_error
|
131
|
+
lambda { subject.lookup(nil) }.should raise_error
|
109
132
|
end
|
110
133
|
|
134
|
+
it "should allow tags for node lookup" do
|
135
|
+
subject["/Core/Moo"] = "Tools"
|
136
|
+
subject.lookup(Jsus::Tag["Core/Moo"]).value.should == "Tools"
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "#[]" do
|
111
141
|
it "should return nil if node is not found" do
|
112
142
|
subject["/hello"].should be_nil
|
113
143
|
subject["/hello/world"].should be_nil
|
114
144
|
end
|
145
|
+
|
146
|
+
it "should allow to get node value by path" do
|
147
|
+
subject["/hello/world"] = 123
|
148
|
+
subject["/hello/world"].should == 123
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should prepend leading slash to path if needed" do
|
152
|
+
subject["/hello"] = "world"
|
153
|
+
subject["hello"].should == "world"
|
154
|
+
end
|
155
|
+
|
156
|
+
it "should raise error for empty paths" do
|
157
|
+
lambda { subject[""] }.should raise_error
|
158
|
+
lambda { subject[nil] }.should raise_error
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should allow tags for node lookup" do
|
162
|
+
subject["/Core/Moo"] = "Tools"
|
163
|
+
subject[Jsus::Tag["Core/Moo"]].should == "Tools"
|
164
|
+
end
|
115
165
|
end
|
116
166
|
|
117
|
-
describe "#
|
118
|
-
subject {
|
167
|
+
describe "#find_nodes_matching" do
|
168
|
+
subject { described_class.new }
|
119
169
|
let(:nodes) { [] }
|
120
170
|
before(:each) do
|
121
171
|
nodes << subject.insert("/hello/world/one", 1) <<
|
@@ -125,19 +175,53 @@ describe Jsus::Tree do
|
|
125
175
|
end
|
126
176
|
|
127
177
|
it "should return the node if exact path is given" do
|
128
|
-
subject.
|
178
|
+
subject.find_nodes_matching("/hello/four").should == [nodes[3]]
|
129
179
|
end
|
130
180
|
|
131
|
-
it "should return all
|
132
|
-
subject.
|
181
|
+
it "should return all matching children of given node excluding subtrees if path with wildcard is given" do
|
182
|
+
subject.find_nodes_matching("/hello/*").should =~ [nodes[2], nodes[3]]
|
133
183
|
end
|
134
184
|
|
135
185
|
it "should search for children matching wildcards" do
|
136
|
-
subject.
|
186
|
+
subject.find_nodes_matching("/hello/thr*").should == [nodes[2]]
|
137
187
|
end
|
138
188
|
|
139
|
-
it "should return all nodes in all subtrees
|
140
|
-
subject.
|
189
|
+
it "should return all nodes in all subtrees of the prefix subtree if double wildcard is given" do
|
190
|
+
subject.find_nodes_matching("/hello/world/**/*").should =~ [nodes[0], nodes[1]]
|
191
|
+
subject.find_nodes_matching("/hello/**/*").should =~ nodes
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should not choke when it cannot find anything" do
|
195
|
+
subject.find_nodes_matching("/ololo").should == []
|
196
|
+
subject.find_nodes_matching("/ololo/mwahaha").should == []
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
describe "#glob" do
|
201
|
+
subject { described_class.new }
|
202
|
+
let(:nodes) { [] }
|
203
|
+
before(:each) do
|
204
|
+
nodes << subject.insert("/hello/world/one", 1) <<
|
205
|
+
subject.insert("/hello/world/two", 2) <<
|
206
|
+
subject.insert("/hello/three", 3) <<
|
207
|
+
subject.insert("/hello/four", 4)
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should return the node value if exact path is given" do
|
211
|
+
subject.glob("/hello/four").should == [4]
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should return all matching children of given node excluding subtrees if path with wildcard is given" do
|
215
|
+
subject.glob("/hello/*").should =~ [3, 4]
|
216
|
+
end
|
217
|
+
|
218
|
+
it "should search for children matching wildcards" do
|
219
|
+
subject.glob("/hello/thr*").should == [3]
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should return all node values in all subtrees of the prefix subtree if double wildcard is given" do
|
223
|
+
subject.glob("/hello/world/**/*").should =~ [1, 2]
|
224
|
+
subject.glob("/hello/**/*").should =~ [1, 2, 3, 4]
|
141
225
|
end
|
142
226
|
|
143
227
|
it "should not choke when it cannot find anything" do
|
@@ -147,7 +231,7 @@ describe Jsus::Tree do
|
|
147
231
|
end
|
148
232
|
|
149
233
|
describe "#traverse" do
|
150
|
-
subject {
|
234
|
+
subject { described_class.new }
|
151
235
|
let(:nodes) { [] }
|
152
236
|
before(:each) do
|
153
237
|
nodes << subject.insert("/hello/world/one", 1) <<
|
@@ -165,12 +249,12 @@ describe Jsus::Tree do
|
|
165
249
|
it "should traverse all nodes if given a true argument" do
|
166
250
|
counter = 0
|
167
251
|
subject.traverse(true) { counter += 1 }
|
168
|
-
counter.should == 7
|
252
|
+
counter.should == 7
|
169
253
|
end
|
170
254
|
end
|
171
255
|
|
172
256
|
describe "#leaves" do
|
173
|
-
subject {
|
257
|
+
subject { described_class.new }
|
174
258
|
let(:nodes) { [] }
|
175
259
|
before(:each) do
|
176
260
|
nodes << subject.insert("/hello/world/one", 1) <<
|
@@ -178,16 +262,16 @@ describe Jsus::Tree do
|
|
178
262
|
subject.insert("/hello/three", nil) <<
|
179
263
|
subject.insert("/hello/four", 4)
|
180
264
|
end
|
181
|
-
|
265
|
+
|
182
266
|
it "should return only the leaves with content by default" do
|
183
267
|
subject.leaves.should =~ [nodes[0], nodes[1], nodes[3]]
|
184
268
|
end
|
185
|
-
|
186
|
-
|
269
|
+
|
270
|
+
|
187
271
|
it "should return all the leaves if asked" do
|
188
272
|
subject.leaves(false).should =~ nodes
|
189
273
|
end
|
190
|
-
|
274
|
+
|
191
275
|
end
|
192
276
|
|
193
277
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Jsus::Validator::Base do
|
3
|
+
describe Jsus::Util::Validator::Base do
|
4
4
|
subject { described_class.new(pool) }
|
5
5
|
let(:input_dir) { "spec/data/ChainDependencies/app/javascripts" }
|
6
6
|
let!(:pool) { Jsus::Pool.new(input_dir) }
|
@@ -8,11 +8,11 @@ describe Jsus::Validator::Base do
|
|
8
8
|
it "should accept pool as the first argument" do
|
9
9
|
described_class.new(pool).source_files.should =~ pool.sources.to_a
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it "should accept container as the first argument" do
|
13
13
|
described_class.new(pool.sources).source_files.should =~ pool.sources.to_a
|
14
|
-
end
|
15
|
-
|
14
|
+
end
|
15
|
+
|
16
16
|
it "should accept array as the first argument" do
|
17
17
|
described_class.new(pool.sources.to_a).source_files.should =~ pool.sources.to_a
|
18
18
|
end
|
@@ -21,7 +21,7 @@ describe Jsus::Validator::Base do
|
|
21
21
|
it "should respond to #validate method" do
|
22
22
|
subject.should respond_to(:validate)
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
describe ".validate" do
|
26
26
|
it "should be the same as calling new + validate" do
|
27
27
|
validator = mock
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Jsus::Validator::Mooforge do
|
3
|
+
describe Jsus::Util::Validator::Mooforge do
|
4
4
|
describe "#validate" do
|
5
5
|
let(:input_dir) { "spec/data/MooforgeValidation/app/javascripts/Orwik/Source/Library" }
|
6
6
|
let!(:sources) {
|
@@ -11,20 +11,20 @@ describe Jsus::Validator::Mooforge do
|
|
11
11
|
described_class.validate([sources[0]]).should be_true
|
12
12
|
described_class.new([sources[0]]).validation_errors.should == []
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
it "should return false for files without authors" do
|
16
16
|
described_class.validate([sources[1]]).should be_false
|
17
17
|
described_class.new([sources[1]]).validation_errors[0].should include(sources[1].filename)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
it "should return false for files without license" do
|
21
21
|
described_class.validate([sources[2]]).should be_false
|
22
22
|
described_class.new([sources[2]]).validation_errors[0].should include(sources[2].filename)
|
23
|
-
end
|
24
|
-
|
23
|
+
end
|
24
|
+
|
25
25
|
it "should return false when some of the files fail" do
|
26
26
|
described_class.validate(sources).should be_false
|
27
|
-
described_class.new(sources).validation_errors.size.should == 2
|
28
|
-
end
|
27
|
+
described_class.new(sources).validation_errors.size.should == 2
|
28
|
+
end
|
29
29
|
end
|
30
30
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 6
|
10
|
+
version: 0.2.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mark Abramov
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-07 00:00:00 -05:00
|
19
19
|
default_executable: jsus
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -233,16 +233,17 @@ files:
|
|
233
233
|
- jsus.gemspec
|
234
234
|
- lib/jsus.rb
|
235
235
|
- lib/jsus/container.rb
|
236
|
-
- lib/jsus/documenter.rb
|
237
236
|
- lib/jsus/package.rb
|
238
237
|
- lib/jsus/packager.rb
|
239
238
|
- lib/jsus/pool.rb
|
240
239
|
- lib/jsus/source_file.rb
|
241
240
|
- lib/jsus/tag.rb
|
242
|
-
- lib/jsus/
|
243
|
-
- lib/jsus/
|
244
|
-
- lib/jsus/
|
245
|
-
- lib/jsus/validator
|
241
|
+
- lib/jsus/util.rb
|
242
|
+
- lib/jsus/util/documenter.rb
|
243
|
+
- lib/jsus/util/tree.rb
|
244
|
+
- lib/jsus/util/validator.rb
|
245
|
+
- lib/jsus/util/validator/base.rb
|
246
|
+
- lib/jsus/util/validator/mooforge.rb
|
246
247
|
- markup/index_template.haml
|
247
248
|
- markup/stylesheet.css
|
248
249
|
- markup/template.haml
|
@@ -311,15 +312,15 @@ files:
|
|
311
312
|
- spec/data/bad_test_source_two.js
|
312
313
|
- spec/data/test_source_one.js
|
313
314
|
- spec/jsus/container_spec.rb
|
314
|
-
- spec/jsus/documenter_spec.rb
|
315
315
|
- spec/jsus/package_spec.rb
|
316
316
|
- spec/jsus/packager_spec.rb
|
317
317
|
- spec/jsus/pool_spec.rb
|
318
318
|
- spec/jsus/source_file_spec.rb
|
319
319
|
- spec/jsus/tag_spec.rb
|
320
|
-
- spec/jsus/
|
321
|
-
- spec/jsus/
|
322
|
-
- spec/jsus/validator/
|
320
|
+
- spec/jsus/util/documenter_spec.rb
|
321
|
+
- spec/jsus/util/tree_spec.rb
|
322
|
+
- spec/jsus/util/validator/base_spec.rb
|
323
|
+
- spec/jsus/util/validator/mooforge_spec.rb
|
323
324
|
- spec/shared/class_stubs.rb
|
324
325
|
- spec/spec_helper.rb
|
325
326
|
has_rdoc: true
|
@@ -358,14 +359,14 @@ specification_version: 3
|
|
358
359
|
summary: Javascript packager and dependency resolver
|
359
360
|
test_files:
|
360
361
|
- spec/jsus/container_spec.rb
|
361
|
-
- spec/jsus/documenter_spec.rb
|
362
362
|
- spec/jsus/package_spec.rb
|
363
363
|
- spec/jsus/packager_spec.rb
|
364
364
|
- spec/jsus/pool_spec.rb
|
365
365
|
- spec/jsus/source_file_spec.rb
|
366
366
|
- spec/jsus/tag_spec.rb
|
367
|
-
- spec/jsus/
|
368
|
-
- spec/jsus/
|
369
|
-
- spec/jsus/validator/
|
367
|
+
- spec/jsus/util/documenter_spec.rb
|
368
|
+
- spec/jsus/util/tree_spec.rb
|
369
|
+
- spec/jsus/util/validator/base_spec.rb
|
370
|
+
- spec/jsus/util/validator/mooforge_spec.rb
|
370
371
|
- spec/shared/class_stubs.rb
|
371
372
|
- spec/spec_helper.rb
|
data/lib/jsus/documenter.rb
DELETED
@@ -1,99 +0,0 @@
|
|
1
|
-
module Jsus
|
2
|
-
class Documenter
|
3
|
-
attr_accessor :options
|
4
|
-
|
5
|
-
def initialize(options = {:highlight_source => true})
|
6
|
-
require "murdoc"
|
7
|
-
self.options = options
|
8
|
-
rescue LoadError
|
9
|
-
raise "You should install murdoc gem in order to produce documentation"
|
10
|
-
end
|
11
|
-
|
12
|
-
def generate(doc_dir = Dir.pwd)
|
13
|
-
#FileUtils.rm_rf(doc_dir)
|
14
|
-
FileUtils.mkdir_p(doc_dir)
|
15
|
-
template_path = File.dirname(__FILE__) + "/../../markup"
|
16
|
-
template = File.read("#{template_path}/template.haml")
|
17
|
-
index_template = File.read("#{template_path}/index_template.haml")
|
18
|
-
stylesheet_path = "#{template_path}/stylesheet.css"
|
19
|
-
documented_sources.traverse(true) do |node|
|
20
|
-
if node.value # leaf
|
21
|
-
dir = doc_dir + File.dirname(node.full_path)
|
22
|
-
FileUtils.mkdir_p(dir)
|
23
|
-
file_from_contents(dir + "/#{node.name}.html", create_documentation_for_source(node.value, template))
|
24
|
-
else
|
25
|
-
dir = doc_dir + node.full_path
|
26
|
-
FileUtils.mkdir_p(dir)
|
27
|
-
FileUtils.cp(stylesheet_path, dir)
|
28
|
-
file_from_contents(dir + "/index.html", create_index_for_node(node, index_template))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def create_documentation_for_source(source, template)
|
34
|
-
skipped_lines = 0
|
35
|
-
content = source.original_content.gsub(/\A\s*\/\*.*?\*\//m) {|w| skipped_lines += w.split("\n").size; "" }
|
36
|
-
annotator = Murdoc::Annotator.new(content, :javascript, options)
|
37
|
-
Murdoc::Formatter.new(template).render(:paragraphs => annotator.paragraphs, :header => source.header, :source => source, :skipped_lines => skipped_lines)
|
38
|
-
end
|
39
|
-
|
40
|
-
def create_index_for_node(node, template)
|
41
|
-
Haml::Engine.new(template).render(self, :node => node)
|
42
|
-
end
|
43
|
-
|
44
|
-
def <<(source)
|
45
|
-
filename = File.basename(source.filename)
|
46
|
-
if source.package
|
47
|
-
tree.insert("/#{source.package.name}/#{filename}", source)
|
48
|
-
else
|
49
|
-
tree.insert("/#{filename}", source)
|
50
|
-
end
|
51
|
-
self
|
52
|
-
end
|
53
|
-
|
54
|
-
def tree
|
55
|
-
@tree ||= Tree.new
|
56
|
-
end
|
57
|
-
|
58
|
-
def current_scope
|
59
|
-
@current_scope ||= default_scope
|
60
|
-
end
|
61
|
-
|
62
|
-
def default_scope
|
63
|
-
["/**/*"]
|
64
|
-
end
|
65
|
-
|
66
|
-
def current_scope=(scope)
|
67
|
-
@current_scope = scope
|
68
|
-
end
|
69
|
-
|
70
|
-
# exclusive scope
|
71
|
-
def only(scope)
|
72
|
-
result = clone
|
73
|
-
result.current_scope = [scope].flatten
|
74
|
-
result
|
75
|
-
end
|
76
|
-
|
77
|
-
# additive scope
|
78
|
-
def or(scope)
|
79
|
-
result = clone
|
80
|
-
result.current_scope = current_scope + [scope].flatten
|
81
|
-
result
|
82
|
-
end
|
83
|
-
|
84
|
-
def documented_sources
|
85
|
-
@documented_sources ||= documented_sources!
|
86
|
-
end
|
87
|
-
|
88
|
-
def documented_sources!
|
89
|
-
doctree = Tree.new
|
90
|
-
current_scope.map {|pathspec| tree.glob(pathspec) }.flatten.each {|s| doctree.insert(s.full_path, s.value)}
|
91
|
-
doctree
|
92
|
-
end
|
93
|
-
|
94
|
-
protected
|
95
|
-
def file_from_contents(filename, contents)
|
96
|
-
File.open(filename, "w+") {|f| f << contents }
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|