wycats-merb-core 0.9.8 → 0.9.9

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 (58) hide show
  1. data/CHANGELOG +136 -2
  2. data/CONTRIBUTORS +6 -0
  3. data/PUBLIC_CHANGELOG +15 -0
  4. data/Rakefile +12 -14
  5. data/lib/merb-core.rb +82 -43
  6. data/lib/merb-core/bootloader.rb +268 -60
  7. data/lib/merb-core/config.rb +119 -34
  8. data/lib/merb-core/controller/abstract_controller.rb +58 -18
  9. data/lib/merb-core/controller/exceptions.rb +2 -15
  10. data/lib/merb-core/controller/merb_controller.rb +28 -1
  11. data/lib/merb-core/controller/mime.rb +4 -0
  12. data/lib/merb-core/controller/mixins/controller.rb +14 -17
  13. data/lib/merb-core/controller/mixins/render.rb +23 -28
  14. data/lib/merb-core/controller/mixins/responder.rb +0 -1
  15. data/lib/merb-core/controller/template.rb +44 -20
  16. data/lib/merb-core/core_ext/kernel.rb +8 -3
  17. data/lib/merb-core/dispatch/default_exception/default_exception.rb +1 -1
  18. data/lib/merb-core/dispatch/default_exception/views/_css.html.erb +3 -1
  19. data/lib/merb-core/dispatch/default_exception/views/_javascript.html.erb +71 -67
  20. data/lib/merb-core/dispatch/default_exception/views/index.html.erb +6 -2
  21. data/lib/merb-core/dispatch/dispatcher.rb +5 -9
  22. data/lib/merb-core/dispatch/request.rb +46 -57
  23. data/lib/merb-core/dispatch/router.rb +83 -6
  24. data/lib/merb-core/dispatch/router/behavior.rb +87 -27
  25. data/lib/merb-core/dispatch/router/resources.rb +281 -167
  26. data/lib/merb-core/dispatch/router/route.rb +141 -27
  27. data/lib/merb-core/logger.rb +213 -202
  28. data/lib/merb-core/rack.rb +3 -1
  29. data/lib/merb-core/rack/adapter.rb +7 -4
  30. data/lib/merb-core/rack/adapter/ebb.rb +12 -13
  31. data/lib/merb-core/rack/adapter/evented_mongrel.rb +2 -15
  32. data/lib/merb-core/rack/adapter/irb.rb +3 -2
  33. data/lib/merb-core/rack/adapter/mongrel.rb +22 -15
  34. data/lib/merb-core/rack/adapter/swiftiplied_mongrel.rb +4 -16
  35. data/lib/merb-core/rack/adapter/thin.rb +21 -22
  36. data/lib/merb-core/rack/adapter/thin_turbo.rb +4 -11
  37. data/lib/merb-core/rack/adapter/webrick.rb +54 -18
  38. data/lib/merb-core/rack/handler/mongrel.rb +12 -13
  39. data/lib/merb-core/rack/middleware/csrf.rb +1 -1
  40. data/lib/merb-core/server.rb +135 -98
  41. data/lib/merb-core/tasks/gem_management.rb +50 -12
  42. data/lib/merb-core/tasks/merb.rb +1 -0
  43. data/lib/merb-core/tasks/merb_rake_helper.rb +9 -38
  44. data/lib/merb-core/tasks/stats.rake +2 -2
  45. data/lib/merb-core/test.rb +9 -3
  46. data/lib/merb-core/test/helpers.rb +1 -0
  47. data/lib/merb-core/test/helpers/multipart_request_helper.rb +3 -2
  48. data/lib/merb-core/test/helpers/request_helper.rb +40 -372
  49. data/lib/merb-core/test/helpers/route_helper.rb +15 -7
  50. data/lib/merb-core/test/matchers.rb +1 -0
  51. data/lib/merb-core/test/matchers/controller_matchers.rb +4 -247
  52. data/lib/merb-core/test/matchers/view_matchers.rb +22 -4
  53. data/lib/merb-core/test/run_specs.rb +117 -25
  54. data/lib/merb-core/version.rb +1 -1
  55. metadata +1 -1
  56. data/lib/merb-core/vendor/facets.rb +0 -2
  57. data/lib/merb-core/vendor/facets/dictionary.rb +0 -433
  58. data/lib/merb-core/vendor/facets/inflect.rb +0 -342
@@ -1,3 +1,3 @@
1
1
  module Merb
2
- VERSION = '0.9.8' unless defined?(Merb::VERSION)
2
+ VERSION = '0.9.9' unless defined?(Merb::VERSION)
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wycats-merb-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezra Zygmuntowicz
@@ -1,2 +0,0 @@
1
- require "merb-core/vendor/facets/inflect"
2
- require "merb-core/vendor/facets/dictionary"
@@ -1,433 +0,0 @@
1
- # TITLE:
2
- #
3
- # Dictionary
4
- #
5
- # AUTHORS:
6
- #
7
- # - Jan Molic
8
- # - Thomas Sawyer
9
- #
10
- # CREDIT:
11
- #
12
- # - Andrew Johnson (merge, to_a, inspect, shift and Hash[])
13
- # - Jeff Sharpe (reverse and reverse!)
14
- # - Thomas Leitner (has_key? and key?)
15
- #
16
- # LICENSE:
17
- #
18
- # Copyright (c) 2005 Jan Molic, Thomas Sawyer
19
- #
20
- # Ruby License
21
- #
22
- # This module is free software. You may use, modify, and/or redistribute this
23
- # software under the same terms as Ruby.
24
- #
25
- # This program is distributed in the hope that it will be useful, but WITHOUT
26
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
27
- # FOR A PARTICULAR PURPOSE.
28
- #
29
- # Originally ported from OrderHash 2.0, Copyright (c) 2005 jan molic
30
- #
31
- # LOG:
32
- #
33
- # - 2007.10.31 trans
34
- # Fixed initialize so the constructor blocks correctly effected dictionary
35
- # rather then just the internal hash.
36
-
37
- # = Dictionary
38
- #
39
- # The Dictionary class is a Hash that preserves order.
40
- # So it has some array-like extensions also. By defualt
41
- # a Dictionary object preserves insertion order, but any
42
- # order can be specified including alphabetical key order.
43
- #
44
- # == Usage
45
- #
46
- # Just require this file and use Dictionary instead of Hash.
47
- #
48
- # # You can do simply
49
- # hsh = Dictionary.new
50
- # hsh['z'] = 1
51
- # hsh['a'] = 2
52
- # hsh['c'] = 3
53
- # p hsh.keys #=> ['z','a','c']
54
- #
55
- # # or using Dictionary[] method
56
- # hsh = Dictionary['z', 1, 'a', 2, 'c', 3]
57
- # p hsh.keys #=> ['z','a','c']
58
- #
59
- # # but this doesn't preserve order
60
- # hsh = Dictionary['z'=>1, 'a'=>2, 'c'=>3]
61
- # p hsh.keys #=> ['a','c','z']
62
- #
63
- # # Dictionary has useful extensions: push, pop and unshift
64
- # p hsh.push('to_end', 15) #=> true, key added
65
- # p hsh.push('to_end', 30) #=> false, already - nothing happen
66
- # p hsh.unshift('to_begin', 50) #=> true, key added
67
- # p hsh.unshift('to_begin', 60) #=> false, already - nothing happen
68
- # p hsh.keys #=> ["to_begin", "a", "c", "z", "to_end"]
69
- # p hsh.pop #=> ["to_end", 15], if nothing remains, return nil
70
- # p hsh.keys #=> ["to_begin", "a", "c", "z"]
71
- # p hsh.shift #=> ["to_begin", 30], if nothing remains, return nil
72
- #
73
- # == Usage Notes
74
- #
75
- # * You can use #order_by to set internal sort order.
76
- # * #<< takes a two element [k,v] array and inserts.
77
- # * Use ::auto which creates Dictionay sub-entries as needed.
78
- # * And ::alpha which creates a new Dictionary sorted by key.
79
-
80
- class Dictionary
81
-
82
- include Enumerable
83
-
84
- class << self
85
- #--
86
- # TODO is this needed? Doesn't the super class do this?
87
- #++
88
- def [](*args)
89
- hsh = new
90
- if Hash === args[0]
91
- hsh.replace(args[0])
92
- elsif (args.size % 2) != 0
93
- raise ArgumentError, "odd number of elements for Hash"
94
- else
95
- while !args.empty?
96
- hsh[args.shift] = args.shift
97
- end
98
- end
99
- hsh
100
- end
101
-
102
- # Like #new but the block sets the order.
103
- #
104
- def new_by(*args, &blk)
105
- new(*args).order_by(&blk)
106
- end
107
-
108
- # Alternate to #new which creates a dictionary sorted by key.
109
- #
110
- # d = Dictionary.alpha
111
- # d["z"] = 1
112
- # d["y"] = 2
113
- # d["x"] = 3
114
- # d #=> {"x"=>3,"y"=>2,"z"=>2}
115
- #
116
- # This is equivalent to:
117
- #
118
- # Dictionary.new.order_by { |key,value| key }
119
- def alpha(*args, &block)
120
- new(*args, &block).order_by_key
121
- end
122
-
123
- # Alternate to #new which auto-creates sub-dictionaries as needed.
124
- #
125
- # d = Dictionary.auto
126
- # d["a"]["b"]["c"] = "abc" #=> { "a"=>{"b"=>{"c"=>"abc"}}}
127
- #
128
- def auto(*args)
129
- #AutoDictionary.new(*args)
130
- leet = lambda { |hsh, key| hsh[key] = new(&leet) }
131
- new(*args, &leet)
132
- end
133
- end
134
-
135
- # New Dictiionary.
136
- def initialize(*args, &blk)
137
- @order = []
138
- @order_by = nil
139
- if blk
140
- dict = self # This ensure autmatic key entry effect the
141
- oblk = lambda{ |hsh, key| blk[dict,key] } # dictionary rather then just the interal hash.
142
- @hash = Hash.new(*args, &oblk)
143
- else
144
- @hash = Hash.new(*args)
145
- end
146
- end
147
-
148
- def order
149
- reorder if @order_by
150
- @order
151
- end
152
-
153
- # Keep dictionary sorted by a specific sort order.
154
- def order_by( &block )
155
- @order_by = block
156
- order
157
- self
158
- end
159
-
160
- # Keep dictionary sorted by key.
161
- #
162
- # d = Dictionary.new.order_by_key
163
- # d["z"] = 1
164
- # d["y"] = 2
165
- # d["x"] = 3
166
- # d #=> {"x"=>3,"y"=>2,"z"=>2}
167
- #
168
- # This is equivalent to:
169
- #
170
- # Dictionary.new.order_by { |key,value| key }
171
- #
172
- # The initializer Dictionary#alpha also provides this.
173
- def order_by_key
174
- @order_by = lambda { |k,v| k }
175
- order
176
- self
177
- end
178
-
179
- # Keep dictionary sorted by value.
180
- #
181
- # d = Dictionary.new.order_by_value
182
- # d["z"] = 1
183
- # d["y"] = 2
184
- # d["x"] = 3
185
- # d #=> {"x"=>3,"y"=>2,"z"=>2}
186
- #
187
- # This is equivalent to:
188
- #
189
- # Dictionary.new.order_by { |key,value| value }
190
- def order_by_value
191
- @order_by = lambda { |k,v| v }
192
- order
193
- self
194
- end
195
-
196
- #
197
- def reorder
198
- if @order_by
199
- assoc = @order.collect{ |k| [k,@hash[k]] }.sort_by(&@order_by)
200
- @order = assoc.collect{ |k,v| k }
201
- end
202
- @order
203
- end
204
-
205
- def ==(hsh2)
206
- if hsh2.is_a?( Dictionary )
207
- @order == hsh2.order &&
208
- @hash == hsh2.instance_variable_get("@hash")
209
- else
210
- false
211
- end
212
- end
213
-
214
- def [] k
215
- @hash[ k ]
216
- end
217
-
218
- def fetch(k, *a, &b)
219
- @hash.fetch(k, *a, &b)
220
- end
221
-
222
- # Store operator.
223
- #
224
- # h[key] = value
225
- #
226
- # Or with additional index.
227
- #
228
- # h[key,index] = value
229
- def []=(k, i=nil, v=nil)
230
- if v
231
- insert(i,k,v)
232
- else
233
- store(k,i)
234
- end
235
- end
236
-
237
- def insert( i,k,v )
238
- @order.insert( i,k )
239
- @hash.store( k,v )
240
- end
241
-
242
- def store( a,b )
243
- @order.push( a ) unless @hash.has_key?( a )
244
- @hash.store( a,b )
245
- end
246
-
247
- def clear
248
- @order = []
249
- @hash.clear
250
- end
251
-
252
- def delete( key )
253
- @order.delete( key )
254
- @hash.delete( key )
255
- end
256
-
257
- def each_key
258
- order.each { |k| yield( k ) }
259
- self
260
- end
261
-
262
- def each_value
263
- order.each { |k| yield( @hash[k] ) }
264
- self
265
- end
266
-
267
- def each
268
- order.each { |k| yield( k,@hash[k] ) }
269
- self
270
- end
271
- alias each_pair each
272
-
273
- def delete_if
274
- order.clone.each { |k| delete k if yield(k,@hash[k]) }
275
- self
276
- end
277
-
278
- def values
279
- ary = []
280
- order.each { |k| ary.push @hash[k] }
281
- ary
282
- end
283
-
284
- def keys
285
- order
286
- end
287
-
288
- def invert
289
- hsh2 = self.class.new
290
- order.each { |k| hsh2[@hash[k]] = k }
291
- hsh2
292
- end
293
-
294
- def reject( &block )
295
- self.dup.delete_if(&block)
296
- end
297
-
298
- def reject!( &block )
299
- hsh2 = reject(&block)
300
- self == hsh2 ? nil : hsh2
301
- end
302
-
303
- def replace( hsh2 )
304
- @order = hsh2.order
305
- @hash = hsh2.hash
306
- end
307
-
308
- def shift
309
- key = order.first
310
- key ? [key,delete(key)] : super
311
- end
312
-
313
- def unshift( k,v )
314
- unless @hash.include?( k )
315
- @order.unshift( k )
316
- @hash.store( k,v )
317
- true
318
- else
319
- false
320
- end
321
- end
322
-
323
- def <<(kv)
324
- push( *kv )
325
- end
326
-
327
- def push( k,v )
328
- unless @hash.include?( k )
329
- @order.push( k )
330
- @hash.store( k,v )
331
- true
332
- else
333
- false
334
- end
335
- end
336
-
337
- def pop
338
- key = order.last
339
- key ? [key,delete(key)] : nil
340
- end
341
-
342
- def inspect
343
- ary = []
344
- each {|k,v| ary << k.inspect + "=>" + v.inspect}
345
- '{' + ary.join(", ") + '}'
346
- end
347
-
348
- def dup
349
- a = []
350
- each{ |k,v| a << k; a << v }
351
- self.class[*a]
352
- end
353
-
354
- def update( hsh2 )
355
- hsh2.each { |k,v| self[k] = v }
356
- reorder
357
- self
358
- end
359
- alias :merge! update
360
-
361
- def merge( hsh2 )
362
- self.dup.update(hsh2)
363
- end
364
-
365
- def select
366
- ary = []
367
- each { |k,v| ary << [k,v] if yield k,v }
368
- ary
369
- end
370
-
371
- def reverse!
372
- @order.reverse!
373
- self
374
- end
375
-
376
- def reverse
377
- dup.reverse!
378
- end
379
-
380
- def first
381
- @hash[order.first]
382
- end
383
-
384
- def last
385
- @hash[order.last]
386
- end
387
-
388
- def length
389
- @order.length
390
- end
391
- alias :size :length
392
-
393
- def empty?
394
- @hash.empty?
395
- end
396
-
397
- def has_key?(key)
398
- @hash.has_key?(key)
399
- end
400
-
401
- def key?(key)
402
- @hash.key?(key)
403
- end
404
-
405
- def to_a
406
- ary = []
407
- each { |k,v| ary << [k,v] }
408
- ary
409
- end
410
-
411
- def to_json
412
- buf = "["
413
- map do |k,v|
414
- buf << k.to_json
415
- buf << ", "
416
- buf << v.to_json
417
- end.join(", ")
418
- buf << "]"
419
- buf
420
- end
421
-
422
- def to_s
423
- self.to_a.to_s
424
- end
425
-
426
- def to_hash
427
- @hash.dup
428
- end
429
-
430
- def to_h
431
- @hash.dup
432
- end
433
- end