waves 0.8.2 → 0.9.0

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.
Files changed (166) hide show
  1. data/bin/waves +4 -3
  2. data/doc/VERSION +1 -1
  3. data/lib/waves.rb +52 -40
  4. data/lib/{caches → waves/caches}/file.rb +3 -1
  5. data/lib/waves/caches/memcached.rb +56 -0
  6. data/lib/{caches → waves/caches}/simple.rb +6 -7
  7. data/lib/{caches → waves/caches}/synchronized.rb +15 -1
  8. data/lib/{commands → waves/commands}/console.rb +4 -4
  9. data/lib/{commands → waves/commands}/generate.rb +6 -5
  10. data/lib/{commands → waves/commands}/help.rb +0 -0
  11. data/lib/{commands → waves/commands}/server.rb +1 -1
  12. data/lib/{dispatchers → waves/dispatchers}/base.rb +17 -31
  13. data/lib/waves/dispatchers/default.rb +19 -0
  14. data/lib/{ext → waves/ext}/float.rb +0 -0
  15. data/lib/{ext → waves/ext}/hash.rb +0 -0
  16. data/lib/{ext → waves/ext}/integer.rb +16 -1
  17. data/lib/{ext → waves/ext}/kernel.rb +3 -7
  18. data/lib/{ext → waves/ext}/module.rb +3 -3
  19. data/lib/{ext → waves/ext}/object.rb +2 -0
  20. data/lib/waves/ext/string.rb +73 -0
  21. data/lib/{ext → waves/ext}/symbol.rb +0 -1
  22. data/lib/{ext → waves/ext}/tempfile.rb +0 -0
  23. data/lib/waves/ext/time.rb +5 -0
  24. data/lib/{foundations → waves/foundations}/classic.rb +9 -21
  25. data/lib/{foundations → waves/foundations}/compact.rb +15 -20
  26. data/lib/waves/foundations/rest.rb +311 -0
  27. data/lib/waves/helpers/basic.rb +13 -0
  28. data/lib/{helpers → waves/helpers}/doc_type.rb +3 -0
  29. data/lib/waves/helpers/form.rb +94 -0
  30. data/lib/waves/helpers/formatting.rb +14 -0
  31. data/lib/waves/layers/mvc.rb +65 -0
  32. data/lib/{layers → waves/layers}/mvc/controllers.rb +0 -0
  33. data/lib/{layers → waves/layers}/mvc/extensions.rb +23 -11
  34. data/lib/{layers → waves/layers}/orm/migration.rb +0 -0
  35. data/lib/{layers → waves/layers}/orm/providers/active_record.rb +2 -5
  36. data/lib/{layers → waves/layers}/orm/providers/active_record/migrations/empty.rb.erb +0 -0
  37. data/lib/{layers → waves/layers}/orm/providers/active_record/tasks/generate.rb +1 -1
  38. data/lib/{layers → waves/layers}/orm/providers/active_record/tasks/schema.rb +1 -1
  39. data/lib/{layers → waves/layers}/orm/providers/data_mapper.rb +0 -0
  40. data/lib/{layers → waves/layers}/orm/providers/filebase.rb +0 -0
  41. data/lib/{layers → waves/layers}/orm/providers/sequel.rb +28 -29
  42. data/lib/{layers → waves/layers}/orm/providers/sequel/migrations/empty.rb.erb +0 -0
  43. data/lib/{layers → waves/layers}/orm/providers/sequel/tasks/generate.rb +1 -1
  44. data/lib/{layers → waves/layers}/orm/providers/sequel/tasks/schema.rb +2 -0
  45. data/lib/waves/layers/rack/rack_cache.rb +32 -0
  46. data/lib/waves/layers/renderers/erubis.rb +52 -0
  47. data/lib/waves/layers/renderers/haml.rb +67 -0
  48. data/lib/waves/layers/renderers/markaby.rb +41 -0
  49. data/lib/waves/layers/text/inflect/english.rb +42 -0
  50. data/lib/waves/matchers/accept.rb +47 -0
  51. data/lib/waves/matchers/ext.rb +27 -0
  52. data/lib/waves/matchers/path.rb +72 -0
  53. data/lib/waves/matchers/query.rb +43 -0
  54. data/lib/waves/matchers/request.rb +86 -0
  55. data/lib/waves/matchers/requested.rb +31 -0
  56. data/lib/{matchers → waves/matchers}/resource.rb +8 -1
  57. data/lib/waves/matchers/traits.rb +30 -0
  58. data/lib/waves/matchers/uri.rb +69 -0
  59. data/lib/waves/media/mime_types.rb +542 -0
  60. data/lib/waves/renderers/mixin.rb +9 -0
  61. data/lib/waves/request/accept.rb +92 -0
  62. data/lib/{runtime → waves/request}/request.rb +77 -61
  63. data/lib/waves/resources/file_mixin.rb +11 -0
  64. data/lib/{resources → waves/resources}/mixin.rb +42 -44
  65. data/lib/waves/resources/paths.rb +132 -0
  66. data/lib/waves/response/client_errors.rb +10 -0
  67. data/lib/waves/response/packaged.rb +19 -0
  68. data/lib/waves/response/redirects.rb +35 -0
  69. data/lib/{runtime → waves/response}/response.rb +29 -11
  70. data/lib/{runtime → waves/response}/response_mixin.rb +30 -17
  71. data/lib/waves/runtime/applications.rb +18 -0
  72. data/lib/{runtime → waves/runtime}/configuration.rb +31 -25
  73. data/lib/waves/runtime/console.rb +24 -0
  74. data/lib/{runtime → waves/runtime}/logger.rb +3 -3
  75. data/lib/{runtime → waves/runtime}/mocks.rb +2 -2
  76. data/lib/waves/runtime/rackup.rb +37 -0
  77. data/lib/waves/runtime/runtime.rb +48 -0
  78. data/lib/waves/runtime/server.rb +33 -0
  79. data/lib/{servers → waves/servers}/base.rb +0 -0
  80. data/lib/{servers → waves/servers}/mongrel.rb +0 -0
  81. data/lib/{servers → waves/servers}/webrick.rb +0 -0
  82. data/lib/{tasks → waves/tasks}/gem.rb +0 -0
  83. data/lib/{tasks → waves/tasks}/generate.rb +0 -0
  84. data/lib/waves/views/cassy.rb +173 -0
  85. data/lib/{views → waves/views}/errors.rb +8 -7
  86. data/lib/waves/views/mixin.rb +23 -0
  87. data/lib/waves/views/templated.rb +40 -0
  88. data/samples/basic/basic_startup.rb +70 -0
  89. data/samples/basic/config.ru +9 -0
  90. data/samples/blog/configurations/development.rb +17 -16
  91. data/samples/blog/configurations/production.rb +0 -11
  92. data/samples/blog/resources/entry.rb +3 -3
  93. data/samples/blog/resources/map.rb +10 -3
  94. data/samples/blog/startup.rb +4 -3
  95. data/templates/classic/Rakefile +28 -29
  96. data/templates/classic/configurations/default.rb.erb +8 -3
  97. data/templates/classic/configurations/development.rb.erb +1 -20
  98. data/templates/classic/configurations/production.rb.erb +2 -16
  99. data/templates/classic/public/images/favicon.ico +0 -0
  100. data/templates/classic/resources/server.rb.erb +9 -0
  101. data/templates/classic/startup.rb.erb +3 -3
  102. data/templates/classic/views/css.rb.erb +14 -0
  103. data/templates/classic/views/default.rb.erb +17 -0
  104. data/templates/classic/views/errors.rb.erb +10 -0
  105. data/templates/classic/views/pages.rb.erb +14 -0
  106. data/templates/compact/startup.rb.erb +8 -3
  107. data/test/ext/object.rb +55 -0
  108. data/test/ext/shortcuts.rb +73 -0
  109. data/test/helpers.rb +17 -0
  110. data/test/match/accept.rb +78 -0
  111. data/test/match/ext.rb +156 -0
  112. data/test/match/methods.rb +22 -0
  113. data/test/match/params.rb +33 -0
  114. data/test/match/path.rb +106 -0
  115. data/test/match/query.rb +60 -0
  116. data/test/match/request.rb +91 -0
  117. data/test/match/requested.rb +149 -0
  118. data/test/match/uri.rb +136 -0
  119. data/test/process/request.rb +75 -0
  120. data/test/process/resource.rb +53 -0
  121. data/test/resources/path.rb +166 -0
  122. data/test/runtime/configurations.rb +19 -0
  123. data/test/runtime/request.rb +63 -0
  124. data/test/runtime/response.rb +85 -0
  125. data/test/views/views.rb +40 -0
  126. metadata +243 -157
  127. data/lib/caches/memcached.rb +0 -40
  128. data/lib/dispatchers/default.rb +0 -25
  129. data/lib/ext/string.rb +0 -20
  130. data/lib/helpers/basic.rb +0 -11
  131. data/lib/helpers/extended.rb +0 -21
  132. data/lib/helpers/form.rb +0 -42
  133. data/lib/helpers/formatting.rb +0 -30
  134. data/lib/helpers/layouts.rb +0 -37
  135. data/lib/helpers/model.rb +0 -37
  136. data/lib/helpers/view.rb +0 -22
  137. data/lib/layers/inflect/english.rb +0 -67
  138. data/lib/layers/mvc.rb +0 -54
  139. data/lib/layers/renderers/erubis.rb +0 -60
  140. data/lib/layers/renderers/haml.rb +0 -47
  141. data/lib/layers/renderers/markaby.rb +0 -29
  142. data/lib/matchers/accept.rb +0 -21
  143. data/lib/matchers/base.rb +0 -30
  144. data/lib/matchers/content_type.rb +0 -17
  145. data/lib/matchers/path.rb +0 -67
  146. data/lib/matchers/query.rb +0 -21
  147. data/lib/matchers/request.rb +0 -27
  148. data/lib/matchers/traits.rb +0 -19
  149. data/lib/matchers/uri.rb +0 -20
  150. data/lib/renderers/mixin.rb +0 -36
  151. data/lib/resources/paths.rb +0 -34
  152. data/lib/runtime/console.rb +0 -23
  153. data/lib/runtime/mime_types.rb +0 -536
  154. data/lib/runtime/monitor.rb +0 -32
  155. data/lib/runtime/runtime.rb +0 -67
  156. data/lib/runtime/server.rb +0 -20
  157. data/lib/runtime/session.rb +0 -27
  158. data/lib/runtime/worker.rb +0 -86
  159. data/lib/views/mixin.rb +0 -62
  160. data/samples/blog/blog.db +0 -0
  161. data/samples/blog/log/waves.production +0 -3
  162. data/templates/classic/resources/map.rb.erb +0 -8
  163. data/templates/classic/templates/errors/not_found_404.mab +0 -7
  164. data/templates/classic/templates/errors/server_error_500.mab +0 -7
  165. data/templates/classic/templates/layouts/default.mab +0 -14
  166. data/templates/classic/tmp/sessions/.gitignore +0 -0
@@ -1,40 +0,0 @@
1
- require 'memcached'
2
- module Waves
3
- module Caches
4
- class Memcached < Simple
5
-
6
- def initialize( args )
7
- raise ArgumentError, ":servers is nil" if args[ :servers ].nil?
8
- @cache = ::Memcached.new( args[ :servers ], args[ :options ] || {} )
9
- end
10
-
11
- def store( key,value, ttl = 0, marshal = true )
12
- cache = @cache.clone; cache.add( key.to_s, value, ttl, marshal ); cache.destroy
13
- end
14
-
15
- def fetch( key )
16
- cache = @cache.clone; cache.get( key.to_s ); cache.destroy
17
- rescue ::Memcached::NotFound => e
18
- nil
19
- end
20
-
21
- def delete( key )
22
- cache = @cache.clone; cache.delete( key.to_s ); cache.destroy
23
- end
24
-
25
- def clear
26
- cache = @cache.clone; cache.flush; cache.destroy
27
- end
28
-
29
- end
30
-
31
- class SynchronizedMemcached < Synchronized
32
-
33
- def initialize( args )
34
- super( Memcached.new( args ) )
35
- end
36
-
37
- end
38
-
39
- end
40
- end
@@ -1,25 +0,0 @@
1
- module Waves
2
-
3
- module Dispatchers
4
-
5
- class Default < Base
6
-
7
- # Takes a Waves::Request and returns a Waves::Response
8
- def safe( request )
9
- # set a default content type -- this can be overridden by the resource
10
- request.response.content_type = request.accept.default
11
- resource = Waves.config.resource.new( request )
12
- if request.response.body.empty?
13
- request.response.body << resource.process.to_s
14
- else
15
- resource.process
16
- end
17
- # okay, we've handled the request, now write the response unless it was already done
18
- request.response.finish
19
- end
20
-
21
- end
22
-
23
- end
24
-
25
- end
data/lib/ext/string.rb DELETED
@@ -1,20 +0,0 @@
1
- # Utility methods mixed into String.
2
-
3
- class String
4
-
5
- # Syntactic sugar for using File.join to concatenate the argument to the receiver.
6
- #
7
- # require "lib" / "utilities" / "string"
8
- #
9
- # The idea is not original, but we can't remember where we first saw it.
10
- # Waves::Ext::Symbol defines the same method, allowing for :files / 'afilename.txt'
11
- #
12
-
13
- def / ( s ) ; File.join( self, s.to_s ); end
14
-
15
- alias_method :lower_camel_case, :subcamelcase
16
- alias_method :camel_case, :camelcase
17
- alias_method :snake_case, :snakecase
18
- alias_method :title_case, :titlecase
19
-
20
- end
data/lib/helpers/basic.rb DELETED
@@ -1,11 +0,0 @@
1
- module Waves
2
- module Helpers
3
- module Basic
4
- attr_reader :request
5
- include Waves::ResponseMixin
6
-
7
- def app ; Waves.main ; end
8
-
9
- end
10
- end
11
- end
@@ -1,21 +0,0 @@
1
- require 'helpers/basic'
2
- require 'helpers/doc_type'
3
- require 'helpers/layouts'
4
- require 'helpers/formatting'
5
- require 'helpers/model'
6
- require 'helpers/view'
7
- require 'helpers/form'
8
-
9
- module Waves
10
- module Helpers
11
- module Extended
12
- include Waves::Helpers::Basic
13
- include Waves::Helpers::DocType
14
- include Waves::Helpers::Layouts
15
- include Waves::Helpers::Formatting
16
- include Waves::Helpers::Model
17
- include Waves::Helpers::View
18
- include Waves::Helpers::Form
19
- end
20
- end
21
- end
data/lib/helpers/form.rb DELETED
@@ -1,42 +0,0 @@
1
- module Waves
2
-
3
- module Helpers
4
-
5
- # Form helpers are used in generating forms. Since Markaby already provides Ruby
6
- # methods for basic form generation, the focus of this helper is on providing templates
7
- # to handle things that go beyond the basics. You must define a form template
8
- # directory with templates for each type of form element you wish to use. The names
9
- # of the template should match the +type+ option provided in the property method.
10
- #
11
- # For example, this code:
12
- #
13
- # property :name => 'blog.title', :type => :text, :value => @blog.title
14
- #
15
- # will invoke the +text+ form view (the template in +templates/form/text.mab+),
16
- # passing in the name ('blog.title') and the value (@blog.title) as instance variables.
17
- #
18
- # These helpers work best with Markaby, but may work for other Renderers.
19
- #
20
-
21
- module Form
22
-
23
- # This method really is a place-holder for common wrappers around groups of
24
- # properties. You will usually want to override this. As is, it simply places
25
- # a DIV element with class 'properties' around the block.
26
- def properties(&block)
27
- div.properties do
28
- yield
29
- end
30
- end
31
-
32
- # Invokes the form view for the +type+ given in the option.
33
- def property( options )
34
- self << view( :form, options[:type], options )
35
- end
36
-
37
-
38
- end
39
-
40
- end
41
-
42
- end
@@ -1,30 +0,0 @@
1
- require 'redcloth'
2
- module Waves
3
- module Helpers
4
-
5
- # Formatting helpers are used to convert specialized content, like Markaby or
6
- # Textile, into valid HTML. It also provides common escaping functions.
7
- module Formatting
8
-
9
- # Escape a string as HTML content.
10
- def escape_html(s); Rack::Utils.escape_html(s); end
11
-
12
- # Escape a URI, converting quotes and spaces and so on.
13
- def escape_uri(s); Rack::Utils.escape(s); end
14
-
15
- # Treat content as Markaby and evaluate (only works within a Markaby template).
16
- # Used to pull Markaby content from a file or database into a Markaby template.
17
- def markaby( content ); self << eval( content ); end
18
-
19
- # Treat content as Textile.
20
- def textile( content )
21
- return if content.nil? or content.empty?
22
- #( ::RedCloth::TEXTILE_TAGS << [ 96.chr, '&8216;'] ).each do |pat,ent|
23
- # content.gsub!( pat, ent.gsub('&','&#') )
24
- #end
25
- self << ::RedCloth.new( content ).to_html
26
- end
27
-
28
- end
29
- end
30
- end
@@ -1,37 +0,0 @@
1
- module Waves
2
-
3
- module Helpers
4
-
5
- module Layouts
6
-
7
- # Invokes a layout view (i.e., a view from the layouts template directory), using
8
- # the assigns parameter to define instance variables for the view. The block is
9
- # evaluated and also passed into the view as the +layout_content+ instance variable.
10
- #
11
- # You can define a layout just by creating a template and then calling the
12
- # +layout_content+ accessor when you want to embed the caller's content.
13
- #
14
- # == Example
15
- #
16
- # doctype :html4_transitional
17
- # html do
18
- # title @title # passed as an assigns parameter
19
- # end
20
- # body do
21
- # layout_content
22
- # end
23
- #
24
- def layout( name, assigns = {}, &block )
25
- assigns[ :layout_content ] = capture(&block)
26
- self << Waves.main::Views[:layouts].process( request ) do
27
- send( name, assigns )
28
- end
29
- end
30
-
31
- def layout_content
32
- self << @layout_content
33
- end
34
-
35
- end
36
- end
37
- end
data/lib/helpers/model.rb DELETED
@@ -1,37 +0,0 @@
1
- module Waves
2
- module Helpers
3
-
4
- # Model helpers allow you to directly access a model from within a view.
5
- # This is useful when creating things like select boxes that need data
6
- # from anther model. For example, a Markaby select box for authors might look like:
7
- #
8
- # select do
9
- # all(:user).each do |user|
10
- # option user.full_name, :value => user.id
11
- # end
12
- # end
13
- #
14
- # You could also use these within a view class to keep model-based logic out
15
- # of the templates themselves. For example, in the view class you might define
16
- # a method called +authors+ that returns an array of name / id pairs. This could
17
- # then be called from the template instead of the model helper.
18
- #
19
- module Model
20
-
21
- def model( name )
22
- Waves.main::Models[ name ][ domain ]
23
- end
24
-
25
- # Just like model.all. Returns all the instances of that model.
26
- def all( model )
27
- model( model ).all
28
- end
29
-
30
- # Finds a specific instance using the name field
31
- def find( model, name )
32
- model( model )[name ] rescue nil
33
- end
34
-
35
- end
36
- end
37
- end
data/lib/helpers/view.rb DELETED
@@ -1,22 +0,0 @@
1
- module Waves
2
- module Helpers
3
-
4
- # View helpers are intended to help reuse views from within other views.
5
- # Both the +layout+ method in the common helpers and the +property+ method
6
- # of the form helpers are specialized instance of this.
7
- #
8
- # The star of our show here is the +view+ method. This takes a model, view,
9
- # and assigns hash (which are converted into instance variables in the target
10
- # view) and returns the result of evaluating the view as content in the current
11
- # template.
12
- module View
13
-
14
- # Invokes the view for the given model, passing the assigns as instance variables.
15
- def view( model, view, assigns = {} )
16
- self << Waves.main::Views[ model ].new( request ).send( view, assigns )
17
- end
18
-
19
-
20
- end
21
- end
22
- end
@@ -1,67 +0,0 @@
1
- module Waves
2
- module Layers
3
- module Inflect
4
-
5
- # Adds plural/singular methods for English to String
6
- module English
7
-
8
- def self.included(app)
9
-
10
- require 'english/inflect'
11
-
12
- Waves::Resources::Mixin::ClassMethods.module_eval do
13
- def singular ; basename.snake_case.singular ; end
14
- def plural ; basename.snake_case.plural ; end
15
- end
16
-
17
- Waves::Resources::Mixin.module_eval do
18
- def singular ; self.class.singular ; end
19
- def plural ; self.class.plural ; end
20
- end
21
-
22
- Waves::Resources::Paths.module_eval do
23
- def resource ; self.class.resource.singular ; end
24
- def resources ; self.class.resource.plural ; end
25
-
26
- # TODO: be nice to DRY this up ... basically the same code
27
- # as the mixin except with the singular / plural stuff
28
- # mixed in ...
29
- def generate( template, args )
30
- return "/#{ args * '/' }" unless template.is_a?( Array ) and not template.empty?
31
- path = []
32
- ( "/#{ path * '/' }" ) if template.all? do | want |
33
- case want
34
- when true then path += args
35
- when String then path << want
36
- when Symbol
37
- case want
38
- when :resource then path << resource
39
- when :resources then path << resources
40
- else path << args.shift
41
- end
42
- when Regexp then path << args.shift
43
- when Hash
44
- key, value = want.to_a.first
45
- case key
46
- when :resource then path << resource
47
- when :resources then path << resources
48
- else
49
- case value
50
- when true then path += args
51
- when String, Symbol, RegExp then path << args.unshift
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
58
-
59
- end
60
-
61
- end
62
- end
63
- end
64
- end
65
-
66
-
67
-
data/lib/layers/mvc.rb DELETED
@@ -1,54 +0,0 @@
1
- module Waves
2
- module Layers
3
- module MVC
4
-
5
- def self.included( app )
6
-
7
- require 'layers/mvc/extensions'
8
- require 'layers/mvc/controllers'
9
-
10
- app.auto_create_module( :Models ) do
11
- include AutoCode
12
- auto_create_class :Default
13
- auto_load :Default, :directories => [ :models ]
14
- end
15
-
16
- app.auto_eval( :Models ) do
17
- auto_create_class true, app::Models::Default
18
- auto_load true, :directories => [ :models ]
19
- end
20
-
21
- app.auto_create_module( :Views ) do
22
- include AutoCode
23
- auto_create_class :Default, Waves::Views::Base
24
- auto_load :Default, :directories => [ :views ]
25
- end
26
-
27
- app.auto_eval( :Views ) do
28
- auto_create_class true, app::Views::Default
29
- auto_load true, :directories => [ :views ]
30
- end
31
-
32
- app.auto_create_module( :Controllers ) do
33
- include AutoCode
34
- auto_create_class :Default, Waves::Controllers::Base
35
- auto_load :Default, :directories => [ :controllers ]
36
- end
37
-
38
- app.auto_eval( :Controllers ) do
39
- auto_create_class true, app::Controllers::Default
40
- auto_load true, :directories => [ :controllers ]
41
- end
42
-
43
- app.auto_create_module( :Helpers ) do
44
- include AutoCode
45
- auto_create_module( :Default ) { include Waves::Helpers::Extended }
46
- auto_load :Default, :directories => [ :helpers ]
47
- auto_create_module( true ) { include app::Helpers::Default }
48
- auto_load true, :directories => [ :helpers ]
49
- end
50
-
51
- end
52
- end
53
- end
54
- end
@@ -1,60 +0,0 @@
1
- require 'erubis'
2
-
3
- module Erubis # :nodoc:
4
-
5
- # This is added to the Erubis Content class to allow the same helper methods
6
- # to be used with both Markaby and Erubis.
7
- class Context
8
-
9
- def <<(s)
10
- eval("_buf << '#{s}'", @binding)
11
- end
12
-
13
- def capture
14
- eval("_context.push(_buf); _buf = ''", @binding) #ignore output from that eval, will be added via "<<"
15
- result = Erubis::Eruby.new(yield).result @binding
16
- eval("_buf = _context.pop", @binding)
17
- result
18
- end
19
-
20
- def to_s(eruby)
21
- unless @binding
22
- @binding = binding
23
- eval("_buf = ''; _context = []", @binding)
24
- end
25
- eruby.result @binding
26
- end
27
-
28
- end
29
-
30
- end
31
-
32
- module Waves
33
-
34
- module Renderers
35
-
36
- module Erubis
37
-
38
- Extension = :erb
39
-
40
- extend Waves::Renderers::Mixin
41
-
42
- def self.render( path, assigns )
43
- eruby = ::Erubis::Eruby.new( template( path ) )
44
- helper = helper( path )
45
- context = ::Erubis::Context.new
46
- context.meta_eval { include( helper ) ; }
47
- context.instance_eval do
48
- assigns.each do |key,val|
49
- instance_variable_set("@#{key}",val)
50
- end
51
- end
52
- context.to_s(eruby)
53
- end
54
-
55
-
56
- end
57
-
58
- end
59
-
60
- end