tipsy 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/Gemfile +6 -11
- data/README.md +24 -1
- data/Rakefile +13 -9
- data/bin/tipsy +4 -2
- data/lib/templates/server/htaccess.erb +14 -0
- data/lib/templates/site/Gemfile +19 -0
- data/lib/templates/site/assets/stylesheets/_config.css.scss +1 -0
- data/lib/templates/site/assets/stylesheets/screen.css.scss +1 -0
- data/lib/templates/site/config.rb +52 -0
- data/lib/templates/site/deploy.yml +27 -0
- data/lib/templates/site/layouts/default.html.erb +41 -0
- data/lib/templates/site/views/index.html.erb +2 -0
- data/lib/tipsy/compressors/{css.rb → css_compressor.rb} +0 -0
- data/lib/tipsy/compressors/javascript_compressor.rb +44 -0
- data/lib/tipsy/configuration.rb +9 -0
- data/lib/tipsy/handler/all.rb +4 -0
- data/lib/tipsy/handler/asset.rb +93 -0
- data/lib/tipsy/handler/erb.rb +42 -0
- data/lib/tipsy/handler/php.rb +36 -0
- data/lib/tipsy/{sass/template.rb → handler/sass/importer.rb} +15 -53
- data/lib/tipsy/handler/sass/resolver.rb +30 -0
- data/lib/tipsy/handler/sass.rb +36 -0
- data/lib/tipsy/handler/static.rb +30 -0
- data/lib/tipsy/helpers/asset_paths.rb +29 -1
- data/lib/tipsy/helpers/asset_tags.rb +1 -1
- data/lib/tipsy/helpers/capture.rb +12 -41
- data/lib/tipsy/helpers/rendering.rb +46 -0
- data/lib/tipsy/helpers/sass.rb +17 -6
- data/lib/tipsy/helpers/tag.rb +6 -9
- data/lib/tipsy/helpers.rb +13 -16
- data/lib/tipsy/runner.rb +82 -0
- data/lib/tipsy/runners/compiler.rb +189 -0
- data/lib/tipsy/runners/deployer.rb +7 -0
- data/lib/tipsy/runners/generator.rb +24 -0
- data/lib/tipsy/server.rb +56 -114
- data/lib/tipsy/site.rb +88 -0
- data/lib/tipsy/utils/logger.rb +47 -0
- data/lib/tipsy/utils/system.rb +115 -0
- data/lib/tipsy/utils/system_test.rb +103 -0
- data/lib/tipsy/version.rb +1 -1
- data/lib/tipsy/view/base.rb +55 -0
- data/lib/tipsy/view/context.rb +28 -0
- data/lib/tipsy/view/path.rb +44 -0
- data/lib/tipsy/view.rb +14 -68
- data/lib/tipsy.rb +30 -67
- data/{lib/tipsy/project/assets/javascripts/site.js → test/fixtures/capture.html.erb} +0 -0
- data/test/helpers/tag_test.rb +22 -0
- data/{lib/tipsy/project/assets/stylesheets/screen.css.scss → test/root/compiled/fake.txt} +0 -0
- data/test/root/{test/assets/javascripts/test.js → compiled/sub-path/fake.txt} +0 -0
- data/test/root/{development/assets/javascripts/test.js → compiled/sub-path-with-skip/fake.txt} +0 -0
- data/test/root/layouts/default.html.erb +0 -0
- data/test/root/views/index.html.erb +0 -0
- data/test/root/views/page.html.erb +0 -0
- data/test/root/views/sub/page.html.erb +0 -0
- data/test/root/views/sub/tertiary/index.html.erb +0 -0
- data/test/runner/compiler_test.rb +49 -0
- data/test/test_helper.rb +160 -21
- data/test/unit/site_test.rb +23 -0
- data/test/unit/tipsy_test.rb +13 -0
- data/test/unit/utils/system_test.rb +26 -0
- data/test/view/base_test.rb +34 -0
- data/test/view/path_test.rb +34 -0
- data/tipsy.gemspec +10 -7
- metadata +113 -84
- data/lib/tipsy/application.rb +0 -86
- data/lib/tipsy/builder.rb +0 -26
- data/lib/tipsy/builders/base.rb +0 -64
- data/lib/tipsy/builders/export.rb +0 -16
- data/lib/tipsy/builders/project.rb +0 -40
- data/lib/tipsy/builders/remote.rb +0 -14
- data/lib/tipsy/compressors/javascript.rb +0 -25
- data/lib/tipsy/logger.rb +0 -62
- data/lib/tipsy/project/Gemfile +0 -8
- data/lib/tipsy/project/config.erb +0 -19
- data/lib/tipsy/project/helpers/site_helper.rb +0 -4
- data/lib/tipsy/project/views/_layout.html.erb +0 -16
- data/test/fixtures/about.html +0 -1
- data/test/fixtures/contact.html +0 -1
- data/test/fixtures/index.html +0 -1
- data/test/functional/page_test.rb +0 -33
- data/test/root/.gitignore +0 -7
- data/test/root/development/assets/stylesheets/screen.css.scss +0 -3
- data/test/root/development/config.rb +0 -6
- data/test/root/development/views/_layout.html.erb +0 -20
- data/test/root/development/views/index.html.erb +0 -3
- data/test/root/test/assets/stylesheets/screen.css.scss +0 -3
- data/test/root/test/config.rb +0 -6
- data/test/root/test/views/_layout.html.erb +0 -1
- data/test/root/test/views/about/index.html +0 -1
- data/test/root/test/views/contact.html +0 -1
- data/test/root/test/views/index.html.erb +0 -1
- data/test/unit/helpers/asset_paths_test.rb +0 -14
- data/test/unit/helpers_test.rb +0 -22
- data/test/unit/server_test.rb +0 -1
data/lib/tipsy/view.rb
CHANGED
@@ -1,78 +1,24 @@
|
|
1
|
+
require 'tipsy/handler/all'
|
1
2
|
require 'tilt'
|
2
|
-
require 'tipsy/helpers'
|
3
3
|
require 'hike'
|
4
4
|
|
5
5
|
module Tipsy
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
attr_reader :content_type
|
12
|
-
attr_reader :file
|
13
|
-
attr_reader :request
|
14
|
-
attr_reader :trail
|
15
|
-
attr_reader :view_path
|
16
|
-
|
17
|
-
def initialize(path, request)
|
18
|
-
@request = request
|
19
|
-
@content_type = 'text/html'
|
20
|
-
@trail = Hike::Trail.new(File.join(Tipsy.root, 'views'))
|
21
|
-
@view_path = path
|
22
|
-
@template = nil
|
23
|
-
trail.append_path('.')
|
24
|
-
trail.append_extensions '.erb','.html', '.json', '.xml'
|
25
|
-
end
|
26
|
-
|
27
|
-
def render
|
28
|
-
unless template.nil?
|
29
|
-
handler = Tilt[template] || Tilt::ErubisTemplate
|
30
|
-
tilt = handler.new(template, nil, :outvar => '@_output_buffer')
|
31
|
-
context = Context.new(request, template, trail)
|
32
|
-
contents = unless layout.nil?
|
33
|
-
wrapped = Tilt.new(layout, nil, :outvar => '@_output_buffer')
|
34
|
-
contents = wrapped.render(context) do |*args|
|
35
|
-
tilt.render(context, *args)
|
36
|
-
end
|
37
|
-
else
|
38
|
-
tilt.render(context)
|
39
|
-
end
|
40
|
-
return contents
|
41
|
-
end
|
42
|
-
nil
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def template
|
48
|
-
@template ||= (trail.find(view_path) || trail.find(File.join(view_path, "index")))
|
49
|
-
end
|
50
|
-
|
51
|
-
def layout
|
52
|
-
@layout ||= (trail.find(File.join(view_path, '_layout')) || trail.find('_layout'))
|
53
|
-
end
|
54
|
-
|
55
|
-
##
|
56
|
-
# A rendering context. This class is the context all views are stemmed from.
|
57
|
-
#
|
58
|
-
class Context
|
59
|
-
include Tipsy::Helpers
|
60
|
-
attr_reader :request, :root, :template_file_name, :view_trail
|
61
|
-
|
62
|
-
def initialize(req, tpl, trail)
|
63
|
-
@request = req
|
64
|
-
@root = Tipsy.root
|
65
|
-
@template_file_name = tpl
|
66
|
-
@view_trail = trail
|
67
|
-
__initialize_helpers
|
6
|
+
module View
|
7
|
+
class << self
|
8
|
+
def register_handler(klass, ext)
|
9
|
+
Tilt.register(klass, ext)
|
68
10
|
end
|
69
11
|
end
|
70
12
|
|
13
|
+
class TemplateMissing < ::StandardError; end
|
14
|
+
class LayoutMissing < ::StandardError; end
|
15
|
+
|
71
16
|
end
|
72
17
|
end
|
73
18
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
19
|
+
require 'tipsy/helpers'
|
20
|
+
require 'tipsy/view/base'
|
21
|
+
require 'tipsy/view/context'
|
22
|
+
require 'tipsy/view/path'
|
23
|
+
|
24
|
+
Tipsy::View.register_handler(Tipsy::Handler::ErbHandler, 'erb')
|
data/lib/tipsy.rb
CHANGED
@@ -1,84 +1,47 @@
|
|
1
|
-
require "tipsy/version"
|
2
1
|
require "active_support/all"
|
3
|
-
require
|
4
|
-
require 'ostruct'
|
2
|
+
require "tipsy/version"
|
5
3
|
|
6
4
|
module Tipsy
|
7
|
-
|
8
|
-
autoload :Application, 'tipsy/application'
|
9
|
-
autoload :Server, 'tipsy/server'
|
10
|
-
autoload :Responder, 'tipsy/handler'
|
11
|
-
autoload :Helpers, 'tipsy/helpers'
|
12
|
-
autoload :Builder, 'tipsy/builder'
|
13
|
-
autoload :Logger, 'tipsy/logger'
|
14
|
-
autoload :View, 'tipsy/view'
|
15
5
|
|
16
|
-
module
|
17
|
-
autoload :
|
18
|
-
autoload :
|
6
|
+
module Handler
|
7
|
+
autoload :AssetHandler, 'tipsy/handler/asset'
|
8
|
+
autoload :StaticHandler, 'tipsy/handler/static'
|
9
|
+
autoload :SassHandler, 'tipsy/handler/sass'
|
10
|
+
autoload :PhpHandler, 'tipsy/handler/php'
|
11
|
+
autoload :ErbHandler, 'tipsy/handler/erb'
|
19
12
|
end
|
20
13
|
|
21
|
-
module
|
22
|
-
autoload :
|
14
|
+
module Runners
|
15
|
+
autoload :Generator, 'tipsy/runners/generator'
|
16
|
+
autoload :Compiler, 'tipsy/runners/compiler'
|
17
|
+
autoload :Deployer, 'tipey/runners/deployer'
|
23
18
|
end
|
24
19
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
mattr_accessor :compass
|
30
|
-
|
31
|
-
def self.logger
|
32
|
-
@logger ||= Tipsy::Logger.new($stdout)
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.run_command(args, stdin)
|
36
|
-
args = [args].flatten
|
37
|
-
to_run = args.first
|
38
|
-
to_run = case to_run
|
39
|
-
when nil then 'run'
|
40
|
-
when 'new' then 'create'
|
41
|
-
when 'serve' || 's' then 'run'
|
42
|
-
else to_run
|
43
|
-
end
|
44
|
-
|
45
|
-
args.shift
|
46
|
-
parse_options!
|
47
|
-
Tipsy::Application.send(:"#{to_run}", *args)
|
48
|
-
|
20
|
+
module Utils
|
21
|
+
autoload :System, 'tipsy/utils/system'
|
22
|
+
autoload :SystemTest, 'tipsy/utils/system_test'
|
23
|
+
autoload :Logger, 'tipsy/utils/logger'
|
49
24
|
end
|
50
25
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
:host => '0.0.0.0',
|
55
|
-
:assets => OpenStruct.new({ :paths => [], :precompile => [] }),
|
56
|
-
:build_path => File.join(Tipsy.root, 'build'),
|
57
|
-
:public_path => File.join(Tipsy.root, 'public'),
|
58
|
-
:asset_path => File.join(Tipsy.root, 'public', 'assets')
|
59
|
-
})
|
26
|
+
module Compressors
|
27
|
+
autoload :JavascriptCompressor, 'tipsy/compressors/javascript_compressor'
|
28
|
+
autoload :CssCompressor, 'tipsy/compressors/css_compressor'
|
60
29
|
end
|
61
30
|
|
62
|
-
|
63
|
-
|
64
|
-
|
31
|
+
class << self
|
32
|
+
def env
|
33
|
+
@env ||= ENV['TIPSY_ENV'] || 'development'
|
34
|
+
end
|
65
35
|
|
66
|
-
|
67
|
-
|
68
|
-
opts.separator ""
|
69
|
-
opts.separator "Options:"
|
70
|
-
opts.on("-p", "--port", "Run the server on a specified port ( default: 4000 )") do |port|
|
71
|
-
options.port = port
|
72
|
-
end
|
73
|
-
opts.on("-a", "--address", "Run the server on a specified address ( default: 0.0.0.0 )") do |host|
|
74
|
-
options.host = host
|
75
|
-
end
|
76
|
-
opts.on_tail("--version", "Show version") do
|
77
|
-
puts Tipsy::VERSION
|
78
|
-
exit 0
|
79
|
-
end
|
36
|
+
def root
|
37
|
+
@root ||= ENV['TIPSY_ROOT']
|
80
38
|
end
|
81
39
|
|
40
|
+
def logger
|
41
|
+
@logger ||= Tipsy::Utils::Logger.new($stdout)
|
42
|
+
end
|
82
43
|
end
|
83
|
-
|
44
|
+
|
84
45
|
end
|
46
|
+
|
47
|
+
require 'tipsy/site'
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'tipsy/helpers'
|
3
|
+
|
4
|
+
class TagTest < ActiveSupport::TestCase
|
5
|
+
|
6
|
+
include Tipsy::Helpers::Tag
|
7
|
+
include Tipsy::Helpers::AssetPaths
|
8
|
+
include Tipsy::Helpers::AssetTags
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@output_buffer = ""
|
12
|
+
end
|
13
|
+
|
14
|
+
test "Single tags should be rendered with attributes" do
|
15
|
+
tag(:img, { src: "some/source.jpg" }).should == '<img src="some/source.jpg" />'
|
16
|
+
end
|
17
|
+
|
18
|
+
test "The image_tag renders an img tag" do
|
19
|
+
image_tag("something.jpg").should == '<img alt="something.jpg" src="/assets/something.jpg" />'
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
File without changes
|
File without changes
|
data/test/root/{development/assets/javascripts/test.js → compiled/sub-path-with-skip/fake.txt}
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CompilerTest < ActiveSupport::TestCase
|
4
|
+
attr_reader :compiler
|
5
|
+
|
6
|
+
def setup
|
7
|
+
Tipsy::Runners::Compiler.send(:include, Tipsy::Utils::SystemTest)
|
8
|
+
@compiler = Tipsy::Runners::Compiler.new
|
9
|
+
Tipsy::Site.configure!
|
10
|
+
end
|
11
|
+
|
12
|
+
test "Ensure source path is set" do
|
13
|
+
compiler.source_path.should == Tipsy::Site.config.public_path
|
14
|
+
end
|
15
|
+
|
16
|
+
test "Ensure destination path is set" do
|
17
|
+
compiler.dest_path.should == Tipsy::Site.config.compile_to
|
18
|
+
end
|
19
|
+
|
20
|
+
test "An option exists to skip specific files and folders on compile" do
|
21
|
+
compiler.excludes.include?('.git').should == true
|
22
|
+
compiler.excludes.include?('.svn').should == true
|
23
|
+
end
|
24
|
+
|
25
|
+
test "Ensure skipped directory is not removed" do
|
26
|
+
compiler.was_deleted?(File.join(Tipsy::Site.compile_to, ".svn")).should == false
|
27
|
+
end
|
28
|
+
|
29
|
+
test "Ensure un-skipped files are removed" do
|
30
|
+
compiler.was_deleted?(File.join(Tipsy::Site.compile_to, "sub-path-with-skip", "fake.txt")).should == true
|
31
|
+
end
|
32
|
+
|
33
|
+
test "Ensure un-skipped files in folders are removed" do
|
34
|
+
compiler.was_deleted?(File.join(Tipsy::Site.compile_to, "sub-path", "fake.txt")).should == true
|
35
|
+
end
|
36
|
+
|
37
|
+
test "Ensure un-skipped directories are removed" do
|
38
|
+
compiler.was_deleted?(File.join(Tipsy::Site.compile_to, "sub-path")).should == true
|
39
|
+
end
|
40
|
+
|
41
|
+
test "Ensure templates are created" do
|
42
|
+
compiler.was_created?(File.join(Tipsy::Site.compile_to, "sub", "page.html")).should == true
|
43
|
+
end
|
44
|
+
|
45
|
+
test "Ensure index templates are created" do
|
46
|
+
compiler.was_created?(File.join(Tipsy::Site.compile_to, "sub", "tertiary", "index.html")).should == true
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -1,33 +1,172 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
require
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
ENV['TIPSY_ROOT'] ||= File.join(File.dirname(__FILE__), "root")
|
5
|
+
ENV['TIPSY_ENV'] = "test"
|
6
|
+
|
7
|
+
Bundler.require
|
8
|
+
require 'rubygems'
|
9
|
+
require 'colored'
|
10
|
+
require 'active_support/all'
|
11
|
+
require 'fileutils'
|
12
|
+
require 'ostruct'
|
13
|
+
require 'minitest/unit'
|
14
|
+
require 'minitest/autorun'
|
15
|
+
require 'test/unit'
|
16
|
+
|
17
|
+
require 'tipsy'
|
18
|
+
|
19
|
+
require 'rspec/core'
|
20
|
+
require 'rspec/expectations'
|
21
|
+
|
22
|
+
Tipsy::Site.configure!
|
23
|
+
|
24
|
+
module MiniTest
|
25
|
+
class SpecRunner < Unit
|
26
|
+
|
27
|
+
def before_suites
|
28
|
+
super if defined?(super)
|
29
|
+
end
|
30
|
+
|
31
|
+
def after_suites
|
32
|
+
super if defined?(super)
|
14
33
|
end
|
15
34
|
|
16
|
-
|
35
|
+
def status(io = nil)
|
36
|
+
io ||= @@out
|
37
|
+
return io.puts ("%d tests, %d failures" % [assertion_count, failures]).green unless (failures.to_i > 0 || errors.to_i > 0)
|
38
|
+
format = "%d tests, %d assertions, %d failures, %d skipped/pending"
|
39
|
+
io.puts (format % [test_count, assertion_count, (failures + errors), skips]).red
|
40
|
+
end
|
41
|
+
|
42
|
+
def pad(str, size = 2)
|
43
|
+
" " * size + ("%5s" % str)
|
44
|
+
end
|
45
|
+
|
46
|
+
def puke klass, meth, e
|
17
47
|
|
18
|
-
|
19
|
-
|
48
|
+
meth_title = meth.to_s.gsub("_", " ").capitalize
|
49
|
+
make_fail = lambda{ |k, m, msg, loc|
|
50
|
+
["#{k} #{m}", pad("Failure/Error: #{msg}", 5).red, pad("#{loc}", 5)].join("\n")
|
51
|
+
}
|
52
|
+
make_bt = lambda{ | bt |
|
53
|
+
bt.map{ |line| "\e[90m# #{line}\e[0m" }.join("\n")
|
54
|
+
}
|
55
|
+
|
56
|
+
msg = case e
|
57
|
+
when MiniTest::Skip
|
58
|
+
@skips += 1
|
59
|
+
result = :skip
|
60
|
+
message = pad("(skipped/pending)", 6).yellow
|
61
|
+
"Pending: #{klass} #{meth}\n #{pad(location e)}]"
|
62
|
+
when MiniTest::Assertion
|
63
|
+
@failures += 1
|
64
|
+
result = :fail
|
65
|
+
message = pad("#{e.message}", 6).red
|
66
|
+
when defined?(RSpec::Expectations) && RSpec::Expectations::ExpectationNotMetError
|
67
|
+
@failures += 1
|
68
|
+
result = :fail
|
69
|
+
message = pad("#{e.message}", 6).red
|
70
|
+
else
|
71
|
+
@errors += 1
|
72
|
+
result = :error
|
73
|
+
message = pad("#{e.class}: #{e.message}\n", 6)
|
20
74
|
end
|
21
75
|
|
22
|
-
|
23
|
-
|
24
|
-
|
76
|
+
loc = (result == :fail) ? location(e).split("\n") : MiniTest::filter_backtrace(e.backtrace)
|
77
|
+
msg = make_fail.call(klass, meth_title, e.message, make_bt.call(loc)) if result === :fail || result === :error
|
78
|
+
|
79
|
+
@report << msg
|
80
|
+
result
|
81
|
+
end
|
82
|
+
|
83
|
+
def _run_anything type
|
84
|
+
suites = TestCase.send "#{type}_suites"
|
85
|
+
return if suites.empty?
|
86
|
+
|
87
|
+
start = Time.now
|
88
|
+
puts "---------------------------------------------------------"
|
89
|
+
puts "Running #{type} suite(s)"
|
90
|
+
puts "---------------------------------------------------------"
|
91
|
+
puts
|
92
|
+
puts
|
93
|
+
|
94
|
+
@test_count, @assertion_count = 0, 0
|
95
|
+
sync = output.respond_to? :"sync=" # stupid emacs
|
96
|
+
old_sync, output.sync = output.sync, true if sync
|
97
|
+
|
98
|
+
before_suites
|
99
|
+
results = _run_suites suites, type
|
100
|
+
|
101
|
+
@test_count = results.inject(0) { |sum, (tc, _)| sum + tc }
|
102
|
+
@assertion_count = results.inject(0) { |sum, (_, ac)| sum + ac }
|
103
|
+
|
104
|
+
output.sync = old_sync if sync
|
105
|
+
after_suites
|
106
|
+
|
107
|
+
t = Time.now - start
|
108
|
+
|
109
|
+
puts
|
110
|
+
puts "Finished in %.5fs" % t
|
111
|
+
puts status
|
112
|
+
|
113
|
+
report.each_with_index do |msg, i|
|
114
|
+
puts "\n%3d) %s" % [i + 1, msg]
|
25
115
|
end
|
116
|
+
puts
|
117
|
+
puts
|
118
|
+
|
119
|
+
if defined?(MiniTest::Growl)
|
120
|
+
MiniTest::Growl.new(self)
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
def _run_suite suite, type
|
126
|
+
header = "#{type}_suite_header"
|
127
|
+
puts send(header, suite) if respond_to? header
|
128
|
+
|
129
|
+
filter = options[:filter] || '/./'
|
130
|
+
filter = Regexp.new $1 if filter =~ /\/(.*)\//
|
131
|
+
|
132
|
+
available_suites = suite.send("#{type}_methods").grep(filter)
|
133
|
+
suite_name = suite.to_s.gsub(/Test$/i, '')
|
134
|
+
|
135
|
+
print "#{suite_name}\n" unless available_suites.empty?
|
136
|
+
|
137
|
+
assertions = available_suites.map { |method|
|
138
|
+
inst = suite.new method
|
139
|
+
inst._assertions = 0
|
140
|
+
|
141
|
+
@start_time = Time.now
|
142
|
+
result = inst.run self
|
143
|
+
repl_hash = { "_" => " ", ":" => "" }
|
144
|
+
meth_title = method.to_s.gsub(/\A(#{type.to_s})/, "").strip.gsub(/\A(\W|_)/){ repl_hash[$1] }.strip
|
145
|
+
meth_title = meth_title.gsub(/\A(#{suite_name})/i, '').strip.gsub("_", " ")
|
146
|
+
|
147
|
+
# Account for any sort of non-puke callback
|
148
|
+
response = if result.is_a?(Symbol)
|
149
|
+
(result == :skip) ? "#{meth_title} (skipped/pending)".yellow : "[x] : #{meth_title}".red
|
150
|
+
else
|
151
|
+
"[\u221A] : #{meth_title}".green
|
152
|
+
end
|
153
|
+
|
154
|
+
time = Time.now - @start_time
|
155
|
+
|
156
|
+
print pad(response)
|
157
|
+
print (" (%.2fs) " % time).clear
|
158
|
+
puts
|
159
|
+
|
160
|
+
inst._assertions
|
161
|
+
}
|
162
|
+
|
163
|
+
puts unless available_suites.empty?
|
164
|
+
return assertions.size, assertions.inject(0) { |sum, n| sum + n }
|
26
165
|
|
27
166
|
end
|
28
167
|
|
29
|
-
end
|
30
168
|
|
169
|
+
end
|
31
170
|
end
|
32
171
|
|
33
|
-
|
172
|
+
MiniTest::Unit.runner = MiniTest::SpecRunner.new
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SiteTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
Tipsy::Site.configure!
|
7
|
+
end
|
8
|
+
|
9
|
+
test "before_compile should be a callable class method" do
|
10
|
+
Tipsy::Site.respond_to?(:before_compile).should == true
|
11
|
+
end
|
12
|
+
|
13
|
+
test "Defined callbacks should be runnable blocks" do
|
14
|
+
check = false
|
15
|
+
Tipsy::Site.before_compile do
|
16
|
+
check = true
|
17
|
+
end
|
18
|
+
Tipsy::Site.before_compile
|
19
|
+
check.should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TipsyTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test "A root method is defined, defaulting to ENV['TIPSY_ROOT']" do
|
6
|
+
assert_equal Tipsy.root, File.expand_path("../../", __FILE__) << "/root"
|
7
|
+
end
|
8
|
+
|
9
|
+
test "An env method is defined, defaulting to ENV['TIPSY_ENV']" do
|
10
|
+
assert_equal Tipsy.env, "test"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SystemTest < ActiveSupport::TestCase
|
4
|
+
attr_reader :runner
|
5
|
+
|
6
|
+
class Runner
|
7
|
+
include Tipsy::Utils::System
|
8
|
+
end
|
9
|
+
|
10
|
+
def setup
|
11
|
+
@runner = Runner.new
|
12
|
+
end
|
13
|
+
|
14
|
+
test "Files can be excluded by extension" do
|
15
|
+
runner.excluded?("/home/someuser/another/something.rb").should == true
|
16
|
+
end
|
17
|
+
|
18
|
+
test "Entire directories can be excluded" do
|
19
|
+
runner.excluded?("/home/someuser/another/.svn").should == true
|
20
|
+
end
|
21
|
+
|
22
|
+
test "Non-excluded directories should be found" do
|
23
|
+
runner.excluded?("/home/someuser/another/something/").should == false
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'tipsy/view'
|
3
|
+
|
4
|
+
class ViewBaseTest < ActiveSupport::TestCase
|
5
|
+
attr_reader :path
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@path ||= Tipsy::View::Path.new
|
9
|
+
end
|
10
|
+
|
11
|
+
test "It should find a default index template" do
|
12
|
+
path.locate_template('').should_not == nil
|
13
|
+
end
|
14
|
+
|
15
|
+
test "It should locate templates based on the path" do
|
16
|
+
path.locate_template("page").should_not == nil
|
17
|
+
end
|
18
|
+
|
19
|
+
test "Locating the default layout" do
|
20
|
+
path.locate_layout('default').should == expand_path('layouts', 'default.html.erb')
|
21
|
+
end
|
22
|
+
|
23
|
+
test "Template is found from the URI" do
|
24
|
+
path.locate_template('page').should == expand_path('views', 'page.html.erb')
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def expand_path(*names)
|
30
|
+
names.unshift(Tipsy.root)
|
31
|
+
File.join(*names)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'tipsy/view'
|
3
|
+
|
4
|
+
class ViewPathTest < ActiveSupport::TestCase
|
5
|
+
attr_reader :path
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@path ||= Tipsy::View::Path.new
|
9
|
+
end
|
10
|
+
|
11
|
+
test "The default template should be index" do
|
12
|
+
path.locate_template('').should_not == nil
|
13
|
+
end
|
14
|
+
|
15
|
+
test "Pages should be found by path" do
|
16
|
+
path.locate_template("page").should_not == nil
|
17
|
+
end
|
18
|
+
|
19
|
+
test "The default layout should be found" do
|
20
|
+
path.locate_layout('default').should == expand_path('layouts', 'default.html.erb')
|
21
|
+
end
|
22
|
+
|
23
|
+
test "Templates should be found by URI if existing" do
|
24
|
+
path.locate_template('page').should == expand_path('views', 'page.html.erb')
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def expand_path(*names)
|
30
|
+
names.unshift(Tipsy.root)
|
31
|
+
File.join(*names)
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
data/tipsy.gemspec
CHANGED
@@ -3,10 +3,10 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
require "tipsy/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
|
7
6
|
s.name = "tipsy"
|
8
7
|
s.version = Tipsy::VERSION
|
9
8
|
s.authors = ["Brent Kirby"]
|
9
|
+
s.authors = ["Brent Kirby"]
|
10
10
|
s.email = ["info@kurbmedia.com"]
|
11
11
|
s.homepage = "https://github.com/kurbmedia/tipsy"
|
12
12
|
s.summary = %q{A mini Rack application server for developing static sites.}
|
@@ -19,13 +19,16 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
-
s.add_dependency("rack", "~> 1.
|
23
|
-
s.add_dependency("rack-test", "~> 0.
|
22
|
+
s.add_dependency("rack", "~> 1.3")
|
23
|
+
s.add_dependency("rack-test", "~> 0.6")
|
24
24
|
s.add_dependency("tilt", "~> 1.3")
|
25
|
-
s.add_dependency("i18n", "~> 0.
|
25
|
+
s.add_dependency("i18n", "~> 0.6")
|
26
26
|
s.add_dependency("sass", "~> 3.1")
|
27
|
-
s.add_dependency("
|
28
|
-
s.add_dependency(
|
29
|
-
s.add_dependency(
|
27
|
+
s.add_dependency("activesupport", ">= 3.1")
|
28
|
+
s.add_dependency('sprockets', '~> 2.0')
|
29
|
+
s.add_dependency("hike", "~> 1.2")
|
30
|
+
s.add_dependency("erubis", "~> 2.7")
|
31
|
+
|
32
|
+
s.add_development_dependency("minitest", "~> 2.5")
|
30
33
|
|
31
34
|
end
|