rhr 0.1.3 → 0.1.4

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.
@@ -0,0 +1 @@
1
+ .DS_Store
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rhr (0.1.3)
4
+ rhr (0.1.4)
5
5
  rack
6
6
  tilt
7
7
 
data/Readme.md CHANGED
@@ -27,10 +27,26 @@ Layouting
27
27
  <body><%= yield %></body>
28
28
  </html>
29
29
 
30
+ Helpers
31
+ =======
32
+
33
+ Put a `helpers.rb` file into the project root:
34
+
35
+ module Helpers
36
+ def foo
37
+ 'bar'
38
+ end
39
+ end
40
+
41
+ You can now use the `foo` method in the view:
42
+
43
+ <div><%= foo %></div>
44
+
30
45
  TODO (fork!)
31
46
  ====
32
47
  - do not use layout if view does something like `no_layout`
33
48
  - add helpers like link_to / tag / form
49
+ - move params and request to the View
34
50
  - escape html in params <-> xss
35
51
 
36
52
  Author
@@ -1,10 +1,12 @@
1
+ require 'rhr/view'
1
2
  require 'rhr/core_ext/object'
2
3
 
3
4
  module RHR
4
5
  class Server
5
6
  def initialize
6
- @files = Dir["**/*"] - ['Gemfile','Gemfile.lock','Rakefile']
7
- @files -= @files.grep(/(^|\/)_/)
7
+ @files = Dir["**/*"]
8
+ @servable_files = @files - %w[Gemfile Gemfile.lock Rakefile helpers.rb]
9
+ @servable_files -= @servable_files.grep(/(^|\/)_/)
8
10
  end
9
11
 
10
12
  def call(env)
@@ -14,10 +16,11 @@ module RHR
14
16
  request = Rack::Request.new(env)
15
17
  params = request.GET.merge(request.POST)
16
18
 
17
- body = renderer.new(template).render(nil, :request => request, :params => params)
19
+ view = build_view
20
+ body = renderer.new(template).render(view, :request => request, :params => params)
18
21
 
19
22
  if layout = find_layout
20
- body = renderer.new(layout).render(nil, :request => request, :params => params) { body }
23
+ body = renderer.new(layout).render(view, :request => request, :params => params) { body }
21
24
  end
22
25
 
23
26
  [200, {}, [body]]
@@ -31,8 +34,17 @@ module RHR
31
34
 
32
35
  private
33
36
 
37
+ def build_view
38
+ view = View.new
39
+ if @files.include?('helpers.rb')
40
+ require './helpers'
41
+ view.send(:extend, Helpers)
42
+ end
43
+ view
44
+ end
45
+
34
46
  def find_layout
35
- Dir['*'].grep(/^_layout(\.|$)/).first
47
+ @files.grep(/^_layout(\.|$)/).first
36
48
  end
37
49
  memoize :find_layout
38
50
 
@@ -42,12 +54,12 @@ module RHR
42
54
  file.sub!(/\/$/,'')
43
55
  is_root = (file == '')
44
56
 
45
- return if not is_root and not @files.index(file)
57
+ return if not is_root and not @servable_files.index(file)
46
58
 
47
59
  if is_root or File.directory?(file)
48
60
  # folder -> find an index file
49
61
  file << '/' unless is_root
50
- @files.grep(/^#{Regexp.escape file}index\.[^\/]+$/).first
62
+ @servable_files.grep(/^#{Regexp.escape file}index\.[^\/]+$/).first
51
63
  else
52
64
  # just another normal template
53
65
  file
@@ -1,3 +1,3 @@
1
1
  module RHR
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
@@ -0,0 +1,4 @@
1
+ module RHR
2
+ class View
3
+ end
4
+ end
@@ -79,6 +79,14 @@ describe RHR do
79
79
  last_response.content_type.should == 'image/jpeg'
80
80
  end
81
81
 
82
+ %w[Rakefile Gemfile Gemfile.lock helpers.rb].each do |file|
83
+ it "ignores #{file}" do
84
+ write file, 'Foo'
85
+ get "/#{file}"
86
+ last_response.status.should == 404
87
+ end
88
+ end
89
+
82
90
  it "ignores common ruby files" do
83
91
  get "/Gemfile"
84
92
  last_response.status.should == 404
@@ -132,5 +140,23 @@ describe RHR do
132
140
  last_response.body.should == "TEST"
133
141
  end
134
142
  end
143
+
144
+ describe 'with helpers' do
145
+ before do
146
+ write 'helpers.erb', '<%= foo %>'
147
+ write 'helpers.rb', 'module Helpers; def foo; "hello"; end; end'
148
+ end
149
+
150
+ it 'passes helpers into the view' do
151
+ get "/helpers.erb"
152
+ last_response.body.should == 'hello'
153
+ end
154
+
155
+ it 'passes helpers into the layout view' do
156
+ write '_layout.erb', '<%= foo %>|<%= yield %>'
157
+ get "/helpers.erb"
158
+ last_response.body.should == 'hello|hello'
159
+ end
160
+ end
135
161
  end
136
162
  end
metadata CHANGED
@@ -1,60 +1,46 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rhr
3
- version: !ruby/object:Gem::Version
4
- hash: 29
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Michael Grosser
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-11-04 00:00:00 -07:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
12
+ date: 2011-11-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
32
15
  name: rack
33
- version_requirements: *id001
34
- prerelease: false
35
- - !ruby/object:Gem::Dependency
36
- type: :runtime
37
- requirement: &id002 !ruby/object:Gem::Requirement
16
+ requirement: &71381800 !ruby/object:Gem::Requirement
38
17
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *71381800
25
+ - !ruby/object:Gem::Dependency
46
26
  name: tilt
47
- version_requirements: *id002
27
+ requirement: &71381480 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
48
34
  prerelease: false
35
+ version_requirements: *71381480
49
36
  description:
50
37
  email: michael@grosser.it
51
- executables:
38
+ executables:
52
39
  - rhr
53
40
  extensions: []
54
-
55
41
  extra_rdoc_files: []
56
-
57
- files:
42
+ files:
43
+ - .gitignore
58
44
  - .travis.yml
59
45
  - Gemfile
60
46
  - Gemfile.lock
@@ -65,10 +51,10 @@ files:
65
51
  - lib/rhr/core_ext/object.rb
66
52
  - lib/rhr/server.rb
67
53
  - lib/rhr/version.rb
54
+ - lib/rhr/view.rb
68
55
  - rhr.gemspec
69
56
  - spec/rhr_spec.rb
70
57
  - spec/site/.hidden.html
71
- - spec/site/Gemfile
72
58
  - spec/site/_hidden.html
73
59
  - spec/site/_hidden/xxx.html
74
60
  - spec/site/index.erb
@@ -81,39 +67,34 @@ files:
81
67
  - spec/site/xxx/params.erb
82
68
  - spec/site/yyy/index.html
83
69
  - spec/spec_helper.rb
84
- has_rdoc: true
85
70
  homepage: http://github.com/grosser/rhr
86
71
  licenses: []
87
-
88
72
  post_install_message:
89
73
  rdoc_options: []
90
-
91
- require_paths:
74
+ require_paths:
92
75
  - lib
93
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ required_ruby_version: !ruby/object:Gem::Requirement
94
77
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ segments:
100
83
  - 0
101
- version: "0"
102
- required_rubygems_version: !ruby/object:Gem::Requirement
84
+ hash: -943244397
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
86
  none: false
104
- requirements:
105
- - - ">="
106
- - !ruby/object:Gem::Version
107
- hash: 3
108
- segments:
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ segments:
109
92
  - 0
110
- version: "0"
93
+ hash: -943244397
111
94
  requirements: []
112
-
113
95
  rubyforge_project:
114
- rubygems_version: 1.6.2
96
+ rubygems_version: 1.8.10
115
97
  signing_key:
116
98
  specification_version: 3
117
99
  summary: Ruby Hypertext Refinement -- the ease of PHP with the elegance of Ruby
118
100
  test_files: []
119
-
@@ -1 +0,0 @@
1
- xxx