innate 2009.07 → 2009.10

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.
data/AUTHORS CHANGED
@@ -1,10 +1,14 @@
1
1
  Following persons have contributed to innate.
2
2
  (Sorted by number of submitted patches, then alphabetically)
3
3
 
4
- 722 Michael Fellinger <m.fellinger@gmail.com>
4
+ 739 Michael Fellinger <m.fellinger@gmail.com>
5
5
  31 Tadahiko Uehara <kikofx@gmail.com>
6
6
  8 Pistos <gitsomegrace.5.pistos@geoshell.com>
7
7
  5 Ryan Grove <ryan@wonko.com>
8
8
  2 Andreas Karlsson <andreas@proxel.se>
9
+ 2 Antti Tuomi <antti.tuomi@tkk.fi>
9
10
  2 TJ Vanderpoel <bougy.man@gmail.com>
11
+ 1 Arnaud Meuret <arnaud@meuret.name>
12
+ 1 Jérémy Zurcher <jeremy@asynk.ch>
13
+ 1 ravage <ravage@fragmentized.net>
10
14
  1 Sam Carr <samcarr@gmail.com>
data/CHANGELOG CHANGED
@@ -1,3 +1,103 @@
1
+ [1b0702f | 2009-10-02 13:24:16 UTC] Michael Fellinger <m.fellinger@gmail.com>
2
+
3
+ * Version 2009.10
4
+
5
+ [88451a1 | 2009-10-02 13:23:53 UTC] Michael Fellinger <m.fellinger@gmail.com>
6
+
7
+ * Improve the release tasks, add one for gemcutter
8
+
9
+ [c37df32 | 2009-10-01 11:16:02 UTC] Arnaud Meuret <arnaud@meuret.name>
10
+
11
+ * Fix: specifying a layout from a method and a filter block was broken
12
+
13
+ [18668be | 2009-09-29 14:13:13 UTC] Michael Fellinger <m.fellinger@gmail.com>
14
+
15
+ * Update dependencies
16
+
17
+ [672bbaa | 2009-09-22 15:15:44 UTC] Michael Fellinger <m.fellinger@gmail.com>
18
+
19
+ * Use Rack::Utils::build_query, this changes query separator from ; to &
20
+
21
+ [0d4d2d1 | 2009-09-22 15:04:05 UTC] Michael Fellinger <m.fellinger@gmail.com>
22
+
23
+ * Improve code readability a bit
24
+
25
+ [44d02ed | 2009-09-21 17:02:09 UTC] Michael Fellinger <m.fellinger@gmail.com>
26
+
27
+ * Use Mutex instead of Thread::critical
28
+
29
+ [1b80af6 | 2009-09-21 17:00:42 UTC] Michael Fellinger <m.fellinger@gmail.com>
30
+
31
+ * Fix ruby/jruby dependency mixup
32
+
33
+ [783f554 | 2009-09-21 16:32:07 UTC] Michael Fellinger <m.fellinger@gmail.com>
34
+
35
+ * Fix startup issue regarding jruby-rack
36
+
37
+ [a908b32 | 2009-09-15 07:15:48 UTC] Michael Fellinger <m.fellinger@gmail.com>
38
+
39
+ * Fix typo
40
+
41
+ [79df3a5 | 2009-08-27 08:21:05 UTC] Michael Fellinger <m.fellinger@gmail.com>
42
+
43
+ * Don't call aspects in layout
44
+
45
+ [b69e9dd | 2009-08-27 03:55:08 UTC] Michael Fellinger <m.fellinger@gmail.com>
46
+
47
+ * Fix Options#pretty_print spec
48
+
49
+ [6b8c32d | 2009-08-27 03:36:53 UTC] Michael Fellinger <m.fellinger@gmail.com>
50
+
51
+ * dev dependencies for jruby
52
+
53
+ [0bb6ea5 | 2009-08-26 16:59:01 UTC] Michael Fellinger <m.fellinger@gmail.com>
54
+
55
+ * Forgot to require digest/md5
56
+
57
+ [2bc0566 | 2009-08-19 08:27:37 UTC] Michael Fellinger <m.fellinger@gmail.com>
58
+
59
+ * Cache is not a module
60
+
61
+ [c74c2b8 | 2009-08-17 05:37:02 UTC] Michael Fellinger <m.fellinger@gmail.com>
62
+
63
+ * fix doc typo
64
+
65
+ [9650f8c | 2009-07-28 06:49:20 UTC] Michael Fellinger <m.fellinger@gmail.com>
66
+
67
+ * Some more specs for double underscore
68
+
69
+ [822560a | 2009-07-28 06:43:32 UTC] Michael Fellinger <m.fellinger@gmail.com>
70
+
71
+ * Expand specs for double underscore
72
+
73
+ [b865335 | 2009-05-21 13:27:38 UTC] Antti Tuomi <antti.tuomi@tkk.fi>
74
+
75
+ * Aspect spec uses inline layout instead a file-based.
76
+
77
+ Also prefixed DerivedWithLayout with the helper name.
78
+
79
+ Signed-off-by: Michael Fellinger <m.fellinger@gmail.com>
80
+
81
+ [62d8853 | 2009-05-21 13:16:57 UTC] Antti Tuomi <antti.tuomi@tkk.fi>
82
+
83
+ * Aspect spec checks the functionality when using layouts.
84
+
85
+ This spec fails at the moment.
86
+
87
+ Signed-off-by: Michael Fellinger <m.fellinger@gmail.com>
88
+
89
+ [e4735cb | 2009-05-27 14:57:48 UTC] ravage <ravage@fragmentized.net>
90
+
91
+ * Resolve fake depth
92
+
93
+ Signed-off-by: Michael Fellinger <m.fellinger@gmail.com>
94
+
95
+ [10d7ef3 | 2009-07-21 16:11:57 UTC] Jérémy Zurcher <jeremy@asynk.ch>
96
+
97
+ * fix default option handling overriding in options/dsl
98
+
99
+ Signed-off-by: Michael Fellinger <m.fellinger@gmail.com>
100
+
1
101
  [03274f3 | 2009-07-19 03:02:21 UTC] Michael Fellinger <m.fellinger@gmail.com>
2
102
 
3
103
  * Version 2009.07
data/MANIFEST CHANGED
@@ -100,8 +100,12 @@ spec/innate/node/node.rb
100
100
  spec/innate/node/resolve.rb
101
101
  spec/innate/node/view/another_layout/another_layout.xhtml
102
102
  spec/innate/node/view/bar.xhtml
103
+ spec/innate/node/view/cat2/cat22.xhtml
104
+ spec/innate/node/view/cat3/cat33.xhtml
103
105
  spec/innate/node/view/foo.html.xhtml
104
106
  spec/innate/node/view/only_view.xhtml
107
+ spec/innate/node/view/sub/baz.xhtml
108
+ spec/innate/node/view/sub/foo/baz.xhtml
105
109
  spec/innate/node/view/with_layout.xhtml
106
110
  spec/innate/node/wrap_action_call.rb
107
111
  spec/innate/options.rb
data/Rakefile CHANGED
@@ -15,10 +15,15 @@ DEPENDENCIES = {
15
15
 
16
16
  DEVELOPMENT_DEPENDENCIES = {
17
17
  'bacon' => {:version => '>= 1.1.0'},
18
- 'json' => {:version => '~> 1.1.7'},
19
- 'rack-test' => {:version => '>= 0.4.0', :lib => 'rack/test'}
18
+ 'rack-test' => {:version => '>= 0.5.0', :lib => 'rack/test'}
20
19
  }
21
20
 
21
+ if defined?(RUBY_PLATFORM) && RUBY_PLATFORM =~ /jruby/
22
+ DEVELOPMENT_DEPENDENCIES['json-jruby'] = {:version => '~> 1.1.7'}
23
+ else
24
+ DEVELOPMENT_DEPENDENCIES['json'] = {:version => '~> 1.1.9'}
25
+ end
26
+
22
27
  GEMSPEC = Gem::Specification.new{|s|
23
28
  s.name = 'innate'
24
29
  s.author = "Michael 'manveru' Fellinger"
@@ -2,18 +2,18 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{innate}
5
- s.version = "2009.07"
5
+ s.version = "2009.10"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.3.1") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Michael 'manveru' Fellinger"]
9
- s.date = %q{2009-07-25}
9
+ s.date = %q{2009-10-02}
10
10
  s.description = %q{Simple, straight-forward base for web-frameworks.}
11
11
  s.email = %q{m.fellinger@gmail.com}
12
- s.files = ["AUTHORS", "CHANGELOG", "COPYING", "MANIFEST", "README.md", "Rakefile", "example/app/retro_games.rb", "example/app/todo/layout/default.xhtml", "example/app/todo/spec/todo.rb", "example/app/todo/start.rb", "example/app/todo/view/index.xhtml", "example/app/whywiki_erb/layout/wiki.html.erb", "example/app/whywiki_erb/spec/wiki.rb", "example/app/whywiki_erb/start.rb", "example/app/whywiki_erb/view/edit.erb", "example/app/whywiki_erb/view/index.erb", "example/custom_middleware.rb", "example/hello.rb", "example/howto_spec.rb", "example/link.rb", "example/provides.rb", "example/session.rb", "innate.gemspec", "lib/innate.rb", "lib/innate/action.rb", "lib/innate/adapter.rb", "lib/innate/cache.rb", "lib/innate/cache/api.rb", "lib/innate/cache/drb.rb", "lib/innate/cache/file_based.rb", "lib/innate/cache/marshal.rb", "lib/innate/cache/memory.rb", "lib/innate/cache/yaml.rb", "lib/innate/current.rb", "lib/innate/dynamap.rb", "lib/innate/helper.rb", "lib/innate/helper/aspect.rb", "lib/innate/helper/cgi.rb", "lib/innate/helper/flash.rb", "lib/innate/helper/link.rb", "lib/innate/helper/redirect.rb", "lib/innate/helper/render.rb", "lib/innate/helper/send_file.rb", "lib/innate/log.rb", "lib/innate/log/color_formatter.rb", "lib/innate/log/hub.rb", "lib/innate/middleware_compiler.rb", "lib/innate/mock.rb", "lib/innate/node.rb", "lib/innate/options.rb", "lib/innate/options/dsl.rb", "lib/innate/options/stub.rb", "lib/innate/request.rb", "lib/innate/response.rb", "lib/innate/route.rb", "lib/innate/session.rb", "lib/innate/session/flash.rb", "lib/innate/spec.rb", "lib/innate/spec/bacon.rb", "lib/innate/state.rb", "lib/innate/state/accessor.rb", "lib/innate/traited.rb", "lib/innate/trinity.rb", "lib/innate/version.rb", "lib/innate/view.rb", "lib/innate/view/erb.rb", "lib/innate/view/etanni.rb", "lib/innate/view/none.rb", "spec/example/app/retro_games.rb", "spec/example/hello.rb", "spec/example/link.rb", "spec/example/provides.rb", "spec/example/session.rb", "spec/helper.rb", "spec/innate/action/layout.rb", "spec/innate/action/layout/file_layout.xhtml", "spec/innate/cache/common.rb", "spec/innate/cache/marshal.rb", "spec/innate/cache/memory.rb", "spec/innate/cache/yaml.rb", "spec/innate/dynamap.rb", "spec/innate/helper.rb", "spec/innate/helper/aspect.rb", "spec/innate/helper/cgi.rb", "spec/innate/helper/flash.rb", "spec/innate/helper/link.rb", "spec/innate/helper/redirect.rb", "spec/innate/helper/render.rb", "spec/innate/helper/send_file.rb", "spec/innate/helper/view/aspect_hello.xhtml", "spec/innate/helper/view/locals.xhtml", "spec/innate/helper/view/loop.xhtml", "spec/innate/helper/view/num.xhtml", "spec/innate/helper/view/partial.xhtml", "spec/innate/helper/view/recursive.xhtml", "spec/innate/mock.rb", "spec/innate/modes.rb", "spec/innate/node/mapping.rb", "spec/innate/node/node.rb", "spec/innate/node/resolve.rb", "spec/innate/node/view/another_layout/another_layout.xhtml", "spec/innate/node/view/bar.xhtml", "spec/innate/node/view/foo.html.xhtml", "spec/innate/node/view/only_view.xhtml", "spec/innate/node/view/with_layout.xhtml", "spec/innate/node/wrap_action_call.rb", "spec/innate/options.rb", "spec/innate/parameter.rb", "spec/innate/provides.rb", "spec/innate/provides/list.html.xhtml", "spec/innate/provides/list.txt.xhtml", "spec/innate/request.rb", "spec/innate/route.rb", "spec/innate/session.rb", "spec/innate/traited.rb", "tasks/authors.rake", "tasks/bacon.rake", "tasks/changelog.rake", "tasks/gem.rake", "tasks/gem_setup.rake", "tasks/grancher.rake", "tasks/manifest.rake", "tasks/rcov.rake", "tasks/release.rake", "tasks/reversion.rake", "tasks/setup.rake", "tasks/ycov.rake"]
12
+ s.files = ["AUTHORS", "CHANGELOG", "COPYING", "MANIFEST", "README.md", "Rakefile", "example/app/retro_games.rb", "example/app/todo/layout/default.xhtml", "example/app/todo/spec/todo.rb", "example/app/todo/start.rb", "example/app/todo/view/index.xhtml", "example/app/whywiki_erb/layout/wiki.html.erb", "example/app/whywiki_erb/spec/wiki.rb", "example/app/whywiki_erb/start.rb", "example/app/whywiki_erb/view/edit.erb", "example/app/whywiki_erb/view/index.erb", "example/custom_middleware.rb", "example/hello.rb", "example/howto_spec.rb", "example/link.rb", "example/provides.rb", "example/session.rb", "innate.gemspec", "lib/innate.rb", "lib/innate/action.rb", "lib/innate/adapter.rb", "lib/innate/cache.rb", "lib/innate/cache/api.rb", "lib/innate/cache/drb.rb", "lib/innate/cache/file_based.rb", "lib/innate/cache/marshal.rb", "lib/innate/cache/memory.rb", "lib/innate/cache/yaml.rb", "lib/innate/current.rb", "lib/innate/dynamap.rb", "lib/innate/helper.rb", "lib/innate/helper/aspect.rb", "lib/innate/helper/cgi.rb", "lib/innate/helper/flash.rb", "lib/innate/helper/link.rb", "lib/innate/helper/redirect.rb", "lib/innate/helper/render.rb", "lib/innate/helper/send_file.rb", "lib/innate/log.rb", "lib/innate/log/color_formatter.rb", "lib/innate/log/hub.rb", "lib/innate/middleware_compiler.rb", "lib/innate/mock.rb", "lib/innate/node.rb", "lib/innate/options.rb", "lib/innate/options/dsl.rb", "lib/innate/options/stub.rb", "lib/innate/request.rb", "lib/innate/response.rb", "lib/innate/route.rb", "lib/innate/session.rb", "lib/innate/session/flash.rb", "lib/innate/spec.rb", "lib/innate/spec/bacon.rb", "lib/innate/state.rb", "lib/innate/state/accessor.rb", "lib/innate/traited.rb", "lib/innate/trinity.rb", "lib/innate/version.rb", "lib/innate/view.rb", "lib/innate/view/erb.rb", "lib/innate/view/etanni.rb", "lib/innate/view/none.rb", "spec/example/app/retro_games.rb", "spec/example/hello.rb", "spec/example/link.rb", "spec/example/provides.rb", "spec/example/session.rb", "spec/helper.rb", "spec/innate/action/layout.rb", "spec/innate/action/layout/file_layout.xhtml", "spec/innate/cache/common.rb", "spec/innate/cache/marshal.rb", "spec/innate/cache/memory.rb", "spec/innate/cache/yaml.rb", "spec/innate/dynamap.rb", "spec/innate/helper.rb", "spec/innate/helper/aspect.rb", "spec/innate/helper/cgi.rb", "spec/innate/helper/flash.rb", "spec/innate/helper/link.rb", "spec/innate/helper/redirect.rb", "spec/innate/helper/render.rb", "spec/innate/helper/send_file.rb", "spec/innate/helper/view/aspect_hello.xhtml", "spec/innate/helper/view/locals.xhtml", "spec/innate/helper/view/loop.xhtml", "spec/innate/helper/view/num.xhtml", "spec/innate/helper/view/partial.xhtml", "spec/innate/helper/view/recursive.xhtml", "spec/innate/mock.rb", "spec/innate/modes.rb", "spec/innate/node/mapping.rb", "spec/innate/node/node.rb", "spec/innate/node/resolve.rb", "spec/innate/node/view/another_layout/another_layout.xhtml", "spec/innate/node/view/bar.xhtml", "spec/innate/node/view/cat2/cat22.xhtml", "spec/innate/node/view/cat3/cat33.xhtml", "spec/innate/node/view/foo.html.xhtml", "spec/innate/node/view/only_view.xhtml", "spec/innate/node/view/sub/baz.xhtml", "spec/innate/node/view/sub/foo/baz.xhtml", "spec/innate/node/view/with_layout.xhtml", "spec/innate/node/wrap_action_call.rb", "spec/innate/options.rb", "spec/innate/parameter.rb", "spec/innate/provides.rb", "spec/innate/provides/list.html.xhtml", "spec/innate/provides/list.txt.xhtml", "spec/innate/request.rb", "spec/innate/route.rb", "spec/innate/session.rb", "spec/innate/traited.rb", "tasks/authors.rake", "tasks/bacon.rake", "tasks/changelog.rake", "tasks/gem.rake", "tasks/gem_setup.rake", "tasks/grancher.rake", "tasks/manifest.rake", "tasks/rcov.rake", "tasks/release.rake", "tasks/reversion.rake", "tasks/setup.rake", "tasks/ycov.rake"]
13
13
  s.homepage = %q{http://github.com/manveru/innate}
14
14
  s.require_paths = ["lib"]
15
15
  s.rubyforge_project = %q{innate}
16
- s.rubygems_version = %q{1.3.4}
16
+ s.rubygems_version = %q{1.3.5}
17
17
  s.summary = %q{Powerful web-framework wrapper for Rack.}
18
18
 
19
19
  if s.respond_to? :specification_version then
@@ -23,18 +23,18 @@ Gem::Specification.new do |s|
23
23
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
24
24
  s.add_runtime_dependency(%q<rack>, ["~> 1.0.0"])
25
25
  s.add_development_dependency(%q<bacon>, [">= 1.1.0"])
26
- s.add_development_dependency(%q<json>, ["~> 1.1.7"])
27
- s.add_development_dependency(%q<rack-test>, [">= 0.4.0"])
26
+ s.add_development_dependency(%q<rack-test>, [">= 0.5.0"])
27
+ s.add_development_dependency(%q<json>, ["~> 1.1.9"])
28
28
  else
29
29
  s.add_dependency(%q<rack>, ["~> 1.0.0"])
30
30
  s.add_dependency(%q<bacon>, [">= 1.1.0"])
31
- s.add_dependency(%q<json>, ["~> 1.1.7"])
32
- s.add_dependency(%q<rack-test>, [">= 0.4.0"])
31
+ s.add_dependency(%q<rack-test>, [">= 0.5.0"])
32
+ s.add_dependency(%q<json>, ["~> 1.1.9"])
33
33
  end
34
34
  else
35
35
  s.add_dependency(%q<rack>, ["~> 1.0.0"])
36
36
  s.add_dependency(%q<bacon>, [">= 1.1.0"])
37
- s.add_dependency(%q<json>, ["~> 1.1.7"])
38
- s.add_dependency(%q<rack-test>, [">= 0.4.0"])
37
+ s.add_dependency(%q<rack-test>, [">= 0.5.0"])
38
+ s.add_dependency(%q<json>, ["~> 1.1.9"])
39
39
  end
40
40
  end
@@ -13,6 +13,7 @@ module Innate
13
13
  end
14
14
 
15
15
  # stdlib
16
+ require 'digest/md5'
16
17
  require 'digest/sha1'
17
18
  require 'digest/sha2'
18
19
  require 'find'
@@ -22,6 +23,7 @@ module Innate
22
23
  require 'pp'
23
24
  require 'set'
24
25
  require 'socket'
26
+ require 'thread'
25
27
  require 'uri'
26
28
 
27
29
  # 3rd party
@@ -102,27 +104,27 @@ module Innate
102
104
  # Keep state in Thread or Fiber, fall back to Thread if Fiber not available
103
105
  # @option param :mode [Symbol] (:dev)
104
106
  # Indicates which default middleware to use, (:dev|:live)
105
- def start(given_options = {}, &block)
106
- root = given_options.delete(:root)
107
- file = given_options.delete(:file)
107
+ def start(options = {}, &block)
108
+ root, file = options.delete(:root), options.delete(:file)
109
+ innate_options = Innate.options
108
110
 
109
111
  found_root = go_figure_root(caller, :root => root, :file => file)
110
- Innate.options.roots = [*found_root] if found_root
112
+ innate_options.roots = [*found_root] if found_root
111
113
 
112
114
  # Convert some top-level option keys to the internal ones that we use.
113
- PROXY_OPTIONS.each{|k,v| given_options[v] = given_options.delete(k) }
114
- given_options.delete_if{|k,v| v.nil? }
115
+ PROXY_OPTIONS.each{|given, proxy| options[proxy] = options[given] }
116
+ options.delete_if{|key, value| PROXY_OPTIONS[key] || value.nil? }
115
117
 
116
118
  # Merge the user's given options into our existing set, which contains defaults.
117
- options.merge!(given_options)
119
+ innate_options.merge!(options)
118
120
 
119
121
  setup_dependencies
120
- middleware!(options.mode, &block) if block_given?
122
+ middleware!(innate_options.mode, &block) if block_given?
121
123
 
122
- return if options.started
123
- options.started = true
124
+ return if innate_options.started
125
+ innate_options.started = true
124
126
 
125
- signal = options.trap
127
+ signal = innate_options.trap
126
128
  trap(signal){ stop(10) } if signal
127
129
 
128
130
  start!
@@ -55,10 +55,9 @@ module Innate
55
55
  def sync_variables(from_action)
56
56
  instance = from_action.instance
57
57
 
58
- instance.instance_variables.each{|iv|
59
- iv_value = instance.instance_variable_get(iv)
60
- iv_name = iv.to_s[1..-1]
61
- self.variables[iv_name.to_sym] = iv_value
58
+ instance.instance_variables.each{|variable|
59
+ name = variable.to_s[1..-1].to_sym
60
+ self.variables[name] = instance.instance_variable_get(variable)
62
61
  }
63
62
 
64
63
  from_action
@@ -71,18 +70,18 @@ module Innate
71
70
  # @return [NilClass] there is no indication of failure or success
72
71
  # @see Action#render
73
72
  # @author manveru
74
- def copy_variables(object)
73
+ def copy_variables(object = instance)
75
74
  self.variables.each do |iv, value|
76
75
  object.instance_variable_set("@#{iv}", value)
77
76
  end
78
77
  end
79
78
 
80
79
  def render
81
- self.instance = node.new
80
+ self.instance = instance = node.new
82
81
  self.variables[:content] ||= nil
83
82
 
84
83
  instance.wrap_action_call(self) do
85
- copy_variables(self.instance) # this might need another position
84
+ copy_variables
86
85
  self.method_value = instance.__send__(method, *params) if method
87
86
  self.view_value = View.read(view) if view
88
87
 
@@ -94,18 +93,22 @@ module Innate
94
93
  end
95
94
 
96
95
  def wrap_in_layout
97
- return yield unless layout
98
-
99
- action = dup
100
- action.view, action.method = layout_view_or_method(*layout)
101
- action.params = []
102
- action.layout = nil
103
- action.view_value = nil
104
- action.sync_variables(self)
96
+ layout ? dup.render_in_layout(&Proc.new) : yield
97
+ end
98
+
99
+ def render_in_layout
100
+ self.view, self.method = layout_view_or_method(*layout)
101
+ self.options[:is_layout] = true
102
+ self.params = []
103
+ self.layout = self.view_value = nil
104
+ self.sync_variables(self)
105
+
105
106
  body, content_type = yield
106
- action.sync_variables(self)
107
- action.variables[:content] = body
108
- return action.call, content_type
107
+
108
+ self.sync_variables(self)
109
+ self.variables[:content] = body
110
+
111
+ return call, content_type
109
112
  end
110
113
 
111
114
  def layout_view_or_method(name, arg)
@@ -1,4 +1,9 @@
1
- Rack::Handler.register('ebb', 'Rack::Handler::Ebb')
1
+ # Rack doesn't ship with ebb handler, but it doesn't get picked up under some
2
+ # circumstances, so we do that here.
3
+ # Jruby Rack doesn't have the Handler::register method, so we have to check.
4
+ if Rack::Handler.respond_to?(:register)
5
+ Rack::Handler.register('ebb', 'Rack::Handler::Ebb')
6
+ end
2
7
 
3
8
  module Innate
4
9
 
@@ -66,7 +66,7 @@ module Innate
66
66
  value[:value]
67
67
  end
68
68
  else
69
- [key, *keys].map{|k| cache_delete(k) }
69
+ [key, *keys].map{|element| cache_delete(element) }
70
70
  end
71
71
  end
72
72
 
@@ -1,7 +1,7 @@
1
1
  require 'drb'
2
2
 
3
3
  module Innate
4
- module Cache
4
+ class Cache
5
5
 
6
6
  # Cache utilizing a DRb server.
7
7
  #
@@ -79,6 +79,7 @@ module Innate
79
79
  # @see Action#render
80
80
  # @author manveru
81
81
  def wrap_action_call(action, &block)
82
+ return yield if action.options[:is_layout]
82
83
  wrap = SortedSet.new
83
84
  action.node.ancestral_trait_values(:wrap).each{|sset| wrap.merge(sset) }
84
85
  head, *tail = wrap.map{|k,v| v }
@@ -28,13 +28,15 @@ module Innate
28
28
  hashes, names = args.partition{|arg| arg.respond_to?(:merge!) }
29
29
  hashes.each{|to_merge| hash.merge!(to_merge) }
30
30
 
31
- escape = Rack::Utils.method(:escape)
31
+ name = name.to_s.gsub(/__/, '/')
32
+
32
33
  location = route_location(self)
33
- front = Array[location, name, *names.map{|n| escape[n]}].join('/').squeeze('/')
34
+ front = Array[location, name, *names.map{|element|
35
+ Rack::Utils.escape(element) }].join('/').squeeze('/')
34
36
 
35
37
  return URI(front) if hash.empty?
36
38
 
37
- query = hash.map{|k, v| "#{escape[k]}=#{escape[v]}" }.join(';')
39
+ query = Rack::Utils.build_query(hash)
38
40
  URI("#{front}?#{query}")
39
41
  end
40
42
  alias r route
@@ -5,7 +5,7 @@ module Innate
5
5
  response.write body
6
6
  response.status = status
7
7
  header['Content-Type'] ||= 'text/html'
8
- header.each{|k,v| response[k] = v }
8
+ header.each{|key, value| response[key] = value }
9
9
 
10
10
  throw(:respond, response)
11
11
  end
@@ -19,8 +19,8 @@ module Innate
19
19
  yield(self) if block_given?
20
20
  end
21
21
 
22
- def use(app, *args, &block)
23
- @middlewares << [app, args, block]
22
+ def use(middleware, *args, &block)
23
+ @middlewares << [middleware, args, block]
24
24
  end
25
25
 
26
26
  def apps(*middlewares)
@@ -41,7 +41,7 @@ module Innate
41
41
 
42
42
  joined = roots.map{|root| publics.map{|public| ::File.join(root, public)}}
43
43
 
44
- apps = joined.flatten.map{|pr| Rack::File.new(pr) }
44
+ apps = joined.flatten.map{|public_root| Rack::File.new(public_root) }
45
45
  apps << Current.new(Route.new(app), Rewrite.new(app))
46
46
 
47
47
  cascade(*apps)
@@ -57,8 +57,9 @@ module Innate
57
57
  end
58
58
 
59
59
  def compile!
60
- @compiled = @middlewares.reverse.inject(@app){|s, (app, args, block)|
61
- app.new(s, *args, &block) }
60
+ @compiled = @middlewares.reverse.
61
+ inject(@app){|app, (middleware, args, block)|
62
+ middleware.new(app, *args, &block) }
62
63
  self
63
64
  end
64
65
  end
@@ -138,7 +138,7 @@ module Innate
138
138
  # @author manveru
139
139
  def map(location)
140
140
  trait :skip_node_map => true
141
- Innate.map(location, self) if location
141
+ Innate.map(location, self)
142
142
  end
143
143
 
144
144
  # Specify which way contents are provided and processed.
@@ -226,7 +226,7 @@ module Innate
226
226
  end
227
227
 
228
228
  def provides
229
- ancestral_trait.reject{|k,v| k !~ /_handler$/ }
229
+ ancestral_trait.reject{|key, value| key !~ /_handler$/ }
230
230
  end
231
231
 
232
232
  # This makes the Node a valid application for Rack.
@@ -339,6 +339,7 @@ module Innate
339
339
  # @see Innate::Response Node#try_resolve
340
340
  # @author manveru
341
341
  def action_missing(path)
342
+ response = Current.response
342
343
  response.status = 404
343
344
  response['Content-Type'] = 'text/plain'
344
345
  response.write("No action found at: %p" % path)
@@ -513,7 +514,7 @@ module Innate
513
514
  # @example
514
515
  #
515
516
  # Hi.update_method_arities
516
- # # => {'index' => 0, 'foo' => -1, 'bar => 2}
517
+ # # => {'index' => 0, 'foo' => -1, 'bar' => 2}
517
518
  #
518
519
  # @api internal
519
520
  # @see Node#resolve
@@ -522,7 +523,7 @@ module Innate
522
523
  @method_arities = {}
523
524
 
524
525
  exposed = ancestors & Helper::EXPOSE.to_a
525
- higher = ancestors.select{|a| a < Innate::Node }
526
+ higher = ancestors.select{|ancestor| ancestor < Innate::Node }
526
527
 
527
528
  (higher + exposed).reverse_each do |ancestor|
528
529
  ancestor.public_instance_methods(false).each do |im|
@@ -661,13 +662,13 @@ module Innate
661
662
  # of multitudes of obscure options and methods like deny_layout we simply
662
663
  # take a block and use the returned value as the name for the layout. No
663
664
  # layout will be used if the block returns nil.
664
- def layout(name = nil, &block)
665
- if name and block
665
+ def layout(layout_name = nil, &block)
666
+ if layout_name and block
666
667
  # default name, but still check with block
667
- trait(:layout => lambda{|n, w| name if block.call(n, w) })
668
- elsif name
668
+ trait(:layout => lambda{|name, wish| layout_name.to_s if block.call(name, wish) })
669
+ elsif layout_name
669
670
  # name of a method or template
670
- trait(:layout => name.to_s)
671
+ trait(:layout => layout_name.to_s)
671
672
  elsif block
672
673
  # call block every request with name and wish, returned value is name
673
674
  # of layout template or method
@@ -1021,7 +1022,7 @@ module Innate
1021
1022
  def node_from_backtrace(backtrace)
1022
1023
  filename, lineno = backtrace[0].split(':', 2)
1023
1024
  regexp = /^\s*class\s+(\S+)/
1024
- File.readlines(filename)[0..lineno.to_i].reverse.find{|l| l =~ regexp }
1025
+ File.readlines(filename)[0..lineno.to_i].reverse.find{|ln| ln =~ regexp }
1025
1026
  const_get($1)
1026
1027
  end
1027
1028
  end
@@ -32,6 +32,6 @@ module Innate
32
32
  o "Prefix used to create relative links",
33
33
  :prefix, '/'
34
34
 
35
- trigger(:mode){|v| Innate.middleware_recompile(v) }
35
+ trigger(:mode){|value| Innate.middleware_recompile(value) }
36
36
  end
37
37
  end
@@ -132,7 +132,9 @@ module Innate
132
132
  #
133
133
  # TODO: allow arbitrary assignments
134
134
  def []=(key, value)
135
- if ns = @hash[key.to_sym]
135
+ ks = key.to_sym
136
+ if @hash.has_key? ks
137
+ ns = @hash[ks]
136
138
  ns[:value] = value
137
139
  ns[:trigger].call(value) if ns[:trigger].respond_to?(:call)
138
140
  elsif existing = get(key)
@@ -124,7 +124,7 @@ module Innate
124
124
 
125
125
  ipv4 = %w[ 127.0.0.1/32 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 169.254.0.0/16 ]
126
126
  ipv6 = %w[ fc00::/7 fe80::/10 fec0::/10 ::1 ]
127
- LOCAL = (ipv4 + ipv6).map{|a| IPAddr.new(a)} unless defined?(LOCAL)
127
+ LOCAL = (ipv4 + ipv6).map{|range| IPAddr.new(range)} unless defined?(LOCAL)
128
128
 
129
129
  # Request is from a local network?
130
130
  # Checks both IPv4 and IPv6
@@ -51,7 +51,7 @@ module Innate
51
51
  end
52
52
 
53
53
  def self.[]=(key, value)
54
- self::ROUTES.delete_if{|k,v| k == key }
54
+ self::ROUTES.delete_if{|route_key, route_value| route_key == key }
55
55
  self::ROUTES << [key, value]
56
56
  end
57
57
 
@@ -39,8 +39,8 @@ module Innate
39
39
  o "Length of generated Session ID (only applies when using SecureRandom)",
40
40
  :sid_length, 64
41
41
 
42
- trigger(:expires){|v|
43
- self.ttl = v - Time.now.to_i
42
+ trigger(:expires){|value|
43
+ self.ttl = value - Time.now.to_i
44
44
  Log.warn("Innate::Session.options.expires is deprecated, use #ttl instead")
45
45
  }
46
46
  end
@@ -8,7 +8,7 @@ Bacon.summary_on_exit
8
8
 
9
9
  module Innate
10
10
  # minimal middleware, no exception handling
11
- middleware(:spec){|m| m.innate }
11
+ middleware(:spec){|mw| mw.innate }
12
12
 
13
13
  # skip starting adapter
14
14
  options.started = true
@@ -1,6 +1,8 @@
1
1
  require 'thread'
2
2
 
3
3
  module Innate
4
+ SEMAPHORE = Mutex.new
5
+
4
6
  module SingletonMethods
5
7
  # Use this method to achieve thread-safety for sensitive operations.
6
8
  #
@@ -9,9 +11,8 @@ module Innate
9
11
  # execution of this method.
10
12
  #
11
13
  # @param [Proc] block the things you want to execute
12
- # @see State::Thread#sync State::Fiber#sync
13
14
  def sync(&block)
14
- Thread.exclusive(&block)
15
+ SEMAPHORE.synchronize(&block)
15
16
  end
16
17
 
17
18
  def defer
@@ -1,3 +1,3 @@
1
1
  module Innate
2
- VERSION = "2009.07"
2
+ VERSION = "2009.10"
3
3
  end
@@ -30,7 +30,7 @@ module Innate
30
30
 
31
31
  def exts_of(engine)
32
32
  name = engine.to_s
33
- ENGINE.reject{|k,v| v != name }.keys
33
+ ENGINE.reject{|ext, klass| klass != name }.keys
34
34
  end
35
35
 
36
36
  # Try to obtain given engine by its registered name.
@@ -49,10 +49,10 @@ module Innate
49
49
  # on the first request (before TEMP is set).
50
50
  # No mutex is used in Fiber environment, see Innate::State and subclasses.
51
51
  def obtain(klass, root = Object)
52
- Thread.exclusive{
52
+ Innate.sync do
53
53
  klass.to_s.scan(/\w+/){|part| root = root.const_get(part) }
54
54
  return root
55
- }
55
+ end
56
56
  end
57
57
 
58
58
  # Reads the specified view template from the filesystem. When the read_cache
@@ -4,7 +4,7 @@ module Innate
4
4
  module View
5
5
  module ERB
6
6
  def self.call(action, string)
7
- erb = View.compile(string){|s| ::ERB.new(s, nil, '%<>') }
7
+ erb = View.compile(string){|str| ::ERB.new(str, nil, '%<>') }
8
8
  erb.filename = (action.view || action.method).to_s
9
9
  html = erb.result(action.binding)
10
10
  return html, 'text/html'
@@ -2,7 +2,7 @@ module Innate
2
2
  module View
3
3
  module Etanni
4
4
  def self.call(action, string)
5
- etanni = View.compile(string){|s| Innate::Etanni.new(s) }
5
+ etanni = View.compile(string){|str| Innate::Etanni.new(str) }
6
6
  html = etanni.result(action.binding, (action.view || action.method))
7
7
  return html, 'text/html'
8
8
  end
@@ -7,7 +7,7 @@ describe Innate::DynaMap do
7
7
  lambda{ Innate::DynaMap.call({}) }.should.raise(RuntimeError)
8
8
  end
9
9
 
10
- should 'not raise if nothing is mapped' do
10
+ should 'not raise if something is mapped' do
11
11
  Innate.map('/', &@app)
12
12
  Innate::DynaMap.call('SCRIPT_NAME' => '/').should == [200, {}, ['pass']]
13
13
  end
@@ -54,7 +54,7 @@ describe Innate::Helper::Link do
54
54
  FNL.r(:index, :foo => :bar).should == URI('/foo/index?foo=bar')
55
55
 
56
56
  uri = FNL.r(:index, :a => :b, :x => :y)
57
- uri.query.split(';').sort.should == %w[a=b x=y]
57
+ uri.query.split('&').sort.should == %w[a=b x=y]
58
58
  end
59
59
 
60
60
  should 'construct link from ::a' do
@@ -27,6 +27,16 @@ class AspectAllSpec
27
27
  def with_instance_var_second; "#{@foo} to the #{@bar}"; end
28
28
  end
29
29
 
30
+ class AspectDerivedWithLayout < AspectAllSpec
31
+ map '/derived'
32
+ provide(:html, :None)
33
+ layout :page
34
+
35
+ def page
36
+ "Content: #{@content}"
37
+ end
38
+ end
39
+
30
40
  class AspecNoMethodSpec
31
41
  Innate.node('/without_method', self)
32
42
  include Innate::Node
@@ -58,9 +68,11 @@ describe Innate::Helper::Aspect do
58
68
 
59
69
  it 'calls before_all and after_all' do
60
70
  $aspect_spec_before_all = $aspect_spec_after_all = 0
71
+
61
72
  get('/all/before_first').body.should == '42'
62
73
  $aspect_spec_before_all.should == 42
63
74
  $aspect_spec_after_all.should == 40
75
+
64
76
  get('/all/before_second').body.should == '84'
65
77
  $aspect_spec_before_all.should == 84
66
78
  $aspect_spec_after_all.should == 80
@@ -72,4 +84,16 @@ describe Innate::Helper::Aspect do
72
84
  get('/all/with_instance_var_second').body.should == 'Hello to the World'
73
85
  get('/without_method/aspect_hello').body.should == "Hello World!"
74
86
  end
87
+
88
+ it 'calls before_all and after_all in the superclass' do
89
+ $aspect_spec_before_all = $aspect_spec_after_all = 0
90
+
91
+ get('/derived/before_first').body.should == 'Content: 42'
92
+ $aspect_spec_before_all.should == 42
93
+ $aspect_spec_after_all.should == 40
94
+
95
+ get('/derived/before_second').body.should == 'Content: 84'
96
+ $aspect_spec_before_all.should == 84
97
+ $aspect_spec_after_all.should == 80
98
+ end
75
99
  end
@@ -11,6 +11,18 @@ class SpecNode
11
11
  def two(arg1, arg2) end
12
12
  def more(*args) end
13
13
  def default(arg = nil) end
14
+
15
+ def cat1__cat11
16
+ 'cat1: cat11'
17
+ end
18
+
19
+ def cat1__cat11__cat111
20
+ 'cat1: cat11: cat111'
21
+ end
22
+
23
+ def cat3_cat33
24
+ 'The wrong 33rd cat.'
25
+ end
14
26
  end
15
27
 
16
28
  class SpecNodeProvide
@@ -61,6 +73,25 @@ class SpecNodeWithLayoutMethod < SpecNodeProvide
61
73
  end
62
74
  end
63
75
 
76
+ class SpecNodeWithLayoutMethodSymbol < SpecNodeProvide
77
+ map '/layout_method_symbol'
78
+ layout :layout_method
79
+
80
+ def layout_method
81
+ '<div class="content">#{@content}</div>'
82
+ end
83
+ end
84
+
85
+ class SpecNodeWithLayoutMethodSymbolAndBlock < SpecNodeProvide
86
+ map '/layout_method_symbol_block'
87
+ layout(:layout_method) { |wish,path| true }
88
+
89
+ def layout_method
90
+ '<div class="content">#{@content}</div>'
91
+ end
92
+ end
93
+
94
+
64
95
  class SpecNodeIndex
65
96
  Innate.node('/spec_index')
66
97
 
@@ -80,48 +111,62 @@ describe 'Innate::Node' do
80
111
  behaves_like :rack_test
81
112
 
82
113
  should 'respond with 404 if no action was found' do
83
- got = Innate::Mock.get('/does_not_exist')
114
+ got = get('/does_not_exist')
84
115
  got.status.should == 404
85
116
  got.body.should == 'No action found at: "/does_not_exist"'
86
117
  got['Content-Type'].should == 'text/plain'
87
118
  end
88
119
 
89
120
  should 'wrap with layout' do
90
- got = Innate::Mock.get('/layout/bar')
121
+ got = get('/layout/bar')
91
122
  got.status.should == 200
92
123
  got.body.should == %(<div class="content">42</div>)
93
124
  got['Content-Type'].should == 'text/html'
94
125
  end
95
126
 
96
127
  should 'find layout with view_root' do
97
- got = Innate::Mock.get('/another_layout/bar')
128
+ got = get('/another_layout/bar')
98
129
  got.status.should == 200
99
130
  got.body.should == %(<div class="content">\n 42\n</div>)
100
131
  got['Content-Type'].should == 'text/html'
101
132
  end
102
133
 
103
134
  should 'find layout from method' do
104
- got = Innate::Mock.get('/layout_method/bar')
135
+ got = get('/layout_method/bar')
136
+ got.status.should == 200
137
+ got.body.should == %(<div class="content">42</div>)
138
+ got['Content-Type'].should == 'text/html'
139
+ end
140
+
141
+ should 'find layout from method specified as a symbol' do
142
+ got = get('/layout_method_symbol/bar')
143
+ got.status.should == 200
144
+ got.body.should == %(<div class="content">42</div>)
145
+ got['Content-Type'].should == 'text/html'
146
+ end
147
+
148
+ should 'find layout from method specified as a symbol and a filter block' do
149
+ got = get('/layout_method_symbol_block/bar')
105
150
  got.status.should == 200
106
151
  got.body.should == %(<div class="content">42</div>)
107
152
  got['Content-Type'].should == 'text/html'
108
153
  end
109
154
 
110
155
  should 'not get an action with wrong parameters' do
111
- got = Innate::Mock.get('/spec_index/bar')
156
+ got = get('/spec_index/bar')
112
157
  got.status.should == 404
113
158
  got.body.should == 'No action found at: "/bar"'
114
159
  end
115
160
 
116
161
  should 'get an action view if there is no method' do
117
- got = Innate::Mock.get('/provide_template/only_view')
162
+ got = get('/provide_template/only_view')
118
163
  got.status.should == 200
119
164
  got.body.strip.should == "Only template"
120
165
  got['Content-Type'].should == 'text/html'
121
166
  end
122
167
 
123
168
  should 'not get an action view with params if there is no method' do
124
- got = Innate::Mock.get('/provide_template/only_view/param')
169
+ got = get('/provide_template/only_view/param')
125
170
  got.status.should == 404
126
171
  got.body.strip.should == 'No action found at: "/only_view/param"'
127
172
  end
@@ -132,4 +177,34 @@ describe 'Innate::Node' do
132
177
  got.body.strip.should == "<h1>Hello, World!</h1>"
133
178
  got['Content-Type'].should == 'text/html'
134
179
  end
180
+
181
+ it "does double underscore lookup for method only" do
182
+ got = get('/cat1/cat11')
183
+ got.body.should == 'cat1: cat11'
184
+ end
185
+
186
+ it "does double double underscore lookup for method only" do
187
+ got = get('/cat1/cat11/cat111')
188
+ got.body.should == 'cat1: cat11: cat111'
189
+ end
190
+
191
+ it "resolves double underscore for template only" do
192
+ got = get('/cat2/cat22')
193
+ got.body.should == 'The 22nd cat.'
194
+ end
195
+
196
+ it "resolves double underscore for template and method" do
197
+ got = get('/cat3/cat33')
198
+ got.body.should == 'The right 33rd cat.'
199
+ end
200
+
201
+ it 'resolves normal template in subnode ' do
202
+ got = get('/sub/baz')
203
+ got.body.should == 'This is baz, cheer up!'
204
+ end
205
+
206
+ it 'resolves nested template in subnode' do
207
+ got = get('/sub/foo/baz')
208
+ got.body.should == 'This is foo/baz, cheer up!'
209
+ end
135
210
  end
@@ -0,0 +1 @@
1
+ The 22nd cat.
@@ -0,0 +1 @@
1
+ The right 33rd cat.
@@ -0,0 +1 @@
1
+ This is baz, cheer up!
@@ -0,0 +1 @@
1
+ This is foo/baz, cheer up!
@@ -104,9 +104,7 @@ describe Options do
104
104
 
105
105
  should 'pretty_print' do
106
106
  require 'pp'
107
- p = PP.new
108
- @options.pretty_print(p)
109
- lines = p.output.split(/\n/)
107
+ lines = @options.pretty_inspect.split(/\n/)
110
108
  lines.find_all{|l|
111
109
  /:doc/ === l &&
112
110
  /:value/ === l
@@ -120,4 +118,15 @@ describe Options do
120
118
  @options.port = 300
121
119
  set.should == 300
122
120
  end
121
+ should 'return default value' do
122
+ @options.default('my default', 'jeremy' )
123
+ @options.fake.should == 'jeremy'
124
+ end
125
+ should 'not change default value' do
126
+ @options.fake1.should == 'jeremy'
127
+ @options.fake2.should == 'jeremy'
128
+ @options.fake1 = 'zurcher'
129
+ @options.fake1.should == 'zurcher'
130
+ @options.fake2.should == 'jeremy'
131
+ end
123
132
  end
@@ -115,15 +115,6 @@ describe "Simple Parameters" do
115
115
  handle('/one_default/my_default').should == "one_default (my_default)"
116
116
  end
117
117
 
118
- it "double underscore lookup" do
119
- handle('/cat1/cat11').should == 'cat1: cat11'
120
- end
121
-
122
- it "double double underscore lookup" do
123
- handle('/cat1/cat11/cat111').should == 'cat1: cat11: cat111'
124
- end
125
-
126
-
127
118
  it "jo/add should raise with 0 parameters" do
128
119
  lambda{ handle('/jo/add') }.
129
120
  should.raise(ArgumentError)
@@ -1,53 +1,65 @@
1
1
  namespace :release do
2
- task :all => [:release_github, :release_rubyforge]
2
+ task :prepare => [:reversion, :authors, :gemspec]
3
+ task :all => ['release:github', 'release:rubyforge', 'release:gemcutter']
3
4
 
4
- desc 'Display instructions to release on github'
5
- task :github => [:reversion, :authors, :gemspec] do
5
+ desc 'Release on github'
6
+ task :github => :prepare do
6
7
  name, version = GEMSPEC.name, GEMSPEC.version
7
8
 
8
- puts <<INSTRUCTIONS
9
- First add the relevant files:
9
+ sh('git', 'add',
10
+ 'MANIFEST', 'CHANGELOG', 'AUTHORS',
11
+ "#{name}.gemspec",
12
+ "lib/#{name}/version.rb")
10
13
 
11
- git add AUTHORS MANIFEST CHANGELOG #{name}.gemspec lib/#{name}/version.rb
14
+ puts <<-INSTRUCTIONS
15
+ ================================================================================
12
16
 
13
- Then commit them, tag the commit, and push:
17
+ I added the relevant files, you can commit them, tag the commit, and push:
14
18
 
15
19
  git commit -m 'Version #{version}'
16
20
  git tag -a -m '#{version}' '#{version}'
17
21
  git push
18
22
 
19
- INSTRUCTIONS
20
-
23
+ ================================================================================
24
+ INSTRUCTIONS
21
25
  end
22
26
 
23
- # TODO: Not tested
24
- desc 'Display instructions to release on rubyforge'
25
- task :rubyforge => [:reversion, :authors, :gemspec, :package] do
27
+ desc 'Release on rubyforge'
28
+ task :rubyforge => ['release:prepare', :package] do
26
29
  name, version = GEMSPEC.name, GEMSPEC.version
27
30
 
28
- puts <<INSTRUCTIONS
31
+ pkgs = Dir["pkg/#{name}-#{version}.{tgz,zip}"].map{|file|
32
+ "rubyforge add_file #{name} #{name} '#{version}' '#{file}'"
33
+ }
34
+
35
+ puts <<-INSTRUCTIONS
36
+ ================================================================================
37
+
29
38
  To publish to rubyforge do following:
30
39
 
31
40
  rubyforge login
32
41
  rubyforge add_release #{name} #{name} '#{version}' pkg/#{name}-#{version}.gem
33
42
 
43
+ To publish the archives for distro packagers:
34
44
 
35
- After you have done these steps, see:
45
+ #{pkgs.join "\n"}
36
46
 
37
- rake release:rubyforge_archives
38
-
39
- INSTRUCTIONS
47
+ ================================================================================
48
+ INSTRUCTIONS
40
49
  end
41
50
 
42
- desc 'Display instructions to add archives after release:rubyforge'
43
- task :rubyforge_archives do
44
- puts "Adding archives for distro packagers is:", ""
51
+ desc 'Release on gemcutter'
52
+ task :gemcutter => ['release:prepare', :package] do
45
53
  name, version = GEMSPEC.name, GEMSPEC.version
46
54
 
47
- Dir["pkg/#{name}-#{version}.{tgz,zip}"].each do |file|
48
- puts "rubyforge add_file #{name} #{name} '#{version}' '#{file}'"
49
- end
55
+ puts <<-INSTRUCTIONS
56
+ ================================================================================
57
+
58
+ To publish to gemcutter do following:
59
+
60
+ gem push pkg/#{name}-#{version}.gem
50
61
 
51
- puts
62
+ ================================================================================
63
+ INSTRUCTIONS
52
64
  end
53
65
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: innate
3
3
  version: !ruby/object:Gem::Version
4
- version: "2009.07"
4
+ version: "2009.10"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael 'manveru' Fellinger
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-07-25 00:00:00 +09:00
12
+ date: 2009-10-02 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -33,24 +33,24 @@ dependencies:
33
33
  version: 1.1.0
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: json
36
+ name: rack-test
37
37
  type: :development
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ~>
41
+ - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 1.1.7
43
+ version: 0.5.0
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: rack-test
46
+ name: json
47
47
  type: :development
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 0.4.0
53
+ version: 1.1.9
54
54
  version:
55
55
  description: Simple, straight-forward base for web-frameworks.
56
56
  email: m.fellinger@gmail.com
@@ -163,8 +163,12 @@ files:
163
163
  - spec/innate/node/resolve.rb
164
164
  - spec/innate/node/view/another_layout/another_layout.xhtml
165
165
  - spec/innate/node/view/bar.xhtml
166
+ - spec/innate/node/view/cat2/cat22.xhtml
167
+ - spec/innate/node/view/cat3/cat33.xhtml
166
168
  - spec/innate/node/view/foo.html.xhtml
167
169
  - spec/innate/node/view/only_view.xhtml
170
+ - spec/innate/node/view/sub/baz.xhtml
171
+ - spec/innate/node/view/sub/foo/baz.xhtml
168
172
  - spec/innate/node/view/with_layout.xhtml
169
173
  - spec/innate/node/wrap_action_call.rb
170
174
  - spec/innate/options.rb
@@ -212,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
216
  requirements: []
213
217
 
214
218
  rubyforge_project: innate
215
- rubygems_version: 1.3.4
219
+ rubygems_version: 1.3.5
216
220
  signing_key:
217
221
  specification_version: 3
218
222
  summary: Powerful web-framework wrapper for Rack.