deas-erbtags 0.2.0 → 0.3.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.
- data/README.md +30 -0
- data/lib/deas-erbtags.rb +2 -2
- data/lib/deas-erbtags/capture.rb +56 -0
- data/lib/deas-erbtags/link_to.rb +2 -2
- data/lib/deas-erbtags/version.rb +1 -1
- data/test/support/factory.rb +9 -0
- data/test/unit/capture_tests.rb +80 -0
- data/test/unit/deas-erbtags_tests.rb +1 -1
- data/test/unit/link_to_tests.rb +3 -3
- metadata +6 -6
- data/lib/deas-erbtags/capture_tag.rb +0 -37
- data/test/unit/capture_tag_tests.rb +0 -49
data/README.md
CHANGED
@@ -26,6 +26,10 @@ end
|
|
26
26
|
|
27
27
|
## Methods
|
28
28
|
|
29
|
+
```ruby
|
30
|
+
template_helpers(Deas::ErbTags::Tag)
|
31
|
+
```
|
32
|
+
|
29
33
|
All helper methods are based off of the basic `tag` method. Tag calls should be invoked with `<%= ... -%>`:
|
30
34
|
|
31
35
|
```erb
|
@@ -37,6 +41,10 @@ All helper methods are based off of the basic `tag` method. Tag calls should be
|
|
37
41
|
|
38
42
|
### `capture_tag`
|
39
43
|
|
44
|
+
```ruby
|
45
|
+
template_helpers(Deas::ErbTags::Capture)
|
46
|
+
```
|
47
|
+
|
40
48
|
The `capture_tag` method is used to create tags with nested erb markup. Like the `tag` method, it creates other tags with a similar API. Unlike the `tag` method, it takes a block that contains nested markup and does not take content as an arg. Capture tags should be invoked with the `<% ... %>`:
|
41
49
|
|
42
50
|
```erb
|
@@ -48,9 +56,27 @@ The `capture_tag` method is used to create tags with nested erb markup. Like th
|
|
48
56
|
|
49
57
|
**Note**: the convention is that if a tag method is called with a block, `capture_tag` will be used to generate the tag and it should be invoked with `<% ... %>`.
|
50
58
|
|
59
|
+
### `capture_render`
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
template_helpers(Deas::ErbTags::Capture)
|
63
|
+
```
|
64
|
+
|
65
|
+
The `capture_render` method is used to make Deas template `render` calls with nested erb markup. It calls `render` with the given args, and captures its output. Call it just as you would `render`, just invoke the call using `<% ... %>`.
|
66
|
+
|
67
|
+
### `capture_render`
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
template_helpers(Deas::ErbTags::Capture)
|
71
|
+
```
|
72
|
+
|
73
|
+
The `capture_partial` method is used to make Deas template `partial` calls with nested erb markup. It calls `partial` with the given args, and captures its output. Call it just as you would `partial`, just invoke the call using `<% ... %>`.
|
74
|
+
|
51
75
|
### `link_to`
|
52
76
|
|
53
77
|
```ruby
|
78
|
+
template_helpers(Deas::ErbTags::LinkTo)
|
79
|
+
|
54
80
|
link_to "http://google.com"
|
55
81
|
# => <a href="http://google.com">http://google.com</a>
|
56
82
|
|
@@ -64,6 +90,8 @@ link_to("http://google.com"){ tag(:span, 'google') }
|
|
64
90
|
### `mail_to`
|
65
91
|
|
66
92
|
```ruby
|
93
|
+
template_helpers(Deas::ErbTags::MailTo)
|
94
|
+
|
67
95
|
mail_to "me@domain.com"
|
68
96
|
# => <a href="mailto:me@domain.com">me@domain.com</a>
|
69
97
|
|
@@ -77,6 +105,8 @@ mail_to "me@domain.com", :disabled => true
|
|
77
105
|
### `image_tag`
|
78
106
|
|
79
107
|
```ruby
|
108
|
+
template_helpers(Deas::ErbTags::ImageTag)
|
109
|
+
|
80
110
|
image_tag '/logo.jpg' # => <img src="/logo.jpg" />
|
81
111
|
```
|
82
112
|
|
data/lib/deas-erbtags.rb
CHANGED
@@ -2,7 +2,7 @@ require 'deas-erbtags/version'
|
|
2
2
|
require 'deas-erbtags/utils'
|
3
3
|
|
4
4
|
require 'deas-erbtags/tag'
|
5
|
-
require 'deas-erbtags/
|
5
|
+
require 'deas-erbtags/capture'
|
6
6
|
require 'deas-erbtags/link_to'
|
7
7
|
require 'deas-erbtags/mail_to'
|
8
8
|
require 'deas-erbtags/image_tag'
|
@@ -14,7 +14,7 @@ module Deas::ErbTags
|
|
14
14
|
|
15
15
|
def self.included(receiver)
|
16
16
|
receiver.class_eval do
|
17
|
-
include Tag,
|
17
|
+
include Tag, Capture, LinkTo, MailTo, ImageTag
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'deas-erbtags/tag'
|
2
|
+
|
3
|
+
module Deas::ErbTags
|
4
|
+
module Capture
|
5
|
+
|
6
|
+
def self.included(receiver)
|
7
|
+
receiver.class_eval{ include Tag, Methods }
|
8
|
+
end
|
9
|
+
|
10
|
+
module Methods
|
11
|
+
|
12
|
+
def erb_outvar_name
|
13
|
+
self.sinatra_call.settings.erb[:outvar]
|
14
|
+
end
|
15
|
+
|
16
|
+
def erb_outvar
|
17
|
+
instance_variable_get(self.erb_outvar_name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def capture(content)
|
21
|
+
self.erb_outvar << "#{content}\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def capture_tag(name, *args, &content)
|
25
|
+
opts = args.last.kind_of?(::Hash) ? args.pop : {}
|
26
|
+
outvar = self.erb_outvar_name
|
27
|
+
captured_content = begin
|
28
|
+
orig_outvar = self.erb_outvar
|
29
|
+
instance_variable_set(outvar, "\n")
|
30
|
+
|
31
|
+
result = instance_eval(&content) if !content.nil?
|
32
|
+
|
33
|
+
if instance_variable_get(outvar) == "\n"
|
34
|
+
"\n#{result}"
|
35
|
+
else
|
36
|
+
instance_variable_get(outvar)
|
37
|
+
end
|
38
|
+
ensure
|
39
|
+
instance_variable_set(outvar, orig_outvar)
|
40
|
+
end
|
41
|
+
|
42
|
+
self.capture tag(name, "#{captured_content}\n", opts)
|
43
|
+
end
|
44
|
+
|
45
|
+
def capture_render(*args, &block)
|
46
|
+
self.capture self.render(*args, &block)
|
47
|
+
end
|
48
|
+
|
49
|
+
def capture_partial(*args, &block)
|
50
|
+
self.capture self.partial(*args, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
data/lib/deas-erbtags/link_to.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'deas-erbtags/tag'
|
2
|
-
require 'deas-erbtags/
|
2
|
+
require 'deas-erbtags/capture'
|
3
3
|
|
4
4
|
module Deas::ErbTags
|
5
5
|
module LinkTo
|
6
6
|
|
7
7
|
def self.included(receiver)
|
8
|
-
receiver.class_eval{ include Tag,
|
8
|
+
receiver.class_eval{ include Tag, Capture, Method }
|
9
9
|
end
|
10
10
|
|
11
11
|
module Method
|
data/lib/deas-erbtags/version.rb
CHANGED
data/test/support/factory.rb
CHANGED
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'deas-erbtags/tag'
|
3
|
+
require 'deas-erbtags/capture'
|
4
|
+
|
5
|
+
module Deas::ErbTags::Capture
|
6
|
+
|
7
|
+
class BaseTests < Assert::Context
|
8
|
+
desc "the `Capture` module"
|
9
|
+
setup do
|
10
|
+
@template = Factory.template(Deas::ErbTags::Capture)
|
11
|
+
end
|
12
|
+
subject{ @template }
|
13
|
+
|
14
|
+
should have_imeths :erb_outvar_name, :erb_outvar
|
15
|
+
should have_imeths :capture, :capture_tag, :capture_render, :capture_partial
|
16
|
+
|
17
|
+
should "include the `Tag` module" do
|
18
|
+
assert_includes Deas::ErbTags::Tag, subject.class.included_modules
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
class CaptureTagTests < BaseTests
|
24
|
+
|
25
|
+
should "create content by capturing content from a given block" do
|
26
|
+
div_div = subject.tag(:div, "\n#{subject.tag(:div, "\ninner\n")}\n\n", {
|
27
|
+
:id => 'outer'
|
28
|
+
}) + "\n"
|
29
|
+
buf_content_div = subject.capture_tag(:div, :id => 'outer') do
|
30
|
+
capture_tag(:div){ 'inner' }
|
31
|
+
end
|
32
|
+
|
33
|
+
assert_equal div_div, buf_content_div
|
34
|
+
end
|
35
|
+
|
36
|
+
should "create content by returning content from a given block" do
|
37
|
+
div_div = subject.tag(:div, "\n#{subject.tag(:div, "inner")}\n", {
|
38
|
+
:id => 'outer'
|
39
|
+
}) + "\n"
|
40
|
+
returned_content_div = subject.capture_tag(:div, :id => 'outer') do
|
41
|
+
tag(:div, 'inner')
|
42
|
+
end
|
43
|
+
|
44
|
+
assert_equal div_div, returned_content_div
|
45
|
+
end
|
46
|
+
|
47
|
+
should "create empty tags if no block given" do
|
48
|
+
empty_div = subject.tag(:div, "\n\n", :id => 'outer') + "\n"
|
49
|
+
assert_equal empty_div, subject.capture_tag(:div, :id => 'outer')
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
class CaptureRenderTests < BaseTests
|
55
|
+
|
56
|
+
should "capture output from Deas' template `render` call" do
|
57
|
+
exp_output = "#{subject.render('something')}\n"
|
58
|
+
assert_empty subject._out_buf
|
59
|
+
|
60
|
+
cap_output = subject.capture_render('something')
|
61
|
+
assert_equal exp_output, cap_output
|
62
|
+
assert_equal exp_output, subject._out_buf
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
class CapturePartialTests < BaseTests
|
68
|
+
|
69
|
+
should "capture output from Deas' template `partial` call" do
|
70
|
+
exp_output = "#{subject.partial('something')}\n"
|
71
|
+
assert_empty subject._out_buf
|
72
|
+
|
73
|
+
cap_output = subject.capture_partial('something')
|
74
|
+
assert_equal exp_output, cap_output
|
75
|
+
assert_equal exp_output, subject._out_buf
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/test/unit/link_to_tests.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'assert'
|
2
2
|
require 'deas-erbtags/tag'
|
3
|
-
require 'deas-erbtags/
|
3
|
+
require 'deas-erbtags/capture'
|
4
4
|
require 'deas-erbtags/link_to'
|
5
5
|
|
6
6
|
module Deas::ErbTags::LinkTo
|
@@ -18,8 +18,8 @@ module Deas::ErbTags::LinkTo
|
|
18
18
|
assert_includes Deas::ErbTags::Tag, subject.class.included_modules
|
19
19
|
end
|
20
20
|
|
21
|
-
should "include the `
|
22
|
-
assert_includes Deas::ErbTags::
|
21
|
+
should "include the `Capture` module" do
|
22
|
+
assert_includes Deas::ErbTags::Capture, subject.class.included_modules
|
23
23
|
end
|
24
24
|
|
25
25
|
should "create an anchor tag with no content or href" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deas-erbtags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -50,7 +50,7 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- deas-tags.gemspec
|
52
52
|
- lib/deas-erbtags.rb
|
53
|
-
- lib/deas-erbtags/
|
53
|
+
- lib/deas-erbtags/capture.rb
|
54
54
|
- lib/deas-erbtags/image_tag.rb
|
55
55
|
- lib/deas-erbtags/link_to.rb
|
56
56
|
- lib/deas-erbtags/mail_to.rb
|
@@ -60,7 +60,7 @@ files:
|
|
60
60
|
- log/.gitkeep
|
61
61
|
- test/helper.rb
|
62
62
|
- test/support/factory.rb
|
63
|
-
- test/unit/
|
63
|
+
- test/unit/capture_tests.rb
|
64
64
|
- test/unit/deas-erbtags_tests.rb
|
65
65
|
- test/unit/image_tag_tests.rb
|
66
66
|
- test/unit/link_to_tests.rb
|
@@ -104,7 +104,7 @@ summary: Deas template helpers for creating HTML tags using Erb.
|
|
104
104
|
test_files:
|
105
105
|
- test/helper.rb
|
106
106
|
- test/support/factory.rb
|
107
|
-
- test/unit/
|
107
|
+
- test/unit/capture_tests.rb
|
108
108
|
- test/unit/deas-erbtags_tests.rb
|
109
109
|
- test/unit/image_tag_tests.rb
|
110
110
|
- test/unit/link_to_tests.rb
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'deas-erbtags/tag'
|
2
|
-
|
3
|
-
module Deas::ErbTags
|
4
|
-
module CaptureTag
|
5
|
-
|
6
|
-
def self.included(receiver)
|
7
|
-
receiver.class_eval{ include Tag, Method }
|
8
|
-
end
|
9
|
-
|
10
|
-
module Method
|
11
|
-
|
12
|
-
def capture_tag(name, *args)
|
13
|
-
opts = args.last.kind_of?(::Hash) ? args.pop : {}
|
14
|
-
outvar = self.sinatra_call.settings.erb[:outvar]
|
15
|
-
captured_content = begin
|
16
|
-
orig_outvar = instance_variable_get(outvar)
|
17
|
-
instance_variable_set(outvar, "\n")
|
18
|
-
|
19
|
-
result = yield if block_given?
|
20
|
-
|
21
|
-
if instance_variable_get(outvar) == "\n"
|
22
|
-
"\n#{result}"
|
23
|
-
else
|
24
|
-
instance_variable_get(outvar)
|
25
|
-
end
|
26
|
-
ensure
|
27
|
-
instance_variable_set(outvar, orig_outvar)
|
28
|
-
end
|
29
|
-
|
30
|
-
tag_markup = tag(name, "#{captured_content}\n", opts)
|
31
|
-
instance_variable_get(outvar) << "#{tag_markup}\n"
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'assert'
|
2
|
-
require 'deas-erbtags/tag'
|
3
|
-
require 'deas-erbtags/capture_tag'
|
4
|
-
|
5
|
-
module Deas::ErbTags::CaptureTag
|
6
|
-
|
7
|
-
class BaseTests < Assert::Context
|
8
|
-
desc "the `CaptureTag` module"
|
9
|
-
setup do
|
10
|
-
@template = Factory.template(Deas::ErbTags::CaptureTag)
|
11
|
-
end
|
12
|
-
subject{ @template }
|
13
|
-
|
14
|
-
should have_imeth :capture_tag
|
15
|
-
|
16
|
-
should "include the `Tag` module" do
|
17
|
-
assert_includes Deas::ErbTags::Tag, subject.class.included_modules
|
18
|
-
end
|
19
|
-
|
20
|
-
should "create content by capturing content from a given block" do
|
21
|
-
div_div = subject.tag(:div, "\n#{subject.tag(:div, "\ninner\n")}\n\n", {
|
22
|
-
:id => 'outer'
|
23
|
-
}) + "\n"
|
24
|
-
buf_content_div = subject.capture_tag(:div, :id => 'outer') do
|
25
|
-
subject.capture_tag(:div){ subject._out_buf << 'inner' }
|
26
|
-
end
|
27
|
-
|
28
|
-
assert_equal div_div, buf_content_div
|
29
|
-
end
|
30
|
-
|
31
|
-
should "create content by returning content from a given block" do
|
32
|
-
div_div = subject.tag(:div, "\n#{subject.tag(:div, "\ninner\n")}\n\n", {
|
33
|
-
:id => 'outer'
|
34
|
-
}) + "\n"
|
35
|
-
returned_content_div = subject.capture_tag(:div, :id => 'outer') do
|
36
|
-
subject.capture_tag(:div){ 'inner' }
|
37
|
-
end
|
38
|
-
|
39
|
-
assert_equal div_div, returned_content_div
|
40
|
-
end
|
41
|
-
|
42
|
-
should "create empty tags if no block given" do
|
43
|
-
empty_div = subject.tag(:div, "\n\n", :id => 'outer') + "\n"
|
44
|
-
assert_equal empty_div, subject.capture_tag(:div, :id => 'outer')
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|