strelka 0.9.0 → 0.9.1

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.
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 )