henshin 0.4.2 → 1.0.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENCE +18 -0
- data/README.md +133 -0
- data/Rakefile +6 -51
- data/bin/henshin +127 -134
- data/lib/henshin.rb +163 -38
- data/lib/henshin/compressor.rb +31 -0
- data/lib/henshin/compressors/css.rb +20 -0
- data/lib/henshin/compressors/js.rb +20 -0
- data/lib/henshin/core_ext.rb +69 -0
- data/lib/henshin/error.rb +28 -0
- data/lib/henshin/file.rb +67 -0
- data/lib/henshin/files/abstract.rb +102 -0
- data/lib/henshin/files/attributes.rb +31 -0
- data/lib/henshin/files/empty_template.rb +24 -0
- data/lib/henshin/files/physical.rb +117 -0
- data/lib/henshin/files/post.rb +64 -0
- data/lib/henshin/files/templatable.rb +29 -0
- data/lib/henshin/files/template.rb +45 -0
- data/lib/henshin/files/tilt.rb +50 -0
- data/lib/henshin/files/tilt_template.rb +45 -0
- data/lib/henshin/package.rb +27 -0
- data/lib/henshin/packages/script.rb +23 -0
- data/lib/henshin/packages/style.rb +20 -0
- data/lib/henshin/path.rb +143 -0
- data/lib/henshin/publisher.rb +42 -0
- data/lib/henshin/publishers/sftp.rb +79 -0
- data/lib/henshin/reader.rb +68 -0
- data/lib/henshin/safety.rb +74 -0
- data/lib/henshin/scope.rb +55 -0
- data/lib/henshin/site.rb +291 -228
- data/lib/henshin/ui.rb +35 -0
- data/lib/henshin/version.rb +3 -0
- data/lib/henshin/writer.rb +43 -0
- data/lib/rack/henshin.rb +113 -0
- data/site/assets/scripts/config.js +11 -0
- data/site/assets/styles/_mixins.sass +16 -0
- data/site/assets/styles/screen.sass +198 -0
- data/site/config.yml +13 -0
- data/site/drafts/a-work-in-progress.md +5 -0
- data/site/feed.xml.slim +19 -0
- data/site/index.html.slim +28 -0
- data/site/init.rb +33 -0
- data/site/posts/1-hello-world.md +46 -0
- data/site/posts/2-code-testing.md +36 -0
- data/site/posts/3-style-test.md +80 -0
- data/site/templates/default.slim +11 -0
- data/site/templates/post.slim +30 -0
- data/site/test.html.md +7 -0
- data/spec/helper.rb +70 -0
- data/spec/henshin/compressor_spec.rb +25 -0
- data/spec/henshin/compressors/css_spec.rb +22 -0
- data/spec/henshin/compressors/js_spec.rb +22 -0
- data/spec/henshin/core_ext_spec.rb +59 -0
- data/spec/henshin/error_spec.rb +22 -0
- data/spec/henshin/file_spec.rb +28 -0
- data/spec/henshin/files/abstract_spec.rb +98 -0
- data/spec/henshin/files/attributes_spec.rb +25 -0
- data/spec/henshin/files/empty_template_spec.rb +11 -0
- data/spec/henshin/files/physical_spec.rb +55 -0
- data/spec/henshin/files/post_spec.rb +66 -0
- data/spec/henshin/files/template_spec.rb +53 -0
- data/spec/henshin/files/tilt_spec.rb +59 -0
- data/spec/henshin/package_spec.rb +24 -0
- data/spec/henshin/packages/script_spec.rb +17 -0
- data/spec/henshin/packages/style_spec.rb +17 -0
- data/spec/henshin/path_spec.rb +56 -0
- data/spec/henshin/publisher_spec.rb +44 -0
- data/spec/henshin/publishers/sftp_spec.rb +21 -0
- data/spec/henshin/reader_spec.rb +55 -0
- data/spec/henshin/safety_spec.rb +66 -0
- data/spec/henshin/scope_spec.rb +33 -0
- data/spec/henshin/site_spec.rb +142 -0
- data/spec/henshin/ui_spec.rb +26 -0
- data/spec/henshin/writer_spec.rb +26 -0
- metadata +352 -197
- data/.gitignore +0 -27
- data/LICENSE +0 -20
- data/README.markdown +0 -35
- data/VERSION +0 -1
- data/henshin.gemspec +0 -121
- data/lib/henshin/archive.rb +0 -133
- data/lib/henshin/exec/files.rb +0 -46
- data/lib/henshin/ext.rb +0 -55
- data/lib/henshin/gen.rb +0 -154
- data/lib/henshin/labels.rb +0 -144
- data/lib/henshin/plugin.rb +0 -100
- data/lib/henshin/plugins/highlight.rb +0 -24
- data/lib/henshin/plugins/liquid.rb +0 -61
- data/lib/henshin/plugins/maruku.rb +0 -18
- data/lib/henshin/plugins/sass.rb +0 -24
- data/lib/henshin/plugins/textile.rb +0 -18
- data/lib/henshin/post.rb +0 -156
- data/lib/henshin/static.rb +0 -33
- data/test/helper.rb +0 -44
- data/test/site/css/_reset.sass +0 -34
- data/test/site/css/print.css +0 -12
- data/test/site/css/screen.sass +0 -70
- data/test/site/includes/head.html +0 -1
- data/test/site/index.html +0 -23
- data/test/site/layouts/archive_date.html +0 -20
- data/test/site/layouts/archive_month.html +0 -24
- data/test/site/layouts/archive_year.html +0 -26
- data/test/site/layouts/category_index.html +0 -27
- data/test/site/layouts/category_page.html +0 -20
- data/test/site/layouts/main.html +0 -13
- data/test/site/layouts/post.html +0 -36
- data/test/site/layouts/tag_index.html +0 -27
- data/test/site/layouts/tag_page.html +0 -20
- data/test/site/options.yaml +0 -17
- data/test/site/plugins/test.rb +0 -3
- data/test/site/posts/Testing-Stuff.markdown +0 -14
- data/test/site/posts/Textile-Test.textile +0 -7
- data/test/site/posts/cat/test.markdown +0 -6
- data/test/site/posts/lorem-ipsum.markdown +0 -7
- data/test/site/posts/same-date.markdown +0 -7
- data/test/site/static.html +0 -19
- data/test/suite.rb +0 -4
- data/test/test_gen.rb +0 -98
- data/test/test_options.rb +0 -73
- data/test/test_post.rb +0 -67
- data/test/test_site.rb +0 -197
- data/test/test_static.rb +0 -13
data/site/feed.xml.slim
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
---
|
2
|
+
template: none
|
3
|
+
permalink: /feed.xml
|
4
|
+
---
|
5
|
+
|
6
|
+
doctype xml
|
7
|
+
rss version='2.0' xmlns:atom="http://www.w3.org/2005/Atom"
|
8
|
+
channel
|
9
|
+
atom:link rel='self' type='application/rss+xml' href=(site.url + permalink)
|
10
|
+
title = site.title
|
11
|
+
link = site.url
|
12
|
+
description = site.description
|
13
|
+
|
14
|
+
- for post in site.posts.take(10)
|
15
|
+
item
|
16
|
+
title = post.title
|
17
|
+
description = post.text
|
18
|
+
pubDate = post.rss_date
|
19
|
+
link = site.url + post.url.to_s
|
@@ -0,0 +1,28 @@
|
|
1
|
+
header
|
2
|
+
h1 = site.title
|
3
|
+
|
4
|
+
ul.list
|
5
|
+
h3 Posts
|
6
|
+
- for post in site.posts do
|
7
|
+
- if post.published?
|
8
|
+
li
|
9
|
+
a href=post.url = post.title
|
10
|
+
- else
|
11
|
+
li#draft
|
12
|
+
a href=post.url = post.title
|
13
|
+
|
14
|
+
|
15
|
+
- if site.projects
|
16
|
+
|
17
|
+
ul.list
|
18
|
+
h3 Projects
|
19
|
+
- for project in site.projects do
|
20
|
+
li
|
21
|
+
a href=project.url = project.title
|
22
|
+
span — #{project.desc}
|
23
|
+
|
24
|
+
|
25
|
+
- if site.description
|
26
|
+
|
27
|
+
h3 About
|
28
|
+
= site.description
|
data/site/init.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Edits the output from markdown files to work with SyntaxHighlighter.
|
3
|
+
|
4
|
+
class ModifiedRedcarpetFile < File::TiltWithTemplate
|
5
|
+
def text
|
6
|
+
super.gsub /<code class="(.*)">/ do
|
7
|
+
"<code class='brush: #{$1}'>"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
File.register /\.(md|mkd|markdown)\Z/, ModifiedRedcarpetFile
|
13
|
+
|
14
|
+
module Helpers
|
15
|
+
def format_date(date)
|
16
|
+
date.strftime("%B %e, %Y")
|
17
|
+
end
|
18
|
+
|
19
|
+
def truncate(text, len=50, with='…')
|
20
|
+
return text if text.length <= len
|
21
|
+
|
22
|
+
str = ''
|
23
|
+
text.split(' ').each do |word|
|
24
|
+
if (str + word).length <= len
|
25
|
+
str += ' ' + word
|
26
|
+
else
|
27
|
+
break
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
str + with
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
title: Hello World
|
3
|
+
date: 2012-03-01
|
4
|
+
---
|
5
|
+
|
6
|
+
Maecenas lacinia pharetra porta. Praesent turpis purus, vestibulum a molestie
|
7
|
+
id, lobortis a massa. Suspendisse potenti. Fusce in molestie augue. Sed at mi at
|
8
|
+
nulla pulvinar auctor in sed urna. Vivamus euismod massa vitae mi sollicitudin
|
9
|
+
vel scelerisque magna euismod. Nam sit amet dolor eu nulla bibendum facilisis a
|
10
|
+
eget felis. Suspendisse vitae est ac mi pharetra interdum vel eget
|
11
|
+
turpis. Curabitur rutrum lectus nec odio porttitor placerat. Maecenas quis
|
12
|
+
turpis eget magna rhoncus vehicula lacinia sit amet metus. Nulla pretium
|
13
|
+
lobortis cursus. Nullam eu odio eget nibh vehicula tristique vitae eget
|
14
|
+
nisi. Suspendisse eget nisl ac turpis rutrum posuere. Aliquam volutpat magna et
|
15
|
+
libero interdum at malesuada felis imperdiet. Sed porttitor consectetur augue,
|
16
|
+
eu eleifend sem tincidunt eu.
|
17
|
+
|
18
|
+
Etiam ut diam id risus dictum tempus vitae sed tellus. Quisque felis orci,
|
19
|
+
ultricies et elementum quis, consequat sit amet lorem. Sed convallis ipsum sed
|
20
|
+
tellus consectetur eget volutpat dui lacinia. Praesent vitae pretium
|
21
|
+
tortor. Proin sed nisi arcu. Cras id tortor odio. Praesent sed augue non elit
|
22
|
+
congue ultrices.
|
23
|
+
|
24
|
+
Cras aliquam tempus purus, commodo lacinia ante vulputate blandit. Vestibulum
|
25
|
+
felis tellus, vestibulum in accumsan at, egestas in velit. Suspendisse
|
26
|
+
potenti. Curabitur pulvinar sollicitudin auctor. Fusce nec quam mi. Nulla
|
27
|
+
lobortis hendrerit turpis, eu malesuada mi volutpat nec. Quisque velit lectus,
|
28
|
+
aliquet nec vulputate pretium, elementum et purus. Fusce non metus nec ipsum
|
29
|
+
ultricies laoreet id eu mauris. Sed suscipit nisl lectus, id pulvinar sem. In
|
30
|
+
hac habitasse platea dictumst. Proin lacus quam, hendrerit eget ultricies
|
31
|
+
venenatis, lobortis quis est. Maecenas elementum malesuada libero in
|
32
|
+
euismod. Vestibulum sodales turpis quis felis fringilla luctus.
|
33
|
+
|
34
|
+
Donec eu magna arcu, ut varius nisi. Donec at metus lectus, at lacinia
|
35
|
+
lacus. Duis eu arcu mi. Fusce vel dolor a justo mattis accumsan. Nunc ac quam
|
36
|
+
ligula. Etiam vulputate malesuada justo. Proin hendrerit ultrices libero quis
|
37
|
+
consequat. Nunc sollicitudin cursus posuere. Fusce id elit et eros facilisis
|
38
|
+
rhoncus. Aliquam non lorem ipsum, tempor ullamcorper sapien.
|
39
|
+
|
40
|
+
Nullam fringilla convallis diam ut semper. Praesent rutrum varius
|
41
|
+
ultricies. Morbi sed ipsum erat, sit amet aliquam turpis. Quisque bibendum enim
|
42
|
+
sit amet nisi dignissim nec condimentum sem auctor. Nunc ut orci nec turpis
|
43
|
+
cursus posuere. Suspendisse aliquet tempor urna a ultrices. Maecenas pretium
|
44
|
+
convallis lectus. Vivamus ornare libero at lectus ultrices gravida. Ut et orci
|
45
|
+
id est interdum tempor ut nec quam. Vestibulum in risus et sem semper
|
46
|
+
ullamcorper dignissim ac lectus. Praesent placerat semper erat sed congue.
|
@@ -0,0 +1,36 @@
|
|
1
|
+
---
|
2
|
+
title: Code Testing
|
3
|
+
date: 2012-03-05
|
4
|
+
---
|
5
|
+
|
6
|
+
A test of the code highlighting abilities. This is from henshin past.
|
7
|
+
|
8
|
+
``` ruby
|
9
|
+
require 'henshin/plugin'
|
10
|
+
require 'liquid'
|
11
|
+
|
12
|
+
class LiquidPlugin < Henshin::LayoutParser
|
13
|
+
|
14
|
+
attr_accessor :extensions
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@extensions = []
|
18
|
+
end
|
19
|
+
|
20
|
+
def generate( layout, data )
|
21
|
+
t = Liquid::Template.parse( read(layout) )
|
22
|
+
t.render(data)
|
23
|
+
end
|
24
|
+
|
25
|
+
# returns the layout as a string
|
26
|
+
def read( file )
|
27
|
+
f = File.open(file, "r")
|
28
|
+
r = ""
|
29
|
+
f.each do |l|
|
30
|
+
r << l
|
31
|
+
end
|
32
|
+
r
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
```
|
@@ -0,0 +1,80 @@
|
|
1
|
+
---
|
2
|
+
title: Style Test
|
3
|
+
date: 2012-03-12
|
4
|
+
---
|
5
|
+
|
6
|
+
Maecenas <http://google.com> lacinia pharetra porta. Praesent turpis purus,
|
7
|
+
vestibulum a molestie id, lobortis a massa. Suspendisse potenti. Fusce in
|
8
|
+
molestie augue. Sed at mi at nulla pulvinar auctor in sed urna. Vivamus euismod
|
9
|
+
massa vitae mi sollicitudin vel scelerisque magna euismod. Nam sit amet dolor eu
|
10
|
+
nulla bibendum facilisis a eget felis. Suspendisse vitae est ac mi pharetra
|
11
|
+
interdum vel eget turpis. Curabitur rutrum lectus nec odio porttitor
|
12
|
+
placerat. Maecenas quis turpis eget magna rhoncus vehicula lacinia sit amet
|
13
|
+
metus. Nulla pretium lobortis cursus. Nullam eu odio eget nibh vehicula
|
14
|
+
tristique vitae eget nisi. Suspendisse eget nisl ac turpis rutrum
|
15
|
+
posuere. Aliquam volutpat magna et libero interdum at malesuada felis
|
16
|
+
imperdiet. Sed porttitor consectetur augue, eu eleifend sem tincidunt eu.
|
17
|
+
|
18
|
+
`<html>` Etiam ut __diam__ id risus dictum tempus *vitae* sed tellus. Quisque felis
|
19
|
+
orci, ultricies et elementum quis, consequat sit amet lorem. Sed convallis ipsum
|
20
|
+
sed tellus consectetur eget volutpat dui lacinia. Praesent vitae pretium
|
21
|
+
tortor. Proin sed nisi arcu. Cras id tortor odio. Praesent sed augue non elit
|
22
|
+
congue ultrices.
|
23
|
+
|
24
|
+
> Cras aliquam tempus purus, commodo lacinia ante vulputate blandit. Vestibulum
|
25
|
+
> felis tellus, vestibulum in accumsan at, egestas in velit. Suspendisse
|
26
|
+
> potenti. Curabitur pulvinar sollicitudin auctor. Fusce nec quam mi. Nulla
|
27
|
+
> lobortis hendrerit turpis, eu malesuada mi volutpat nec. Quisque velit lectus,
|
28
|
+
> aliquet nec vulputate pretium, elementum et purus. Fusce non metus nec ipsum
|
29
|
+
> ultricies laoreet id eu mauris. Sed suscipit nisl lectus, id pulvinar sem. In
|
30
|
+
> hac habitasse platea dictumst. Proin lacus quam, hendrerit eget ultricies
|
31
|
+
> venenatis, lobortis quis est. Maecenas elementum malesuada libero in
|
32
|
+
> euismod. Vestibulum sodales turpis quis felis fringilla luctus.
|
33
|
+
|
34
|
+
Donec eu magna arcu, ut varius nisi. Donec at metus lectus, at lacinia
|
35
|
+
lacus. Duis eu arcu mi. Fusce vel dolor a justo mattis accumsan. Nunc ac quam
|
36
|
+
ligula. Etiam vulputate malesuada justo. Proin hendrerit ultrices libero quis
|
37
|
+
consequat. Nunc sollicitudin cursus posuere. Fusce id elit et eros facilisis
|
38
|
+
rhoncus. Aliquam non lorem ipsum, tempor ullamcorper sapien.
|
39
|
+
|
40
|
+
## Ham Sandwich
|
41
|
+
|
42
|
+
### Ingredients
|
43
|
+
|
44
|
+
- Ham
|
45
|
+
- Bread
|
46
|
+
- Butter
|
47
|
+
|
48
|
+
### Tools
|
49
|
+
|
50
|
+
- Hands
|
51
|
+
- Knife
|
52
|
+
|
53
|
+
### Method
|
54
|
+
|
55
|
+
1. Take knife, use to butter bread.
|
56
|
+
2. Put ham on one slice of bread.
|
57
|
+
3. Put other slice on top.
|
58
|
+
4. Enjoy.
|
59
|
+
|
60
|
+
### Opinions
|
61
|
+
|
62
|
+
Nullam fringilla convallis diam ut semper. Praesent rutrum varius
|
63
|
+
ultricies. Morbi sed ipsum erat, sit amet aliquam turpis. Quisque bibendum enim
|
64
|
+
sit amet nisi dignissim nec condimentum sem auctor. Nunc ut orci nec turpis
|
65
|
+
cursus posuere. Suspendisse aliquet tempor urna a ultrices. Maecenas pretium
|
66
|
+
convallis lectus. Vivamus ornare libero at lectus ultrices gravida. Ut et orci
|
67
|
+
id est interdum tempor ut nec quam. Vestibulum in risus et sem semper
|
68
|
+
ullamcorper dignissim ac lectus. Praesent placerat semper erat sed congue.
|
69
|
+
|
70
|
+
- - -
|
71
|
+
|
72
|
+
Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
|
73
|
+
mus. Duis viverra ante id orci rhoncus hendrerit. Morbi lacinia nunc at mauris
|
74
|
+
laoreet facilisis ac quis lacus. Integer ornare eros sit amet lacus convallis
|
75
|
+
vulputate hendrerit diam gravida. Nullam sit amet blandit enim. Ut in vehicula
|
76
|
+
tortor. Cras id augue vitae turpis sodales varius. Donec viverra imperdiet
|
77
|
+
lectus quis tempus. Mauris eu magna enim, sit amet porta dolor. Fusce accumsan,
|
78
|
+
felis non pellentesque fringilla, sem risus convallis eros, dapibus faucibus
|
79
|
+
purus sem eu arcu. Aliquam dignissim dapibus eros. Etiam eu dui sapien, vel
|
80
|
+
ullamcorper diam.
|
@@ -0,0 +1,30 @@
|
|
1
|
+
doctype html
|
2
|
+
html lang='en'
|
3
|
+
head
|
4
|
+
meta charset='utf-8'
|
5
|
+
link rel='stylesheet' href=site.style.url
|
6
|
+
title = title
|
7
|
+
|
8
|
+
body onload="window.scrollBy(0,54);"
|
9
|
+
|
10
|
+
nav
|
11
|
+
- if prev_post
|
12
|
+
a.prev href=prev_post.url ← #{truncate(prev_post.title, 25)}
|
13
|
+
|
14
|
+
a.home href=site.root Home
|
15
|
+
|
16
|
+
- if next_post
|
17
|
+
a.next href=next_post.url #{truncate(next_post.title, 25)} →
|
18
|
+
|
19
|
+
header
|
20
|
+
h1 = title
|
21
|
+
|
22
|
+
== yield
|
23
|
+
|
24
|
+
div.meta
|
25
|
+
span.date
|
26
|
+
' — #{format_date(date)}
|
27
|
+
|
28
|
+
script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js'
|
29
|
+
script src='http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js'
|
30
|
+
script src=site.script.url
|
data/site/test.html.md
ADDED
data/spec/helper.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
$: << File.dirname(__FILE__) + '/..'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'duvet'
|
5
|
+
Duvet.start :filter => 'lib/henshin'
|
6
|
+
rescue LoadError => e
|
7
|
+
# Doesn't matter if duvet doesn't run
|
8
|
+
warn 'Problem with duvet?'
|
9
|
+
raise e
|
10
|
+
end
|
11
|
+
|
12
|
+
gem 'minitest'
|
13
|
+
require 'minitest/autorun'
|
14
|
+
require 'minitest/pride'
|
15
|
+
require 'mocha'
|
16
|
+
require 'lib/henshin'
|
17
|
+
|
18
|
+
Henshin.set :dry_run
|
19
|
+
|
20
|
+
def with_writing!
|
21
|
+
Henshin.unset :dry_run
|
22
|
+
yield
|
23
|
+
Henshin.set :dry_run
|
24
|
+
end
|
25
|
+
|
26
|
+
def with_profiling!
|
27
|
+
Henshin.set :profile
|
28
|
+
yield
|
29
|
+
Henshin.unset :profile
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
class DummySite < Henshin::Site
|
34
|
+
def config
|
35
|
+
{}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_path
|
40
|
+
Pathname.new(__FILE__).dirname + '..' + 'site'
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_site
|
44
|
+
Henshin::Site.new test_path
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
# For some reason, must_be and wont_be don't work properly using MiniTest 3.0.0.
|
49
|
+
module MiniTest::Expectations
|
50
|
+
|
51
|
+
alias_method :_must_be, :must_be
|
52
|
+
alias_method :_wont_be, :wont_be
|
53
|
+
|
54
|
+
def must_be(*args)
|
55
|
+
if args.size == 1
|
56
|
+
self.send(args.first).must_equal true
|
57
|
+
else
|
58
|
+
_must_be *args
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def wont_be(*args)
|
63
|
+
if args.size == 1
|
64
|
+
self.send(args.first).must_equal false
|
65
|
+
else
|
66
|
+
_wont_be *args
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
describe Henshin::Compressor do
|
4
|
+
|
5
|
+
subject { Henshin::Compressor }
|
6
|
+
|
7
|
+
let(:f1) { stub(:text => "f1") }
|
8
|
+
let(:f2) { stub(:text => "f2") }
|
9
|
+
let(:f3) { stub(:text => "f3") }
|
10
|
+
|
11
|
+
let(:compressor) { subject.new([f1, f2, f3]) }
|
12
|
+
|
13
|
+
describe '#join' do
|
14
|
+
it 'joins the contents of the files together' do
|
15
|
+
compressor.join.must_equal "f1\nf2\nf3"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#compress' do
|
20
|
+
it 'calls #join' do
|
21
|
+
compressor.compress.must_equal "f1\nf2\nf3"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Henshin::Compressor::Css do
|
4
|
+
|
5
|
+
subject { Henshin::Compressor::Css }
|
6
|
+
|
7
|
+
before { YUI::CssCompressor.stubs(:new).returns(yui) }
|
8
|
+
|
9
|
+
let(:f1) { stub(:text => "f1") }
|
10
|
+
let(:f2) { stub(:text => "f2") }
|
11
|
+
let(:f3) { stub(:text => "f3") }
|
12
|
+
|
13
|
+
let(:compressor) { subject.new([f1, f2, f3]) }
|
14
|
+
let(:yui) { mock(:compress => "f1\nf2\nf3") }
|
15
|
+
|
16
|
+
describe '#compress' do
|
17
|
+
it 'concatenates the files' do
|
18
|
+
compressor.compress
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Henshin::Compressor::Js do
|
4
|
+
|
5
|
+
subject { Henshin::Compressor::Js }
|
6
|
+
|
7
|
+
before { YUI::JavaScriptCompressor.stubs(:new).returns(yui) }
|
8
|
+
|
9
|
+
let(:f1) { stub(:text => "f1") }
|
10
|
+
let(:f2) { stub(:text => "f2") }
|
11
|
+
let(:f3) { stub(:text => "f3") }
|
12
|
+
|
13
|
+
let(:compressor) { subject.new([f1, f2, f3]) }
|
14
|
+
let(:yui) { mock(:compress => "f1\nf2\nf3") }
|
15
|
+
|
16
|
+
describe '#compress' do
|
17
|
+
it 'concatenates the files' do
|
18
|
+
compressor.compress
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|