strelka 0.6.0 → 0.7.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/ChangeLog +156 -9
- data/History.rdoc +15 -0
- data/IDEAS.rdoc +17 -1
- data/MILESTONES.rdoc +1 -1
- data/Manifest.txt +10 -2
- data/Plugins.rdoc +4 -4
- data/README.rdoc +3 -3
- data/Rakefile +5 -4
- data/bin/strelka +19 -10
- data/contrib/hoetemplate/data/project/apps/file_name_app +1 -0
- data/contrib/hoetemplate/lib/file_name.rb.erb +3 -2
- data/examples/apps/hello-world +1 -0
- data/examples/apps/ws-chat +69 -0
- data/examples/apps/ws-echo +61 -0
- data/examples/gen-config.rb +6 -5
- data/lib/strelka/app/auth.rb +2 -2
- data/lib/strelka/app/errors.rb +1 -1
- data/lib/strelka/app/filters.rb +3 -2
- data/lib/strelka/app/negotiation.rb +2 -2
- data/lib/strelka/app/parameters.rb +1 -2
- data/lib/strelka/app/restresources.rb +3 -2
- data/lib/strelka/app/routing.rb +1 -1
- data/lib/strelka/app/sessions.rb +2 -2
- data/lib/strelka/app/templating.rb +7 -3
- data/lib/strelka/app.rb +5 -145
- data/lib/strelka/behavior/plugin.rb +4 -4
- data/lib/strelka/discovery.rb +211 -0
- data/lib/strelka/httprequest.rb +1 -0
- data/lib/strelka/httpresponse/negotiation.rb +7 -1
- data/lib/strelka/mixins.rb +4 -1
- data/lib/strelka/paramvalidator.rb +1 -1
- data/lib/strelka/plugins.rb +8 -6
- data/lib/strelka/websocketserver/routing.rb +116 -0
- data/lib/strelka/websocketserver.rb +147 -0
- data/lib/strelka.rb +5 -4
- data/spec/{lib/constants.rb → constants.rb} +3 -2
- data/spec/{lib/helpers.rb → helpers.rb} +15 -14
- data/spec/strelka/app/auth_spec.rb +145 -142
- data/spec/strelka/app/errors_spec.rb +20 -26
- data/spec/strelka/app/filters_spec.rb +67 -54
- data/spec/strelka/app/negotiation_spec.rb +8 -14
- data/spec/strelka/app/parameters_spec.rb +23 -29
- data/spec/strelka/app/restresources_spec.rb +98 -100
- data/spec/strelka/app/routing_spec.rb +57 -57
- data/spec/strelka/app/sessions_spec.rb +11 -17
- data/spec/strelka/app/templating_spec.rb +36 -40
- data/spec/strelka/app_spec.rb +48 -147
- data/spec/strelka/authprovider/basic_spec.rb +5 -11
- data/spec/strelka/authprovider/hostaccess_spec.rb +9 -15
- data/spec/strelka/authprovider_spec.rb +3 -9
- data/spec/strelka/cookie_spec.rb +32 -38
- data/spec/strelka/cookieset_spec.rb +31 -37
- data/spec/strelka/discovery_spec.rb +144 -0
- data/spec/strelka/exceptions_spec.rb +2 -8
- data/spec/strelka/httprequest/acceptparams_spec.rb +74 -83
- data/spec/strelka/httprequest/auth_spec.rb +5 -15
- data/spec/strelka/httprequest/negotiation_spec.rb +93 -103
- data/spec/strelka/httprequest/session_spec.rb +12 -22
- data/spec/strelka/httprequest_spec.rb +1 -7
- data/spec/strelka/httpresponse/negotiation_spec.rb +84 -76
- data/spec/strelka/httpresponse/session_spec.rb +25 -35
- data/spec/strelka/httpresponse_spec.rb +20 -26
- data/spec/strelka/mixins_spec.rb +66 -61
- data/spec/strelka/multipartparser_spec.rb +31 -37
- data/spec/strelka/paramvalidator_spec.rb +389 -373
- data/spec/strelka/plugins_spec.rb +17 -23
- data/spec/strelka/router/default_spec.rb +32 -38
- data/spec/strelka/router/exclusive_spec.rb +28 -34
- data/spec/strelka/router_spec.rb +2 -8
- data/spec/strelka/session/db_spec.rb +17 -15
- data/spec/strelka/session/default_spec.rb +22 -28
- data/spec/strelka/session_spec.rb +3 -9
- data/spec/strelka/websocketserver/routing_spec.rb +119 -0
- data/spec/strelka/websocketserver_spec.rb +149 -0
- data/spec/strelka_spec.rb +11 -13
- data.tar.gz.sig +3 -3
- metadata +22 -14
- metadata.gz.sig +0 -0
@@ -2,16 +2,10 @@
|
|
2
2
|
# vim: set nosta noet ts=4 sw=4:
|
3
3
|
# encoding: utf-8
|
4
4
|
|
5
|
-
|
6
|
-
require 'pathname'
|
7
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent.parent
|
8
|
-
|
9
|
-
$LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
|
10
|
-
}
|
5
|
+
require_relative '../helpers'
|
11
6
|
|
12
7
|
require 'uri'
|
13
8
|
require 'rspec'
|
14
|
-
require 'spec/lib/helpers'
|
15
9
|
require 'strelka/cookie'
|
16
10
|
require 'strelka/cookieset'
|
17
11
|
|
@@ -30,9 +24,9 @@ describe Strelka::CookieSet do
|
|
30
24
|
it "delegates some methods to its underlying Set" do
|
31
25
|
cookie = Strelka::Cookie.new( 'pants', 'baggy' )
|
32
26
|
|
33
|
-
@cookieset.
|
34
|
-
@cookieset.length.
|
35
|
-
@cookieset.member?( cookie ).
|
27
|
+
expect( @cookieset ).to be_empty()
|
28
|
+
expect( @cookieset.length ).to eq( 0 )
|
29
|
+
expect( @cookieset.member?( cookie ) ).to be_false()
|
36
30
|
end
|
37
31
|
|
38
32
|
it "is able to enummerate over each cookie in the set" do
|
@@ -45,33 +39,33 @@ describe Strelka::CookieSet do
|
|
45
39
|
cookies << cookie
|
46
40
|
end
|
47
41
|
|
48
|
-
cookies.length.
|
49
|
-
cookies.
|
50
|
-
cookies.
|
42
|
+
expect( cookies.length ).to eq( 2 )
|
43
|
+
expect( cookies ).to include( pants_cookie )
|
44
|
+
expect( cookies ).to include( shirt_cookie )
|
51
45
|
end
|
52
46
|
|
53
47
|
it "is able to add a cookie referenced symbolically" do
|
54
48
|
pants_cookie = Strelka::Cookie.new( 'pants', 'denim' )
|
55
49
|
@cookieset[:pants] = pants_cookie
|
56
|
-
@cookieset['pants'].
|
50
|
+
expect( @cookieset['pants'] ).to eq( pants_cookie )
|
57
51
|
end
|
58
52
|
|
59
53
|
|
60
54
|
it "autos-create a cookie for a non-cookie passed to the index setter" do
|
61
|
-
|
55
|
+
@cookieset['bar'] = 'badgerbadgerbadgerbadger'
|
62
56
|
|
63
|
-
@cookieset['bar'].
|
64
|
-
@cookieset['bar'].value.
|
57
|
+
expect( @cookieset['bar'] ).to be_an_instance_of( Strelka::Cookie )
|
58
|
+
expect( @cookieset['bar'].value ).to eq( 'badgerbadgerbadgerbadger' )
|
65
59
|
end
|
66
60
|
|
67
61
|
it "raises an exception if the name of a cookie being set doesn't agree with the key it being set with" do
|
68
62
|
pants_cookie = Strelka::Cookie.new( 'pants', 'corduroy' )
|
69
|
-
|
63
|
+
expect { @cookieset['shirt'] = pants_cookie }.to raise_error( ArgumentError )
|
70
64
|
end
|
71
65
|
|
72
66
|
it "implements Enumerable" do
|
73
67
|
Enumerable.instance_methods( false ).each do |meth|
|
74
|
-
@cookieset.
|
68
|
+
expect( @cookieset ).to respond_to( meth )
|
75
69
|
end
|
76
70
|
end
|
77
71
|
|
@@ -90,9 +84,9 @@ describe Strelka::CookieSet do
|
|
90
84
|
cookie_array << Strelka::Cookie.new( 'foo', 'bar' )
|
91
85
|
cookie_array << [Strelka::Cookie.new( 'shmoop', 'torgo!' )]
|
92
86
|
|
93
|
-
cookieset =
|
94
|
-
|
95
|
-
cookieset.length.
|
87
|
+
cookieset = Strelka::CookieSet.new( cookie_array )
|
88
|
+
|
89
|
+
expect( cookieset.length ).to eq( 2 )
|
96
90
|
end
|
97
91
|
end
|
98
92
|
|
@@ -104,32 +98,32 @@ describe Strelka::CookieSet do
|
|
104
98
|
end
|
105
99
|
|
106
100
|
it "contains only one cookie" do
|
107
|
-
@cookieset.length.
|
101
|
+
expect( @cookieset.length ).to eq( 1 )
|
108
102
|
end
|
109
103
|
|
110
104
|
it "is able to return the 'foo' Strelka::Cookie via its index operator" do
|
111
|
-
@cookieset[ 'foo' ].
|
105
|
+
expect( @cookieset[ 'foo' ] ).to eq( @cookie )
|
112
106
|
end
|
113
107
|
|
114
108
|
|
115
109
|
it "is able to return the 'foo' Strelka::Cookie via its symbolic name" do
|
116
|
-
@cookieset[ :foo ].
|
110
|
+
expect( @cookieset[ :foo ] ).to eq( @cookie )
|
117
111
|
end
|
118
112
|
|
119
113
|
it "knows if it includes a cookie named 'foo'" do
|
120
|
-
@cookieset.
|
114
|
+
expect( @cookieset ).to include( 'foo' )
|
121
115
|
end
|
122
116
|
|
123
117
|
it "knows if it includes a cookie referenced by :foo" do
|
124
|
-
@cookieset.
|
118
|
+
expect( @cookieset ).to include( :foo )
|
125
119
|
end
|
126
120
|
|
127
121
|
it "knows that it doesn't contain a cookie named 'lollypop'" do
|
128
|
-
@cookieset.
|
122
|
+
expect( @cookieset ).to_not include( 'lollypop' )
|
129
123
|
end
|
130
124
|
|
131
125
|
it "knows that it includes the 'foo' cookie object" do
|
132
|
-
@cookieset.
|
126
|
+
expect( @cookieset ).to include( @cookie )
|
133
127
|
end
|
134
128
|
|
135
129
|
|
@@ -137,8 +131,8 @@ describe Strelka::CookieSet do
|
|
137
131
|
new_cookie = Strelka::Cookie.new( 'bar', 'foo' )
|
138
132
|
@cookieset << new_cookie
|
139
133
|
|
140
|
-
@cookieset.length.
|
141
|
-
@cookieset.
|
134
|
+
expect( @cookieset.length ).to eq( 2 )
|
135
|
+
expect( @cookieset ).to include( new_cookie )
|
142
136
|
end
|
143
137
|
|
144
138
|
|
@@ -146,18 +140,18 @@ describe Strelka::CookieSet do
|
|
146
140
|
new_cookie = Strelka::Cookie.new( 'foo', 'giant scallops of doom' )
|
147
141
|
@cookieset << new_cookie
|
148
142
|
|
149
|
-
@cookieset.length.
|
150
|
-
@cookieset.
|
151
|
-
@cookieset['foo'].
|
143
|
+
expect( @cookieset.length ).to eq( 1 )
|
144
|
+
expect( @cookieset ).to include( new_cookie )
|
145
|
+
expect( @cookieset['foo'] ).to equal( new_cookie )
|
152
146
|
end
|
153
147
|
|
154
148
|
it "replaces any existing same-named cookie set via the index operator" do
|
155
149
|
new_cookie = Strelka::Cookie.new( 'foo', 'giant scallops of doom' )
|
156
150
|
@cookieset[:foo] = new_cookie
|
157
151
|
|
158
|
-
@cookieset.length.
|
159
|
-
@cookieset.
|
160
|
-
@cookieset['foo'].
|
152
|
+
expect( @cookieset.length ).to eq( 1 )
|
153
|
+
expect( @cookieset ).to include( new_cookie )
|
154
|
+
expect( @cookieset['foo'] ).to equal( new_cookie )
|
161
155
|
end
|
162
156
|
|
163
157
|
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
# vim: set nosta noet ts=4 sw=4:
|
3
|
+
# encoding: utf-8
|
4
|
+
|
5
|
+
require_relative '../helpers'
|
6
|
+
|
7
|
+
require 'rspec'
|
8
|
+
require 'zmq'
|
9
|
+
require 'mongrel2'
|
10
|
+
|
11
|
+
require 'strelka'
|
12
|
+
require 'strelka/discovery'
|
13
|
+
|
14
|
+
|
15
|
+
#####################################################################
|
16
|
+
### C O N T E X T S
|
17
|
+
#####################################################################
|
18
|
+
|
19
|
+
describe Strelka::Discovery do
|
20
|
+
|
21
|
+
before( :all ) do
|
22
|
+
setup_logging()
|
23
|
+
Mongrel2::Config.db = Mongrel2::Config.in_memory_db
|
24
|
+
Mongrel2::Config.init_database
|
25
|
+
|
26
|
+
# Skip loading the 'strelka' gem, which probably doesn't exist in the right version
|
27
|
+
# in the dev environment
|
28
|
+
strelkaspec = make_gemspec( 'strelka', Strelka::VERSION, false )
|
29
|
+
loaded_specs = Gem.instance_variable_get( :@loaded_specs )
|
30
|
+
loaded_specs['strelka'] = strelkaspec
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
after( :all ) do
|
35
|
+
reset_logging()
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
let( :discoverable_class ) { Class.new {extend Strelka::Discovery} }
|
40
|
+
|
41
|
+
|
42
|
+
#
|
43
|
+
# Examples
|
44
|
+
#
|
45
|
+
|
46
|
+
it "has a method for loading app class/es from a file" do
|
47
|
+
|
48
|
+
app_file = 'an_app.rb'
|
49
|
+
app_path = Pathname( app_file ).expand_path
|
50
|
+
app_class = nil
|
51
|
+
|
52
|
+
expect( Kernel ).to receive( :load ).with( app_path.to_s ).and_return do
|
53
|
+
app_class = Class.new( discoverable_class )
|
54
|
+
end
|
55
|
+
expect( described_class.load(app_file) ).to eq( [ app_class ] )
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
it "defaults to loading as a file when finding an app"
|
60
|
+
|
61
|
+
|
62
|
+
it "has a method for discovering installed Strelka app files" do
|
63
|
+
specs = {}
|
64
|
+
specs[:donkey] = make_gemspec( 'donkey', '1.0.0' )
|
65
|
+
specs[:rabbit_old] = make_gemspec( 'rabbit', '1.0.0' )
|
66
|
+
specs[:rabbit_new] = make_gemspec( 'rabbit', '1.0.8' )
|
67
|
+
specs[:bear] = make_gemspec( 'bear', '1.0.0', false )
|
68
|
+
specs[:giraffe] = make_gemspec( 'giraffe', '1.0.0' )
|
69
|
+
|
70
|
+
expect( Gem::Specification ).to receive( :each ).once do |&block|
|
71
|
+
specs.values.each {|val| block.call(val) }
|
72
|
+
end
|
73
|
+
|
74
|
+
donkey_path = specs[:donkey].full_gem_path
|
75
|
+
rabbit_path = specs[:rabbit_new].full_gem_path
|
76
|
+
giraffe_path = specs[:giraffe].full_gem_path
|
77
|
+
|
78
|
+
expect( Dir ).to receive( :glob ).with( 'data/*/{apps,handlers}/**/*' ).
|
79
|
+
and_return( [] )
|
80
|
+
expect( Dir ).to receive( :glob ).with( "#{giraffe_path}/data/giraffe/{apps,handlers}/**/*" ).
|
81
|
+
and_return([ "#{giraffe_path}/data/giraffe/apps/app" ])
|
82
|
+
expect( Dir ).to receive( :glob ).with( "#{rabbit_path}/data/rabbit/{apps,handlers}/**/*" ).
|
83
|
+
and_return([ "#{rabbit_path}/data/rabbit/apps/subdir/app1.rb",
|
84
|
+
"#{rabbit_path}/data/rabbit/apps/subdir/app2.rb" ])
|
85
|
+
expect( Dir ).to receive( :glob ).with( "#{donkey_path}/data/donkey/{apps,handlers}/**/*" ).
|
86
|
+
and_return([ "#{donkey_path}/data/donkey/apps/app.rb" ])
|
87
|
+
|
88
|
+
app_paths = described_class.discover_paths
|
89
|
+
|
90
|
+
expect( app_paths ).to have( 4 ).members
|
91
|
+
expect( app_paths ).to include(
|
92
|
+
'donkey' => [Pathname("#{donkey_path}/data/donkey/apps/app.rb")],
|
93
|
+
'rabbit' => [Pathname("#{rabbit_path}/data/rabbit/apps/subdir/app1.rb"),
|
94
|
+
Pathname("#{rabbit_path}/data/rabbit/apps/subdir/app2.rb")],
|
95
|
+
'giraffe' => [Pathname("#{giraffe_path}/data/giraffe/apps/app")]
|
96
|
+
)
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
it "has a method for loading discovered app classes from installed Strelka app files" do
|
101
|
+
gemspec = make_gemspec( 'blood-orgy', '0.0.3' )
|
102
|
+
expect( Gem::Specification ).to receive( :each ).and_yield( gemspec ).at_least( :once )
|
103
|
+
|
104
|
+
expect( Dir ).to receive( :glob ).with( 'data/*/{apps,handlers}/**/*' ).
|
105
|
+
and_return( [] )
|
106
|
+
expect( Dir ).to receive( :glob ).with( "#{gemspec.full_gem_path}/data/blood-orgy/{apps,handlers}/**/*" ).
|
107
|
+
and_return([ "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ])
|
108
|
+
|
109
|
+
expect( described_class ).to receive( :gem ).with( 'blood-orgy' )
|
110
|
+
expect( Kernel ).to receive( :load ).
|
111
|
+
with( "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ).
|
112
|
+
and_return do
|
113
|
+
Class.new( discoverable_class )
|
114
|
+
true
|
115
|
+
end
|
116
|
+
|
117
|
+
app_classes = described_class.discover
|
118
|
+
expect( app_classes ).to have( 1 ).member
|
119
|
+
expect( app_classes.first ).to be_a( Class )
|
120
|
+
expect( app_classes.first ).to be < discoverable_class
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
it "handles exceptions while loading discovered apps" do
|
125
|
+
gemspec = make_gemspec( 'blood-orgy', '0.0.3' )
|
126
|
+
expect( Gem::Specification ).to receive( :each ).and_yield( gemspec ).at_least( :once )
|
127
|
+
|
128
|
+
expect( Dir ).to receive( :glob ).with( 'data/*/{apps,handlers}/**/*' ).
|
129
|
+
and_return( [] )
|
130
|
+
expect( Dir ).to receive( :glob ).with( "#{gemspec.full_gem_path}/data/blood-orgy/{apps,handlers}/**/*" ).
|
131
|
+
and_return([ "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ])
|
132
|
+
|
133
|
+
expect( described_class ).to receive( :gem ).with( 'blood-orgy' )
|
134
|
+
expect( Kernel ).to receive( :load ).
|
135
|
+
with( "#{gemspec.full_gem_path}/data/blood-orgy/apps/kurzweil" ).
|
136
|
+
and_raise( SyntaxError.new("kurzweil:1: syntax error, unexpected coffeeshop philosopher") )
|
137
|
+
|
138
|
+
app_classes = Strelka::Discovery.discover
|
139
|
+
expect( app_classes ).to be_empty()
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
end
|
144
|
+
|
@@ -2,18 +2,12 @@
|
|
2
2
|
# vim: set nosta noet ts=4 sw=4:
|
3
3
|
# encoding: utf-8
|
4
4
|
|
5
|
-
|
6
|
-
require 'pathname'
|
7
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent.parent
|
8
|
-
$LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
|
9
|
-
}
|
5
|
+
require_relative '../helpers'
|
10
6
|
|
11
7
|
require 'rspec'
|
12
8
|
require 'zmq'
|
13
9
|
require 'mongrel2'
|
14
10
|
|
15
|
-
require 'spec/lib/helpers'
|
16
|
-
|
17
11
|
require 'strelka'
|
18
12
|
require 'strelka/exceptions'
|
19
13
|
|
@@ -46,7 +40,7 @@ describe Strelka, "exception classes" do
|
|
46
40
|
exception = err
|
47
41
|
end
|
48
42
|
|
49
|
-
exception.request.
|
43
|
+
expect( exception.request ).to eq( req )
|
50
44
|
end
|
51
45
|
|
52
46
|
end
|
@@ -2,20 +2,10 @@
|
|
2
2
|
# vim: set nosta noet ts=4 sw=4:
|
3
3
|
# encoding: utf-8
|
4
4
|
|
5
|
-
|
6
|
-
require 'pathname'
|
7
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent.parent.parent
|
8
|
-
|
9
|
-
libdir = basedir + "lib"
|
10
|
-
|
11
|
-
$LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
|
12
|
-
$LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
|
13
|
-
}
|
5
|
+
require_relative '../../helpers'
|
14
6
|
|
15
7
|
require 'rspec'
|
16
8
|
|
17
|
-
require 'spec/lib/helpers'
|
18
|
-
|
19
9
|
require 'strelka'
|
20
10
|
require 'strelka/httprequest/acceptparams'
|
21
11
|
|
@@ -25,6 +15,7 @@ require 'strelka/httprequest/acceptparams'
|
|
25
15
|
#####################################################################
|
26
16
|
|
27
17
|
describe Strelka::HTTPRequest, "accept params" do
|
18
|
+
|
28
19
|
before( :all ) do
|
29
20
|
setup_logging( :fatal )
|
30
21
|
end
|
@@ -80,14 +71,14 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
80
71
|
VALID_HEADERS.each do |hdr, expectations|
|
81
72
|
rval = Strelka::HTTPRequest::MediaType.parse( hdr )
|
82
73
|
|
83
|
-
rval.
|
84
|
-
rval.type.
|
85
|
-
rval.subtype.
|
86
|
-
rval.qvalue.
|
74
|
+
expect( rval ).to be_an_instance_of( Strelka::HTTPRequest::MediaType )
|
75
|
+
expect( rval.type ).to eq( expectations[:type] )
|
76
|
+
expect( rval.subtype ).to eq( expectations[:subtype] )
|
77
|
+
expect( rval.qvalue ).to eq( expectations[:qval] )
|
87
78
|
|
88
79
|
if expectations[:extensions]
|
89
80
|
expectations[:extensions].each do |ext|
|
90
|
-
rval.extensions.
|
81
|
+
expect( rval.extensions ).to include( ext )
|
91
82
|
end
|
92
83
|
end
|
93
84
|
end
|
@@ -96,29 +87,29 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
96
87
|
|
97
88
|
it "is lenient (but warns) about invalid qvalues" do
|
98
89
|
rval = Strelka::HTTPRequest::MediaType.parse( '*/*; q=18' )
|
99
|
-
rval.
|
100
|
-
rval.qvalue.
|
90
|
+
expect( rval ).to be_an_instance_of( Strelka::HTTPRequest::MediaType )
|
91
|
+
expect( rval.qvalue ).to eq( 1.0 )
|
101
92
|
end
|
102
93
|
|
103
94
|
|
104
95
|
it "rejects invalid Accept header values" do
|
105
|
-
|
96
|
+
expect {
|
106
97
|
Strelka::HTTPRequest::MediaType.parse( 'porksausage' )
|
107
|
-
}.
|
98
|
+
}.to raise_error()
|
108
99
|
end
|
109
100
|
|
110
101
|
|
111
102
|
it "can represent itself in a human-readable object format" do
|
112
103
|
header = "text/html; q=0.9; level=2"
|
113
104
|
acceptparam = Strelka::HTTPRequest::MediaType.parse( header )
|
114
|
-
acceptparam.inspect.
|
105
|
+
expect( acceptparam.inspect ).to match( %r{MediaType.*text/html.*q=0.9} )
|
115
106
|
end
|
116
107
|
|
117
108
|
|
118
109
|
it "can represent itself as an Accept header" do
|
119
110
|
header = "text/html;q=0.9;level=2"
|
120
111
|
acceptparam = Strelka::HTTPRequest::MediaType.parse( header )
|
121
|
-
acceptparam.to_s.
|
112
|
+
expect( acceptparam.to_s ).to eq( header )
|
122
113
|
end
|
123
114
|
|
124
115
|
|
@@ -130,14 +121,14 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
130
121
|
collect {|par| Strelka::HTTPRequest::MediaType.parse( par ) }.
|
131
122
|
sort
|
132
123
|
|
133
|
-
params[0].to_s.
|
134
|
-
params[1].to_s.
|
135
|
-
params[2].to_s.
|
136
|
-
params[3].to_s.
|
137
|
-
params[4].to_s.
|
138
|
-
params[5].to_s.
|
139
|
-
params[6].to_s.
|
140
|
-
params[7].to_s.
|
124
|
+
expect( params[0].to_s ).to eq( 'application/xhtml+xml;q=1.0' )
|
125
|
+
expect( params[1].to_s ).to eq( 'application/xml;q=1.0' )
|
126
|
+
expect( params[2].to_s ).to eq( 'image/png;q=1.0' )
|
127
|
+
expect( params[3].to_s ).to eq( 'text/xml;q=1.0' )
|
128
|
+
expect( params[4].to_s ).to eq( 'text/html;q=0.9' )
|
129
|
+
expect( params[5].to_s ).to eq( 'text/html;q=0.9;level=1' )
|
130
|
+
expect( params[6].to_s ).to eq( 'text/plain;q=0.8' )
|
131
|
+
expect( params[7].to_s ).to eq( '*/*;q=0.5' )
|
141
132
|
end
|
142
133
|
|
143
134
|
|
@@ -145,12 +136,12 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
145
136
|
specific_param = Strelka::HTTPRequest::MediaType.parse( 'text/html' )
|
146
137
|
subtype_wildcard_param = Strelka::HTTPRequest::MediaType.parse( 'image/*' )
|
147
138
|
|
148
|
-
( specific_param =~ 'text/html' ).
|
149
|
-
( specific_param =~ 'image/png' ).
|
139
|
+
expect( ( specific_param =~ 'text/html' ) ).to be_true()
|
140
|
+
expect( ( specific_param =~ 'image/png' ) ).to be_false()
|
150
141
|
|
151
|
-
( subtype_wildcard_param =~ 'image/png' ).
|
152
|
-
( subtype_wildcard_param =~ 'image/jpeg' ).
|
153
|
-
( subtype_wildcard_param =~ 'text/plain' ).
|
142
|
+
expect( ( subtype_wildcard_param =~ 'image/png' ) ).to be_true()
|
143
|
+
expect( ( subtype_wildcard_param =~ 'image/jpeg' ) ).to be_true()
|
144
|
+
expect( ( subtype_wildcard_param =~ 'text/plain' ) ).to be_false()
|
154
145
|
end
|
155
146
|
end
|
156
147
|
|
@@ -161,33 +152,33 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
161
152
|
hdr = 'en'
|
162
153
|
param = Strelka::HTTPRequest::Language.parse( hdr )
|
163
154
|
|
164
|
-
param.
|
165
|
-
param.primary_tag.
|
166
|
-
param.subtag.
|
167
|
-
param.qvalue.
|
168
|
-
param.extensions.
|
155
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Language )
|
156
|
+
expect( param.primary_tag ).to eq( 'en' )
|
157
|
+
expect( param.subtag ).to be_nil()
|
158
|
+
expect( param.qvalue ).to eq( 1.0 )
|
159
|
+
expect( param.extensions ).to be_empty()
|
169
160
|
end
|
170
161
|
|
171
162
|
it "can parse a language range with a dialect" do
|
172
163
|
hdr = 'en-gb'
|
173
164
|
param = Strelka::HTTPRequest::Language.parse( hdr )
|
174
165
|
|
175
|
-
param.
|
176
|
-
param.primary_tag.
|
177
|
-
param.subtag.
|
178
|
-
param.qvalue.
|
179
|
-
param.extensions.
|
166
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Language )
|
167
|
+
expect( param.primary_tag ).to eq( 'en' )
|
168
|
+
expect( param.subtag ).to eq( 'gb' )
|
169
|
+
expect( param.qvalue ).to eq( 1.0 )
|
170
|
+
expect( param.extensions ).to be_empty()
|
180
171
|
end
|
181
172
|
|
182
173
|
it "can parse a language tag with a q-value" do
|
183
174
|
hdr = 'en-US; q=0.8'
|
184
175
|
param = Strelka::HTTPRequest::Language.parse( hdr )
|
185
176
|
|
186
|
-
param.
|
187
|
-
param.primary_tag.
|
188
|
-
param.subtag.
|
189
|
-
param.qvalue.
|
190
|
-
param.extensions.
|
177
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Language )
|
178
|
+
expect( param.primary_tag ).to eq( 'en' )
|
179
|
+
expect( param.subtag ).to eq( 'us' )
|
180
|
+
expect( param.qvalue ).to eq( 0.8 )
|
181
|
+
expect( param.extensions ).to be_empty()
|
191
182
|
end
|
192
183
|
|
193
184
|
end
|
@@ -199,44 +190,44 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
199
190
|
hdr = 'iso-8859-1'
|
200
191
|
param = Strelka::HTTPRequest::Charset.parse( hdr )
|
201
192
|
|
202
|
-
param.
|
203
|
-
param.name.
|
204
|
-
param.subtype.
|
205
|
-
param.qvalue.
|
206
|
-
param.extensions.
|
193
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Charset )
|
194
|
+
expect( param.name ).to eq( 'iso-8859-1' )
|
195
|
+
expect( param.subtype ).to be_nil()
|
196
|
+
expect( param.qvalue ).to eq( 1.0 )
|
197
|
+
expect( param.extensions ).to be_empty()
|
207
198
|
end
|
208
199
|
|
209
200
|
it "can parse a charset with a q-value" do
|
210
201
|
hdr = 'iso-8859-15; q=0.5'
|
211
202
|
param = Strelka::HTTPRequest::Charset.parse( hdr )
|
212
203
|
|
213
|
-
param.
|
214
|
-
param.name.
|
215
|
-
param.subtype.
|
216
|
-
param.qvalue.
|
217
|
-
param.extensions.
|
204
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Charset )
|
205
|
+
expect( param.name ).to eq( 'iso-8859-15' )
|
206
|
+
expect( param.subtype ).to be_nil()
|
207
|
+
expect( param.qvalue ).to eq( 0.5 )
|
208
|
+
expect( param.extensions ).to be_empty()
|
218
209
|
end
|
219
210
|
|
220
211
|
it "can return the Ruby Encoding object associated with its character set" do
|
221
212
|
param = Strelka::HTTPRequest::Charset.parse( 'koi8-r' )
|
222
|
-
param.name.
|
223
|
-
param.encoding_object.
|
213
|
+
expect( param.name ).to eq( 'koi8-r' )
|
214
|
+
expect( param.encoding_object ).to eq( Encoding::KOI8_R )
|
224
215
|
end
|
225
216
|
|
226
217
|
it "can be compared against strings" do
|
227
218
|
specific_param = Strelka::HTTPRequest::Charset.parse( 'us-ascii' )
|
228
219
|
|
229
|
-
( specific_param =~ 'us-ascii' ).
|
230
|
-
( specific_param =~ 'ansi_x3.4-1968' ).
|
231
|
-
( specific_param =~ 'utf-8' ).
|
220
|
+
expect( ( specific_param =~ 'us-ascii' ) ).to be_true()
|
221
|
+
expect( ( specific_param =~ 'ansi_x3.4-1968' ) ).to be_true()
|
222
|
+
expect( ( specific_param =~ 'utf-8' ) ).to be_false()
|
232
223
|
end
|
233
224
|
|
234
225
|
it "can be compared against Encoding objects" do
|
235
226
|
specific_param = Strelka::HTTPRequest::Charset.parse( 'utf-8' )
|
236
227
|
|
237
|
-
( specific_param =~ Encoding::UTF_8 ).
|
238
|
-
( specific_param =~ Encoding::CP65001 ).
|
239
|
-
( specific_param =~ Encoding::MacThai ).
|
228
|
+
expect( ( specific_param =~ Encoding::UTF_8 ) ).to be_true()
|
229
|
+
expect( ( specific_param =~ Encoding::CP65001 ) ).to be_true()
|
230
|
+
expect( ( specific_param =~ Encoding::MacThai ) ).to be_false()
|
240
231
|
end
|
241
232
|
end
|
242
233
|
|
@@ -247,34 +238,34 @@ describe Strelka::HTTPRequest, "accept params" do
|
|
247
238
|
hdr = 'identity'
|
248
239
|
param = Strelka::HTTPRequest::Encoding.parse( hdr )
|
249
240
|
|
250
|
-
param.
|
251
|
-
param.content_coding.
|
252
|
-
param.subtype.
|
253
|
-
param.qvalue.
|
254
|
-
param.extensions.
|
241
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Encoding )
|
242
|
+
expect( param.content_coding ).to eq( 'identity' )
|
243
|
+
expect( param.subtype ).to be_nil()
|
244
|
+
expect( param.qvalue ).to eq( 1.0 )
|
245
|
+
expect( param.extensions ).to be_empty()
|
255
246
|
end
|
256
247
|
|
257
248
|
it "can parse an encoding with a q-value" do
|
258
249
|
hdr = 'gzip; q=0.55'
|
259
250
|
param = Strelka::HTTPRequest::Encoding.parse( hdr )
|
260
251
|
|
261
|
-
param.
|
262
|
-
param.content_coding.
|
263
|
-
param.subtype.
|
264
|
-
param.qvalue.
|
265
|
-
param.extensions.
|
252
|
+
expect( param ).to be_an_instance_of( Strelka::HTTPRequest::Encoding )
|
253
|
+
expect( param.content_coding ).to eq( 'gzip' )
|
254
|
+
expect( param.subtype ).to be_nil()
|
255
|
+
expect( param.qvalue ).to eq( 0.55 )
|
256
|
+
expect( param.extensions ).to be_empty()
|
266
257
|
end
|
267
258
|
|
268
259
|
it "can be compared against strings" do
|
269
260
|
specific_param = Strelka::HTTPRequest::MediaType.parse( 'text/html' )
|
270
261
|
subtype_wildcard_param = Strelka::HTTPRequest::MediaType.parse( 'image/*' )
|
271
262
|
|
272
|
-
( specific_param =~ 'text/html' ).
|
273
|
-
( specific_param =~ 'image/png' ).
|
263
|
+
expect( ( specific_param =~ 'text/html' ) ).to be_true()
|
264
|
+
expect( ( specific_param =~ 'image/png' ) ).to be_false()
|
274
265
|
|
275
|
-
( subtype_wildcard_param =~ 'image/png' ).
|
276
|
-
( subtype_wildcard_param =~ 'image/jpeg' ).
|
277
|
-
( subtype_wildcard_param =~ 'text/plain' ).
|
266
|
+
expect( ( subtype_wildcard_param =~ 'image/png' ) ).to be_true()
|
267
|
+
expect( ( subtype_wildcard_param =~ 'image/jpeg' ) ).to be_true()
|
268
|
+
expect( ( subtype_wildcard_param =~ 'text/plain' ) ).to be_false()
|
278
269
|
end
|
279
270
|
end
|
280
271
|
|
@@ -1,20 +1,10 @@
|
|
1
1
|
# -*- rspec -*-
|
2
2
|
# vim: set nosta noet ts=4 sw=4:
|
3
3
|
|
4
|
-
|
5
|
-
require 'pathname'
|
6
|
-
basedir = Pathname.new( __FILE__ ).dirname.parent.parent.parent
|
7
|
-
|
8
|
-
libdir = basedir + "lib"
|
9
|
-
|
10
|
-
$LOAD_PATH.unshift( basedir ) unless $LOAD_PATH.include?( basedir )
|
11
|
-
$LOAD_PATH.unshift( libdir ) unless $LOAD_PATH.include?( libdir )
|
12
|
-
}
|
4
|
+
require_relative '../../helpers'
|
13
5
|
|
14
6
|
require 'rspec'
|
15
7
|
|
16
|
-
require 'spec/lib/helpers'
|
17
|
-
|
18
8
|
require 'strelka'
|
19
9
|
require 'strelka/httprequest/auth'
|
20
10
|
|
@@ -41,15 +31,15 @@ describe Strelka::HTTPRequest::Auth do
|
|
41
31
|
|
42
32
|
|
43
33
|
it "adds an authenticated? predicate" do
|
44
|
-
@req.
|
34
|
+
expect( @req ).to_not be_authenticated()
|
45
35
|
@req.authenticated_user = 'anonymous'
|
46
|
-
@req.
|
36
|
+
expect( @req ).to be_authenticated()
|
47
37
|
end
|
48
38
|
|
49
39
|
it "adds an authenticated_user attribute" do
|
50
|
-
@req.authenticated_user.
|
40
|
+
expect( @req.authenticated_user ).to be_nil()
|
51
41
|
@req.authenticated_user = 'someone'
|
52
|
-
@req.authenticated_user.
|
42
|
+
expect( @req.authenticated_user ).to eq( 'someone' )
|
53
43
|
end
|
54
44
|
|
55
45
|
end
|