markaby 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +21 -0
- data/{spec/spec.opts → .rspec} +0 -0
- data/Gemfile +8 -0
- data/Markaby.gemspec +20 -105
- data/README.rdoc +12 -94
- data/Rakefile +19 -50
- data/lib/markaby.rb +1 -5
- data/lib/markaby/builder.rb +15 -1
- data/lib/markaby/builder_tags.rb +22 -2
- data/lib/markaby/kernel_method.rb +1 -0
- data/lib/markaby/tags.rb +91 -2
- data/lib/markaby/version.rb +3 -0
- data/spec/markaby/{css_proxy_test.rb → css_proxy_spec.rb} +12 -17
- data/spec/markaby/{fragment_test.rb → fragment_spec.rb} +0 -0
- data/spec/markaby/html5_spec.rb +100 -0
- data/spec/markaby/markaby_spec.rb +1 -1
- data/spec/markaby/{markaby_test.rb → markaby_test_unit_spec.rb} +1 -1
- data/spec/spec_helper.rb +0 -5
- metadata +70 -76
- data/garlic.rb +0 -29
- data/init.rb +0 -6
- data/lib/markaby/rails.rb +0 -75
- data/lib/markaby/rails/current.rb +0 -85
- data/lib/markaby/rails/deprecated.rb +0 -124
- data/lib/markaby/rails/rails_builder.rb +0 -91
- data/lib/markaby/sinatra.rb +0 -18
- data/lib/markaby/tilt.rb +0 -8
- data/spec/markaby/markaby_other_static.mab +0 -1
- data/spec/markaby/rails/spec_helper.rb +0 -29
- data/spec/markaby/rails/views/layouts/layout.mab +0 -11
- data/spec/markaby/rails/views/markaby/_a_partial.mab +0 -3
- data/spec/markaby/rails/views/markaby/_form_for_with_body_in_erb.erb +0 -1
- data/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +0 -1
- data/spec/markaby/rails/views/markaby/access_to_helpers.mab +0 -1
- data/spec/markaby/rails/views/markaby/broken.mab +0 -7
- data/spec/markaby/rails/views/markaby/commented_out_template.mab +0 -1
- data/spec/markaby/rails/views/markaby/correct_template_values.mab +0 -5
- data/spec/markaby/rails/views/markaby/double_output.mab +0 -8
- data/spec/markaby/rails/views/markaby/form_for.mab +0 -2
- data/spec/markaby/rails/views/markaby/form_for_with_fields.mab +0 -3
- data/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +0 -4
- data/spec/markaby/rails/views/markaby/no_values_passed.mab +0 -3
- data/spec/markaby/rails/views/markaby/partial_parent.mab +0 -1
- data/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +0 -7
- data/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +0 -1
- data/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
- data/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +0 -3
- data/spec/markaby/rails/views/markaby/render_with_ivar.mab +0 -3
- data/spec/markaby/rails/views/markaby/renders_erb.rhtml +0 -1
- data/spec/markaby/rails/views/markaby/renders_form_for_with_erb_body.mab +0 -3
- data/spec/markaby/rails/views/markaby/routes.mab +0 -1
- data/spec/markaby/rails/views/markaby/yielding.mab +0 -3
- data/spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab +0 -5
- data/spec/markaby/rails/views/markaby/yielding_two.mab +0 -7
- data/spec/markaby/rails/views/markaby/yielding_with_content_for.mab +0 -3
- data/spec/markaby/rails_test.rb +0 -380
- data/spec/markaby/rails_version_spec.rb +0 -37
- data/spec/markaby/sinatra/app.rb +0 -49
- data/spec/markaby/sinatra/sinatra_spec.rb +0 -67
- data/spec/markaby/sinatra/views/helpers.mab +0 -1
- data/spec/markaby/sinatra/views/layout.mab +0 -7
- data/spec/markaby/sinatra/views/markaby_template.mab +0 -0
- data/spec/markaby/sinatra/views/scope_instance_variables.mab +0 -3
- data/spec/markaby/sinatra/views/simple_html.mab +0 -4
- data/spec/markaby/sinatra/views/variables.mab +0 -3
- data/spec/markaby/tilt/erb.erb +0 -1
- data/spec/markaby/tilt/locals.mab +0 -1
- data/spec/markaby/tilt/markaby.mab +0 -1
- data/spec/markaby/tilt/markaby_other_static.mab +0 -1
- data/spec/markaby/tilt/render_twice.mab +0 -1
- data/spec/markaby/tilt/scope.mab +0 -1
- data/spec/markaby/tilt/yielding.mab +0 -2
- data/spec/markaby/tilt_spec.rb +0 -75
data/garlic.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/lib/markaby/rails")
|
2
|
-
|
3
|
-
garlic do
|
4
|
-
# this plugin
|
5
|
-
repo "markaby", :path => '.'
|
6
|
-
|
7
|
-
# other repos
|
8
|
-
repo "rails", :url => "git://github.com/rails/rails"
|
9
|
-
|
10
|
-
# target railses
|
11
|
-
RAILS_TAREGETS = Markaby::Rails::SUPPORTED_RAILS_VERSIONS.map do |version|
|
12
|
-
"v#{version}"
|
13
|
-
end
|
14
|
-
|
15
|
-
RAILS_TAREGETS.each do |rails|
|
16
|
-
# declare how to prepare, and run each CI target
|
17
|
-
target "Rails: #{rails}", :tree_ish => rails do
|
18
|
-
prepare do
|
19
|
-
plugin "markaby", :clone => true # so we can work in targets
|
20
|
-
end
|
21
|
-
|
22
|
-
run do
|
23
|
-
cd "vendor/plugins/markaby" do
|
24
|
-
sh "rake"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/init.rb
DELETED
data/lib/markaby/rails.rb
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
module Markaby
|
2
|
-
module Rails
|
3
|
-
UNSUPPORTED_RAILS_VERSIONS = [
|
4
|
-
"2.0.0",
|
5
|
-
"2.0.1",
|
6
|
-
"2.0.2",
|
7
|
-
"2.0.3",
|
8
|
-
"2.0.4",
|
9
|
-
"2.0.5",
|
10
|
-
"2.1.0",
|
11
|
-
"2.1.1",
|
12
|
-
"2.1.2",
|
13
|
-
"2.3.0"
|
14
|
-
]
|
15
|
-
|
16
|
-
DEPRECATED_RAILS_VERSIONS = [
|
17
|
-
"1.2.2",
|
18
|
-
"1.2.3",
|
19
|
-
"1.2.4",
|
20
|
-
"1.2.5",
|
21
|
-
"1.2.6"
|
22
|
-
]
|
23
|
-
|
24
|
-
FULLY_SUPPORTED_RAILS_VERSIONS = [
|
25
|
-
"2.2.0",
|
26
|
-
"2.2.1",
|
27
|
-
"2.2.2",
|
28
|
-
"2.2.3",
|
29
|
-
"2.3.1",
|
30
|
-
"2.3.2",
|
31
|
-
"2.3.2.1",
|
32
|
-
"2.3.3",
|
33
|
-
"2.3.3.1",
|
34
|
-
"2.3.4",
|
35
|
-
"2.3.5",
|
36
|
-
"2.3.6",
|
37
|
-
"2.3.7",
|
38
|
-
"2.3.8"
|
39
|
-
]
|
40
|
-
|
41
|
-
SUPPORTED_RAILS_VERSIONS = DEPRECATED_RAILS_VERSIONS + FULLY_SUPPORTED_RAILS_VERSIONS
|
42
|
-
|
43
|
-
class << self
|
44
|
-
def load
|
45
|
-
check_rails_version
|
46
|
-
|
47
|
-
if deprecated_rails_version?
|
48
|
-
require File.dirname(__FILE__) + "/rails/deprecated"
|
49
|
-
else
|
50
|
-
require File.dirname(__FILE__) + "/rails/current"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def deprecated_rails_version?
|
55
|
-
DEPRECATED_RAILS_VERSIONS.include?(detected_rails_version)
|
56
|
-
end
|
57
|
-
|
58
|
-
def check_rails_version
|
59
|
-
if UNSUPPORTED_RAILS_VERSIONS.include?(detected_rails_version)
|
60
|
-
error_message = "Cannot load markaby under rails version #{detected_rails_version}. "
|
61
|
-
error_message << "See Markaby::Rails::SUPPORTED_RAILS_VERSIONS for exactly that, or redefine this constant."
|
62
|
-
raise LoadError, error_message
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def detected_rails_version
|
69
|
-
if defined?(::Rails)
|
70
|
-
::Rails::VERSION::STRING
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
require 'markaby/rails/rails_builder'
|
2
|
-
|
3
|
-
module Markaby
|
4
|
-
module Rails
|
5
|
-
class TemplateHandler < ::ActionView::TemplateHandler
|
6
|
-
include ActionView::TemplateHandlers::Compilable
|
7
|
-
|
8
|
-
def compile(template, local_assigns={})
|
9
|
-
<<-CODE
|
10
|
-
__template_handler = Markaby::Rails::TemplateHandler.new
|
11
|
-
__template_handler.view = self
|
12
|
-
__template_handler.render(lambda {
|
13
|
-
#{template.source}
|
14
|
-
}, local_assigns)
|
15
|
-
CODE
|
16
|
-
end
|
17
|
-
|
18
|
-
def render(template, local_assigns = (template.respond_to?(:locals) ? template.locals : {}))
|
19
|
-
builder = RailsBuilder.new(instance_variables.merge(local_assigns), @view)
|
20
|
-
@view.output_buffer = builder
|
21
|
-
|
22
|
-
template.is_a?(Proc) ?
|
23
|
-
builder.instance_eval(&template) :
|
24
|
-
builder.instance_eval(template.source)
|
25
|
-
|
26
|
-
builder.to_s
|
27
|
-
end
|
28
|
-
|
29
|
-
attr_accessor :view
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def instance_variables
|
34
|
-
instance_variable_hash(@view)
|
35
|
-
end
|
36
|
-
|
37
|
-
def instance_variable_hash(object)
|
38
|
-
returning Hash.new do |hash|
|
39
|
-
object.instance_variables.each do |var_name|
|
40
|
-
hash[var_name.gsub("@", "")] = object.instance_variable_get(var_name)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
module Helpers
|
47
|
-
# allow fragments to act as strings. url_for has a
|
48
|
-
# case statment in it:
|
49
|
-
#
|
50
|
-
# case options
|
51
|
-
# when String
|
52
|
-
# ...
|
53
|
-
#
|
54
|
-
# which essential is doing the following:
|
55
|
-
#
|
56
|
-
# String === options
|
57
|
-
#
|
58
|
-
# That assertion fails with Markaby::Fragments, which are essential
|
59
|
-
# builder/string fragments.
|
60
|
-
#
|
61
|
-
def url_for(options={})
|
62
|
-
case options
|
63
|
-
when Markaby::Fragment
|
64
|
-
super(options.to_s)
|
65
|
-
else
|
66
|
-
super
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def capture(*args, &block)
|
71
|
-
if output_buffer.kind_of?(Markaby::Builder)
|
72
|
-
output_buffer.capture(&block)
|
73
|
-
else
|
74
|
-
super
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
ActionView::Base.class_eval do
|
82
|
-
include Markaby::Rails::Helpers
|
83
|
-
end
|
84
|
-
|
85
|
-
ActionView::Template.register_template_handler(:mab, Markaby::Rails::TemplateHandler)
|
@@ -1,124 +0,0 @@
|
|
1
|
-
require 'markaby/rails/rails_builder'
|
2
|
-
|
3
|
-
module ActionView # :nodoc:
|
4
|
-
class Base # :nodoc:
|
5
|
-
def render_template(template_extension, template, file_path = nil, local_assigns = {})
|
6
|
-
if handler = @@template_handlers[template_extension]
|
7
|
-
template ||= read_template_file(file_path, template_extension)
|
8
|
-
handler.new(self).render(template, local_assigns, file_path)
|
9
|
-
else
|
10
|
-
compile_and_render_template(template_extension, template, file_path, local_assigns)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module Markaby
|
17
|
-
module Rails
|
18
|
-
class Template
|
19
|
-
|
20
|
-
def self.builder_class=(builder)
|
21
|
-
@@builder_class = builder
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.builder_class
|
25
|
-
@@builder_class ||= Builder
|
26
|
-
end
|
27
|
-
|
28
|
-
attr_accessor :source, :path
|
29
|
-
|
30
|
-
def initialize(source)
|
31
|
-
@source = source.to_s
|
32
|
-
end
|
33
|
-
|
34
|
-
def render(*args)
|
35
|
-
output = self.class.builder_class.new(*args)
|
36
|
-
|
37
|
-
if path
|
38
|
-
output.instance_eval source, path
|
39
|
-
else
|
40
|
-
output.instance_eval source
|
41
|
-
end
|
42
|
-
|
43
|
-
output.to_s
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Markaby helpers for Rails.
|
48
|
-
module ActionControllerHelpers
|
49
|
-
# Returns a string of HTML built from the attached +block+. Any +options+ are
|
50
|
-
# passed into the render method.
|
51
|
-
#
|
52
|
-
# Use this method in your controllers to output Markaby directly from inside.
|
53
|
-
def render_markaby(options = {}, &block)
|
54
|
-
render options.merge({ :text => Builder.new(options[:locals], self, &block).to_s })
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
class ActionViewTemplateHandler # :nodoc:
|
59
|
-
def initialize(action_view)
|
60
|
-
@action_view = action_view
|
61
|
-
end
|
62
|
-
def render(template, local_assigns, file_path)
|
63
|
-
template = Template.new(template)
|
64
|
-
template.path = file_path
|
65
|
-
template.render(@action_view.assigns.merge(local_assigns), @action_view)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class Builder < RailsBuilder # :nodoc:
|
70
|
-
def initialize(*args, &block)
|
71
|
-
super *args, &block
|
72
|
-
|
73
|
-
@assigns.each { |k, v| @helpers.instance_variable_set("@#{k}", v) }
|
74
|
-
end
|
75
|
-
|
76
|
-
def flash(*args)
|
77
|
-
@helpers.controller.send(:flash, *args)
|
78
|
-
end
|
79
|
-
|
80
|
-
# Emulate ERB to satisfy helpers like <tt>form_for</tt>.
|
81
|
-
def _erbout
|
82
|
-
@_erbout ||= FauxErbout.new(self)
|
83
|
-
end
|
84
|
-
|
85
|
-
# Content_for will store the given block in an instance variable for later use
|
86
|
-
# in another template or in the layout.
|
87
|
-
#
|
88
|
-
# The name of the instance variable is content_for_<name> to stay consistent
|
89
|
-
# with @content_for_layout which is used by ActionView's layouts.
|
90
|
-
#
|
91
|
-
# Example:
|
92
|
-
#
|
93
|
-
# content_for("header") do
|
94
|
-
# h1 "Half Shark and Half Lion"
|
95
|
-
# end
|
96
|
-
#
|
97
|
-
# If used several times, the variable will contain all the parts concatenated.
|
98
|
-
def content_for(name, &block)
|
99
|
-
@helpers.assigns["content_for_#{name}"] =
|
100
|
-
eval("@content_for_#{name} = (@content_for_#{name} || '') + capture(&block)")
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
Template.builder_class = Builder
|
105
|
-
|
106
|
-
class FauxErbout < ::Builder::BlankSlate # :nodoc:
|
107
|
-
def initialize(builder)
|
108
|
-
@builder = builder
|
109
|
-
end
|
110
|
-
def nil? # see ActionView::Helpers::CaptureHelper#capture
|
111
|
-
true
|
112
|
-
end
|
113
|
-
def method_missing(*args, &block)
|
114
|
-
@builder.send *args, &block
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
if defined? ActionView::Template and ActionView::Template.respond_to? :register_template_handler
|
120
|
-
ActionView::Template
|
121
|
-
else
|
122
|
-
ActionView::Base
|
123
|
-
end.register_template_handler(:mab, Markaby::Rails::ActionViewTemplateHandler)
|
124
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
module Markaby
|
2
|
-
module Rails
|
3
|
-
class RailsBuilder < Markaby::Builder
|
4
|
-
def form_for(*args, &block)
|
5
|
-
@_helper.output_buffer = OutputBuffer.new
|
6
|
-
|
7
|
-
@template.form_for(*args) do |__form_for_variable|
|
8
|
-
# flush <form tags> + switch back to markaby
|
9
|
-
text(@_helper.output_buffer)
|
10
|
-
@_helper.output_buffer = self
|
11
|
-
|
12
|
-
yield FormHelperProxy.new(@_helper, __form_for_variable)
|
13
|
-
|
14
|
-
# switch back to output string output buffer and flush
|
15
|
-
# final </form> tag
|
16
|
-
@_helper.output_buffer = OutputBuffer.new
|
17
|
-
end
|
18
|
-
text(@_helper.output_buffer)
|
19
|
-
|
20
|
-
# finally, switch back to our regular buffer
|
21
|
-
@_helper.output_buffer = self
|
22
|
-
end
|
23
|
-
|
24
|
-
alias_method :safe_concat, :concat
|
25
|
-
|
26
|
-
# Rails 2.3.6 calls safe_concat on the output buffer.
|
27
|
-
# Future versions of rails alias safe_concat to concat on the core
|
28
|
-
# class String.
|
29
|
-
#
|
30
|
-
# Obviously, that's a bad idea. Thanks a ton, Rails.
|
31
|
-
class OutputBuffer < String
|
32
|
-
alias_method :safe_concat, :concat
|
33
|
-
end
|
34
|
-
|
35
|
-
# This is used for the block variable given to form_for. Typically, an erb template looks as so:
|
36
|
-
#
|
37
|
-
# <% form_for :foo do |f|
|
38
|
-
# <%= f.text_field :bar %>
|
39
|
-
# <% end %>
|
40
|
-
#
|
41
|
-
# form_for adds the form tag to the input stream, and assumes that later the user will append
|
42
|
-
# the <input> tag to the input stream himself (in erb, this is done with the <%= %> tags).
|
43
|
-
#
|
44
|
-
# We could do the following in Markaby:
|
45
|
-
#
|
46
|
-
# form_for :foo do |f|
|
47
|
-
# text f.text_field(:bar)
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# But this is ugly. This is prettier:
|
51
|
-
#
|
52
|
-
# form_for :foo do |f|
|
53
|
-
# f.text_field :bar
|
54
|
-
# end
|
55
|
-
class FormHelperProxy
|
56
|
-
def initialize(view, proxied_object)
|
57
|
-
@view = view
|
58
|
-
@proxied_object = proxied_object
|
59
|
-
end
|
60
|
-
|
61
|
-
def respond_to?(sym, include_private = false)
|
62
|
-
@proxied_object.respond_to?(sym, include_private) || super
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
if ::Rails::VERSION::STRING == "2.2.0"
|
68
|
-
def __template__
|
69
|
-
@view.instance_variable_get("@_last_render")
|
70
|
-
end
|
71
|
-
else
|
72
|
-
def __template__
|
73
|
-
@view.template
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def method_missing(sym, *args, &block)
|
78
|
-
result = @proxied_object.__send__(sym, *args, &block)
|
79
|
-
|
80
|
-
# a markaby template may call render :partial with the form proxy helper.
|
81
|
-
# we only want to manually concat _if_ we are in a markaby template (not, say, erb)
|
82
|
-
if __template__.extension == "mab"
|
83
|
-
@view.concat(result)
|
84
|
-
end
|
85
|
-
|
86
|
-
result
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
data/lib/markaby/sinatra.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'markaby/tilt'
|
2
|
-
require 'sinatra'
|
3
|
-
|
4
|
-
module Sinatra
|
5
|
-
class Base
|
6
|
-
# sinatra's #render looks for options in Sinatra::Application
|
7
|
-
# by asking if it responds_to?(:mab)
|
8
|
-
# Unfortunately, if the the mab kernel method is included,
|
9
|
-
# Sinatra::Application will respond_to? it.
|
10
|
-
set :mab, {}
|
11
|
-
end
|
12
|
-
|
13
|
-
module Templates
|
14
|
-
def mab(template, options={}, locals={})
|
15
|
-
render :mab, template, options, locals
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
data/lib/markaby/tilt.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
text "_why?"
|