Skip to content

Commit 5493b29

Browse files
committed
begin view object
1 parent 50a097d commit 5493b29

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

lib/tinyrails.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
require_relative 'tinyrails/util'
88
require_relative 'tinyrails/controller'
99
require_relative 'tinyrails/file_model'
10+
require_relative 'tinyrails/view'
1011

1112
module Tinyrails
1213
class Application

lib/tinyrails/controller.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def render_to_string(view_name, locals = {})
2525
filename = File.join 'app', 'views', controller_name, "#{view_name}.html.erb"
2626
template = File.read filename
2727
eruby = Erubis::Eruby.new(template)
28-
eruby.result locals.merge(env: env)
28+
eruby.result(view_object.instance_eval { binding })
2929
end
3030

3131
def response(text, status=200, headers={})
@@ -40,14 +40,20 @@ def get_response
4040
end
4141

4242
def render(view_name, locals={})
43+
view = Tinyrails::View.new(@env)
44+
4345
controller_vars = {}
4446
instance_variables.each do |var|
4547
next if var == :@env || var == :@request || var == :@response
46-
key = var.to_s.gsub('@', '').to_sym
47-
controller_vars[key] = instance_variable_get(var)
48+
value = instance_variable_get(var)
49+
view.isntance_variable_set(var, value)
50+
end
51+
52+
locals.each do |k, v|
53+
view.instance_variable_set("#{k}", v)
4854
end
4955

50-
response(render_to_string(view_name, locals.merge(controller_vars)))
56+
response(render_to_string(view_name, view))
5157
end
5258

5359
def request

lib/tinyrails/view.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Tinyrails
2+
class View
3+
def initialize(env)
4+
@env = env
5+
end
6+
7+
attr_accessor :env
8+
end
9+
end

0 commit comments

Comments
 (0)