strelka 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -2
  3. data.tar.gz.sig +2 -1
  4. data/ChangeLog +143 -24
  5. data/History.rdoc +7 -0
  6. data/Rakefile +40 -27
  7. data/lib/strelka.rb +3 -2
  8. data/lib/strelka/app.rb +1 -0
  9. data/lib/strelka/app/auth.rb +2 -2
  10. data/lib/strelka/httprequest.rb +16 -14
  11. data/spec/helpers.rb +0 -1
  12. data/spec/strelka/app/auth_spec.rb +13 -6
  13. data/spec/strelka/app/errors_spec.rb +0 -5
  14. data/spec/strelka/app/filters_spec.rb +0 -5
  15. data/spec/strelka/app/negotiation_spec.rb +0 -5
  16. data/spec/strelka/app/parameters_spec.rb +0 -5
  17. data/spec/strelka/app/restresources_spec.rb +0 -5
  18. data/spec/strelka/app/routing_spec.rb +0 -5
  19. data/spec/strelka/app/sessions_spec.rb +0 -5
  20. data/spec/strelka/app/templating_spec.rb +0 -2
  21. data/spec/strelka/app_spec.rb +0 -2
  22. data/spec/strelka/authprovider/basic_spec.rb +0 -5
  23. data/spec/strelka/authprovider/hostaccess_spec.rb +0 -5
  24. data/spec/strelka/authprovider_spec.rb +0 -5
  25. data/spec/strelka/cookie_spec.rb +0 -8
  26. data/spec/strelka/discovery_spec.rb +0 -5
  27. data/spec/strelka/exceptions_spec.rb +0 -5
  28. data/spec/strelka/httprequest/acceptparams_spec.rb +0 -8
  29. data/spec/strelka/httprequest/auth_spec.rb +0 -5
  30. data/spec/strelka/httprequest/negotiation_spec.rb +0 -5
  31. data/spec/strelka/httprequest/session_spec.rb +0 -5
  32. data/spec/strelka/httprequest_spec.rb +0 -4
  33. data/spec/strelka/httpresponse/negotiation_spec.rb +0 -5
  34. data/spec/strelka/httpresponse/session_spec.rb +0 -5
  35. data/spec/strelka/httpresponse_spec.rb +0 -5
  36. data/spec/strelka/mixins_spec.rb +0 -7
  37. data/spec/strelka/multipartparser_spec.rb +0 -2
  38. data/spec/strelka/paramvalidator_spec.rb +1 -13
  39. data/spec/strelka/plugins_spec.rb +0 -2
  40. data/spec/strelka/router/default_spec.rb +0 -5
  41. data/spec/strelka/router/exclusive_spec.rb +0 -5
  42. data/spec/strelka/router_spec.rb +0 -5
  43. data/spec/strelka/session/db_spec.rb +0 -5
  44. data/spec/strelka/session/default_spec.rb +0 -5
  45. data/spec/strelka/session_spec.rb +0 -5
  46. data/spec/strelka/websocketserver/routing_spec.rb +0 -5
  47. data/spec/strelka/websocketserver_spec.rb +0 -2
  48. data/spec/strelka_spec.rb +0 -9
  49. metadata +78 -90
  50. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b14749495dff16df191c5371094312f513e7b6c
4
- data.tar.gz: 5db0407a3325455375fa0fbce72257e23cf32a5c
3
+ metadata.gz: 75847ae82c8afb5c1b015ff7883b242f02f497e3
4
+ data.tar.gz: f3a1644c01ff9e07c776eda4c98105a85c94f50b
5
5
  SHA512:
6
- metadata.gz: 2b36ed3558f2cac0228536ea0251e696038b8e2f9711355512704145196c42745c2261df604c5aa9d2cc1eb66c4670142c92f2eef9f9d704487556ef3857ed08
7
- data.tar.gz: 129997e0bdad8b2962b083627902917d1e8c2948133910dbc2aa1e947733b9d0b18b8472c7ed6b5af79760b66254ff70606d8d6ee80e813ee50b75e0d4c77cd0
6
+ metadata.gz: cc56b4ca53995f7b2ac9196c3ab0ea5727b5bb0bbca9ab8802a0205d628d7ccc9365a5b0c2b9f97c9d4b0c0223a32121505aa9c685a791cde17363b717a5f31e
7
+ data.tar.gz: 5346f6b0ae56a569cf57cef4ab248d65469a77fb84384150e02d51633d392b3f26cf54e9dedfab4672babb53037645052295dd0720b4a64457d42510e8fe58a0
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1 @@
1
- IF�����.�Ve���ҽ�ܶ�&z6w�M�+�=�o��Gѫn��L���J�����T�8n�����u�ҥ[v2���e��X�0��`?vC��&�cL��T�;|��z-����^�K���Rc\�+JC$���'')y���Pk��:��bkBh '�G�!׃3oS��28I�-
2
- GDJ���Ue/*u5-�%N�>2�h��䈆�qo�4{x��-�������'�
1
+ `���[(ɱ���꾂�G|�G#���\��Ұ��E!]���$�_Ob'�|��>h���-�Hsja�+0Ƣdc,5N�M��F�**��lܰs-Q�y�W4Voj�<����7���Ty_�Prvl1��T ���Ց�@\g�����ujp��3.U���xZ'�`0�� d7e�fmM�t�c6E9W 9��X��9;Q��ƓNbT���]�0r�d�&�J-�|�I��4h@"W�>6�:�
data.tar.gz.sig CHANGED
@@ -1 +1,2 @@
1
- @
1
+ �I�^��Po�!�r-ƾ�Du1����Gc�0�$��=(��,�.���*`�\�J���}��?%z��nj͔��A}ɣ�$u����,�e�N-��W�ͅ򍛧�\b��~�&*��K�L�l6v��H%ZE�z��6��@.��9��τ� vz��ZĦ�$��������QG�8�M�ׄ��5�F�^f���*�,�Cl�">1�q� "
2
+
data/ChangeLog CHANGED
@@ -1,9 +1,127 @@
1
+ 2015-04-01 Michael Granger <ged@FaerieMUD.org>
2
+
3
+ * cert/mahlon.pem:
4
+ Sign mahlon's cert
5
+ [db92e594bfc2] [tip]
6
+
7
+ 2015-04-01 Mahlon E. Smith <mahlon@martini.nu>
8
+
9
+ * .gems, Rakefile:
10
+ Add certificate signing to gem packaging.
11
+ [d8b9bca999a8]
12
+
13
+ * .hoerc, Rakefile, cert/ged.pem, cert/mahlon.pem, strelka.gemspec:
14
+ Add certificate signing to gem packaging.
15
+ [d85a66521643]
16
+
17
+ * .gems:
18
+ Add safe_yaml to the .gems file.
19
+ [1f2abfa84b12]
20
+
21
+ * lib/strelka/app/auth.rb, spec/strelka/app/auth_spec.rb:
22
+ Ensure required permissions for the auth plugin are unmodified
23
+ between requests.
24
+ [e38b9bf6df30]
25
+
26
+ 2015-03-25 Michael Granger <ged@FaerieMUD.org>
27
+
28
+ * lib/strelka/httprequest.rb, spec/helpers.rb:
29
+ Fix urlencoded param parsing
30
+
31
+ Ruby 2.2's URI library no longer supports parsing application/x-www-
32
+ form-urlencoded with semicolon delimiters because the WhatWG decided
33
+ no one used that I guess.
34
+
35
+ This change restores the old behavior by doing the two splits
36
+ ourselves and handing the escaping off to URI.
37
+ [dd7fe269b65b]
38
+
39
+ * spec/strelka/app/auth_spec.rb, spec/strelka/app/errors_spec.rb,
40
+ spec/strelka/app/filters_spec.rb,
41
+ spec/strelka/app/negotiation_spec.rb,
42
+ spec/strelka/app/parameters_spec.rb,
43
+ spec/strelka/app/restresources_spec.rb,
44
+ spec/strelka/app/routing_spec.rb, spec/strelka/app/sessions_spec.rb,
45
+ spec/strelka/app/templating_spec.rb, spec/strelka/app_spec.rb,
46
+ spec/strelka/authprovider/basic_spec.rb,
47
+ spec/strelka/authprovider/hostaccess_spec.rb,
48
+ spec/strelka/authprovider_spec.rb, spec/strelka/cookie_spec.rb,
49
+ spec/strelka/discovery_spec.rb, spec/strelka/exceptions_spec.rb,
50
+ spec/strelka/httprequest/acceptparams_spec.rb,
51
+ spec/strelka/httprequest/auth_spec.rb,
52
+ spec/strelka/httprequest/negotiation_spec.rb,
53
+ spec/strelka/httprequest/session_spec.rb,
54
+ spec/strelka/httprequest_spec.rb,
55
+ spec/strelka/httpresponse/negotiation_spec.rb,
56
+ spec/strelka/httpresponse/session_spec.rb,
57
+ spec/strelka/httpresponse_spec.rb, spec/strelka/mixins_spec.rb,
58
+ spec/strelka/multipartparser_spec.rb,
59
+ spec/strelka/paramvalidator_spec.rb, spec/strelka/plugins_spec.rb,
60
+ spec/strelka/router/default_spec.rb,
61
+ spec/strelka/router/exclusive_spec.rb, spec/strelka/router_spec.rb,
62
+ spec/strelka/session/db_spec.rb,
63
+ spec/strelka/session/default_spec.rb, spec/strelka/session_spec.rb,
64
+ spec/strelka/websocketserver/routing_spec.rb,
65
+ spec/strelka/websocketserver_spec.rb, spec/strelka_spec.rb:
66
+ Use the loggability spechelper for logging setup/teardown
67
+ [a585c7b4f35b]
68
+
69
+ * spec/strelka/paramvalidator_spec.rb:
70
+ Update paramvalidator specs for Ruby 2.2.
71
+
72
+ This removes some "bad" URI examples that are now parsed
73
+ successfully by Ruby 2.2's URI library, and one that used to be
74
+ parsed okay but no longer is.
75
+ [5675c3e920cb]
76
+
77
+ * .gems, .rvm.gems, Rakefile, strelka.gemspec:
78
+ Bump mongrel2 dependency to get rid of Ruby 2.2 warnings
79
+ [bb0e56836291]
80
+
81
+ 2015-03-01 Michael Granger <ged@FaerieMUD.org>
82
+
83
+ * strelka.gemspec:
84
+ Update the gemspec
85
+ [92c894486289]
86
+
87
+ * Rakefile:
88
+ Fix the fivefish version
89
+ [22b8b7b6a0dd]
90
+
91
+ * .rvmrc:
92
+ Bump the rvmrc Ruby version
93
+ [653f2efdcfb3]
94
+
95
+ 2015-02-27 Michael Granger <ged@FaerieMUD.org>
96
+
97
+ * .hgignore, .travis.yml, Gemfile, Rakefile, strelka.gemspec:
98
+ Prep for travis-ci builds
99
+ [d2eccf740f22]
100
+
101
+ * lib/strelka.rb, lib/strelka/app.rb:
102
+ Ensure mixins are loaded
103
+ [421c715bc499]
104
+
105
+ 2014-06-06 Michael Granger <ged@FaerieMUD.org>
106
+
107
+ * .hgtags:
108
+ Added tag v0.9.0 for changeset a03445b9de0f
109
+ [f314a21c616e]
110
+
111
+ * .hgsigs:
112
+ Added signature for changeset 406a68302dc6
113
+ [a03445b9de0f] [v0.9.0]
114
+
115
+ * History.rdoc, lib/strelka.rb:
116
+ Bump the minor version, update history.
117
+ [406a68302dc6]
118
+
1
119
  2014-06-06 Mahlon E. Smith <mahlon@martini.nu>
2
120
 
3
121
  * lib/strelka/app/auth.rb, spec/strelka/app/auth_spec.rb:
4
122
  Auth plugin: Add the ability to modify permission sets from the
5
123
  require_perms_for() block.
6
- [69fbfc1e2de3] [tip]
124
+ [69fbfc1e2de3]
7
125
 
8
126
  2014-06-05 Michael Granger <ged@FaerieMUD.org>
9
127
 
@@ -15,7 +133,7 @@
15
133
  spec/strelka/httpresponse/session_spec.rb,
16
134
  spec/strelka/plugins_spec.rb, spec/strelka_spec.rb:
17
135
  Updated for RSpec 3.0; bumped deps.
18
- [04bd8611e28f] [github/master]
136
+ [04bd8611e28f]
19
137
 
20
138
  2014-02-05 Michael Granger <ged@FaerieMUD.org>
21
139
 
@@ -37,13 +155,6 @@
37
155
  Update dependencies.
38
156
  [4ddae11c28b8]
39
157
 
40
- 2014-01-22 Mahlon E. Smith <mahlon@laika.com>
41
-
42
- * lib/strelka/httprequest.rb:
43
- Don't modify the original request URI object when calling
44
- HttpRequest#base_uri.
45
- [6e2d1e0e89d1]
46
-
47
158
  2014-01-29 Michael Granger <ged@FaerieMUD.org>
48
159
 
49
160
  * lib/strelka/app.rb:
@@ -81,19 +192,19 @@
81
192
  Merge improvements to the AbstractClass mixin from elsewhere.
82
193
  [96725c68d4ae]
83
194
 
195
+ 2014-01-22 Mahlon E. Smith <mahlon@laika.com>
196
+
197
+ * lib/strelka/httprequest.rb:
198
+ Don't modify the original request URI object when calling
199
+ HttpRequest#base_uri.
200
+ [6e2d1e0e89d1]
201
+
84
202
  2014-01-02 Michael Granger <ged@FaerieMUD.org>
85
203
 
86
204
  * lib/strelka.rb:
87
205
  Merged with bdb098771858
88
206
  [140055f6ee81]
89
207
 
90
- 2013-12-02 Mahlon E. Smith <mahlon@martini.nu>
91
-
92
- * .rvm.gems, lib/strelka.rb, lib/strelka/app/auth.rb,
93
- spec/strelka/session/default_spec.rb:
94
- Restore access to request parameters from the authentication plugin.
95
- [bdb098771858]
96
-
97
208
  2014-01-01 Michael Granger <ged@FaerieMUD.org>
98
209
 
99
210
  * History.rdoc, lib/strelka.rb:
@@ -135,6 +246,13 @@
135
246
  Remove config keys that moved to Discovery
136
247
  [c4b52cde2f47]
137
248
 
249
+ 2013-12-02 Mahlon E. Smith <mahlon@martini.nu>
250
+
251
+ * .rvm.gems, lib/strelka.rb, lib/strelka/app/auth.rb,
252
+ spec/strelka/session/default_spec.rb:
253
+ Restore access to request parameters from the authentication plugin.
254
+ [bdb098771858]
255
+
138
256
  2013-11-08 Michael Granger <ged@FaerieMUD.org>
139
257
 
140
258
  * .hgtags:
@@ -586,7 +704,7 @@
586
704
  spec/strelka/app/parameters_spec.rb,
587
705
  spec/strelka/paramvalidator_spec.rb:
588
706
  Add a paramvalidator constraint for JSON fields
589
- [ac11b12f9366] [github/no-notes-auto-vivify]
707
+ [ac11b12f9366]
590
708
 
591
709
  2013-01-25 Michael Granger <ged@FaerieMUD.org>
592
710
 
@@ -829,7 +947,7 @@
829
947
 
830
948
  * lib/strelka/authprovider.rb, spec/strelka/authprovider_spec.rb:
831
949
  Fix the documentation and specs for AuthProvider#authorize.
832
- [accb655c57b4] [github/master@default]
950
+ [accb655c57b4]
833
951
 
834
952
  2012-10-03 Michael Granger <ged@FaerieMUD.org>
835
953
 
@@ -2440,8 +2558,8 @@
2440
2558
  - Require Ruby-Mongrel 0.12+
2441
2559
  - This is just the initial implementation. Yet to be added:
2442
2560
  configuration options for enabling/disabling stuff, automatic
2443
- composite services mapped from association reflections, mass- create
2444
- option, and lots more I'm forgetting.
2561
+ composite services mapped from association reflections, mass-
2562
+ create option, and lots more I'm forgetting.
2445
2563
  [23acdb6e9afc]
2446
2564
 
2447
2565
  * data/strelka/bootstrap-config.rb:
@@ -2759,11 +2877,12 @@
2759
2877
  spec/strelka/httpresponse/negotiation_spec.rb:
2760
2878
  Alterations to the plugin system to reflect dogfood discoveries.
2761
2879
  - Rearranged the lifecycle of the request to all happen inside the
2762
- try/catch to allow fixup hooks to finish with an error status, too.
2880
+ try/catch to allow fixup hooks to finish with an error status,
2881
+ too.
2763
2882
  - Moved the negotiation plugin closer to the router so negotation
2764
- callbacks can return responses that will be further altered by later
2765
- plugins. Moved the acceptable check into the response fixup hook to
2766
- accomplish this.
2883
+ callbacks can return responses that will be further altered by
2884
+ later plugins. Moved the acceptable check into the response fixup
2885
+ hook to accomplish this.
2767
2886
  - Made the response fixup hook only take a response object since
2768
2887
  responses can now know what their request is.
2769
2888
  - Made language-negotiation short-circuit whenever there aren't any
data/History.rdoc CHANGED
@@ -1,3 +1,10 @@
1
+ == v0.9.1 [2015-04-01] Mahlon E. Smith <mahlon@martini.nu>
2
+
3
+ - Ensure required permissions for the auth plugin are unmodified between requests.
4
+ - Fix urlencoded param parsing
5
+ - Fixes for Ruby 2.2.
6
+
7
+
1
8
  == v0.9.0 [2014-06-06] Mahlon E. Smith <mahlon@martini.nu>
2
9
 
3
10
  - Auth plugin: Add the ability to modify permission sets from the
data/Rakefile CHANGED
@@ -8,10 +8,11 @@ rescue LoadError
8
8
  abort "This Rakefile requires 'hoe' (gem install hoe)"
9
9
  end
10
10
 
11
+ GEMSPEC = 'strelka.gemspec'
12
+
11
13
  Hoe.plugin :mercurial
12
14
  Hoe.plugin :signing
13
15
  Hoe.plugin :deveiate
14
- Hoe.plugin :bundler
15
16
 
16
17
  Hoe.plugins.delete :rubyforge
17
18
 
@@ -19,6 +20,7 @@ hoespec = Hoe.spec 'strelka' do
19
20
  self.readme_file = 'README.rdoc'
20
21
  self.history_file = 'History.rdoc'
21
22
  self.extra_rdoc_files = FileList[ '*.rdoc' ]
23
+ self.license "BSD"
22
24
 
23
25
  self.developer 'Mahlon E. Smith', 'mahlon@martini.nu'
24
26
  self.developer 'Michael Granger', 'ged@FaerieMUD.org'
@@ -28,42 +30,35 @@ hoespec = Hoe.spec 'strelka' do
28
30
  self.dependency 'highline', '~> 1.6'
29
31
  self.dependency 'inversion', '~> 0.12'
30
32
  self.dependency 'loggability', '~> 0.9'
31
- self.dependency 'mongrel2', '~> 0.41'
33
+ self.dependency 'mongrel2', ['~> 0.43', '>= 0.43.1']
32
34
  self.dependency 'pluggability', '~> 0.4'
33
35
  self.dependency 'sysexits', '~> 1.1'
34
36
  self.dependency 'trollop', '~> 2.0'
35
37
  self.dependency 'uuidtools', '~> 2.1'
36
38
  self.dependency 'safe_yaml', '~> 1.0'
37
39
 
38
- self.dependency 'hoe-deveiate', '~> 0.3', :developer
39
- self.dependency 'hoe-bundler', '~> 1.2', :developer
40
+ self.dependency 'hoe-deveiate', '~> 0.6', :developer
40
41
  self.dependency 'rspec', '~> 3.0', :developer
41
42
  self.dependency 'simplecov', '~> 0.7', :developer
42
- self.dependency 'rdoc-generator-fivefish', '~> 0.2', :developer
43
-
44
- self.license "BSD"
45
- self.spec_extras[:rdoc_options] = [
46
- '-t', 'Strelka Web Application Toolkit',
47
- '-w', '4',
48
- ]
49
-
50
- # Use the Fivefish formatter if run in development
51
- self.spec_extras[:rdoc_options] += [ '-f', 'fivefish' ] if File.directory?( '.hg' )
43
+ self.dependency 'rdoc-generator-fivefish', '~> 0.1', :developer
52
44
 
53
- self.require_ruby_version( '>=1.9.3' )
45
+ self.require_ruby_version( '>=2.0.0' )
54
46
  self.hg_sign_tags = true if self.respond_to?( :hg_sign_tags= )
55
47
  self.check_history_on_release = true if self.respond_to?( :check_history_on_release= )
56
-
57
48
  self.rdoc_locations << "deveiate:/usr/local/www/public/code/#{remote_rdoc_dir}"
58
49
  end
59
50
 
60
-
61
-
62
51
  ENV['VERSION'] ||= hoespec.spec.version.to_s
63
52
 
64
53
  # Ensure the specs pass before checking in
65
- task 'hg:precheckin' => [ :check_history, :check_manifest, :spec ]
54
+ task 'hg:precheckin' => [:check_history, :check_manifest, :spec]
66
55
 
56
+ if Rake::Task.task_defined?( '.gemtest' )
57
+ Rake::Task['.gemtest'].clear
58
+ task '.gemtest' do
59
+ $stderr.puts "Not including a .gemtest until I'm confident the test suite is idempotent."
60
+ end
61
+ end
67
62
 
68
63
  desc "Build a coverage report"
69
64
  task :coverage do
@@ -71,15 +66,33 @@ task :coverage do
71
66
  Rake::Task[:spec].invoke
72
67
  end
73
68
 
74
- if Rake::Task.task_defined?( '.gemtest' )
75
- Rake::Task['.gemtest'].clear
76
- task '.gemtest' do
77
- $stderr.puts "Not including a .gemtest until I'm confident the test suite is idempotent."
78
- end
79
- end
80
69
 
70
+ # Use the fivefish formatter for docs generated from development checkout
71
+ if File.directory?( '.hg' )
72
+ require 'rdoc/task'
81
73
 
82
- # Add admin app testing directories to the clobber list
83
- CLOBBER.include( 'static', 'run', 'log', 'strelka.sqlite' )
74
+ Rake::Task[ 'docs' ].clear
75
+ RDoc::Task.new( 'docs' ) do |rdoc|
76
+ rdoc.main = "README.rdoc"
77
+ rdoc.rdoc_files.include( "*.rdoc", "ChangeLog", "lib/**/*.rb" )
78
+ rdoc.generator = :fivefish
79
+ rdoc.title = "Strelka: A Ruby Web Framework"
80
+ rdoc.rdoc_dir = 'doc'
81
+ end
82
+ end
84
83
 
84
+ task :gemspec => GEMSPEC
85
+ file GEMSPEC => __FILE__
86
+ task GEMSPEC do |task|
87
+ spec = $hoespec.spec
88
+ spec.files.delete( '.gemtest' )
89
+ spec.signing_key = nil
90
+ spec.cert_chain = [ 'certs/mahlon.pem', 'certs/ged.pem' ]
91
+ spec.version = "#{spec.version.bump}.0.pre#{Time.now.strftime("%Y%m%d%H%M%S")}"
92
+ File.open( task.name, 'w' ) do |fh|
93
+ fh.write( spec.to_ruby )
94
+ end
95
+ end
85
96
 
97
+ CLOBBER.include( GEMSPEC.to_s )
98
+ task :default => :gemspec
data/lib/strelka.rb CHANGED
@@ -24,11 +24,12 @@ module Strelka
24
24
  log_as :strelka
25
25
 
26
26
  # Library version constant
27
- VERSION = '0.9.0'
27
+ VERSION = '0.9.1'
28
28
 
29
29
  # Version-control revision constant
30
- REVISION = %q$Revision: 406a68302dc6 $
30
+ REVISION = %q$Revision: d8332e8ea7f7 $
31
31
 
32
+ require 'strelka/mixins'
32
33
  require 'strelka/constants'
33
34
  require 'strelka/exceptions'
34
35
  include Strelka::Constants
data/lib/strelka/app.rb CHANGED
@@ -23,6 +23,7 @@ class Strelka::App < Mongrel2::Handler
23
23
  include Strelka::Constants,
24
24
  Strelka::ResponseHelpers
25
25
 
26
+
26
27
  # Loggability API -- set up logging
27
28
  log_to :strelka
28
29
 
@@ -421,7 +421,7 @@ module Strelka::App::Auth
421
421
 
422
422
  pattern.gsub!( %r{^/+|/+$}, '' ) if pattern.respond_to?( :gsub! )
423
423
  self.log.debug " adding require_perms (%p) for %p" % [ perms, pattern ]
424
- self.positive_perms_criteria << [ pattern, block, perms ]
424
+ self.positive_perms_criteria << [ pattern, block, perms.freeze ]
425
425
  end
426
426
 
427
427
 
@@ -624,7 +624,7 @@ module Strelka::App::Auth
624
624
  criteria = self.request_matches_criteria( request, pattern, &block )
625
625
  next unless criteria
626
626
 
627
- newperms = Array( newperms )
627
+ newperms = Array( newperms ).dup
628
628
 
629
629
  if criteria.is_a?( Symbol )
630
630
  newperms << criteria
@@ -142,7 +142,7 @@ class Strelka::HTTPRequest < Mongrel2::HTTPRequest
142
142
 
143
143
  case self.verb
144
144
  when :GET, :HEAD
145
- value = self.parse_query_args
145
+ value = decode_www_form( self.uri.query )
146
146
  when :POST, :PUT
147
147
  value = self.parse_body
148
148
  when :TRACE
@@ -177,7 +177,7 @@ class Strelka::HTTPRequest < Mongrel2::HTTPRequest
177
177
 
178
178
  case mimetype.split( ';' ).first
179
179
  when 'application/x-www-form-urlencoded'
180
- return merge_query_args( URI.decode_www_form(self.body.read) )
180
+ return decode_www_form( self.body.read )
181
181
  when 'application/json', 'text/javascript'
182
182
  return Yajl.load( self.body )
183
183
  when 'text/x-yaml', 'application/x-yaml'
@@ -219,24 +219,26 @@ class Strelka::HTTPRequest < Mongrel2::HTTPRequest
219
219
  alias_method :redirect_to, :redirect
220
220
 
221
221
 
222
- #########
223
- protected
224
- #########
222
+ #######
223
+ private
224
+ #######
225
225
 
226
- ### Return a Hash of request query arguments.
227
- ### ?arg1=yes&arg2=no&arg3 #=> {'arg1' => 'yes', 'arg2' => 'no', 'arg3' => nil}
228
- def parse_query_args
229
- return {} if self.uri.query.nil?
226
+ ### Return a Hash of parameters decoded from a application/x-www-form-urlencoded
227
+ ### +query_string+, combining multiple values for the same key into an Array
228
+ ### value in the order they occurred.
229
+ def decode_www_form( query_string )
230
+ return {} if query_string.nil?
231
+
232
+ query_args = query_string.split( /[&;]/ ).each_with_object([]) do |pair, accum|
233
+ pair = pair.split( '=', 2 )
234
+ raise "malformed parameter pair %p: no '='" % [ pair ] unless pair.length == 2
235
+ accum << pair.map {|part| URI.decode_www_form_component(part) }
236
+ end
230
237
 
231
- query_args = URI.decode_www_form( self.uri.query )
232
238
  return merge_query_args( query_args )
233
239
  end
234
240
 
235
241
 
236
- #######
237
- private
238
- #######
239
-
240
242
  ### Strip surrounding double quotes from a copy of the specified string
241
243
  ### and return it.
242
244
  def dequote( string )