haml_user_tags 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MTY2YzM3MWE1NmUyY2M1MDQ0YmYzZDIxNTE2YmYxOWIwMTk0NjhkMw==
5
+ data.tar.gz: !binary |-
6
+ YjQ5YzM4ODRmZTY4MTE5ZTAzZjE5MGFkNTNiMDM0MDE0MjA1NjZiOA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MWRkNDEyMjQ2ZmQ5MTAxZjAxNTUxNzg0Y2E5ODM2MDZhZjQ3Yzc1YjRhYTli
10
+ N2NlMzE4MDA5OTZkZmEzM2RhNGM4MjQ1ZGIzYzNlNzY5NGE2MDNiYjc3MDk4
11
+ Nzc1NGRlOTVhY2Y3MmEzMzM5YzhiOWZiOGVjOTRlN2Y1NWNhNjc=
12
+ data.tar.gz: !binary |-
13
+ YmYyMzllODZkYzMzZjg2YzM2NjY5YWUwNjI1NmQ1NWZlOWFiZTRjZjliYzAz
14
+ ZDY5ZmE0OWVjMzQwNGQ0ZDcxMTA3NDM1MDhiZmFjNjZjOWE1OWZmYWU3MzQz
15
+ MzM1MDk0ZmIxZjcxNTQzNGVmZmY5YTAwZTBjMjYwYzNhNDhjNDI=
data/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ /site/public
24
+ /publish
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in haml_user_tags.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Ryan Patterson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # HamlUserTags
2
+
3
+ Define reusable functions in Haml that can be called with native Haml syntax.
4
+
5
+ ## Features
6
+
7
+ - Native Haml syntax for calling helper functions
8
+ - Ability to define helper functions using Haml
9
+ - Ability to include user tags from one Haml file in another
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'haml_user_tags'
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install haml_user_tags
24
+
25
+ ## Usage
26
+
27
+ TODO: Write usage instructions here
28
+
29
+ ## TODO
30
+
31
+ - Verify it works on Ruby 1.9.7 / Rails 3.2.9
32
+ - Find best use cases inside SI code and bring in
33
+ - Explain the lazy evaluation of content
34
+ - Document how to migrate from partials
35
+ - Create a wrapper around render :partial to set it as a custom tag.
36
+
37
+ It should ensure that tags in the partial don't get included. Potentially use
38
+ Haml::to_method or whatever to do the defining.
39
+
40
+ ## Motivation
41
+
42
+ Guy Steele's [Growing a Language](http://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf) ([Video](https://www.youtube.com/watch?v=_ahvzDzKdB0)) gives a great demonstration of why user tags in Haml are an essential feature.
43
+
44
+ ## Contributing
45
+
46
+ 1. Fork it ( https://github.com/[my-github-username]/haml_user_tags/fork )
47
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
48
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
49
+ 4. Push to the branch (`git push origin my-new-feature`)
50
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require "bundler/gem_tasks"
2
+ require 'cucumber/rake/task'
3
+
4
+ task :site => 'site:publish'
5
+ namespace :site do
6
+ desc "Build web site and commit to gh-pages"
7
+ task :publish do
8
+ `git diff --exit-code && git diff --cached --exit-code`
9
+ unless $?.success?
10
+ warn "Publish the site from a clean working directory"
11
+ raise "Exiting"
12
+ end
13
+ local_commit = `git rev-parse HEAD`
14
+ cmd = [
15
+ 'cd site',
16
+ 'stasis',
17
+ 'cd ..',
18
+ "( [ -d publish ] || git clone -sn --branch gh-pages #{File.dirname __FILE__} publish )",
19
+ 'cp -R site/public/ publish',
20
+ 'cd publish',
21
+ 'git add -A .',
22
+ "git commit -m 'Exported site from #{local_commit}'",
23
+ 'git push origin gh-pages'
24
+ ].join " &&\n"
25
+ `#{cmd}`
26
+ end
27
+
28
+ desc "Spawn a local server for the site"
29
+ task :dev do
30
+ pid = spawn "cd site && ( stasis -d & python -m SimpleHTTPServer )"
31
+ begin
32
+ Process.wait pid
33
+ rescue Interrupt
34
+ Process.kill pid
35
+ end
36
+ end
37
+
38
+ task :default => :publish
39
+ end
40
+
41
+ Cucumber::Rake::Task.new(:features) do |t|
42
+ t.cucumber_opts = "features --format pretty"
43
+ end
44
+
45
+ task :default => :features
data/bin/hamlut ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+ # The command line Haml parser, augmented with HamlUserTags.
3
+
4
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
5
+ require 'haml_user_tags'
6
+ require 'haml/exec'
7
+
8
+ opts = Haml::Exec::Haml.new(ARGV)
9
+ opts.instance_eval do
10
+ @options[:for_engine][:compiler_class] = HamlUserTags::Compiler
11
+ end
12
+ opts.parse!
@@ -0,0 +1,94 @@
1
+ Feature: Define user tags
2
+ HamlUserTags allows you to define a helper function directly in a Haml
3
+ template. The helper function will be accessible to the template it was
4
+ included from.
5
+
6
+ Scenario: Basic user tags
7
+ Given a file named "template.haml" that contains:
8
+ """haml
9
+ - define_tag :Tag do
10
+ %p This is Tag.
11
+ %Tag
12
+ %Tag
13
+ """
14
+ When I render the template "template.haml"
15
+ Then the output should be:
16
+ """html
17
+ <p>This is Tag.</p>
18
+ <p>This is Tag.</p>
19
+ """
20
+
21
+ Scenario: User tags with attributes
22
+ Given a file named "template.haml" that contains:
23
+ """haml
24
+ - define_tag :Tag do |attributes|
25
+ %p= attributes.inspect
26
+ %Tag{ :foo => :bar }
27
+ %Tag#first_tag.cls
28
+ %Tag.a{ :class => "b" }
29
+ """
30
+ When I render the template "template.haml"
31
+ Then the output should be:
32
+ """html
33
+ <p>{"foo"=>"bar"}</p>
34
+ <p>{"id"=>"first_tag", "class"=>"cls"}</p>
35
+ <p>{"class"=>"a b"}</p>
36
+ """
37
+
38
+ Scenario: User tags with content
39
+ Given a file named "template.haml" that contains:
40
+ """haml
41
+ - define_tag :Tag do |attributes, content|
42
+ %p= content
43
+ %Tag inline content
44
+ %Tag
45
+ %strong
46
+ nested content
47
+ """
48
+ When I render the template "template.haml"
49
+ Then the output should be:
50
+ """html
51
+ <p>inline content</p>
52
+ <p>
53
+ <strong>
54
+ nested content
55
+ </strong>
56
+ </p>
57
+ """
58
+
59
+ Scenario: Lazy evaluation of content
60
+ Given a file named "template.haml" that contains:
61
+ """haml
62
+ - define_tag :Tag do |attributes, content|
63
+ - begin
64
+ = content
65
+ - rescue
66
+ Caught an exception!
67
+ %Tag
68
+ - raise "Threw an exception!"
69
+ """
70
+ When I render the template "template.haml"
71
+ Then the output should be:
72
+ """html
73
+ Caught an exception!
74
+ """
75
+
76
+ Scenario: Pass content through multiple user tags
77
+ Given a file named "template.haml" that contains:
78
+ """haml
79
+ - define_tag :A do |attributes, content|
80
+ %p= content
81
+ - define_tag :B do |attributes, content|
82
+ %A
83
+ = content
84
+ - define_tag :C do |attributes, content|
85
+ %A= content
86
+ %B foo
87
+ %C bar
88
+ """
89
+ When I render the template "template.haml"
90
+ Then the output should be:
91
+ """html
92
+ <p>foo</p>
93
+ <p>bar</p>
94
+ """
@@ -0,0 +1,56 @@
1
+ Feature: Call functions from Haml
2
+ HamlUserTags allows you to call helper functions that have a special signature using standard Haml tag syntax.
3
+
4
+ Background:
5
+ Given a helper module that contains:
6
+ """ruby
7
+ def CustomTag attributes, &block
8
+ content = capture_haml &block if block
9
+ "CustomTag called with #{attributes.inspect}, #{content.inspect}"
10
+ end
11
+
12
+ def class_name
13
+ "class_name"
14
+ end
15
+ """
16
+
17
+ Scenario: Basic user tags
18
+ Given a file named "template.haml" that contains:
19
+ """haml
20
+ %CustomTag
21
+ """
22
+ When I render the template "template.haml"
23
+ Then the output should be:
24
+ """html
25
+ CustomTag called with {}, nil
26
+ """
27
+
28
+ Scenario: User tags with attribute
29
+ Given a file named "template.haml" that contains:
30
+ """haml
31
+ %CustomTag#id.c1.c2{ :class => class_name, :title => 'Title' }
32
+ """
33
+ When I render the template "template.haml"
34
+ Then the output should be:
35
+ """html
36
+ CustomTag called with {"id"=>"id", "class"=>"c1 c2 class_name", "title"=>"Title"}, nil
37
+ """
38
+
39
+ Scenario: User tags with content
40
+ Given a file named "template.haml" that contains:
41
+ """haml
42
+ %CustomTag
43
+ %CustomTag inline content
44
+ %CustomTag= "Ruby content"
45
+ %CustomTag
46
+ = "Ruby"
47
+ and normal
48
+ """
49
+ When I render the template "template.haml"
50
+ Then the output should be:
51
+ """html
52
+ CustomTag called with {}, nil
53
+ CustomTag called with {}, "inline content"
54
+ CustomTag called with {}, "Ruby content"
55
+ CustomTag called with {}, "Ruby\nand normal\n"
56
+ """
@@ -0,0 +1,79 @@
1
+ Feature: Include tags in Haml templates
2
+ Once you have created a template that defines some tags in Haml, those tags can be imported into other templates and reused.
3
+
4
+ Background:
5
+ Given a file named "helper.haml" that contains:
6
+ """haml
7
+ - define_tag :RemoteTag do
8
+ %p Remote tag
9
+
10
+ Output from the helper file is discarded
11
+ """
12
+
13
+ Scenario: Importing directly into a template
14
+ Given a file named "template.haml" that contains:
15
+ """haml
16
+ - include_tags "helper.haml"
17
+ %RemoteTag
18
+ %RemoteTag
19
+ """
20
+ When I render the template "template.haml"
21
+ Then the output should be:
22
+ """html
23
+ <p>Remote tag</p>
24
+ <p>Remote tag</p>
25
+ """
26
+
27
+ Scenario: Importing into a helper
28
+ Given a helper module that contains:
29
+ """ruby
30
+ extend HamlUserTags::Helpers
31
+ include_tags "helper.haml"
32
+ """
33
+ And a file named "template.haml" that contains:
34
+ """haml
35
+ %RemoteTag
36
+ %RemoteTag
37
+ """
38
+ When I render the template "template.haml"
39
+ Then the output should be:
40
+ """html
41
+ <p>Remote tag</p>
42
+ <p>Remote tag</p>
43
+ """
44
+
45
+ Scenario: Calling user tags from outside Haml
46
+ Given a helper module that contains:
47
+ """ruby
48
+ extend HamlUserTags::Helpers
49
+ include_tags "helper.haml"
50
+ """
51
+ When I evaluate the ruby code:
52
+ """ruby
53
+ foo = Class.new do
54
+ include CucumberHelper
55
+ end.new
56
+ foo.RemoteTag
57
+ """
58
+ Then the output should be:
59
+ """html
60
+ <p>Remote tag</p>
61
+ """
62
+
63
+ Scenario: Binding to the importing context
64
+ Given a file named "helper.haml" that contains:
65
+ """haml
66
+ - define_tag :DebugSelf do |attributes|
67
+ = (attributes["target"].equal?(self)).inspect
68
+ """
69
+ And a file named "template.haml" that contains:
70
+ """haml
71
+ - include_tags "helper.haml"
72
+ %DebugSelf{ "target" => self }
73
+ """
74
+ When I render the template "template.haml"
75
+ Then the output should be:
76
+ """
77
+ true
78
+ """
79
+
@@ -0,0 +1,37 @@
1
+ require 'haml_user_tags'
2
+ require 'rspec/expectations'
3
+ require 'fakefs/safe'
4
+
5
+ World(RSpec::Matchers)
6
+
7
+ Before do
8
+ module CucumberHelper
9
+ end
10
+ FakeFS.activate!
11
+ end
12
+
13
+ After do
14
+ Object.send(:remove_const, :CucumberHelper)
15
+ FakeFS.deactivate!
16
+ end
17
+
18
+ Given(/^a helper module that contains:$/) do |string|
19
+ CucumberHelper.module_eval string
20
+ end
21
+
22
+ Given(/^a file named "(.*?)" that contains:$/) do |name, content|
23
+ File.write(name, content)
24
+ end
25
+
26
+ When(/^I render the template "(.*?)"$/) do |filename|
27
+ template = "- extend CucumberHelper\n#{File.read(filename)}"
28
+ @output = HamlUserTags::Engine.new(template).to_html
29
+ end
30
+
31
+ When(/^I evaluate the ruby code:$/) do |string|
32
+ @output = eval(string).to_s
33
+ end
34
+
35
+ Then(/^the output should be:$/) do |string|
36
+ expect(@output).to be == "#{string}\n"
37
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'haml_user_tags/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "haml_user_tags"
8
+ spec.version = HamlUserTags::VERSION
9
+ spec.authors = ["Ryan Patterson"]
10
+ spec.email = ["cgamesplay@cgamesplay.com"]
11
+ spec.summary = %q{Define reusable functions in Haml that can be called with native Haml syntax.}
12
+ spec.homepage = ""
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "haml", "~> 4.0"
21
+
22
+ spec.add_development_dependency "bundler", "~> 1.6"
23
+ spec.add_development_dependency "rake"
24
+
25
+ # Site dependencies
26
+ spec.add_development_dependency "stasis"
27
+ spec.add_development_dependency "therubyracer"
28
+ spec.add_development_dependency "less"
29
+ spec.add_development_dependency "pygments.rb"
30
+
31
+ # Test dependencies
32
+ spec.add_development_dependency "cucumber"
33
+ spec.add_development_dependency "rspec-expectations"
34
+ spec.add_development_dependency "fakefs"
35
+ end
@@ -0,0 +1,50 @@
1
+ module HamlUserTags
2
+ class Compiler < Haml::Compiler
3
+ def compile(node)
4
+ if node.type == :tag and node.value[:name] =~ HamlUserTags::TAG_NAME_REGEX
5
+ node = convert_user_tag_to_script node
6
+ end
7
+ super node
8
+ end
9
+
10
+ private
11
+ def convert_user_tag_to_script(node)
12
+ t = node.value
13
+ attributes = t[:attributes]
14
+ attributes_hashes = t[:attributes_hashes]
15
+ object_ref = t[:object_ref]
16
+
17
+ if object_ref == "nil" and attributes.length == 0 and attributes_hashes.empty?
18
+ attributes = "{}"
19
+ else
20
+ if attributes_hashes.empty?
21
+ attributes_hashes = ''
22
+ elsif attributes_hashes.size == 1
23
+ attributes_hashes = ", #{attributes_hashes.first}"
24
+ else
25
+ attributes_hashes = ", #{attributes_hashes.join(", ")}"
26
+ end
27
+ attributes = "HamlUserTags::Helpers.attributes_hash(#{inspect_obj(t[:attributes])}, #{object_ref}#{attributes_hashes})"
28
+ end
29
+
30
+ if node.children.length > 0
31
+ contents = " do"
32
+ elsif t[:value] and t[:parse]
33
+ contents = " { _hamlout.push_text(#{t[:value]}, 0, false) }"
34
+ elsif t[:value] and not t[:parse]
35
+ contents = " { _hamlout.push_text(#{inspect_obj t[:value]}, 0, false) }"
36
+ end
37
+
38
+ code = "#{t[:name]}(#{attributes})#{contents}"
39
+ script_value = t.clone.update({
40
+ :text => code,
41
+ :escape_html => false,
42
+ :preserve => false,
43
+ :keyword => nil,
44
+ :value => nil,
45
+ :parse => nil,
46
+ })
47
+ Haml::Parser::ParseNode.new(:script, node.line, script_value, node.parent, node.children)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ module HamlUserTags
2
+ class Engine < Haml::Engine
3
+ def initialize(template, options = {})
4
+ options = options.clone.update(:compiler_class => HamlUserTags::Compiler)
5
+ super template, options
6
+ end
7
+
8
+ # Defines a method for each user tag in the template that renders the tag
9
+ # and returns the result as a string.
10
+ def extend_object obj
11
+ mod = Module.new
12
+ mod.send :include, Haml::Helpers
13
+ render mod
14
+ method = obj.is_a?(Module) ? :include : :extend
15
+ obj.send method, mod
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,62 @@
1
+ require 'delegate'
2
+
3
+ module HamlUserTags
4
+ module Helpers
5
+ # Same as Haml::Buffer.attributes, but returns the hash instead of writing
6
+ # the attributes to the buffer.
7
+ def self.attributes_hash(class_id, obj_ref, *attributes_hashes)
8
+ attributes = class_id
9
+ attributes_hashes.each do |old|
10
+ Haml::Buffer.merge_attrs(attributes, Hash[old.map {|k, v| [k.to_s, v]}])
11
+ end
12
+ Haml::Buffer.merge_attrs(attributes, Haml::Buffer.new.parse_object_ref(obj_ref)) if obj_ref
13
+ attributes
14
+ end
15
+
16
+ def define_tag name, &tag
17
+ unless name =~ HamlUserTags::TAG_NAME_REGEX
18
+ raise "define_tag: #{name.inspect} is not a valid user tag name. It must match #{HamlUserTags::TAG_NAME_REGEX}"
19
+ end
20
+
21
+ func = proc do |attributes = {}, &contents|
22
+ @haml_buffer ||= Haml::Buffer.new(nil, Haml::Options.defaults)
23
+ tag.binding.eval("proc { |v| _hamlout = v }").call @haml_buffer
24
+ # Use a proxy String class that will only evaluate its contents once
25
+ # it is referenced. This make the behavior similar to how "yield"
26
+ # would be in a ruby helper.
27
+ content_getter = LazyContents.new { capture_haml(&contents) || "" } if contents
28
+ capture_haml { instance_exec attributes, content_getter, &tag }
29
+ end
30
+
31
+ define_singleton_method name, &func
32
+ if self.is_a?(Module)
33
+ define_method name, &func
34
+ end
35
+ end
36
+
37
+ def include_tags path
38
+ source = File.read path
39
+ HamlUserTags::Engine.new(source).extend_object self
40
+ nil
41
+ end
42
+ end
43
+
44
+ class LazyContents < DelegateClass(String)
45
+ def initialize(&generator)
46
+ @generator = generator
47
+ end
48
+
49
+ def __getobj__
50
+ unless @results
51
+ @results, @generator = @generator.call, nil
52
+ end
53
+ @results
54
+ end
55
+ end
56
+ end
57
+
58
+ module Haml
59
+ module Helpers
60
+ include HamlUserTags::Helpers
61
+ end
62
+ end
@@ -0,0 +1,21 @@
1
+ module HamlUserTags
2
+ module Helpers
3
+ alias_method :include_tags_without_rails, :include_tags
4
+ # Override the base include_tags to take advantage of Rails' template
5
+ # location features
6
+ def include_tags path
7
+ view_paths = ActionController::Base._view_paths
8
+ lookup_context = ActionView::LookupContext.new(view_paths, {}, [])
9
+ template = lookup_context.find_template(path, [], true)
10
+ HamlUserTags::Engine.new(template.source).extend_object self
11
+ nil
12
+ end
13
+
14
+ class << self
15
+ def attributes_hash_with_indifference *args
16
+ ActiveSupport::HashWithIndifferentAccess.new attributes_hash_without_indifference *args
17
+ end
18
+ alias_method_chain :attributes_hash, :indifference
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module HamlUserTags
2
+ class Reloader < Rails::Railtie
3
+ initializer "haml_user_tags.enable_reloading" do
4
+ watcher = ActiveSupport::FileUpdateChecker.new([], "#{Rails.root}/app/views/helpers" => %w{haml}) {}
5
+ Rails.application.reloaders << watcher
6
+ ActionDispatch::Reloader.to_prepare do
7
+ watcher.execute_if_updated
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module HamlUserTags
2
+ VERSION = "0.9.0"
3
+ end
@@ -0,0 +1,17 @@
1
+ require "haml"
2
+ require "haml_user_tags/version"
3
+ require "haml_user_tags/compiler"
4
+ require "haml_user_tags/engine"
5
+ require "haml_user_tags/helpers"
6
+
7
+ module HamlUserTags
8
+ TAG_NAME_REGEX = /^[A-Z][a-zA-Z]*$/
9
+ end
10
+
11
+ if defined? ActiveSupport
12
+ require 'haml_user_tags/rails/helpers'
13
+ require "haml_user_tags/rails/reloader"
14
+
15
+ # Set up Haml to use HamlUserTags by default
16
+ Haml::Template.options[:compiler_class] = HamlUserTags::Compiler
17
+ end