hamlize 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
@@ -0,0 +1,11 @@
1
+ # Hamlize!!!!!!
2
+
3
+ Usage: hamlize [OPTIONS]
4
+
5
+ Description:
6
+ Converts a directory of HAML files.
7
+
8
+ Options:
9
+ -a, --auto Automatically convert file when they change.
10
+ -s, --source DIRECTORY Source directory of HAML files
11
+ -o, --output DIRECTORY Destination of the compiled files
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'hamlize'
4
+ Hamlize::CLI.new(ARGV.dup).start!
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "hamlize/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "hamlize"
7
+ s.version = Hamlize::VERSION
8
+ s.authors = ["Matte Noble"]
9
+ s.email = ["me@mattenoble.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Convert a directory of HAML into HTML.}
12
+ s.description = %q{Convert a directory of HAML into HTML.}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+ s.executables = ["hamlize"]
19
+
20
+ s.add_development_dependency "rspec", "~> 2.7.0"
21
+ s.add_dependency "haml"
22
+ s.add_dependency "guard-haml"
23
+ s.add_dependency "rb-fsevent"
24
+ s.add_dependency "rb-inotify"
25
+ s.add_dependency "rb-fchange"
26
+ end
@@ -0,0 +1,5 @@
1
+ require "haml"
2
+ require "optparse"
3
+ require "hamlize/version"
4
+ require "hamlize/cli"
5
+ require "hamlize/converter"
@@ -0,0 +1,59 @@
1
+ module Hamlize
2
+ class CLI
3
+ attr_reader :options
4
+
5
+ def initialize(args=[])
6
+ @args = args
7
+ @options = default_options
8
+ end
9
+
10
+ def start!
11
+ OptionParser.new(&method(:set_opts)).parse!(@args)
12
+ @options[:auto] ? auto! : default!
13
+ end
14
+
15
+ private
16
+
17
+ def default!
18
+ Converter.new(@options).start!
19
+ end
20
+
21
+ def auto!
22
+ require "guard"
23
+ ::Guard.start(:watchdir => @options[:source], :guardfile_contents => %{
24
+ require "hamlize/guard"
25
+
26
+ guard "hamlize", :source => "#{@options[:source]}", :output => "#{@options[:output]}" do
27
+ watch %r(^.+\.haml$)
28
+ end
29
+ })
30
+ end
31
+
32
+ def default_options
33
+ { auto: false, source: Dir.pwd, output: File.join(Dir.pwd, "compiled") }
34
+ end
35
+
36
+ def set_opts(opts)
37
+ opts.banner = <<-END
38
+ Usage: hamlize [OPTIONS]
39
+
40
+ Description:
41
+ Converts a directory of HAML files.
42
+
43
+ Options:
44
+ END
45
+
46
+ opts.on("-a", "--auto", "Automatically convert file when they change.") do
47
+ @options[:auto] = true
48
+ end
49
+
50
+ opts.on("-s", "--source DIRECTORY", "Source directory of HAML files") do |dir|
51
+ @options[:source] = File.expand_path(dir)
52
+ end
53
+
54
+ opts.on("-o", "--output DIRECTORY", "Destination of the compiled files") do |dir|
55
+ @options[:output] = File.expand_path(dir)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,41 @@
1
+ module Hamlize
2
+ class Converter
3
+ def initialize(opts={})
4
+ @opts = opts
5
+ end
6
+
7
+ def start!
8
+ Pathname.glob(haml).each do |path|
9
+ destination(path).open("w+") { |f| f.write convert(path) }
10
+ puts "[#{Time.now}] #{path} => #{destination(path)}"
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def convert(path)
17
+ ::Haml::Engine.new(path.read).to_html
18
+ end
19
+
20
+ def destination(path)
21
+ expand(path).tap { |p| p.dirname.mkpath }
22
+ end
23
+
24
+ def expand(path)
25
+ path = path.to_s.gsub(/^#{source}/, "").gsub(".haml", ".html")
26
+ Pathname.new(File.join(output, path))
27
+ end
28
+
29
+ def source
30
+ @opts[:source]
31
+ end
32
+
33
+ def output
34
+ @opts[:output]
35
+ end
36
+
37
+ def haml
38
+ "#{source}/**/*.haml"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,14 @@
1
+ require "rbconfig"
2
+ require "guard/guard"
3
+
4
+ case RbConfig::CONFIG["host_os"]
5
+ when /darwin/ then require "rb-fsevent"
6
+ when /linux/ then require "rb-inotify"
7
+ when /mswin|mingw/ then require "rb-fchange"
8
+ end
9
+
10
+ class Guard::Hamlize < Guard::Guard
11
+ def run_on_change(paths)
12
+ Hamlize::Converter.new(options).start!
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module Hamlize
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,47 @@
1
+ require "spec_helper"
2
+
3
+ describe "Hamlize" do
4
+ let(:source) { File.dirname(__FILE__) + "/sandbox/source" }
5
+ let(:dest) { File.dirname(__FILE__) + "/sandbox/source/compiled" }
6
+ let(:files) { File.dirname(__FILE__) + "/sandbox/files" }
7
+ let(:site) { File.dirname(__FILE__) + "/sandbox/source/site" }
8
+ let(:sand) { File.dirname(__FILE__) + "/sandbox/sand" }
9
+
10
+ after(:all) do
11
+ Pathname.new(dest).rmtree rescue nil
12
+ Pathname.new(site).rmtree rescue nil
13
+ Pathname.new(sand).rmtree rescue nil
14
+ end
15
+
16
+ before do
17
+ Dir.stub(:pwd).and_return(source)
18
+ end
19
+
20
+ it "compiles a directory of HAML" do
21
+ Hamlize::CLI.new.start!
22
+ output_matches(dest).should be_true
23
+ end
24
+
25
+ it "supports specifying a destination" do
26
+ Hamlize::CLI.new(["-o", site]).start!
27
+ output_matches(site).should be_true
28
+ end
29
+
30
+ it "supports a destination that is above the source" do
31
+ # File.expand_path is in C, so we can't stub where it gets `pwd` from.
32
+ converter = Hamlize::Converter.new(source: source, output: sand)
33
+ Hamlize::Converter.stub(:new).and_return(converter)
34
+ Hamlize::CLI.new(["-o", "../sand"]).start!
35
+ output_matches(sand).should be_true
36
+ end
37
+
38
+ it "supports specifying a source directory" do
39
+ Hamlize::CLI.new(["-s", files]).start!
40
+ output_matches(dest).should be_true
41
+ end
42
+
43
+ def output_matches(dest)
44
+ files = Pathname.glob("#{dest}/**/*.html").map(&:to_s)
45
+ files == ["#{dest}/index.html", "#{dest}/pages/toc.html"]
46
+ end
47
+ end
@@ -0,0 +1,3 @@
1
+ %h1 This is the title
2
+ #wrap
3
+ %a{href: "pages/toc.html"} Table of Contents
@@ -0,0 +1,7 @@
1
+ %ul
2
+ %li
3
+ .name Intro
4
+ .page 1
5
+ %li
6
+ .name Overview
7
+ .page 2
@@ -0,0 +1,5 @@
1
+ %h1 This is the title
2
+ #wrap
3
+ %a{href: "pages/toc.html"} Table of Contents
4
+
5
+ .thing
@@ -0,0 +1,7 @@
1
+ %ul
2
+ %li
3
+ .name Intro
4
+ .page 1
5
+ %li
6
+ .name Overview
7
+ .page 2
@@ -0,0 +1,2 @@
1
+ require "rspec"
2
+ require File.expand_path("../../lib/hamlize", __FILE__)
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hamlize
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matte Noble
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &70122351706000 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.7.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *70122351706000
25
+ - !ruby/object:Gem::Dependency
26
+ name: haml
27
+ requirement: &70122351705160 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70122351705160
36
+ - !ruby/object:Gem::Dependency
37
+ name: guard-haml
38
+ requirement: &70122351704140 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70122351704140
47
+ - !ruby/object:Gem::Dependency
48
+ name: rb-fsevent
49
+ requirement: &70122351703360 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70122351703360
58
+ - !ruby/object:Gem::Dependency
59
+ name: rb-inotify
60
+ requirement: &70122351690540 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70122351690540
69
+ - !ruby/object:Gem::Dependency
70
+ name: rb-fchange
71
+ requirement: &70122351689460 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70122351689460
80
+ description: Convert a directory of HAML into HTML.
81
+ email:
82
+ - me@mattenoble.com
83
+ executables:
84
+ - hamlize
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - .gitignore
89
+ - Gemfile
90
+ - README.md
91
+ - Rakefile
92
+ - bin/hamlize
93
+ - hamlize.gemspec
94
+ - lib/hamlize.rb
95
+ - lib/hamlize/cli.rb
96
+ - lib/hamlize/converter.rb
97
+ - lib/hamlize/guard.rb
98
+ - lib/hamlize/version.rb
99
+ - spec/hamlize_spec.rb
100
+ - spec/sandbox/files/index.haml
101
+ - spec/sandbox/files/pages/toc.haml
102
+ - spec/sandbox/source/index.haml
103
+ - spec/sandbox/source/pages/toc.haml
104
+ - spec/spec_helper.rb
105
+ homepage: ''
106
+ licenses: []
107
+ post_install_message:
108
+ rdoc_options: []
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 1.8.10
126
+ signing_key:
127
+ specification_version: 3
128
+ summary: Convert a directory of HAML into HTML.
129
+ test_files:
130
+ - spec/hamlize_spec.rb
131
+ - spec/sandbox/files/index.haml
132
+ - spec/sandbox/files/pages/toc.haml
133
+ - spec/sandbox/source/index.haml
134
+ - spec/sandbox/source/pages/toc.haml
135
+ - spec/spec_helper.rb