smartgen_action_view 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,11 +1,17 @@
1
+ require 'tempfile'
2
+
1
3
  require 'action_controller'
2
4
  require 'action_view'
3
5
 
4
6
  require 'smartgen'
5
7
 
6
8
  require File.expand_path(File.join('smartgen_action_view/renderer'), File.dirname(__FILE__))
9
+ require File.expand_path(File.join('smartgen_action_view/action_view_processor'), File.dirname(__FILE__))
10
+ require File.expand_path(File.join('smartgen_action_view/engine'), File.dirname(__FILE__))
7
11
  require File.expand_path(File.join('smartgen_action_view/pre_processor'), File.dirname(__FILE__))
8
12
 
13
+ Smartgen::MarkupFile.register(Smartgen::Engine::ActionView)
14
+
9
15
  Smartgen::Engine::Textile.register(Smartgen::Engine::ActionViewPreProcessor.new)
10
16
  Smartgen::Engine::Markdown.register(Smartgen::Engine::ActionViewPreProcessor.new)
11
17
  Smartgen::Engine::ERB.register(Smartgen::Engine::ActionViewPreProcessor.new)
@@ -0,0 +1,46 @@
1
+ module Smartgen
2
+ module Engine
3
+ module ActionViewProcessor
4
+ attr_accessor :tempfile
5
+
6
+ module DefaultHelpers
7
+ attr_accessor :metadata
8
+ end
9
+
10
+ def process_template(body, metadata)
11
+ create_tempfile_with(body)
12
+
13
+ view = ::ActionView::Base.new File.dirname(tempfile.path)
14
+ view.extend(DefaultHelpers)
15
+ view.metadata = metadata
16
+
17
+ result = view.render :file => tempfile.path
18
+ setup_content_for(view, metadata)
19
+ result
20
+ ensure
21
+ tempfile.close! if tempfile
22
+ end
23
+
24
+ private
25
+
26
+ def create_tempfile_with(body)
27
+ self.tempfile = Tempfile.new 'smartgen'
28
+ tempfile.write body
29
+ tempfile.rewind
30
+ end
31
+
32
+ def setup_content_for(view, metadata)
33
+ metadata.content_for = Smartgen::ObjectHash.new unless metadata.has_key?(:content_for)
34
+ metadata.content_for.merge!(process_content_for(view, metadata))
35
+ end
36
+
37
+ def process_content_for(view, metadata)
38
+ view.instance_variable_get('@_content_for').inject({}) do |result, item|
39
+ name, contents = item
40
+ result[name] = process_by_engine(contents, metadata)
41
+ result
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,20 @@
1
+ module Smartgen
2
+ module Engine
3
+ class ActionView < Base
4
+ include ActionViewProcessor
5
+
6
+ protected
7
+ def parse(body, metadata)
8
+ process_template(body, metadata)
9
+ end
10
+
11
+ def extensions
12
+ @extensions ||= ['.erb']
13
+ end
14
+
15
+ def process_by_engine(contents, metadata)
16
+ process_without_pre_processors(contents, metadata).html_safe
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,38 +3,18 @@ require 'tempfile'
3
3
  module Smartgen
4
4
  module Engine
5
5
  class ActionViewPreProcessor
6
+ include ActionViewProcessor
7
+
6
8
  attr_accessor :engine
7
- attr_accessor :tempfile
8
9
 
9
10
  def process(body, metadata)
10
- create_tempfile_with(body)
11
- view = ::ActionView::Base.new File.dirname(tempfile.path)
12
- result = view.render :file => tempfile.path
13
- setup_content_for(view, metadata)
14
- result
15
- ensure
16
- tempfile.close! if tempfile
11
+ process_template(body, metadata)
17
12
  end
18
13
 
19
- private
20
-
21
- def create_tempfile_with(body)
22
- self.tempfile = Tempfile.new 'smartgen'
23
- tempfile.write body
24
- tempfile.rewind
25
- end
26
-
27
- def setup_content_for(view, metadata)
28
- metadata.content_for = Smartgen::ObjectHash.new unless metadata.has_key?(:content_for)
29
- metadata.content_for.merge!(process_content_for(view, metadata))
30
- end
14
+ protected
31
15
 
32
- def process_content_for(view, metadata)
33
- view.instance_variable_get('@_content_for').inject({}) do |result, item|
34
- name, contents = item
35
- result[name] = engine.process_without_pre_processors(contents, metadata).html_safe
36
- result
37
- end
16
+ def process_by_engine(contents, metadata)
17
+ engine.process_without_pre_processors(contents, metadata).html_safe
38
18
  end
39
19
  end
40
20
  end
@@ -1,3 +1,3 @@
1
1
  module SmartgenActionView
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,38 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Smartgen::Engine::ActionView do
5
+ let :body do
6
+ "2 + 2 = <%= 2 * 2 %>"
7
+ end
8
+
9
+ let :contents do
10
+ "2 + 2 = 4"
11
+ end
12
+
13
+ it "should process body using ERB" do
14
+ subject.process(body).should == contents
15
+ end
16
+
17
+ it "should support .erb extension" do
18
+ should be_supported('.erb')
19
+ end
20
+
21
+ context "with metadata" do
22
+ let :body do
23
+ "Some metadata: <%= metadata.name %>"
24
+ end
25
+
26
+ let :contents do
27
+ "Some metadata: #{metadata.name}"
28
+ end
29
+
30
+ let :metadata do
31
+ Smartgen::ObjectHash.new :name => 'Vicente'
32
+ end
33
+
34
+ it "should process body using ERB" do
35
+ subject.process(body, metadata).should == contents
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartgen_action_view
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: smartgen
17
- requirement: &2161521780 !ruby/object:Gem::Requirement
17
+ requirement: &2161521700 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.6.0.beta
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2161521780
25
+ version_requirements: *2161521700
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: actionpack
28
- requirement: &2161521280 !ruby/object:Gem::Requirement
28
+ requirement: &2161521200 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 3.0.4
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2161521280
36
+ version_requirements: *2161521200
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec
39
- requirement: &2161520820 !ruby/object:Gem::Requirement
39
+ requirement: &2161520740 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: 2.3.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2161520820
47
+ version_requirements: *2161520740
48
48
  description: This gem gives you all the power of ActionView when rendering files in
49
49
  smartgen, such as using partials, helpers, etc.
50
50
  email:
@@ -61,6 +61,8 @@ files:
61
61
  - README.md
62
62
  - Rakefile
63
63
  - lib/smartgen_action_view.rb
64
+ - lib/smartgen_action_view/action_view_processor.rb
65
+ - lib/smartgen_action_view/engine.rb
64
66
  - lib/smartgen_action_view/pre_processor.rb
65
67
  - lib/smartgen_action_view/renderer.rb
66
68
  - lib/smartgen_action_view/version.rb
@@ -78,6 +80,7 @@ files:
78
80
  - spec/fixtures/layout_with_markup_file.html.erb
79
81
  - spec/fixtures/layout_with_metadata.html.erb
80
82
  - spec/fixtures/layout_with_partial.html.erb
83
+ - spec/lib/engine_spec.rb
81
84
  - spec/lib/pre_processor_spec.rb
82
85
  - spec/lib/renderer_spec.rb
83
86
  - spec/spec_helper.rb
@@ -120,6 +123,7 @@ test_files:
120
123
  - spec/fixtures/layout_with_markup_file.html.erb
121
124
  - spec/fixtures/layout_with_metadata.html.erb
122
125
  - spec/fixtures/layout_with_partial.html.erb
126
+ - spec/lib/engine_spec.rb
123
127
  - spec/lib/pre_processor_spec.rb
124
128
  - spec/lib/renderer_spec.rb
125
129
  - spec/spec_helper.rb