html_mockup 0.8.4 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -2
- data/.travis.yml +12 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +5 -0
- data/README.md +95 -0
- data/Rakefile +9 -4
- data/bin/mockup +1 -1
- data/doc/cli.md +46 -0
- data/doc/mockupfile.md +3 -0
- data/doc/templating.md +88 -0
- data/html_mockup.gemspec +8 -4
- data/lib/html_mockup/cli.rb +57 -65
- data/lib/html_mockup/cli/command.rb +23 -0
- data/lib/html_mockup/cli/generate.rb +5 -0
- data/lib/html_mockup/cli/release.rb +10 -0
- data/lib/html_mockup/cli/serve.rb +29 -0
- data/lib/html_mockup/generators.rb +18 -1
- data/lib/html_mockup/generators/generator.rb +23 -0
- data/lib/html_mockup/generators/new.rb +4 -3
- data/lib/html_mockup/generators/templates/generator.tt +13 -0
- data/lib/html_mockup/project.rb +11 -11
- data/lib/html_mockup/release.rb +3 -3
- data/lib/html_mockup/resolver.rb +51 -28
- data/lib/html_mockup/template.rb +95 -11
- data/roger.gemspec +29 -0
- data/test/project/Gemfile +2 -1
- data/test/project/Gemfile.lock +17 -12
- data/test/project/Mockupfile +3 -0
- data/test/project/html/formats/index.html +1 -0
- data/test/project/html/formats/json.json.erb +0 -0
- data/test/project/html/layouts/content-for.html.erb +17 -0
- data/test/project/html/mockup/encoding.html +3 -0
- data/test/project/html/partials/load_path.html.erb +3 -0
- data/test/project/layouts/test.html.erb +8 -1
- data/test/project/layouts/yield.html.erb +1 -0
- data/test/project/lib/generators/test.rb +9 -0
- data/test/project/partials/formats/erb.html.erb +1 -0
- data/test/project/partials/partials-test.html.erb +1 -0
- data/test/project/partials/test/front_matter.html.erb +1 -0
- data/test/project/partials/test/json.json.erb +1 -0
- data/test/project/partials/test/simple.html.erb +1 -0
- data/test/project/partials2/partials2-test.html.erb +1 -0
- data/test/unit/cli_test.rb +12 -0
- data/test/unit/generators_test.rb +75 -0
- data/test/unit/release/cleaner_test.rb +13 -8
- data/test/unit/resolver_test.rb +92 -0
- data/test/unit/template_test.rb +127 -0
- metadata +100 -8
- data/README.rdoc +0 -89
- data/test/generator-subcommand.rb +0 -54
data/.gitignore
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
pkg/*
|
2
|
+
Gemfile.lock
|
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Version 0.9.0
|
4
|
+
* More documentation!
|
5
|
+
* More tests! (and CI!)
|
6
|
+
* Thor and Tilt updates
|
7
|
+
* Add possibility to load external generators from gems (with the `HtmlMockup::Generators::Base.register` method)
|
8
|
+
* Partials now automatically prefer templates of the same extension as the parent
|
9
|
+
* ERB Templates now support `content_for(:name) do ... end` blocks which can be yielded by `:name` in the layout
|
10
|
+
* Multiple load paths for partials are now supported
|
11
|
+
* Minor changes and fixes
|
12
|
+
* First preparations for version 1.0.0. which will be called **Roger**
|
13
|
+
|
3
14
|
## Version 0.8.4
|
4
15
|
* Fix requirejs processor to clean up the correct paths
|
5
16
|
* Allow typing of Y to rsync instead of full "yes"
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# HtmlMockup
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/html_mockup.png)](http://badge.fury.io/rb/html_mockup)
|
4
|
+
[![Build Status](https://travis-ci.org/DigitPaint/html_mockup.png?branch=master)](https://travis-ci.org/DigitPaint/html_mockup)
|
5
|
+
|
6
|
+
## What is it?
|
7
|
+
|
8
|
+
HtmlMockup is your friendly front-end development toolbox! It helps you with these 4 things:
|
9
|
+
|
10
|
+
1. **Generate** : Set up your projects
|
11
|
+
1. **Serve** : Development server
|
12
|
+
1. **Test** : Test/lint your stuff
|
13
|
+
1. **Release** : Release your code
|
14
|
+
|
15
|
+
## Get started
|
16
|
+
|
17
|
+
We assume you have a working Ruby 1.9.x or higher running.
|
18
|
+
|
19
|
+
1. Install HtmlMockup
|
20
|
+
|
21
|
+
```shell
|
22
|
+
gem install html_mockup
|
23
|
+
```
|
24
|
+
|
25
|
+
1. Create a new project
|
26
|
+
|
27
|
+
```shell
|
28
|
+
mockup generate new PROJECT_DIR
|
29
|
+
```
|
30
|
+
|
31
|
+
Replace `PROJECT_DIR` with your project name
|
32
|
+
|
33
|
+
1. Start the development server
|
34
|
+
|
35
|
+
```shell
|
36
|
+
mockup serve
|
37
|
+
```
|
38
|
+
|
39
|
+
Open your webbrowser and go to `http://localhost:9000/`
|
40
|
+
|
41
|
+
1. Release your project
|
42
|
+
|
43
|
+
```shell
|
44
|
+
mockup release
|
45
|
+
```
|
46
|
+
|
47
|
+
## Where to go from here?
|
48
|
+
|
49
|
+
Read more documentation:
|
50
|
+
|
51
|
+
* [**Templating** Learn the power of HtmlMockup built in templating](doc/templating.md)
|
52
|
+
* [**CLI** Learn about the different `mockup` commands](doc/cli.md)
|
53
|
+
* [**Mockupfile** Learn how to configure and extend your Project](doc/mockupfile.md)
|
54
|
+
|
55
|
+
## Why?
|
56
|
+
|
57
|
+
When we started with HtmlMockup there was no Grunt/Gulp/whatever and with us being a Ruby shop we wrote HtmlMockup. Since its beginning it has evolved into quite a powerful tool.
|
58
|
+
|
59
|
+
Why would HtmlMockup be better than any other?
|
60
|
+
It's not it just does some things differently.
|
61
|
+
|
62
|
+
* Ruby
|
63
|
+
* Code over configuration
|
64
|
+
* Based on little modules, simple to extend
|
65
|
+
* Streams & files
|
66
|
+
* 4 easy commands separate concerns
|
67
|
+
|
68
|
+
## Contributors
|
69
|
+
|
70
|
+
[View contributors](https://github.com/digitpaint/html_mockup/graphs/contributors)
|
71
|
+
|
72
|
+
## License
|
73
|
+
|
74
|
+
(The MIT License)
|
75
|
+
|
76
|
+
Copyright (c) 2014 Digitpaint
|
77
|
+
|
78
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
79
|
+
a copy of this software and associated documentation files (the
|
80
|
+
'Software'), to deal in the Software without restriction, including
|
81
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
82
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
83
|
+
permit persons to whom the Software is furnished to do so, subject to
|
84
|
+
the following conditions:
|
85
|
+
|
86
|
+
The above copyright notice and this permission notice shall be
|
87
|
+
included in all copies or substantial portions of the Software.
|
88
|
+
|
89
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
90
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
91
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
92
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
93
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
94
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
95
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'rake/testtask'
|
2
|
+
|
3
|
+
task :default => [:test]
|
4
|
+
|
5
|
+
Rake::TestTask.new do |t|
|
6
|
+
t.libs << "test"
|
7
|
+
t.test_files = FileList['test/unit/**/*_test.rb']
|
8
|
+
t.verbose = true
|
9
|
+
end
|
data/bin/mockup
CHANGED
data/doc/cli.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Command Line Interface
|
2
|
+
|
3
|
+
The easiest way to get help is through the commandline by running
|
4
|
+
|
5
|
+
```shell
|
6
|
+
mockup help
|
7
|
+
```
|
8
|
+
|
9
|
+
or to get help on a specific subcommand
|
10
|
+
|
11
|
+
```shell
|
12
|
+
mockup help [subcommand]
|
13
|
+
```
|
14
|
+
|
15
|
+
## Generate
|
16
|
+
|
17
|
+
```shell
|
18
|
+
mockup generate [generator] [options]
|
19
|
+
```
|
20
|
+
|
21
|
+
## Serve
|
22
|
+
|
23
|
+
```shell
|
24
|
+
mockup serve [options]
|
25
|
+
```
|
26
|
+
|
27
|
+
Starts a webserver (port 9000 by default)
|
28
|
+
|
29
|
+
|
30
|
+
## Release
|
31
|
+
|
32
|
+
```shell
|
33
|
+
mockup release [options]
|
34
|
+
```
|
35
|
+
|
36
|
+
Releases the project
|
37
|
+
|
38
|
+
## Global options
|
39
|
+
|
40
|
+
All commands accept these options.
|
41
|
+
|
42
|
+
```
|
43
|
+
Options:
|
44
|
+
-v, [--verbose] # Set's verbose output
|
45
|
+
-h, [--help] # Help
|
46
|
+
```
|
data/doc/mockupfile.md
ADDED
data/doc/templating.md
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
# Templating
|
2
|
+
|
3
|
+
## Directories
|
4
|
+
|
5
|
+
Before we get started, it's good to know that there are a couple of "special" folders within any HtmlMockup project. Don't worry, you can configure these; they're not hard-coded. The folders are:
|
6
|
+
|
7
|
+
* **project-path** this is the main directory containing the Mockupfile and all other directories.
|
8
|
+
* **html-path** this is the directory where all your HTML/CSS/Javascript will go (in subdirectories of course).
|
9
|
+
* **partials-path** this is the directory where all partials reside.
|
10
|
+
* **layouts-path** this is the directory where the layouts hang out.
|
11
|
+
|
12
|
+
The default project tree looks like this:
|
13
|
+
|
14
|
+
```
|
15
|
+
project-path
|
16
|
+
|
|
17
|
+
|- html (html-path)
|
18
|
+
|
|
19
|
+
|- partials (partials-path)
|
20
|
+
|
|
21
|
+
\- layouts (layouts-path)
|
22
|
+
```
|
23
|
+
|
24
|
+
Only the html-path has to exist. The others are not required.
|
25
|
+
|
26
|
+
## HTML
|
27
|
+
|
28
|
+
The html-path is actually the root for all you front-end code. This is what will be served as the document-root with `mockup serve` and will be the base for a release when using `mockup release`.
|
29
|
+
|
30
|
+
In the html-path you can put static files (images, documents, etc.) but also templates. Anything that the [Tilt Engine](https://github.com/rtomayko/tilt) can handle is ok. The only thing Mockup adds is handling for front-matter, layouts and partials.
|
31
|
+
|
32
|
+
## Front-matter
|
33
|
+
|
34
|
+
Every template can optionally start with a bit of front-matter. Front-matter is defined as follows:
|
35
|
+
|
36
|
+
```yaml
|
37
|
+
---
|
38
|
+
key: value
|
39
|
+
---
|
40
|
+
```
|
41
|
+
|
42
|
+
Front-matter is parsed as YAML and can contain data to be used in the template, layout or partial. You can access
|
43
|
+
these values in the templates (layouts and partials included) by using `document.KEY`.
|
44
|
+
|
45
|
+
## Layouts
|
46
|
+
|
47
|
+
Layouts are basically "wrap" templates. The layout will wrap around the rendered template. In the template front-matter you define what layout it should use by setting the `layout` key.
|
48
|
+
|
49
|
+
### An example
|
50
|
+
|
51
|
+
|
52
|
+
#### html/template.html.erb
|
53
|
+
```erb
|
54
|
+
---
|
55
|
+
layout: default
|
56
|
+
---
|
57
|
+
Template
|
58
|
+
```
|
59
|
+
|
60
|
+
#### layouts/default.html.erb
|
61
|
+
```erb
|
62
|
+
Layout (before)
|
63
|
+
<% yield %>
|
64
|
+
Layout (after)
|
65
|
+
```
|
66
|
+
|
67
|
+
#### Results
|
68
|
+
This would result in:
|
69
|
+
|
70
|
+
```
|
71
|
+
Layout (before)
|
72
|
+
Template
|
73
|
+
Layout (after)
|
74
|
+
```
|
75
|
+
|
76
|
+
## Partials
|
77
|
+
|
78
|
+
Partials are little pieces of template that can be easily reused. You can access the partials throught the `partial("partialpath")` method. You can optionall pass variables to the partial by passing a ruby hash of options as a second parameter. This works like this:
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
partial("path/to/partial/relative/to/partials-path", {:key => "value"})
|
82
|
+
```
|
83
|
+
|
84
|
+
In the partial these can be accessed as local variables. So for instance in you `test.html.erb` partial that would look like this:
|
85
|
+
|
86
|
+
```erb
|
87
|
+
<%= key %>
|
88
|
+
```
|
data/html_mockup.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "html_mockup"
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.9.0"
|
6
6
|
|
7
7
|
s.authors = ["Flurin Egger", "Edwin van der Graaf", "Joran Kapteijns"]
|
8
8
|
s.email = ["info@digitpaint.nl", "flurin@digitpaint.nl"]
|
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
20
|
s.extra_rdoc_files = [
|
21
|
-
"README.
|
22
|
-
]
|
21
|
+
"README.md"
|
22
|
+
] + `git ls-files -- {doc}/*`.split("\n")
|
23
23
|
|
24
24
|
s.rdoc_options = ["--charset=UTF-8"]
|
25
25
|
|
@@ -27,7 +27,11 @@ Gem::Specification.new do |s|
|
|
27
27
|
|
28
28
|
s.add_dependency("thor", ["~> 0.16.0"])
|
29
29
|
s.add_dependency("rack", [">= 1.0.0"])
|
30
|
-
s.add_dependency("tilt", ["~>
|
30
|
+
s.add_dependency("tilt", ["~> 2.0.1"])
|
31
|
+
s.add_dependency("mime-types", ["~> 2.2"])
|
31
32
|
s.add_dependency("sass", [">= 0"])
|
33
|
+
s.add_dependency("yui-compressor", [">= 0"])
|
32
34
|
s.add_dependency("hpricot", [">= 0.6.4"])
|
35
|
+
|
36
|
+
s.add_development_dependency("test-unit", "~> 2.5.5")
|
33
37
|
end
|
data/lib/html_mockup/cli.rb
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
|
3
|
+
# Require bundler gems if available
|
4
|
+
if Object.const_defined?(:Bundler)
|
5
|
+
Bundler.require(:default)
|
6
|
+
end
|
7
|
+
|
8
|
+
|
2
9
|
require 'thor'
|
3
10
|
require 'thor/group'
|
4
11
|
|
@@ -8,50 +15,55 @@ include FileUtils
|
|
8
15
|
|
9
16
|
require File.dirname(__FILE__) + "/template"
|
10
17
|
require File.dirname(__FILE__) + "/project"
|
11
|
-
require File.dirname(__FILE__) + "/generators"
|
12
18
|
require File.dirname(__FILE__) + "/w3c_validator"
|
13
19
|
|
20
|
+
|
14
21
|
module HtmlMockup
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
def
|
30
|
-
|
31
|
-
|
32
|
-
options.each{|k,v| server_options[k.to_sym] = v }
|
33
|
-
server_options[:server] = {}
|
34
|
-
[:port, :handler, :validate].each do |k|
|
35
|
-
server_options[:server][k] = server_options.delete(k) if server_options.has_key?(k)
|
36
|
-
end
|
37
|
-
|
38
|
-
# Load the project, it should take care of all the paths
|
39
|
-
@project = initialize_project(path, server_options)
|
40
|
-
|
41
|
-
server = @project.server
|
42
|
-
server.set_options(server_options[:server])
|
43
|
-
|
44
|
-
puts "Running HtmlMockup with #{server.handler.inspect} on port #{server.port}"
|
45
|
-
puts banner(@project)
|
46
|
-
|
47
|
-
server.run!
|
22
|
+
module Cli; end
|
23
|
+
end
|
24
|
+
|
25
|
+
require File.dirname(__FILE__) + "/cli/command"
|
26
|
+
require File.dirname(__FILE__) + "/cli/serve"
|
27
|
+
require File.dirname(__FILE__) + "/cli/release"
|
28
|
+
require File.dirname(__FILE__) + "/cli/generate"
|
29
|
+
|
30
|
+
require File.dirname(__FILE__) + "/generators"
|
31
|
+
|
32
|
+
|
33
|
+
module HtmlMockup
|
34
|
+
class Cli::Base < Thor
|
35
|
+
|
36
|
+
def initialize(*args)
|
37
|
+
super
|
38
|
+
self.class.project = initialize_project
|
48
39
|
end
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
project = initialize_project(path, options)
|
53
|
-
project.release.run!
|
40
|
+
|
41
|
+
class << self
|
42
|
+
attr_accessor :project
|
54
43
|
end
|
44
|
+
|
45
|
+
class_option :path,
|
46
|
+
:desc => "Project root path",
|
47
|
+
:type => :string,
|
48
|
+
:required => false,
|
49
|
+
:default => "."
|
50
|
+
|
51
|
+
class_option :html_path,
|
52
|
+
:desc => 'The document root, defaults to "[directory]/html"',
|
53
|
+
:type => :string
|
54
|
+
|
55
|
+
|
56
|
+
class_option :partial_path,
|
57
|
+
:desc => 'Defaults to [directory]/partials',
|
58
|
+
:type => :string
|
59
|
+
|
60
|
+
register Cli::Generate, "generate", "generate [COMMAND]", "Run a generator"
|
61
|
+
|
62
|
+
register Cli::Serve, "serve", "serve #{Cli::Serve.arguments.map{ |arg| arg.banner }.join(" ")}", Cli::Serve.desc
|
63
|
+
self.tasks["serve"].options = Cli::Serve.class_options
|
64
|
+
|
65
|
+
register Cli::Release, "release", "release #{Cli::Release.arguments.map{ |arg| arg.banner }.join(" ")}", Cli::Release.desc
|
66
|
+
self.tasks["release"].options = Cli::Release.class_options
|
55
67
|
|
56
68
|
desc "validate [directory/file]", "Validates the file or all HTML in directory"
|
57
69
|
method_options :show_valid => :boolean, # Also print a line for each valid file
|
@@ -83,40 +95,19 @@ module HtmlMockup
|
|
83
95
|
end
|
84
96
|
end
|
85
97
|
|
86
|
-
register HtmlMockup::Generators::New, "new", "new [directory]", ""
|
87
|
-
# Hack to register our options/description
|
88
|
-
tasks["new"].options = HtmlMockup::Generators::New.class_options
|
89
|
-
tasks["new"].description = HtmlMockup::Generators::New.desc
|
90
|
-
|
91
|
-
desc "extract [source_path] [target_path]", "Extract a fully relative html mockup into target_path. It will expand all absolute href's, src's and action's into relative links if they are absolute"
|
92
|
-
method_options :partial_path => :string, # Defaults to [directory]/partials
|
93
|
-
:filter => :string # What files should be converted defaults to **/*.html
|
94
|
-
def extract(source_path=".", target_path="../out")
|
95
|
-
project = initialize_project(source_path)
|
96
|
-
extractor = HtmlMockup::Extractor.new(project, target_path)
|
97
|
-
puts "Extracting mockup"
|
98
|
-
puts banner(project)
|
99
|
-
extractor.run!
|
100
|
-
end
|
101
|
-
|
102
98
|
protected
|
103
|
-
|
104
|
-
def banner(project)
|
105
|
-
puts " Html: \"#{project.html_path}\""
|
106
|
-
puts " Partials: \"#{project.partial_path}\""
|
107
|
-
end
|
108
|
-
|
99
|
+
|
109
100
|
# TODO: handle options
|
110
|
-
def initialize_project
|
111
|
-
|
112
|
-
if((Pathname.new(path) + "../partials").exist?)
|
101
|
+
def initialize_project
|
102
|
+
if((Pathname.new(options[:path]) + "../partials").exist?)
|
113
103
|
puts "[ERROR]: Don't use the \"html\" path, use the project base path instead"
|
114
104
|
exit(1)
|
115
105
|
end
|
116
106
|
|
117
|
-
Project.new(path, {:shell => self.shell}.update(options))
|
107
|
+
Project.new(options[:path], {:shell => self.shell}.update(options))
|
118
108
|
end
|
119
109
|
|
110
|
+
|
120
111
|
def w3cvalidate(file)
|
121
112
|
validator = W3CValidator.new(File.read(file))
|
122
113
|
validator.validate!
|
@@ -128,4 +119,5 @@ module HtmlMockup
|
|
128
119
|
end
|
129
120
|
|
130
121
|
end
|
122
|
+
|
131
123
|
end
|