summaryrefslogtreecommitdiff
path: root/spec/ruby/library/erb/defmethod
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/library/erb/defmethod')
-rw-r--r--spec/ruby/library/erb/defmethod/def_erb_method_spec.rb66
1 files changed, 66 insertions, 0 deletions
diff --git a/spec/ruby/library/erb/defmethod/def_erb_method_spec.rb b/spec/ruby/library/erb/defmethod/def_erb_method_spec.rb
new file mode 100644
index 0000000000..1cd7582936
--- /dev/null
+++ b/spec/ruby/library/erb/defmethod/def_erb_method_spec.rb
@@ -0,0 +1,66 @@
+require 'erb'
+require_relative '../../../spec_helper'
+require_relative '../fixtures/classes'
+
+describe "ERB::DefMethod.def_erb_method" do
+
+
+ input = <<'END'
+<% for item in @items %>
+<b><%= item %></b>
+<% end %>
+END
+
+
+ it "define method to render eRuby file as an instance method of current module" do
+ expected = <<'END'
+
+<b>10</b>
+
+<b>20</b>
+
+<b>30</b>
+
+END
+ #
+ begin
+ file = tmp('_example.rhtml')
+ File.open(file, 'w') {|f| f.write(input) }
+ klass = Class.new do
+ extend ERB::DefMethod
+ def_erb_method('render()', file)
+ def initialize(items)
+ @items = items
+ end
+ end
+ klass.new([10,20,30]).render().should == expected
+ ensure
+ rm_r file
+ end
+
+ end
+
+
+ it "define method to render eRuby object as an instance method of current module" do
+ expected = <<'END'
+<b>10</b>
+<b>20</b>
+<b>30</b>
+END
+ #
+ MY_INPUT4_FOR_ERB = input
+ class MyClass4ForErb
+ extend ERB::DefMethod
+ erb = ERBSpecs.new_erb(MY_INPUT4_FOR_ERB, trim_mode: '<>')
+ def_erb_method('render()', erb)
+ def initialize(items)
+ @items = items
+ end
+ end
+ MyClass4ForErb.new([10,20,30]).render().should == expected
+ ensure
+ Object.send(:remove_const, :MY_INPUT4_FOR_ERB)
+ end
+
+
+end