manveru-innate 2009.02.25 → 2009.03.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/CHANGELOG +383 -0
  2. data/MANIFEST +17 -8
  3. data/README.md +222 -136
  4. data/Rakefile +7 -2
  5. data/example/provides.rb +28 -0
  6. data/innate.gemspec +19 -10
  7. data/lib/innate/action.rb +21 -47
  8. data/lib/innate/adapter.rb +65 -56
  9. data/lib/innate/cache.rb +16 -8
  10. data/lib/innate/dynamap.rb +39 -29
  11. data/lib/innate/helper/aspect.rb +60 -0
  12. data/lib/innate/helper/cgi.rb +2 -0
  13. data/lib/innate/helper/link.rb +43 -11
  14. data/lib/innate/helper/partial.rb +6 -5
  15. data/lib/innate/helper.rb +10 -13
  16. data/lib/innate/log/hub.rb +1 -0
  17. data/lib/innate/log.rb +3 -6
  18. data/lib/{rack → innate}/middleware_compiler.rb +19 -12
  19. data/lib/innate/mock.rb +3 -2
  20. data/lib/innate/node.rb +573 -179
  21. data/lib/innate/options/dsl.rb +46 -6
  22. data/lib/innate/options/stub.rb +7 -0
  23. data/lib/innate/options.rb +14 -93
  24. data/lib/innate/request.rb +21 -7
  25. data/lib/innate/response.rb +12 -0
  26. data/lib/innate/route.rb +2 -3
  27. data/lib/innate/session.rb +37 -20
  28. data/lib/innate/spec.rb +4 -0
  29. data/lib/innate/state/fiber.rb +14 -7
  30. data/lib/innate/state/thread.rb +10 -2
  31. data/lib/innate/state.rb +8 -11
  32. data/lib/innate/traited.rb +14 -6
  33. data/lib/innate/trinity.rb +0 -4
  34. data/lib/innate/version.rb +1 -1
  35. data/lib/innate/view/erb.rb +4 -2
  36. data/lib/innate/view/none.rb +2 -2
  37. data/lib/innate/view.rb +14 -21
  38. data/lib/innate.rb +49 -30
  39. data/spec/helper.rb +8 -0
  40. data/spec/innate/action/layout.rb +9 -6
  41. data/spec/innate/cache/common.rb +3 -3
  42. data/spec/innate/helper/aspect.rb +3 -5
  43. data/spec/innate/helper/flash.rb +1 -1
  44. data/spec/innate/helper/link.rb +45 -2
  45. data/spec/innate/helper/partial.rb +34 -10
  46. data/spec/innate/helper/view/loop.erb +1 -1
  47. data/spec/innate/helper/view/recursive.erb +1 -1
  48. data/spec/innate/node/mapping.rb +37 -0
  49. data/spec/innate/node/node.rb +142 -0
  50. data/spec/innate/node/resolve.rb +82 -0
  51. data/spec/innate/node/{another_layout → view/another_layout}/another_layout.erb +0 -0
  52. data/spec/innate/node/{bar.html → view/bar.erb} +0 -0
  53. data/spec/innate/node/{foo.html.erb → view/foo.html.erb} +0 -0
  54. data/spec/innate/node/{only_view.html → view/only_view.erb} +0 -0
  55. data/spec/innate/node/view/with_layout.erb +1 -0
  56. data/spec/innate/node/wrap_action_call.rb +83 -0
  57. data/spec/innate/options.rb +28 -6
  58. data/spec/innate/provides/list.html.erb +1 -0
  59. data/spec/innate/provides/list.txt.erb +1 -0
  60. data/spec/innate/provides.rb +99 -0
  61. data/spec/innate/request.rb +23 -10
  62. data/spec/innate/route.rb +2 -4
  63. data/spec/innate/session.rb +1 -1
  64. data/spec/innate/state/fiber.rb +57 -0
  65. data/spec/innate/state/thread.rb +40 -0
  66. metadata +20 -11
  67. data/lib/rack/reloader.rb +0 -192
  68. data/spec/innate/node/with_layout.erb +0 -3
  69. data/spec/innate/node.rb +0 -224
data/lib/innate/helper.rb CHANGED
@@ -147,11 +147,8 @@ module Innate
147
147
  # Innate::HelpersHelper.each_include(self, :cgi, :link, :aspect)
148
148
  # end
149
149
  def each_include(into, *names, &block)
150
- return if names.empty?
151
- mods = each(*names, &block)
152
- into.include(*mods)
153
- rescue NoMethodError
154
- into.__send__(:include, *mods)
150
+ return if names.compact.empty?
151
+ into.__send__(:include, *each(*names, &block))
155
152
  end
156
153
 
157
154
  # Based on a simple set of rules we will first construct the most likely
@@ -162,10 +159,10 @@ module Innate
162
159
  # helper :foo # => Foo
163
160
  def get(name)
164
161
  name = name.to_s.split('_').map{|e| e.capitalize}.join
162
+
165
163
  POOL.each do |namespace|
166
- if found = namespace.constants.grep(/^#{name}$/i).first
167
- return namespace.const_get(found)
168
- end
164
+ found = namespace.constants.grep(/^#{name}$/i).first
165
+ return namespace.const_get(found) if found
169
166
  end
170
167
 
171
168
  nil
@@ -174,11 +171,11 @@ module Innate
174
171
  # Figure out files that might have the helper we ask for and then require
175
172
  # the first we find, if any.
176
173
  def try_require(name)
177
- found = Dir[glob(name)].first
178
- require(File.expand_path(found))
179
- rescue Exception => exception
180
- Log.error(exception)
181
- raise LoadError, "Helper #{name} not found"
174
+ if found = Dir[glob(name)].first
175
+ require(found) || true
176
+ else
177
+ raise(LoadError, "Helper #{name} not found")
178
+ end
182
179
  end
183
180
 
184
181
  # Return a nice list of filenames in correct locations with correct
@@ -38,6 +38,7 @@ module Innate
38
38
 
39
39
  class LogHub
40
40
  include Logger::Severity
41
+ include Optional
41
42
 
42
43
  attr_accessor :loggers, :program, :active
43
44
 
data/lib/innate/log.rb CHANGED
@@ -2,13 +2,10 @@ require 'innate/log/hub'
2
2
  require 'innate/log/color_formatter'
3
3
 
4
4
  module Innate
5
- logdev, *params = options.log.params
6
- color = options.log.color
7
- color = Logger::ColorFormatter.color?(logdev) if color.nil?
5
+ logdev = $stderr
6
+ logger = Logger.new(logdev)
8
7
 
9
- logger = Logger.new(logdev, *params)
10
-
11
- if color
8
+ if Logger::ColorFormatter.color?(logdev)
12
9
  begin
13
10
  require 'win32console' if RUBY_PLATFORM =~ /win32/i
14
11
 
@@ -1,4 +1,4 @@
1
- module Rack
1
+ module Innate
2
2
  class MiddlewareCompiler
3
3
  COMPILED = {}
4
4
 
@@ -13,15 +13,18 @@ module Rack
13
13
  attr_reader :middlewares, :name
14
14
 
15
15
  def initialize(name)
16
- @name = name
16
+ @name = name.to_sym
17
17
  @middlewares = []
18
18
  @compiled = nil
19
19
  yield(self) if block_given?
20
20
  end
21
21
 
22
- # FIXME: Should we use `|` or `+`?
23
- def use(*mws)
24
- @middlewares = mws | @middlewares
22
+ def use(app, *args, &block)
23
+ @middlewares << [app, args, block]
24
+ end
25
+
26
+ def apps(*middlewares)
27
+ @middlewares.concat(middlewares.map{|mw| [mw, [], nil]})
25
28
  end
26
29
 
27
30
  def run(app)
@@ -33,12 +36,15 @@ module Rack
33
36
  end
34
37
 
35
38
  # Default application for Innate
36
- def innate
37
- public_root = ::File.join(Innate.options.app.root.to_s,
38
- Innate.options.app.public.to_s)
39
- cascade(
40
- Rack::File.new(public_root),
41
- Innate::Current.new(Innate::Route.new, Innate::Rewrite.new))
39
+ def innate(app = Innate::DynaMap, options = Innate.options)
40
+ roots, publics = options[:roots], options[:publics]
41
+
42
+ joined = roots.map{|root| publics.map{|public| ::File.join(root, public)}}
43
+
44
+ apps = joined.flatten.map{|pr| Rack::File.new(pr) }
45
+ apps << Current.new(Route.new(app), Rewrite.new(app))
46
+
47
+ cascade(*apps)
42
48
  end
43
49
 
44
50
  def static(path)
@@ -65,7 +71,8 @@ module Rack
65
71
  end
66
72
 
67
73
  def compile!
68
- @compiled = @middlewares.inject(@app){|a,e| e.new(a) }
74
+ @compiled = @middlewares.inject(@app){|s, (app, args, block)|
75
+ app.new(s, *args, &block) }
69
76
  self
70
77
  end
71
78
  end
data/lib/innate/mock.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Innate
2
2
  module Mock
3
3
  HTTP_METHODS = %w[ CONNECT DELETE GET HEAD OPTIONS POST PUT TRACE ]
4
+ OPTIONS = {:app => Innate}
4
5
 
5
6
  HTTP_METHODS.each do |method|
6
7
  (class << self; self; end).
@@ -13,8 +14,8 @@ module Innate
13
14
  mock_request.request(method, *args)
14
15
  end
15
16
 
16
- def self.mock_request
17
- Rack::MockRequest.new(Innate)
17
+ def self.mock_request(app = OPTIONS[:app])
18
+ Rack::MockRequest.new(app)
18
19
  end
19
20
 
20
21
  def self.session