strelka 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|