innate 2010.07 → 2011.01

Sign up to get free protection for your applications and to get access to all the features.
data/MANIFEST CHANGED
@@ -1,3 +1,4 @@
1
+ .gitignore
1
2
  AUTHORS
2
3
  CHANGELOG
3
4
  COPYING
@@ -40,7 +41,6 @@ lib/innate/helper/flash.rb
40
41
  lib/innate/helper/link.rb
41
42
  lib/innate/helper/redirect.rb
42
43
  lib/innate/helper/render.rb
43
- lib/innate/helper/send_file.rb
44
44
  lib/innate/log.rb
45
45
  lib/innate/log/color_formatter.rb
46
46
  lib/innate/log/hub.rb
@@ -87,7 +87,6 @@ spec/innate/helper/flash.rb
87
87
  spec/innate/helper/link.rb
88
88
  spec/innate/helper/redirect.rb
89
89
  spec/innate/helper/render.rb
90
- spec/innate/helper/send_file.rb
91
90
  spec/innate/helper/view/aspect_hello.xhtml
92
91
  spec/innate/helper/view/locals.xhtml
93
92
  spec/innate/helper/view/loop.xhtml
data/README.md CHANGED
@@ -115,7 +115,7 @@ And another example, using Node with a normal server:
115
115
  Installing Innate from git is highly recommended, since it gives you easy
116
116
  access to alternate branches, bugfixes, and new features.
117
117
 
118
- git clone git://github.com/manveru/innate.git
118
+ git clone git://github.com/Ramaze/innate.git
119
119
 
120
120
  Do not forget to add the innate/lib directory to your `RUBYLIB` environment
121
121
  variable.
@@ -127,15 +127,11 @@ your shell:
127
127
 
128
128
  ### Via gem install
129
129
 
130
- #### From Github
131
-
132
- gem install manveru-innate --source=http://gems.github.com
133
-
134
- #### From Rubyforge
135
-
136
- Not yet, and not sure when I'll get around to do this, feel free to ask if you
137
- want to maintain the project at rubyforge.
130
+ gem install innate
138
131
 
132
+ ### Direct download
133
+
134
+ Download the latest tarball from [here](http://github.com/Ramaze/innate/tarball/master).
139
135
 
140
136
  ## Concepts
141
137
 
@@ -2,14 +2,14 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{innate}
5
- s.version = "2010.07"
5
+ s.version = "2011.01"
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{2010-07-12}
9
+ s.date = %q{2011-01-26}
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/etanni.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/response.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 = [".gitignore", "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/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/etanni.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/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/response.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}
@@ -77,7 +77,7 @@ module Innate
77
77
  :exts, %w[rb so bundle]
78
78
 
79
79
  o "Default helpers, added on inclusion of the Helper module",
80
- :default, [:aspect, :cgi, :flash, :link, :render, :redirect, :send_file]
80
+ :default, [:aspect, :cgi, :flash, :link, :render, :redirect]
81
81
  end
82
82
 
83
83
  EXTS = %w[rb so bundle]
@@ -152,7 +152,7 @@ module Innate
152
152
  # helper :foo_bar # => FooBar
153
153
  # helper :foo # => Foo
154
154
  def get(name)
155
- module_name = /^#{name.to_s.dup.delete('_')}$/i
155
+ module_name = /^#{name.to_s.dup.delete('_')}(?:helper)?$/i
156
156
 
157
157
  options.namespaces.each do |namespace|
158
158
  found = namespace.constants.grep(module_name).first
@@ -38,6 +38,8 @@ module Innate
38
38
  :ttl, (60 * 60 * 24 * 30) # 30 days
39
39
  o "Length of generated Session ID (only applies when using SecureRandom)",
40
40
  :sid_length, 64
41
+ o "cookie cannot be accessed through client side script (http://www.owasp.org/index.php/HttpOnly)",
42
+ :httponly, false
41
43
 
42
44
  trigger(:expires){|value|
43
45
  self.ttl = value - Time.now.to_i
@@ -50,6 +52,7 @@ module Innate
50
52
  def initialize(request, response)
51
53
  @request, @response = request, response
52
54
  @cookie_set = false
55
+ @force_new_cookie = false
53
56
  @cache_sid = nil
54
57
  @flash = Flash.new(self)
55
58
  end
@@ -89,6 +92,13 @@ module Innate
89
92
  @sid ||= cookie || generate_sid
90
93
  end
91
94
 
95
+ def resid!
96
+ cache_sid
97
+ cache.delete(sid)
98
+ @sid = generate_sid
99
+ @force_new_cookie = true
100
+ end
101
+
92
102
  private
93
103
 
94
104
  def cache_sid
@@ -104,15 +114,21 @@ module Innate
104
114
  end
105
115
 
106
116
  def set_cookie(response)
107
- return if @cookie_set || cookie
108
-
117
+ return if @cookie_set || (!@force_new_cookie && cookie)
118
+
109
119
  @cookie_set = true
110
120
  response.set_cookie(options.key, cookie_value)
121
+ @force_new_cookie = false
111
122
  end
112
123
 
113
124
  def cookie_value
114
125
  o = options
115
- cookie = {:domain => o.domain, :path => o.path, :secure => o.secure}
126
+ cookie = {
127
+ :domain => o.domain,
128
+ :path => o.path,
129
+ :secure => o.secure,
130
+ :httponly => o.httponly
131
+ }
116
132
  cookie[:expires] = (Time.now + o.ttl) if o.ttl
117
133
  cookie.merge!(:value => sid)
118
134
  end
@@ -1,3 +1,3 @@
1
1
  module Innate
2
- VERSION = "2010.07"
2
+ VERSION = "2011.01"
3
3
  end
@@ -16,6 +16,12 @@ module Innate
16
16
  ':('
17
17
  end
18
18
  end
19
+
20
+ module FooBarHelper
21
+ def self.baz
22
+ "baz"
23
+ end
24
+ end
19
25
  end
20
26
  end
21
27
 
@@ -60,7 +66,7 @@ describe Innate::Helper::Link do
60
66
  should 'construct link from ::a' do
61
67
  FNL.a(:index).should == '<a href="/foo/index">index</a>'
62
68
  FNL.a('index', :index, :x => :y).should == '<a href="/foo/index?x=y">index</a>'
63
- FNL.a('duh/bar', 'duh/bar', :x => :y).should == '<a href="/foo/duh/bar?x=y">duh/bar</a>'
69
+ FNL.a('duh/bar', 'duh/bar', :x => :y).should == "<a href=\"/foo/duh/bar?x=y\">duh&#x2F;bar</a>"
64
70
  FNL.a('foo', :/, :x => :y).should == '<a href="/foo/?x=y">foo</a>'
65
71
  end
66
72
 
@@ -83,4 +89,9 @@ describe Innate::Helper::Link do
83
89
  }.should.raise(LoadError).
84
90
  message.should == "Helper foo not found"
85
91
  end
92
+
93
+ should 'allow helper to be suffixed with "helper"' do
94
+ Innate::HelpersHelper.get(:foo_bar).baz.should == "baz"
95
+ Innate::HelpersHelper.get(:foo_bar_helper).baz.should == "baz"
96
+ end
86
97
  end
@@ -26,6 +26,11 @@ class SpecSession
26
26
  def reset
27
27
  session.clear
28
28
  end
29
+
30
+ def resid
31
+ session.resid!
32
+ end
33
+
29
34
  end
30
35
 
31
36
  describe Innate::Session do
@@ -51,7 +56,39 @@ describe Innate::Session do
51
56
  get('/decrement').body.should == n.to_s
52
57
  end
53
58
  end
59
+
60
+
61
+ should 'set a session cookie that can be changed with #resid!' do
62
+ clear_cookies
63
+ get '/init'
64
+
65
+ last_response['Set-Cookie'].should.not == nil
66
+ old_set_cookie = last_response['Set-Cookie']
67
+ sid = Innate::Current.session.sid
68
+ get '/increment'
69
+ get '/view'
70
+ last_response.body.should == '1'
71
+
72
+ get '/resid'
73
+ last_response['Set-Cookie'].should.not == nil
74
+ new_sid = Innate::Current.session.sid
75
+ new_sid.should.not == sid
54
76
 
77
+ get '/view'
78
+ last_response.body.should == '1'
79
+ last_response['Set-Cookie'].should == nil
80
+ Innate::Current.session.sid.should == new_sid
81
+
82
+ # We need to verify that the old session ID has been invalidated.
83
+ # The session data must be moved, not copied, on #resid!.
84
+ clear_cookies
85
+ set_cookie(old_set_cookie)
86
+ get '/view'
87
+ last_response.body.should == ''
88
+
89
+ end
90
+
91
+
55
92
  should 'expose sid method' do
56
93
  Innate::Current.session.sid.should.not.be.empty
57
94
  end
metadata CHANGED
@@ -1,12 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: innate
3
3
  version: !ruby/object:Gem::Version
4
- hash: 8045
5
4
  prerelease: false
6
5
  segments:
7
- - 2010
8
- - 7
9
- version: "2010.07"
6
+ - 2011
7
+ - 1
8
+ version: "2011.01"
10
9
  platform: ruby
11
10
  authors:
12
11
  - Michael 'manveru' Fellinger
@@ -14,7 +13,7 @@ autorequire:
14
13
  bindir: bin
15
14
  cert_chain: []
16
15
 
17
- date: 2010-07-12 00:00:00 +09:00
16
+ date: 2011-01-26 00:00:00 -06:00
18
17
  default_executable:
19
18
  dependencies:
20
19
  - !ruby/object:Gem::Dependency
@@ -25,7 +24,6 @@ dependencies:
25
24
  requirements:
26
25
  - - ">="
27
26
  - !ruby/object:Gem::Version
28
- hash: 19
29
27
  segments:
30
28
  - 1
31
29
  - 1
@@ -41,7 +39,6 @@ dependencies:
41
39
  requirements:
42
40
  - - ">="
43
41
  - !ruby/object:Gem::Version
44
- hash: 19
45
42
  segments:
46
43
  - 1
47
44
  - 1
@@ -57,7 +54,6 @@ dependencies:
57
54
  requirements:
58
55
  - - ">="
59
56
  - !ruby/object:Gem::Version
60
- hash: 13
61
57
  segments:
62
58
  - 0
63
59
  - 5
@@ -73,7 +69,6 @@ dependencies:
73
69
  requirements:
74
70
  - - ~>
75
71
  - !ruby/object:Gem::Version
76
- hash: 31
77
72
  segments:
78
73
  - 1
79
74
  - 2
@@ -90,6 +85,7 @@ extensions: []
90
85
  extra_rdoc_files: []
91
86
 
92
87
  files:
88
+ - .gitignore
93
89
  - AUTHORS
94
90
  - CHANGELOG
95
91
  - COPYING
@@ -132,7 +128,6 @@ files:
132
128
  - lib/innate/helper/link.rb
133
129
  - lib/innate/helper/redirect.rb
134
130
  - lib/innate/helper/render.rb
135
- - lib/innate/helper/send_file.rb
136
131
  - lib/innate/log.rb
137
132
  - lib/innate/log/color_formatter.rb
138
133
  - lib/innate/log/hub.rb
@@ -179,7 +174,6 @@ files:
179
174
  - spec/innate/helper/link.rb
180
175
  - spec/innate/helper/redirect.rb
181
176
  - spec/innate/helper/render.rb
182
- - spec/innate/helper/send_file.rb
183
177
  - spec/innate/helper/view/aspect_hello.xhtml
184
178
  - spec/innate/helper/view/locals.xhtml
185
179
  - spec/innate/helper/view/loop.xhtml
@@ -237,7 +231,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
237
231
  requirements:
238
232
  - - ">="
239
233
  - !ruby/object:Gem::Version
240
- hash: 3
241
234
  segments:
242
235
  - 0
243
236
  version: "0"
@@ -246,7 +239,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
239
  requirements:
247
240
  - - ">="
248
241
  - !ruby/object:Gem::Version
249
- hash: 25
250
242
  segments:
251
243
  - 1
252
244
  - 3
@@ -1,26 +0,0 @@
1
- module Innate
2
- module Helper
3
- module SendFile
4
- # Not optimally performing but convenient way to send files by their
5
- # filename.
6
- #
7
- # I think we should remove this from the default helpers and move it into
8
- # Ramaze, the functionality is almost never used, the naming is ambigous,
9
- # and it doesn't use the send_file capabilities of frontend servers.
10
- #
11
- # So for now, I'll mark it for deprecation
12
- def send_file(filename, content_type = nil, content_disposition = nil)
13
- content_type ||= Rack::Mime.mime_type(::File.extname(filename))
14
- content_disposition ||= File.basename(filename)
15
-
16
- response.body = ::File.readlines(filename, 'rb')
17
- response['Content-Length'] = ::File.size(filename).to_s
18
- response['Content-Type'] = content_type
19
- response['Content-Disposition'] = content_disposition
20
- response.status = 200
21
-
22
- throw(:respond, response)
23
- end
24
- end
25
- end
26
- end
@@ -1,21 +0,0 @@
1
- require File.expand_path('../../../helper', __FILE__)
2
-
3
- class SpecSendFile
4
- include Innate::Node
5
- map '/'
6
-
7
- def this
8
- send_file(__FILE__)
9
- end
10
- end
11
-
12
- describe Innate::Helper::SendFile do
13
- should 'send __FILE__' do
14
- got = Innate::Mock.get('/this')
15
-
16
- got.body.should == File.read(__FILE__)
17
- got.status.should == 200
18
- got['Content-Length'].should == File.size(__FILE__).to_s
19
- got['Content-Type'].should == 'text/x-script.ruby'
20
- end
21
- end