roger 1.1.3 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.hound.yml +2 -0
- data/.rubocop.yml +47 -0
- data/.travis.yml +1 -5
- data/CHANGELOG.md +8 -0
- data/Gemfile +3 -3
- data/Rakefile +10 -4
- data/bin/roger +1 -1
- data/doc/mockupfile.md +97 -0
- data/doc/templating.md +5 -1
- data/examples/default_template/Gemfile +1 -1
- data/lib/roger/cli.rb +41 -36
- data/lib/roger/cli/command.rb +2 -4
- data/lib/roger/cli/generate.rb +1 -0
- data/lib/roger/cli/release.rb +2 -2
- data/lib/roger/cli/serve.rb +11 -11
- data/lib/roger/cli/test.rb +6 -5
- data/lib/roger/extractor.rb +42 -43
- data/lib/roger/generators.rb +27 -19
- data/lib/roger/generators/generator.rb +7 -10
- data/lib/roger/generators/new.rb +56 -41
- data/lib/roger/generators/templates/generator.tt +5 -5
- data/lib/roger/helpers/get_callable.rb +15 -14
- data/lib/roger/helpers/logging.rb +35 -13
- data/lib/roger/mockupfile.rb +13 -23
- data/lib/roger/project.rb +41 -34
- data/lib/roger/rack/roger.rb +28 -29
- data/lib/roger/rack/sleep.rb +4 -5
- data/lib/roger/release.rb +95 -72
- data/lib/roger/release/cleaner.rb +14 -13
- data/lib/roger/release/finalizers.rb +10 -10
- data/lib/roger/release/finalizers/dir.rb +17 -19
- data/lib/roger/release/finalizers/git_branch.rb +76 -38
- data/lib/roger/release/finalizers/rsync.rb +60 -49
- data/lib/roger/release/finalizers/zip.rb +32 -29
- data/lib/roger/release/injector.rb +43 -37
- data/lib/roger/release/processors.rb +24 -22
- data/lib/roger/release/processors/mockup.rb +97 -69
- data/lib/roger/release/processors/url_relativizer.rb +57 -30
- data/lib/roger/release/scm.rb +30 -27
- data/lib/roger/release/scm/git.rb +101 -92
- data/lib/roger/resolver.rb +86 -61
- data/lib/roger/server.rb +52 -27
- data/lib/roger/template.rb +102 -74
- data/lib/roger/test.rb +16 -13
- data/lib/roger/version.rb +3 -2
- data/roger.gemspec +9 -5
- data/test/helpers/cli.rb +17 -15
- data/test/project/Gemfile +2 -2
- data/test/project/html/formats/csv.rcsv +0 -0
- data/test/project/lib/generators/test.rb +2 -3
- data/test/project/lib/tests/fail/fail.rb +5 -6
- data/test/project/lib/tests/noop/lib/cli.rb +2 -1
- data/test/project/lib/tests/noop/lib/test.rb +5 -5
- data/test/project/lib/tests/noop/noop.rb +2 -1
- data/test/project/lib/tests/succeed/succeed.rb +5 -6
- data/test/unit/cli/cli_base_test.rb +2 -3
- data/test/unit/cli/cli_generate_test.rb +9 -10
- data/test/unit/cli/cli_serve_test.rb +22 -18
- data/test/unit/cli/cli_test_test.rb +13 -15
- data/test/unit/cli/cli_version_test.rb +4 -4
- data/test/unit/generators_test.rb +8 -10
- data/test/unit/helpers/logging_test.rb +64 -0
- data/test/unit/rack/roger_test.rb +21 -0
- data/test/unit/release/cleaner_test.rb +23 -19
- data/test/unit/release/finalizers/git_branch_test.rb +2 -1
- data/test/unit/release/finalizers/zip_test.rb +48 -0
- data/test/unit/release/mockup_test.rb +48 -0
- data/test/unit/release/processors_test.rb +19 -19
- data/test/unit/release_test.rb +15 -14
- data/test/unit/resolver_test.rb +21 -14
- data/test/unit/server_test.rb +31 -0
- data/test/unit/template_test.rb +58 -36
- data/test/unit/test_test.rb +3 -2
- metadata +35 -9
- data/test/Mockupfile-syntax.rb +0 -93
data/lib/roger/test.rb
CHANGED
@@ -3,7 +3,9 @@ require File.dirname(__FILE__) + "/helpers/get_callable"
|
|
3
3
|
require File.dirname(__FILE__) + "/helpers/logging"
|
4
4
|
|
5
5
|
module Roger
|
6
|
+
# The test class itself
|
6
7
|
class Test
|
8
|
+
# The Test CLI Thor command
|
7
9
|
class Cli < Thor
|
8
10
|
def self.exit_on_failure?
|
9
11
|
true
|
@@ -17,9 +19,8 @@ module Roger
|
|
17
19
|
|
18
20
|
desc "test", "Run the test"
|
19
21
|
def test
|
20
|
-
|
21
|
-
|
22
|
-
end
|
22
|
+
ok = Roger::Cli::Base.project.test.run_test!(self.class.stack_index)
|
23
|
+
fail(Thor::Error, "The test failed") unless ok
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
@@ -33,10 +34,13 @@ module Roger
|
|
33
34
|
# Register a test method to Roger::Test so it can be used in the Mockupfile
|
34
35
|
|
35
36
|
def register(name, test, cli = nil)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
if map.key?(name)
|
38
|
+
fail ArgumentError, "Another test has already claimed the name #{name.inspect}"
|
39
|
+
end
|
40
|
+
|
41
|
+
fail ArgumentError, "Name must be a symbol" unless name.is_a?(Symbol)
|
42
|
+
map[name] = test
|
43
|
+
cli_map[name] = cli if cli
|
40
44
|
end
|
41
45
|
|
42
46
|
# Mapping names to test callers
|
@@ -65,7 +69,7 @@ module Roger
|
|
65
69
|
def use(processor, options = {})
|
66
70
|
test = self.class.get_callable(processor, Roger::Test.map)
|
67
71
|
if processor.is_a?(Symbol)
|
68
|
-
|
72
|
+
register_in_cli(processor, @stack.size, self.class.cli_map[processor])
|
69
73
|
end
|
70
74
|
@stack << [test, options]
|
71
75
|
end
|
@@ -104,7 +108,7 @@ module Roger
|
|
104
108
|
# if you wasted more then an hour of your life because the
|
105
109
|
# shell glob didn't 'work'.
|
106
110
|
def get_files(globs, excludes = [])
|
107
|
-
files = globs.map{|g| Dir.glob(
|
111
|
+
files = globs.map { |g| Dir.glob(project.path + g) }.flatten
|
108
112
|
if excludes.any?
|
109
113
|
files.reject { |c| excludes.detect { |e| c.match(e) } }
|
110
114
|
else
|
@@ -115,7 +119,7 @@ module Roger
|
|
115
119
|
protected
|
116
120
|
|
117
121
|
def call_test(task)
|
118
|
-
if
|
122
|
+
if task.is_a?(Array)
|
119
123
|
task[0].call(self, task[1])
|
120
124
|
else
|
121
125
|
task.call(self)
|
@@ -125,8 +129,8 @@ module Roger
|
|
125
129
|
def register_in_cli(name, stack_index, klass)
|
126
130
|
long_desc = "Run #{name} tests"
|
127
131
|
|
128
|
-
if klass && klass.
|
129
|
-
usage = "#{name} #{klass.arguments.map
|
132
|
+
if klass && klass.is_a?(Class) && klass <= Roger::Test::Cli
|
133
|
+
usage = "#{name} #{klass.arguments.map(&:banner).join(' ')}"
|
130
134
|
thor_class = klass
|
131
135
|
else
|
132
136
|
usage = "#{name}"
|
@@ -138,7 +142,6 @@ module Roger
|
|
138
142
|
end
|
139
143
|
|
140
144
|
Roger::Cli::Test.register thor_class, name, usage, long_desc
|
141
|
-
|
142
145
|
end
|
143
146
|
end
|
144
147
|
end
|
data/lib/roger/version.rb
CHANGED
data/roger.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
-
|
3
|
+
require File.dirname(__FILE__) + "/lib/roger/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "roger"
|
@@ -10,13 +10,14 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ["info@digitpaint.nl", "flurin@digitpaint.nl"]
|
11
11
|
s.homepage = "http://github.com/digitpaint/roger"
|
12
12
|
s.summary = "Roger is a set of tools to create self-containing HTML mockups."
|
13
|
+
s.description = "See homepage for more information."
|
13
14
|
s.licenses = ["MIT"]
|
14
15
|
|
15
16
|
s.date = Time.now.strftime("%Y-%m-%d")
|
16
17
|
|
17
18
|
s.files = `git ls-files`.split("\n")
|
18
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
20
21
|
s.require_paths = ["lib"]
|
21
22
|
|
22
23
|
s.extra_rdoc_files = [
|
@@ -25,16 +26,19 @@ Gem::Specification.new do |s|
|
|
25
26
|
|
26
27
|
s.rdoc_options = ["--charset=UTF-8"]
|
27
28
|
|
28
|
-
|
29
|
+
if s.respond_to? :required_rubygems_version=
|
30
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0")
|
31
|
+
end
|
29
32
|
|
30
33
|
s.add_dependency("thor", ["~> 0.19.0"])
|
31
34
|
s.add_dependency("rack", [">= 1.0.0"])
|
32
35
|
s.add_dependency("tilt", ["~> 2.0.1"])
|
33
36
|
s.add_dependency("mime-types", ["~> 2.2"])
|
34
|
-
s.add_dependency("hpricot", ["
|
37
|
+
s.add_dependency("hpricot", ["= 0.8.4"])
|
35
38
|
s.add_dependency("redcarpet", [">= 3.1.1"])
|
36
39
|
|
37
40
|
s.add_development_dependency("test-unit", "~> 3.0.0")
|
38
41
|
s.add_development_dependency("mocha", "~> 1.1.0")
|
39
42
|
s.add_development_dependency("puma", "~> 2.10.0")
|
40
|
-
|
43
|
+
s.add_development_dependency "rubocop", "~> 0.31.0"
|
44
|
+
end
|
data/test/helpers/cli.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
require "stringio"
|
2
2
|
|
3
3
|
module Roger
|
4
|
+
# Module with some helper functions for testing Roger CLI commands
|
4
5
|
module TestCli
|
5
6
|
# Capture stdout/stderr output
|
6
7
|
def capture
|
7
|
-
@_orig_stdout
|
8
|
+
@_orig_stdout = $stdout
|
9
|
+
@_orig_stderr = $stderr
|
8
10
|
|
9
11
|
$stdout = StringIO.new
|
10
12
|
$stderr = StringIO.new
|
@@ -13,35 +15,35 @@ module Roger
|
|
13
15
|
|
14
16
|
return [$stdout.string, $stderr.string]
|
15
17
|
ensure
|
16
|
-
$stdout
|
18
|
+
$stdout = @_orig_stdout
|
19
|
+
$stderr = @_orig_stderr
|
17
20
|
end
|
18
21
|
|
19
|
-
def run_command(args, &
|
22
|
+
def run_command(args, &_block)
|
20
23
|
out, err = capture do
|
21
|
-
Cli::Base.start(args, :
|
24
|
+
Cli::Base.start(args, debug: true)
|
22
25
|
end
|
23
|
-
[out,err]
|
26
|
+
[out, err]
|
24
27
|
end
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
def run_command_with_mockupfile(args, &_block)
|
30
|
+
project = Project.new(
|
31
|
+
@base_path || File.dirname(__FILE__) + "/../../project",
|
32
|
+
mockupfile_path: false
|
33
|
+
)
|
29
34
|
|
30
35
|
mockupfile = Roger::Mockupfile.new(project)
|
31
36
|
|
32
|
-
if block_given?
|
33
|
-
yield(mockupfile)
|
34
|
-
end
|
37
|
+
yield(mockupfile) if block_given?
|
35
38
|
|
36
39
|
project.mockupfile = mockupfile
|
37
40
|
|
38
41
|
Cli::Base.project = project
|
39
42
|
|
40
43
|
out, err = capture do
|
41
|
-
Cli::Base.start(args, :
|
44
|
+
Cli::Base.start(args, debug: true)
|
42
45
|
end
|
43
|
-
[out,err]
|
46
|
+
[out, err]
|
44
47
|
end
|
45
|
-
|
46
48
|
end
|
47
|
-
end
|
49
|
+
end
|
data/test/project/Gemfile
CHANGED
File without changes
|
@@ -1,17 +1,16 @@
|
|
1
1
|
module RogerFailTest
|
2
|
+
# A test that always fails
|
2
3
|
class Test
|
3
|
-
|
4
|
-
def initialize(options={})
|
4
|
+
def initialize(options = {})
|
5
5
|
@options = {}
|
6
|
-
@options.update(options) if options
|
6
|
+
@options.update(options) if options
|
7
7
|
end
|
8
8
|
|
9
|
-
def call(test,
|
9
|
+
def call(test, _options = {})
|
10
10
|
test.log(self, "Going to fail")
|
11
11
|
false
|
12
12
|
end
|
13
|
-
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
Roger::Test.register :fail, RogerFailTest::Test
|
16
|
+
Roger::Test.register :fail, RogerFailTest::Test
|
@@ -1,16 +1,16 @@
|
|
1
1
|
module RogerNoopTest
|
2
|
+
# Noop test. Doesn't do anything except log a normal line and log a debug line
|
3
|
+
# Will always pass
|
2
4
|
class Test
|
3
|
-
|
4
|
-
def initialize(options={})
|
5
|
+
def initialize(options = {})
|
5
6
|
@options = {}
|
6
7
|
@options.update(options) if options
|
7
8
|
end
|
8
9
|
|
9
|
-
def call(test,
|
10
|
+
def call(test, _options = {})
|
10
11
|
test.log(self, "NOOP")
|
11
12
|
test.debug(self, "NOOP DEBUG")
|
12
13
|
true
|
13
14
|
end
|
14
|
-
|
15
15
|
end
|
16
|
-
end
|
16
|
+
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require File.dirname(__FILE__) + "/lib/test"
|
2
2
|
require File.dirname(__FILE__) + "/lib/cli"
|
3
3
|
|
4
|
+
# RogerNoopTest namespace
|
4
5
|
module RogerNoopTest
|
5
6
|
end
|
6
7
|
|
7
|
-
Roger::Test.register :noop, RogerNoopTest::Test, RogerNoopTest::Cli
|
8
|
+
Roger::Test.register :noop, RogerNoopTest::Test, RogerNoopTest::Cli
|
@@ -1,17 +1,16 @@
|
|
1
1
|
module RogerSucceedTest
|
2
|
+
# A simple Roger test that will succeed
|
2
3
|
class Test
|
3
|
-
|
4
|
-
def initialize(options={})
|
4
|
+
def initialize(options = {})
|
5
5
|
@options = {}
|
6
|
-
@options.update(options) if options
|
6
|
+
@options.update(options) if options
|
7
7
|
end
|
8
8
|
|
9
|
-
def call(test,
|
9
|
+
def call(test, _options = {})
|
10
10
|
test.log(self, "Going to succeed")
|
11
11
|
true
|
12
12
|
end
|
13
|
-
|
14
13
|
end
|
15
14
|
end
|
16
15
|
|
17
|
-
Roger::Test.register :succeed, RogerSucceedTest::Test
|
16
|
+
Roger::Test.register :succeed, RogerSucceedTest::Test
|
@@ -2,8 +2,8 @@ require "./lib/roger/cli.rb"
|
|
2
2
|
require "test/unit"
|
3
3
|
|
4
4
|
module Roger
|
5
|
+
# Test for roger base commands
|
5
6
|
class CliBaseTest < ::Test::Unit::TestCase
|
6
|
-
|
7
7
|
def test_has_test_command
|
8
8
|
assert_includes Cli::Base.tasks.keys, "test"
|
9
9
|
end
|
@@ -23,6 +23,5 @@ module Roger
|
|
23
23
|
def test_has_version_command
|
24
24
|
assert_includes Cli::Base.tasks.keys, "version"
|
25
25
|
end
|
26
|
-
|
27
26
|
end
|
28
|
-
end
|
27
|
+
end
|
@@ -3,20 +3,19 @@ require "test/unit"
|
|
3
3
|
|
4
4
|
require File.dirname(__FILE__) + "/../../helpers/cli"
|
5
5
|
|
6
|
-
#
|
7
|
-
|
6
|
+
# CustomGenerators namespace
|
8
7
|
module CustomGens
|
8
|
+
# The Generators namespace
|
9
9
|
module Generators
|
10
|
-
|
10
|
+
# Mock generator
|
11
11
|
class MockedGenerator < Roger::Generators::Base
|
12
|
-
|
13
12
|
desc "@mocked description"
|
14
|
-
argument :path, :
|
15
|
-
argument :another_arg, :
|
13
|
+
argument :path, type: :string, required: false, desc: "Path to generate mockup into"
|
14
|
+
argument :another_arg, type: :string, required: false, desc: "Mocked or what?!"
|
16
15
|
|
17
16
|
def test
|
18
17
|
# Somewhat ugly way of checking
|
19
|
-
|
18
|
+
fail NotImplementedError
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
@@ -25,6 +24,7 @@ module CustomGens
|
|
25
24
|
end
|
26
25
|
|
27
26
|
module Roger
|
27
|
+
# These tests ar for the roger generate command
|
28
28
|
class CliGenerateTest < ::Test::Unit::TestCase
|
29
29
|
include TestCli
|
30
30
|
|
@@ -38,11 +38,10 @@ module Roger
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def test_help_shows_available_generators
|
41
|
-
out,
|
41
|
+
out, _err = run_command %w(help generate)
|
42
42
|
|
43
43
|
assert_includes out, "generate new"
|
44
44
|
assert_includes out, "generate mock"
|
45
45
|
end
|
46
|
-
|
47
46
|
end
|
48
|
-
end
|
47
|
+
end
|
@@ -3,16 +3,20 @@ require "test/unit"
|
|
3
3
|
|
4
4
|
require File.dirname(__FILE__) + "/../../helpers/cli"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
module Roger
|
7
|
+
module Cli
|
8
|
+
# Overwrite Roger::Cli::Serve#start method as we don't want
|
9
|
+
# to actually start the server
|
10
|
+
class Serve
|
11
|
+
def start
|
12
|
+
# Let's not start it.
|
13
|
+
end
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
|
-
|
15
18
|
module Roger
|
19
|
+
# These tests ar for the roger serve command
|
16
20
|
class CliServeTest < ::Test::Unit::TestCase
|
17
21
|
include TestCli
|
18
22
|
|
@@ -31,7 +35,7 @@ module Roger
|
|
31
35
|
|
32
36
|
# roger server
|
33
37
|
def test_serve_default_options
|
34
|
-
out,
|
38
|
+
out, _err = run_command(%w(serve))
|
35
39
|
|
36
40
|
assert_includes out, "9000"
|
37
41
|
assert_includes out, "0.0.0.0"
|
@@ -39,7 +43,7 @@ module Roger
|
|
39
43
|
end
|
40
44
|
|
41
45
|
def test_serve_with_custom_host
|
42
|
-
out,
|
46
|
+
out, _err = run_command(%w(serve --host=localhost))
|
43
47
|
|
44
48
|
assert_includes out, "9000"
|
45
49
|
assert_includes out, "localhost"
|
@@ -47,7 +51,7 @@ module Roger
|
|
47
51
|
end
|
48
52
|
|
49
53
|
def test_serve_with_custom_port
|
50
|
-
out,
|
54
|
+
out, _err = run_command(%w(serve --port=8888))
|
51
55
|
|
52
56
|
assert_includes out, "8888"
|
53
57
|
assert_includes out, "0.0.0.0"
|
@@ -55,20 +59,20 @@ module Roger
|
|
55
59
|
end
|
56
60
|
|
57
61
|
def test_serve_with_custom_handler
|
58
|
-
out,
|
62
|
+
out, _err = run_command(%w(serve --handler=webrick))
|
59
63
|
|
60
64
|
assert_includes out, "9000"
|
61
65
|
assert_includes out, "0.0.0.0"
|
62
66
|
assert_includes out, "WEBrick"
|
63
67
|
end
|
64
|
-
|
65
68
|
end
|
66
69
|
|
70
|
+
# These tests ar for the roger serve command with a mockupfile config
|
67
71
|
class CliServeWithMockupfileTest < ::Test::Unit::TestCase
|
68
72
|
include TestCli
|
69
73
|
|
70
74
|
def test_serve_with_port_in_mockupfile
|
71
|
-
out,
|
75
|
+
out, _err = run_command_with_mockupfile(%w(serve)) do |m|
|
72
76
|
m.serve do |s|
|
73
77
|
s.port = 9001
|
74
78
|
end
|
@@ -80,7 +84,7 @@ module Roger
|
|
80
84
|
end
|
81
85
|
|
82
86
|
def test_serve_with_host_in_mockupfile
|
83
|
-
out,
|
87
|
+
out, _err = run_command_with_mockupfile(%w(serve)) do |m|
|
84
88
|
m.serve do |s|
|
85
89
|
s.host = "127.0.0.1"
|
86
90
|
end
|
@@ -92,7 +96,7 @@ module Roger
|
|
92
96
|
end
|
93
97
|
|
94
98
|
def test_serve_with_handler_in_mockupfile
|
95
|
-
out,
|
99
|
+
out, _err = run_command_with_mockupfile(%w(serve)) do |m|
|
96
100
|
m.serve do |s|
|
97
101
|
s.handler = "webrick"
|
98
102
|
end
|
@@ -104,7 +108,7 @@ module Roger
|
|
104
108
|
end
|
105
109
|
|
106
110
|
def test_serve_with_custom_port_should_override_mockupfile
|
107
|
-
out,
|
111
|
+
out, _err = run_command_with_mockupfile(%w(serve --port=9002)) do |m|
|
108
112
|
m.serve do |s|
|
109
113
|
s.port = 9001
|
110
114
|
end
|
@@ -116,7 +120,7 @@ module Roger
|
|
116
120
|
end
|
117
121
|
|
118
122
|
def test_serve_with_custom_host_should_override_mockupfile
|
119
|
-
out,
|
123
|
+
out, _err = run_command_with_mockupfile(%w(serve --host=localhost)) do |m|
|
120
124
|
m.serve do |s|
|
121
125
|
s.host = "127.0.0.1"
|
122
126
|
end
|
@@ -128,7 +132,7 @@ module Roger
|
|
128
132
|
end
|
129
133
|
|
130
134
|
def test_serve_with_custom_handler_should_override_mockupfile
|
131
|
-
out,
|
135
|
+
out, _err = run_command_with_mockupfile(%w(serve --handler=webrick)) do |m|
|
132
136
|
m.serve do |s|
|
133
137
|
s.handler = "puma"
|
134
138
|
end
|
@@ -139,4 +143,4 @@ module Roger
|
|
139
143
|
assert_includes out, "WEBrick"
|
140
144
|
end
|
141
145
|
end
|
142
|
-
end
|
146
|
+
end
|