markup_helpers 0.0.1

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in markup_helpers.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,42 @@
1
+ require "markup_helpers/version"
2
+ require "markup_helpers/tilt" if Object.const_defined? :Tilt
3
+
4
+ module MarkupHelpers
5
+ include Haml::Helpers if const_defined? :Haml
6
+
7
+ def tag tag_name, content_or_attrs = {}, attrs = nil, &block
8
+ if attrs.nil? && Hash === content_or_attrs
9
+ attrs = content_or_attrs
10
+ content = nil
11
+ else
12
+ attrs ||= {}
13
+ content = content_or_attrs
14
+ end
15
+
16
+ attrs = attrs.map do |name, val|
17
+ next if val.nil? || val == []
18
+ val == true ? name : %{#{name}="#{[*val].join(' ')}"}
19
+ end.compact.join(' ')
20
+
21
+ attrs = " #{attrs}" unless attrs.empty?
22
+ if block_given?
23
+ content = respond_to?(:capture) ? capture(&block) : yield
24
+ end
25
+ output = %{<#{tag_name}#{attrs}>#{content}</#{tag_name}>}
26
+ block_given? && respond_to?(:concat) ? concat(output) : output
27
+ end
28
+
29
+ private
30
+ def erb_capture
31
+ old_buffer = erb_buffer.dup
32
+ erb_buffer.clear and yield
33
+ content = erb_buffer.dup
34
+ erb_buffer.replace(old_buffer) and content
35
+ end
36
+
37
+ def erb_buffer
38
+ outvar = @__tilt_context.instance_variable_get(:@outvar)
39
+ outvar or raise('Please pass the outvar option when instantiating the erb template')
40
+ instance_variable_get outvar
41
+ end
42
+ end
@@ -0,0 +1,3 @@
1
+ module MarkupHelpers
2
+ include Haml::Helpers
3
+ end
@@ -0,0 +1,40 @@
1
+ module Tilt
2
+ class Template
3
+ def render scope = Object.new, locals = {}, &block
4
+ scope.instance_variable_set :@__tilt_context, self
5
+ output = evaluate scope, locals || {}, &block
6
+ if scope.instance_variable_get :@__tilt_context
7
+ scope.send :remove_instance_variable, :@__tilt_context
8
+ end
9
+ output
10
+ end
11
+ end
12
+ end
13
+
14
+ module MarkupHelpers
15
+ module TiltHelpers
16
+ def capture &block
17
+ case @__tilt_context
18
+ when Tilt::ErubisTemplate, Tilt::ERBTemplate
19
+ erb_capture &block
20
+ when Tilt::HamlTemplate
21
+ capture_haml &block
22
+ else
23
+ yield
24
+ end
25
+ end
26
+
27
+ def concat content
28
+ case @__tilt_context
29
+ when Tilt::ErubisTemplate, Tilt::ERBTemplate
30
+ erb_buffer << content
31
+ when Tilt::HamlTemplate
32
+ haml_concat content
33
+ else
34
+ content
35
+ end
36
+ end
37
+ end
38
+
39
+ include TiltHelpers
40
+ end
@@ -0,0 +1,3 @@
1
+ module MarkupHelpers
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "markup_helpers/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "markup_helpers"
7
+ s.version = MarkupHelpers::VERSION
8
+ s.authors = ["Macario"]
9
+ s.email = ["macarui@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Framework agnostic markup helpers}
12
+ s.description = %q{Framework agnostic markup helpers}
13
+
14
+ s.rubyforge_project = "markup_helpers"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency 'rake'
22
+ s.add_development_dependency 'rspec'
23
+ s.add_development_dependency 'capybara'
24
+ s.add_development_dependency 'erubis'
25
+ s.add_development_dependency 'haml'
26
+ s.add_development_dependency 'tilt'
27
+ s.add_development_dependency 'sinatra'
28
+ end
@@ -0,0 +1,140 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe 'markup helpers' do
5
+ include MarkupHelpers
6
+
7
+ let(:output) do
8
+ Capybara::Node::Simple.new(@output)
9
+ end
10
+
11
+ describe 'tag' do
12
+ describe 'basic' do
13
+ describe 'attributes and content' do
14
+ before do
15
+ @output = tag(:li, "Hello", :class => 'item', :id => 'hello')
16
+ end
17
+ it { output.should have_css 'li' }
18
+ it { output.should have_css 'li', :text => "Hello" }
19
+ it { output.should have_css 'li.item' }
20
+ it { output.should have_css 'li#hello' }
21
+ end
22
+
23
+ describe 'blank attribute values' do
24
+ before do
25
+ @output = tag(:li, "Hello", :class => [], :id => nil)
26
+ end
27
+ it { @output.should == '<li>Hello</li>'}
28
+ end
29
+
30
+ describe 'true attribute' do
31
+ before do
32
+ @output = tag(:li, "Hello", 'data-something' => true)
33
+ end
34
+ it { @output.should == '<li data-something>Hello</li>'}
35
+ end
36
+
37
+ describe 'multiple classes' do
38
+ before do
39
+ @output = tag(:li, "Hello", :class => %w(item in-stock))
40
+ end
41
+ it { output.should have_css 'li.item' }
42
+ it { output.should have_css 'li.in-stock' }
43
+ end
44
+
45
+ describe 'in erb' do
46
+ before do
47
+ @output = Tilt['erb'].new { '<%= tag(:li, "Hello") %>' }.render(self)
48
+ end
49
+ it { output.should have_css 'li', :text => "Hello" }
50
+ end
51
+
52
+ describe 'in haml' do
53
+ before do
54
+ @output = Tilt['haml'].new { '= tag(:li, "Hello")' }.render(self)
55
+ end
56
+ it { output.should have_css 'li', :text => "Hello" }
57
+ end
58
+ end
59
+
60
+ describe 'shallow blocks' do
61
+ describe 'in ruby' do
62
+ before do
63
+ @output = tag(:li) { tag(:a, 'Hello') }
64
+ end
65
+ it { output.should have_css 'li' }
66
+ it { output.should have_css 'li > a', :text => 'Hello' }
67
+ end
68
+
69
+ describe 'in erb' do
70
+ before do
71
+ @output = Tilt['erb'].new(:outvar => '@_out_buf') do
72
+ <<-ERB
73
+ <% tag(:li) do %>
74
+ <%= tag(:a, 'Hello') %>
75
+ <% end %>
76
+ ERB
77
+ end.render(self)
78
+ end
79
+ it { output.should have_css 'li' }
80
+ it { output.should have_css 'li > a', :text => 'Hello' }
81
+ end
82
+
83
+ describe 'in haml' do
84
+ before do
85
+ @output = Tilt['haml'].new(:outvar => '@_out_buf') do
86
+ <<-ERB
87
+ - tag(:li) do
88
+ = tag(:a, 'Hello')
89
+ ERB
90
+ end.render(self)
91
+ end
92
+ it { output.should have_css 'li' }
93
+ it { output.should have_css 'li > a', :text => 'Hello' }
94
+ end
95
+ end
96
+
97
+ describe 'deeper blocks' do
98
+ describe 'in ruby' do
99
+ before do
100
+ @output = tag(:li) { tag(:a, 'Hello') { tag(:img) } }
101
+ end
102
+ it { output.should have_css 'li' }
103
+ it { output.should have_css 'li > a' }
104
+ it { output.should have_css 'li > a > img' }
105
+ end
106
+
107
+ describe 'in erb' do
108
+ before do
109
+ @output = Tilt['erb'].new(:outvar => '@_out_buf') do
110
+ <<-ERB
111
+ <% tag(:li) do %>
112
+ <% tag(:a, 'Hello') do %>
113
+ <%= tag(:img) %>
114
+ <% end %>
115
+ <% end %>
116
+ ERB
117
+ end.render(self)
118
+ end
119
+ it { output.should have_css 'li' }
120
+ it { output.should have_css 'li > a' }
121
+ it { output.should have_css 'li > a > img' }
122
+ end
123
+
124
+ describe 'in haml' do
125
+ before do
126
+ @output = Tilt['haml'].new(:outvar => '@_out_buf') do
127
+ <<-ERB
128
+ - tag(:li) do
129
+ - tag(:a, 'Hello') do
130
+ = tag(:img)
131
+ ERB
132
+ end.render(self)
133
+ end
134
+ it { output.should have_css 'li' }
135
+ it { output.should have_css 'li > a' }
136
+ it { output.should have_css 'li > a > img' }
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require "bundler/setup"
3
+ require 'rspec'
4
+ require 'capybara'
5
+ require 'erubis'
6
+ require 'haml'
7
+ require 'tilt'
8
+
9
+ require 'markup_helpers'
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: markup_helpers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Macario
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-28 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: &70284969005480 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70284969005480
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70284969004580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70284969004580
36
+ - !ruby/object:Gem::Dependency
37
+ name: capybara
38
+ requirement: &70284968994120 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70284968994120
47
+ - !ruby/object:Gem::Dependency
48
+ name: erubis
49
+ requirement: &70284968993540 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70284968993540
58
+ - !ruby/object:Gem::Dependency
59
+ name: haml
60
+ requirement: &70284968993080 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70284968993080
69
+ - !ruby/object:Gem::Dependency
70
+ name: tilt
71
+ requirement: &70284968992420 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70284968992420
80
+ - !ruby/object:Gem::Dependency
81
+ name: sinatra
82
+ requirement: &70284968991900 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70284968991900
91
+ description: Framework agnostic markup helpers
92
+ email:
93
+ - macarui@gmail.com
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files: []
97
+ files:
98
+ - .gitignore
99
+ - .rspec
100
+ - Gemfile
101
+ - Rakefile
102
+ - lib/markup_helpers.rb
103
+ - lib/markup_helpers/haml.rb
104
+ - lib/markup_helpers/tilt.rb
105
+ - lib/markup_helpers/version.rb
106
+ - markup_helpers.gemspec
107
+ - spec/markup_helpers_spec.rb
108
+ - spec/spec_helper.rb
109
+ homepage: ''
110
+ licenses: []
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project: markup_helpers
129
+ rubygems_version: 1.8.12
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: Framework agnostic markup helpers
133
+ test_files:
134
+ - spec/markup_helpers_spec.rb
135
+ - spec/spec_helper.rb
136
+ has_rdoc: