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.
- data/lib/smartgen_action_view.rb +6 -0
- data/lib/smartgen_action_view/action_view_processor.rb +46 -0
- data/lib/smartgen_action_view/engine.rb +20 -0
- data/lib/smartgen_action_view/pre_processor.rb +6 -26
- data/lib/smartgen_action_view/version.rb +1 -1
- data/spec/lib/engine_spec.rb +38 -0
- metadata +11 -7
data/lib/smartgen_action_view.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
33
|
-
|
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
|
@@ -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.
|
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: &
|
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: *
|
25
|
+
version_requirements: *2161521700
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: actionpack
|
28
|
-
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: *
|
36
|
+
version_requirements: *2161521200
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
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: *
|
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
|