mab 0.0.2 → 0.0.3

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.
Files changed (113) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +5 -1
  3. data/Gemfile.lock +3 -3
  4. data/Rakefile +10 -2
  5. data/lib/mab.rb +1 -0
  6. data/lib/mab/indentation.rb +2 -2
  7. data/lib/mab/mixin.rb +57 -57
  8. data/lib/mab/rails.rb +20 -0
  9. data/lib/mab/version.rb +1 -1
  10. data/test/rails/Rakefile +7 -0
  11. data/test/rails/app/assets/images/rails.png +0 -0
  12. data/test/rails/app/assets/javascripts/application.js +15 -0
  13. data/test/rails/app/assets/stylesheets/application.css +13 -0
  14. data/test/rails/app/controllers/application_controller.rb +17 -0
  15. data/test/rails/app/helpers/application_helper.rb +2 -0
  16. data/test/rails/app/views/application/content_for.html.mab +6 -0
  17. data/test/rails/app/views/application/normal.html.mab +2 -0
  18. data/test/rails/app/views/application/variables.html.mab +2 -0
  19. data/test/rails/app/views/layouts/application.html.mab +15 -0
  20. data/test/rails/config.ru +4 -0
  21. data/test/rails/config/application.rb +54 -0
  22. data/test/rails/config/boot.rb +6 -0
  23. data/test/rails/config/environment.rb +5 -0
  24. data/test/rails/config/environments/development.rb +27 -0
  25. data/test/rails/config/environments/production.rb +67 -0
  26. data/test/rails/config/environments/test.rb +29 -0
  27. data/test/rails/config/initializers/backtrace_silencers.rb +7 -0
  28. data/test/rails/config/initializers/inflections.rb +15 -0
  29. data/test/rails/config/initializers/mime_types.rb +5 -0
  30. data/test/rails/config/initializers/secret_token.rb +7 -0
  31. data/test/rails/config/initializers/session_store.rb +8 -0
  32. data/test/rails/config/initializers/wrap_parameters.rb +14 -0
  33. data/test/rails/config/locales/en.yml +5 -0
  34. data/test/rails/config/routes.rb +3 -0
  35. data/test/rails/script/rails +6 -0
  36. data/test/rails/test/helper.rb +7 -0
  37. data/test/rails/test/test_mab.rb +40 -0
  38. data/test/test_mab_mixin.rb +10 -6
  39. metadata +46 -88
  40. data/bench.rb +0 -37
  41. data/mab-0.0.1.gem +0 -0
  42. data/markaby/CHANGELOG.rdoc +0 -106
  43. data/markaby/Markaby.gemspec +0 -109
  44. data/markaby/README.rdoc +0 -317
  45. data/markaby/Rakefile +0 -78
  46. data/markaby/VERSION +0 -1
  47. data/markaby/garlic.rb +0 -29
  48. data/markaby/init.rb +0 -6
  49. data/markaby/lib/markaby.rb +0 -30
  50. data/markaby/lib/markaby/builder.rb +0 -314
  51. data/markaby/lib/markaby/builder_tags.rb +0 -64
  52. data/markaby/lib/markaby/cssproxy.rb +0 -55
  53. data/markaby/lib/markaby/kernel_method.rb +0 -7
  54. data/markaby/lib/markaby/rails.rb +0 -75
  55. data/markaby/lib/markaby/rails/current.rb +0 -85
  56. data/markaby/lib/markaby/rails/deprecated.rb +0 -124
  57. data/markaby/lib/markaby/rails/rails_builder.rb +0 -91
  58. data/markaby/lib/markaby/sinatra.rb +0 -18
  59. data/markaby/lib/markaby/tags.rb +0 -200
  60. data/markaby/lib/markaby/tilt.rb +0 -8
  61. data/markaby/spec/markaby/builder_spec.rb +0 -118
  62. data/markaby/spec/markaby/css_proxy_test.rb +0 -47
  63. data/markaby/spec/markaby/fragment_test.rb +0 -10
  64. data/markaby/spec/markaby/markaby_other_static.mab +0 -1
  65. data/markaby/spec/markaby/markaby_spec.rb +0 -184
  66. data/markaby/spec/markaby/markaby_test.rb +0 -251
  67. data/markaby/spec/markaby/rails/spec_helper.rb +0 -29
  68. data/markaby/spec/markaby/rails/views/layouts/layout.mab +0 -11
  69. data/markaby/spec/markaby/rails/views/markaby/_a_partial.mab +0 -3
  70. data/markaby/spec/markaby/rails/views/markaby/_form_for_with_body_in_erb.erb +0 -1
  71. data/markaby/spec/markaby/rails/views/markaby/_partial_child_with_locals.mab +0 -1
  72. data/markaby/spec/markaby/rails/views/markaby/access_to_helpers.mab +0 -1
  73. data/markaby/spec/markaby/rails/views/markaby/broken.mab +0 -7
  74. data/markaby/spec/markaby/rails/views/markaby/commented_out_template.mab +0 -1
  75. data/markaby/spec/markaby/rails/views/markaby/correct_template_values.mab +0 -5
  76. data/markaby/spec/markaby/rails/views/markaby/double_output.mab +0 -8
  77. data/markaby/spec/markaby/rails/views/markaby/form_for.mab +0 -2
  78. data/markaby/spec/markaby/rails/views/markaby/form_for_with_fields.mab +0 -3
  79. data/markaby/spec/markaby/rails/views/markaby/form_for_with_multiple_fields.mab +0 -4
  80. data/markaby/spec/markaby/rails/views/markaby/no_values_passed.mab +0 -3
  81. data/markaby/spec/markaby/rails/views/markaby/partial_parent.mab +0 -1
  82. data/markaby/spec/markaby/rails/views/markaby/partial_parent_with_locals.mab +0 -7
  83. data/markaby/spec/markaby/rails/views/markaby/render_erb_without_explicit_render_call.erb +0 -1
  84. data/markaby/spec/markaby/rails/views/markaby/render_explicit_but_empty_markaby_layout.mab +0 -0
  85. data/markaby/spec/markaby/rails/views/markaby/render_mab_without_explicit_render_call.mab +0 -3
  86. data/markaby/spec/markaby/rails/views/markaby/render_with_ivar.mab +0 -3
  87. data/markaby/spec/markaby/rails/views/markaby/renders_erb.rhtml +0 -1
  88. data/markaby/spec/markaby/rails/views/markaby/renders_form_for_with_erb_body.mab +0 -3
  89. data/markaby/spec/markaby/rails/views/markaby/routes.mab +0 -1
  90. data/markaby/spec/markaby/rails/views/markaby/yielding.mab +0 -3
  91. data/markaby/spec/markaby/rails/views/markaby/yielding_content_for_with_block_helper.mab +0 -5
  92. data/markaby/spec/markaby/rails/views/markaby/yielding_two.mab +0 -7
  93. data/markaby/spec/markaby/rails/views/markaby/yielding_with_content_for.mab +0 -3
  94. data/markaby/spec/markaby/rails_test.rb +0 -380
  95. data/markaby/spec/markaby/rails_version_spec.rb +0 -37
  96. data/markaby/spec/markaby/sinatra/app.rb +0 -49
  97. data/markaby/spec/markaby/sinatra/sinatra_spec.rb +0 -67
  98. data/markaby/spec/markaby/sinatra/views/helpers.mab +0 -1
  99. data/markaby/spec/markaby/sinatra/views/layout.mab +0 -7
  100. data/markaby/spec/markaby/sinatra/views/markaby_template.mab +0 -0
  101. data/markaby/spec/markaby/sinatra/views/scope_instance_variables.mab +0 -3
  102. data/markaby/spec/markaby/sinatra/views/simple_html.mab +0 -4
  103. data/markaby/spec/markaby/sinatra/views/variables.mab +0 -3
  104. data/markaby/spec/markaby/tilt/erb.erb +0 -1
  105. data/markaby/spec/markaby/tilt/locals.mab +0 -1
  106. data/markaby/spec/markaby/tilt/markaby.mab +0 -1
  107. data/markaby/spec/markaby/tilt/markaby_other_static.mab +0 -1
  108. data/markaby/spec/markaby/tilt/render_twice.mab +0 -1
  109. data/markaby/spec/markaby/tilt/scope.mab +0 -1
  110. data/markaby/spec/markaby/tilt/yielding.mab +0 -2
  111. data/markaby/spec/markaby/tilt_spec.rb +0 -75
  112. data/markaby/spec/spec.opts +0 -2
  113. data/markaby/spec/spec_helper.rb +0 -44
@@ -1,64 +0,0 @@
1
- module Markaby
2
- module BuilderTags
3
- (XHTMLTransitional.tags - [:head]).each do |k|
4
- class_eval <<-CODE, __FILE__, __LINE__
5
- def #{k}(*args, &block)
6
- html_tag(#{k.inspect}, *args, &block)
7
- end
8
- CODE
9
- end
10
-
11
- # Every HTML tag method goes through an html_tag call. So, calling <tt>div</tt> is equivalent
12
- # to calling <tt>html_tag(:div)</tt>. All HTML tags in Markaby's list are given generated wrappers
13
- # for this method.
14
- #
15
- # If the @auto_validation setting is on, this method will check for many common mistakes which
16
- # could lead to invalid XHTML.
17
- def html_tag(sym, *args, &block)
18
- if @auto_validation && @tagset.self_closing.include?(sym) && block
19
- raise InvalidXhtmlError, "the `#{sym}' element is self-closing, please remove the block"
20
- elsif args.empty? && !block
21
- CssProxy.new(self, @streams.last, sym)
22
- else
23
- tag!(sym, *args, &block)
24
- end
25
- end
26
-
27
- # Builds a head tag. Adds a <tt>meta</tt> tag inside with Content-Type
28
- # set to <tt>text/html; charset=utf-8</tt>.
29
- def head(*args, &block)
30
- tag!(:head, *args) do
31
- tag!(:meta, "http-equiv" => "Content-Type", "content" => "text/html; charset=utf-8") if @output_meta_tag
32
- instance_eval(&block)
33
- end
34
- end
35
-
36
- # Builds an html tag. An XML 1.0 instruction and an XHTML 1.0 Transitional doctype
37
- # are prepended. Also assumes <tt>:xmlns => "http://www.w3.org/1999/xhtml",
38
- # :lang => "en"</tt>.
39
- def xhtml_transitional(attrs = {}, &block)
40
- self.tagset = Markaby::XHTMLTransitional
41
- xhtml_html(attrs, &block)
42
- end
43
-
44
- # Builds an html tag with XHTML 1.0 Strict doctype instead.
45
- def xhtml_strict(attrs = {}, &block)
46
- self.tagset = Markaby::XHTMLStrict
47
- xhtml_html(attrs, &block)
48
- end
49
-
50
- # Builds an html tag with XHTML 1.0 Frameset doctype instead.
51
- def xhtml_frameset(attrs = {}, &block)
52
- self.tagset = Markaby::XHTMLFrameset
53
- xhtml_html(attrs, &block)
54
- end
55
-
56
- private
57
-
58
- def xhtml_html(attrs = {}, &block)
59
- instruct! if @output_xml_instruction
60
- declare!(:DOCTYPE, :html, :PUBLIC, *tagset.doctype)
61
- tag!(:html, @root_attributes.merge(attrs), &block)
62
- end
63
- end
64
- end
@@ -1,55 +0,0 @@
1
- module Markaby
2
- # Class used by Markaby::Builder to store element options. Methods called
3
- # against the CssProxy object are added as element classes or IDs.
4
- #
5
- # See the README for examples.
6
- class CssProxy
7
- def initialize(builder, stream, sym)
8
- @builder = builder
9
- @stream = stream
10
- @sym = sym
11
- @attrs = {}
12
-
13
- @original_stream_length = @stream.length
14
-
15
- @builder.tag! sym
16
- end
17
-
18
- def respond_to?(sym, include_private = false)
19
- include_private || !private_methods.map { |m| m.to_sym }.include?(sym.to_sym) ? true : false
20
- end
21
-
22
- private
23
-
24
- # Adds attributes to an element. Bang methods set the :id attribute.
25
- # Other methods add to the :class attribute.
26
- def method_missing(id_or_class, *args, &block)
27
- if id_or_class.to_s =~ /(.*)!$/
28
- @attrs[:id] = $1
29
- else
30
- id = id_or_class
31
- @attrs[:class] = @attrs[:class] ? "#{@attrs[:class]} #{id}".strip : id
32
- end
33
-
34
- unless args.empty?
35
- if args.last.respond_to? :to_hash
36
- @attrs.merge! args.pop.to_hash
37
- end
38
- end
39
-
40
- args.push(@attrs)
41
-
42
- while @stream.length > @original_stream_length
43
- @stream.pop
44
- end
45
-
46
- if block
47
- @builder.tag! @sym, *args, &block
48
- else
49
- @builder.tag! @sym, *args
50
- end
51
-
52
- self
53
- end
54
- end
55
- end
@@ -1,7 +0,0 @@
1
- # You'll need to <tt>require 'markaby/kernel_method'</tt> for this.
2
- module Kernel
3
- # Shortcut for creating a quick block of Markaby.
4
- def mab(*args, &block)
5
- Markaby::Builder.new(*args, &block).to_s
6
- end
7
- end
@@ -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