strelka 0.11.0 → 0.12.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +8 -0
- data/Manifest.txt +5 -0
- data/README.rdoc +25 -10
- data/Rakefile +2 -2
- data/bin/strelka +2 -411
- data/lib/strelka.rb +5 -10
- data/lib/strelka/cli.rb +393 -0
- data/lib/strelka/command/config.rb +35 -0
- data/lib/strelka/command/discover.rb +29 -0
- data/lib/strelka/command/start.rb +40 -0
- data/lib/strelka/discovery.rb +151 -97
- data/spec/strelka/cli_spec.rb +85 -0
- data/spec/strelka/discovery_spec.rb +69 -81
- data/spec/strelka_spec.rb +0 -12
- metadata +49 -45
- metadata.gz.sig +0 -0
@@ -19,15 +19,16 @@ require 'strelka/discovery'
|
|
19
19
|
describe Strelka::Discovery do
|
20
20
|
|
21
21
|
before( :all ) do
|
22
|
-
|
23
|
-
|
22
|
+
@real_discovered_apps = described_class.instance_variable_get( :@discovered_apps )
|
23
|
+
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
loaded_specs = Gem.instance_variable_get( :@loaded_specs )
|
29
|
-
loaded_specs['strelka'] = strelkaspec
|
25
|
+
after( :all ) do
|
26
|
+
described_class.instance_variable_set( :@discovered_apps, @real_discovered_apps )
|
27
|
+
end
|
30
28
|
|
29
|
+
before( :each ) do
|
30
|
+
described_class.instance_variable_set( :@discovered_apps, nil )
|
31
|
+
described_class.configure
|
31
32
|
end
|
32
33
|
|
33
34
|
|
@@ -38,101 +39,88 @@ describe Strelka::Discovery do
|
|
38
39
|
# Examples
|
39
40
|
#
|
40
41
|
|
41
|
-
it "
|
42
|
-
|
43
|
-
|
44
|
-
app_path = Pathname( app_file ).expand_path
|
45
|
-
app_class = nil
|
42
|
+
it "provides a mechanism for registering apps" do
|
43
|
+
described_class.register_app( 'foo', 'a/path/to/foo.rb' )
|
44
|
+
described_class.register_app( 'bar', 'a/path/to/bar.rb' )
|
46
45
|
|
47
|
-
expect(
|
48
|
-
|
49
|
-
|
50
|
-
|
46
|
+
expect( described_class.discovered_apps ).to include(
|
47
|
+
'foo' => 'a/path/to/foo.rb',
|
48
|
+
'bar' => 'a/path/to/bar.rb'
|
49
|
+
)
|
51
50
|
end
|
52
51
|
|
53
52
|
|
54
|
-
it "
|
55
|
-
|
53
|
+
it "raises an error if two apps try to register with the same name" do
|
54
|
+
described_class.register_app( 'foo', 'a/path/to/foo.rb' )
|
55
|
+
expect {
|
56
|
+
described_class.register_app( 'foo', 'a/path/to/bar.rb' )
|
57
|
+
}.to raise_error( /can't register a second 'foo' app/i )
|
58
|
+
end
|
56
59
|
|
57
|
-
it "has a method for discovering installed Strelka app files" do
|
58
|
-
specs = {}
|
59
|
-
specs[:donkey] = make_gemspec( 'donkey', '1.0.0' )
|
60
|
-
specs[:rabbit_old] = make_gemspec( 'rabbit', '1.0.0' )
|
61
|
-
specs[:rabbit_new] = make_gemspec( 'rabbit', '1.0.8' )
|
62
|
-
specs[:bear] = make_gemspec( 'bear', '1.0.0', false )
|
63
|
-
specs[:giraffe] = make_gemspec( 'giraffe', '1.0.0' )
|
64
60
|
|
65
|
-
|
66
|
-
|
67
|
-
|
61
|
+
it "uses Rubygems discovery to find apps" do
|
62
|
+
expect( Gem ).to receive( :find_latest_files ).with( 'strelka/apps.rb' ).
|
63
|
+
and_return([
|
64
|
+
'/some/directory/with/strelka/apps.rb',
|
65
|
+
'/some/other/directory/with/strelka/apps.rb'
|
66
|
+
])
|
67
|
+
expect( Kernel ).to receive( :load ).twice do |file|
|
68
|
+
case file
|
69
|
+
when %r{some/directory}
|
70
|
+
described_class.register_app( 'foo', 'a/path/to/foo.rb' )
|
71
|
+
when %r{other/directory}
|
72
|
+
described_class.register_app( 'bar', 'a/path/to/bar.rb' )
|
73
|
+
end
|
74
|
+
end
|
68
75
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
expect( Dir ).to receive( :glob ).with( 'data/*/{apps,handlers}/**/*' ).
|
74
|
-
and_return( [] )
|
75
|
-
expect( Dir ).to receive( :glob ).with( "#{giraffe_path}/data/giraffe/{apps,handlers}/**/*" ).
|
76
|
-
and_return([ "#{giraffe_path}/data/giraffe/apps/app" ])
|
77
|
-
expect( Dir ).to receive( :glob ).with( "#{rabbit_path}/data/rabbit/{apps,handlers}/**/*" ).
|
78
|
-
and_return([ "#{rabbit_path}/data/rabbit/apps/subdir/app1.rb",
|
79
|
-
"#{rabbit_path}/data/rabbit/apps/subdir/app2.rb" ])
|
80
|
-
expect( Dir ).to receive( :glob ).with( "#{donkey_path}/data/donkey/{apps,handlers}/**/*" ).
|
81
|
-
and_return([ "#{donkey_path}/data/donkey/apps/app.rb" ])
|
82
|
-
|
83
|
-
app_paths = described_class.discover_paths
|
84
|
-
|
85
|
-
expect( app_paths.size ).to eq( 4 )
|
86
|
-
expect( app_paths ).to include(
|
87
|
-
'donkey' => [Pathname("#{donkey_path}/data/donkey/apps/app.rb")],
|
88
|
-
'rabbit' => [Pathname("#{rabbit_path}/data/rabbit/apps/subdir/app1.rb"),
|
89
|
-
Pathname("#{rabbit_path}/data/rabbit/apps/subdir/app2.rb")],
|
90
|
-
'giraffe' => [Pathname("#{giraffe_path}/data/giraffe/apps/app")]
|
76
|
+
expect( described_class.discovered_apps ).to include(
|
77
|
+
'foo' => 'a/path/to/foo.rb',
|
78
|
+
'bar' => 'a/path/to/bar.rb'
|
91
79
|
)
|
92
80
|
end
|
93
81
|
|
94
82
|
|
95
|
-
it "
|
96
|
-
|
97
|
-
|
83
|
+
it "can be configured to look for a different discovery file" do
|
84
|
+
acme_discovery_files = [
|
85
|
+
'/some/directory/with/acme/apps.rb',
|
86
|
+
'/some/other/directory/with/acme/apps.rb'
|
87
|
+
]
|
98
88
|
|
99
|
-
expect(
|
100
|
-
and_return(
|
101
|
-
expect( Dir ).to receive( :glob ).with( "#{gemspec.full_gem_path}/data/blood-orgy/{apps,handlers}/**/*" ).
|
102
|
-
and_return([ "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ])
|
89
|
+
expect( Gem ).to receive( :find_latest_files ).with( 'acme/apps.rb' ).
|
90
|
+
and_return( acme_discovery_files )
|
103
91
|
|
104
|
-
|
105
|
-
expect(
|
106
|
-
with( "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ) do
|
107
|
-
Class.new( discoverable_class )
|
108
|
-
true
|
109
|
-
end
|
110
|
-
|
111
|
-
app_classes = described_class.discover
|
112
|
-
expect( app_classes.size ).to eq( 1 )
|
113
|
-
expect( app_classes.first ).to be_a( Class )
|
114
|
-
expect( app_classes.first ).to be < discoverable_class
|
92
|
+
described_class.configure( app_discovery_file: 'acme/apps.rb' )
|
93
|
+
expect( described_class.app_discovery_files ).to eq( acme_discovery_files )
|
115
94
|
end
|
116
95
|
|
117
96
|
|
118
|
-
it "
|
119
|
-
|
120
|
-
expect( Gem::Specification ).to receive( :each ).and_yield( gemspec ).at_least( :once )
|
97
|
+
it "can return the app class associated with an application name" do
|
98
|
+
described_class.register_app( 'foo', 'a/path/to/foo.rb' )
|
121
99
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
and_return([ "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ])
|
100
|
+
app_class = nil
|
101
|
+
expect( Kernel ).to receive( :load ) do |path|
|
102
|
+
expect( path ).to eq( 'a/path/to/foo.rb' )
|
126
103
|
|
127
|
-
|
128
|
-
|
129
|
-
with( "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ).
|
130
|
-
and_raise( SyntaxError.new("kurzweil:1: syntax error, unexpected coffeeshop philosopher") )
|
104
|
+
app_class = Class.new( discoverable_class )
|
105
|
+
end
|
131
106
|
|
132
|
-
|
133
|
-
expect( app_classes ).to be_empty()
|
107
|
+
expect( described_class.load('foo') ).to eq( app_class )
|
134
108
|
end
|
135
109
|
|
136
110
|
|
111
|
+
it "only returns the first class even if the file declares two" do
|
112
|
+
described_class.register_app( 'foo', 'a/path/to/foo.rb' )
|
113
|
+
|
114
|
+
app_class = app_class2 = nil
|
115
|
+
expect( Kernel ).to receive( :load ) do |path|
|
116
|
+
expect( path ).to eq( 'a/path/to/foo.rb' )
|
117
|
+
|
118
|
+
app_class = Class.new( discoverable_class )
|
119
|
+
app_class2 = Class.new( discoverable_class )
|
120
|
+
end
|
121
|
+
|
122
|
+
expect( described_class.load('foo') ).to eq( app_class )
|
123
|
+
end
|
124
|
+
|
137
125
|
end
|
138
126
|
|
data/spec/strelka_spec.rb
CHANGED
@@ -19,17 +19,5 @@ describe Strelka do
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
it "provides syntactic sugar for looking up an app class by name" do
|
23
|
-
mox_app = nil
|
24
|
-
expect( Pathname ).to receive( :glob ).
|
25
|
-
with( 'data/*/{apps,handlers}/**/*' ).
|
26
|
-
and_return([ Pathname('data/mox/apps/moxthefox') ])
|
27
|
-
|
28
|
-
expect( Kernel ).to receive( :load ).
|
29
|
-
with( File.expand_path 'data/mox/apps/moxthefox' ) { mox_app = Class.new(Strelka::App) }
|
30
|
-
|
31
|
-
expect( described_class::App('moxthefox') ).to be( mox_app )
|
32
|
-
end
|
33
|
-
|
34
22
|
end
|
35
23
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strelka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mahlon E. Smith
|
@@ -11,27 +11,32 @@ bindir: bin
|
|
11
11
|
cert_chain:
|
12
12
|
- |
|
13
13
|
-----BEGIN CERTIFICATE-----
|
14
|
-
|
14
|
+
MIIEbDCCAtSgAwIBAgIBATANBgkqhkiG9w0BAQsFADA+MQwwCgYDVQQDDANnZWQx
|
15
15
|
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
16
|
-
|
16
|
+
HhcNMTYwODIwMTgxNzQyWhcNMTcwODIwMTgxNzQyWjA+MQwwCgYDVQQDDANnZWQx
|
17
17
|
GTAXBgoJkiaJk/IsZAEZFglGYWVyaWVNVUQxEzARBgoJkiaJk/IsZAEZFgNvcmcw
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
18
|
+
ggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC/JWGRHO+USzR97vXjkFgt
|
19
|
+
83qeNf2KHkcvrRTSnR64i6um/ziin0I0oX23H7VYrDJC9A/uoUa5nGRJS5Zw/+wW
|
20
|
+
ENcvWVZS4iUzi4dsYJGY6yEOsXh2CcF46+QevV8iE+UmbkU75V7Dy1JCaUOyizEt
|
21
|
+
TH5UHsOtUU7k9TYARt/TgYZKuaoAMZZd5qyVqhF1vV+7/Qzmp89NGflXf2xYP26a
|
22
|
+
4MAX2qqKX/FKXqmFO+AGsbwYTEds1mksBF3fGsFgsQWxftG8GfZQ9+Cyu2+l1eOw
|
23
|
+
cZ+lPcg834G9DrqW2zhqUoLr1MTly4pqxYGb7XoDhoR7dd1kFE2a067+DzWC/ADt
|
24
|
+
+QkcqWUm5oh1fN0eqr7NsZlVJDulFgdiiYPQiIN7UNsii4Wc9aZqBoGcYfBeQNPZ
|
25
|
+
soo/6za/bWajOKUmDhpqvaiRv9EDpVLzuj53uDoukMMwxCMfgb04+ckQ0t2G7wqc
|
26
|
+
/D+K9JW9DDs3Yjgv9k4h7YMhW5gftosd+NkNC/+Y2CkCAwEAAaN1MHMwCQYDVR0T
|
27
|
+
BAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFHKN/nkRusdqCJEuq3lgB3fJvyTg
|
28
|
+
MBwGA1UdEQQVMBOBEWdlZEBGYWVyaWVNVUQub3JnMBwGA1UdEgQVMBOBEWdlZEBG
|
29
|
+
YWVyaWVNVUQub3JnMA0GCSqGSIb3DQEBCwUAA4IBgQAPJzKiT0zBU7kpqe0aS2qb
|
30
|
+
FI0PJ4y5I8buU4IZGUD5NEt/N7pZNfOyBxkrZkXhS44Fp+xwBH5ebLbq/WY78Bqd
|
31
|
+
db0z6ZgW4LMYMpWFfbXsRbd9TU2f52L8oMAhxOvF7Of5qJMVWuFQ8FPagk2iHrdH
|
32
|
+
inYLQagqAF6goWTXgAJCdPd6SNeeSNqA6vlY7CV1Jh5kfNJJ6xu/CVij1GzCLu/5
|
33
|
+
DMOr26DBv+qLJRRC/2h34uX71q5QgeOyxvMg+7V3u/Q06DXyQ2VgeeqiwDFFpEH0
|
34
|
+
PFkdPO6ZqbTRcLfNH7mFgCBJjsfSjJrn0sPBlYyOXgCoByfZnZyrIMH/UY+lgQqS
|
35
|
+
6Von1VDsfQm0eJh5zYZD64ZF86phSR7mUX3mXItwH04HrZwkWpvgd871DZVR3i1n
|
36
|
+
w8aNA5re5+Rt/Vvjxj5AcEnZnZiz5x959NaddQocX32Z1unHw44pzRNUur1GInfW
|
37
|
+
p4vpx2kUSFSAGjtCbDGTNV2AH8w9OU4xEmNz8c5lyoA=
|
33
38
|
-----END CERTIFICATE-----
|
34
|
-
date: 2016-
|
39
|
+
date: 2016-11-05 00:00:00.000000000 Z
|
35
40
|
dependencies:
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: configurability
|
@@ -109,20 +114,14 @@ dependencies:
|
|
109
114
|
requirements:
|
110
115
|
- - "~>"
|
111
116
|
- !ruby/object:Gem::Version
|
112
|
-
version: '0.
|
113
|
-
- - ">="
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: 0.43.1
|
117
|
+
version: '0.44'
|
116
118
|
type: :runtime
|
117
119
|
prerelease: false
|
118
120
|
version_requirements: !ruby/object:Gem::Requirement
|
119
121
|
requirements:
|
120
122
|
- - "~>"
|
121
123
|
- !ruby/object:Gem::Version
|
122
|
-
version: '0.
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 0.43.1
|
124
|
+
version: '0.44'
|
126
125
|
- !ruby/object:Gem::Dependency
|
127
126
|
name: pluggability
|
128
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -213,14 +212,14 @@ dependencies:
|
|
213
212
|
requirements:
|
214
213
|
- - "~>"
|
215
214
|
- !ruby/object:Gem::Version
|
216
|
-
version: '0.
|
215
|
+
version: '0.8'
|
217
216
|
type: :development
|
218
217
|
prerelease: false
|
219
218
|
version_requirements: !ruby/object:Gem::Requirement
|
220
219
|
requirements:
|
221
220
|
- - "~>"
|
222
221
|
- !ruby/object:Gem::Version
|
223
|
-
version: '0.
|
222
|
+
version: '0.8'
|
224
223
|
- !ruby/object:Gem::Dependency
|
225
224
|
name: hoe-highline
|
226
225
|
requirement: !ruby/object:Gem::Requirement
|
@@ -236,75 +235,75 @@ dependencies:
|
|
236
235
|
- !ruby/object:Gem::Version
|
237
236
|
version: '0.2'
|
238
237
|
- !ruby/object:Gem::Dependency
|
239
|
-
name:
|
238
|
+
name: rspec
|
240
239
|
requirement: !ruby/object:Gem::Requirement
|
241
240
|
requirements:
|
242
241
|
- - "~>"
|
243
242
|
- !ruby/object:Gem::Version
|
244
|
-
version: '
|
243
|
+
version: '3.0'
|
245
244
|
type: :development
|
246
245
|
prerelease: false
|
247
246
|
version_requirements: !ruby/object:Gem::Requirement
|
248
247
|
requirements:
|
249
248
|
- - "~>"
|
250
249
|
- !ruby/object:Gem::Version
|
251
|
-
version: '
|
250
|
+
version: '3.0'
|
252
251
|
- !ruby/object:Gem::Dependency
|
253
|
-
name:
|
252
|
+
name: simplecov
|
254
253
|
requirement: !ruby/object:Gem::Requirement
|
255
254
|
requirements:
|
256
255
|
- - "~>"
|
257
256
|
- !ruby/object:Gem::Version
|
258
|
-
version: '
|
257
|
+
version: '0.7'
|
259
258
|
type: :development
|
260
259
|
prerelease: false
|
261
260
|
version_requirements: !ruby/object:Gem::Requirement
|
262
261
|
requirements:
|
263
262
|
- - "~>"
|
264
263
|
- !ruby/object:Gem::Version
|
265
|
-
version: '
|
264
|
+
version: '0.7'
|
266
265
|
- !ruby/object:Gem::Dependency
|
267
|
-
name:
|
266
|
+
name: rdoc-generator-fivefish
|
268
267
|
requirement: !ruby/object:Gem::Requirement
|
269
268
|
requirements:
|
270
269
|
- - "~>"
|
271
270
|
- !ruby/object:Gem::Version
|
272
|
-
version: '0.
|
271
|
+
version: '0.1'
|
273
272
|
type: :development
|
274
273
|
prerelease: false
|
275
274
|
version_requirements: !ruby/object:Gem::Requirement
|
276
275
|
requirements:
|
277
276
|
- - "~>"
|
278
277
|
- !ruby/object:Gem::Version
|
279
|
-
version: '0.
|
278
|
+
version: '0.1'
|
280
279
|
- !ruby/object:Gem::Dependency
|
281
|
-
name: rdoc
|
280
|
+
name: rdoc
|
282
281
|
requirement: !ruby/object:Gem::Requirement
|
283
282
|
requirements:
|
284
283
|
- - "~>"
|
285
284
|
- !ruby/object:Gem::Version
|
286
|
-
version: '0
|
285
|
+
version: '4.0'
|
287
286
|
type: :development
|
288
287
|
prerelease: false
|
289
288
|
version_requirements: !ruby/object:Gem::Requirement
|
290
289
|
requirements:
|
291
290
|
- - "~>"
|
292
291
|
- !ruby/object:Gem::Version
|
293
|
-
version: '0
|
292
|
+
version: '4.0'
|
294
293
|
- !ruby/object:Gem::Dependency
|
295
294
|
name: hoe
|
296
295
|
requirement: !ruby/object:Gem::Requirement
|
297
296
|
requirements:
|
298
297
|
- - "~>"
|
299
298
|
- !ruby/object:Gem::Version
|
300
|
-
version: '3.
|
299
|
+
version: '3.15'
|
301
300
|
type: :development
|
302
301
|
prerelease: false
|
303
302
|
version_requirements: !ruby/object:Gem::Requirement
|
304
303
|
requirements:
|
305
304
|
- - "~>"
|
306
305
|
- !ruby/object:Gem::Version
|
307
|
-
version: '3.
|
306
|
+
version: '3.15'
|
308
307
|
description: |-
|
309
308
|
Strelka is a framework for creating and deploying
|
310
309
|
Mongrel2[http://mongrel2.org/] web applications in Ruby.
|
@@ -385,6 +384,10 @@ files:
|
|
385
384
|
- lib/strelka/authprovider/basic.rb
|
386
385
|
- lib/strelka/authprovider/hostaccess.rb
|
387
386
|
- lib/strelka/behavior/plugin.rb
|
387
|
+
- lib/strelka/cli.rb
|
388
|
+
- lib/strelka/command/config.rb
|
389
|
+
- lib/strelka/command/discover.rb
|
390
|
+
- lib/strelka/command/start.rb
|
388
391
|
- lib/strelka/constants.rb
|
389
392
|
- lib/strelka/cookie.rb
|
390
393
|
- lib/strelka/cookieset.rb
|
@@ -438,6 +441,7 @@ files:
|
|
438
441
|
- spec/strelka/authprovider/basic_spec.rb
|
439
442
|
- spec/strelka/authprovider/hostaccess_spec.rb
|
440
443
|
- spec/strelka/authprovider_spec.rb
|
444
|
+
- spec/strelka/cli_spec.rb
|
441
445
|
- spec/strelka/cookie_spec.rb
|
442
446
|
- spec/strelka/cookieset_spec.rb
|
443
447
|
- spec/strelka/discovery_spec.rb
|
@@ -477,7 +481,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
477
481
|
requirements:
|
478
482
|
- - ">="
|
479
483
|
- !ruby/object:Gem::Version
|
480
|
-
version: 2.
|
484
|
+
version: 2.2.0
|
481
485
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
482
486
|
requirements:
|
483
487
|
- - ">="
|
@@ -485,7 +489,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
485
489
|
version: '0'
|
486
490
|
requirements: []
|
487
491
|
rubyforge_project:
|
488
|
-
rubygems_version: 2.
|
492
|
+
rubygems_version: 2.6.7
|
489
493
|
signing_key:
|
490
494
|
specification_version: 4
|
491
495
|
summary: Strelka is a framework for creating and deploying Mongrel2[http://mongrel2.org/]
|
metadata.gz.sig
CHANGED
Binary file
|