geb 0.1.11 → 0.1.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/README.md +56 -12
- data/lib/geb/commands/server.rb +3 -2
- data/lib/geb/config.rb +88 -0
- data/lib/geb/defaults.rb +2 -2
- data/lib/geb/page.rb +35 -3
- data/lib/geb/samples/basic/assets/css/site.css +41 -2
- data/lib/geb/samples/basic/geb.config.yml +19 -3
- data/lib/geb/samples/basic/index.html +24 -1
- data/lib/geb/samples/basic/shared/partials/_footer.html +4 -0
- data/lib/geb/samples/basic/shared/partials/_geb.html +26 -0
- data/lib/geb/samples/basic/shared/partials/_header.html +9 -0
- data/lib/geb/samples/bootstrap_jquery/assets/css/site.css +68 -1
- data/lib/geb/samples/bootstrap_jquery/blog/blog_post_1.html +83 -25
- data/lib/geb/samples/bootstrap_jquery/blog/index.html +39 -6
- data/lib/geb/samples/bootstrap_jquery/geb.config.yml +20 -3
- data/lib/geb/samples/bootstrap_jquery/index.html +252 -2
- data/lib/geb/samples/bootstrap_jquery/page.html +24 -2
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_footer.html +2 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_geb.html +26 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_header.html +25 -0
- data/lib/geb/samples/bootstrap_jquery/shared/partials/_meta_tags.html +1 -1
- data/lib/geb/samples/bootstrap_jquery/shared/templates/_blog_post.html +19 -0
- data/lib/geb/samples/bootstrap_jquery/site.webmanifest +1 -1
- data/lib/geb/samples/geb.config.yml +17 -0
- data/lib/geb/server.rb +12 -6
- data/lib/geb/site/build.rb +73 -61
- data/lib/geb/site/release.rb +23 -28
- data/lib/geb/site/remote.rb +1 -1
- data/lib/geb/site/template.rb +6 -0
- data/lib/geb/site.rb +7 -0
- data/lib/geb/template.rb +1 -0
- data/lib/geb/utilities.rb +1 -1
- data/lib/geb.rb +1 -1
- data/test/api tests/test_cli.rb +1 -1
- data/test/api tests/test_config.rb +132 -0
- data/test/api tests/test_page.rb +88 -4
- data/test/api tests/test_server.rb +96 -32
- data/test/api tests/test_site.rb +131 -31
- data/test/command tests/test_geb_build.rb +2 -2
- data/test/command tests/test_geb_release.rb +6 -8
- data/test/command tests/test_geb_server.rb +21 -0
- metadata +4 -4
- data/lib/geb/samples/bootstrap_jquery/blog/blog_post_2.html +0 -35
- data/lib/geb/samples/bootstrap_jquery/blog/blog_post_3.html +0 -35
data/lib/geb/server.rb
CHANGED
@@ -22,11 +22,13 @@ module Geb
|
|
22
22
|
# @param site [Geb::Site] the site instance to serve
|
23
23
|
# @param port [Integer] the port to run the server on
|
24
24
|
# @param auto_build [Boolean] whether to start the file watcher
|
25
|
-
|
25
|
+
# @param debug [Boolean] whether to enable full output during site rebuild
|
26
|
+
def initialize(site, port, auto_build, debug)
|
26
27
|
|
27
28
|
# set the site and port
|
28
29
|
@site = site
|
29
30
|
@port = port
|
31
|
+
@debug = debug
|
30
32
|
|
31
33
|
# get the http server instance and file watcher if auto_build is set
|
32
34
|
@http_server = get_http_server()
|
@@ -73,7 +75,7 @@ module Geb
|
|
73
75
|
# Create a new WEBrick server
|
74
76
|
server = WEBrick::HTTPServer.new(
|
75
77
|
Port: @port,
|
76
|
-
DocumentRoot: @site.
|
78
|
+
DocumentRoot: @site.get_site_local_output_directory()
|
77
79
|
) # WEBrick::HTTPServer.new
|
78
80
|
|
79
81
|
Geb.log "Server running on http://localhost:#{server.config[:Port]}/"
|
@@ -104,8 +106,12 @@ module Geb
|
|
104
106
|
# attempt to rebuild the site, log any errors but do not stop watching
|
105
107
|
begin
|
106
108
|
|
107
|
-
# rebuild the site, suppress log output
|
108
|
-
|
109
|
+
# rebuild the site, suppress log output if deubg is not set
|
110
|
+
if @debug
|
111
|
+
@site.build()
|
112
|
+
else
|
113
|
+
Geb.no_log { @site.build() }
|
114
|
+
end # if else
|
109
115
|
|
110
116
|
rescue Geb::Error => e
|
111
117
|
Geb.log "\nError rebuilding site: #{e.message}"
|
@@ -118,8 +124,8 @@ module Geb
|
|
118
124
|
end # Listen.to(site.site_path) do |modified, added, removed|
|
119
125
|
|
120
126
|
# set ignore the output and release directories, cleanup the paths and make them relative to the site path
|
121
|
-
ignore_output_dir = @site.
|
122
|
-
ignore_release_dir = @site.
|
127
|
+
ignore_output_dir = @site.get_site_local_output_directory().gsub(@site.site_path, '').gsub(/\A\W+/, '')
|
128
|
+
ignore_release_dir = @site.get_site_release_output_directory().gsub(@site.site_path, '').gsub(/\A\W+/, '')
|
123
129
|
|
124
130
|
Geb.log "Watching for changes in [#{@site.site_path}]"
|
125
131
|
Geb.log "Ignoring [#{ignore_output_dir}]"
|
data/lib/geb/site/build.rb
CHANGED
@@ -24,6 +24,7 @@ module Geb
|
|
24
24
|
end # class FailedToOutputSite < Geb::Error
|
25
25
|
|
26
26
|
# build the site
|
27
|
+
# @raise SiteNotLoaded if the site is not loaded
|
27
28
|
def build
|
28
29
|
|
29
30
|
# make sure the site is laoded, if not, raise an error
|
@@ -36,52 +37,6 @@ module Geb
|
|
36
37
|
|
37
38
|
end # def build
|
38
39
|
|
39
|
-
# build the assets for the site
|
40
|
-
# @raise SiteNotLoaded if the site is not loaded
|
41
|
-
def build_assets
|
42
|
-
|
43
|
-
# make sure the site is laoded, if not, raise an error
|
44
|
-
raise SiteNotLoadedError.new("Could not build assets.") unless @loaded
|
45
|
-
|
46
|
-
# get the site asset and output assets directory
|
47
|
-
site_assets_dir = get_site_assets_directory()
|
48
|
-
outout_assets_dir = File.join(get_site_output_directory(), site_assets_dir.gsub(@site_path, ""))
|
49
|
-
|
50
|
-
Geb.log "Building assets for #{site_name}\n\n"
|
51
|
-
|
52
|
-
# step through all the asset files and copy them to the output directory
|
53
|
-
Dir.glob("#{site_assets_dir}/**/*").each do |asset_file|
|
54
|
-
|
55
|
-
# skip directories
|
56
|
-
next if File.directory?(asset_file)
|
57
|
-
|
58
|
-
# get the relative path of the asset file and the destination path
|
59
|
-
asset_relative_path = asset_file.gsub(site_assets_dir, "")
|
60
|
-
asset_full_destination_path = File.join(outout_assets_dir, asset_relative_path)
|
61
|
-
|
62
|
-
# check if the destination asset file exists
|
63
|
-
if File.exist?(asset_full_destination_path)
|
64
|
-
|
65
|
-
Geb.log " - skipping asset: #{asset_relative_path}"
|
66
|
-
|
67
|
-
else
|
68
|
-
|
69
|
-
Geb.log " - processing asset: #{asset_relative_path}"
|
70
|
-
|
71
|
-
# create the output directory for the asset file
|
72
|
-
output_dir = File.join(outout_assets_dir, File.dirname(asset_relative_path))
|
73
|
-
FileUtils.mkdir_p(output_dir)
|
74
|
-
|
75
|
-
# copy the asset file to the output directory
|
76
|
-
FileUtils.cp(asset_file, output_dir)
|
77
|
-
|
78
|
-
end # if else
|
79
|
-
|
80
|
-
end # Dir.glob
|
81
|
-
Geb.log "\nDone building assets for #{site_name}"
|
82
|
-
|
83
|
-
end # def build_assets
|
84
|
-
|
85
40
|
# build the pages for the site
|
86
41
|
# @raise SiteNotLoaded if the site is not loaded
|
87
42
|
def build_pages
|
@@ -93,13 +48,13 @@ module Geb
|
|
93
48
|
Geb::Template.expire_cache
|
94
49
|
Geb::Partial.expire_cache
|
95
50
|
|
96
|
-
# find all
|
51
|
+
# find all pages to build
|
97
52
|
page_files = get_page_files(@site_path,
|
98
53
|
@site_config.page_extensions(),
|
99
54
|
@site_config.template_and_partial_identifier(),
|
100
|
-
[
|
55
|
+
[get_site_local_output_directory(), get_site_release_output_directory()])
|
101
56
|
|
102
|
-
Geb.log "Building #{page_files.length} pages for
|
57
|
+
Geb.log "Building #{page_files.length} #{site_name} pages #{@releasing ? 'for release' : 'locally'}"
|
103
58
|
|
104
59
|
# create a temporary directory
|
105
60
|
Dir.mktmpdir do |tmp_dir|
|
@@ -117,14 +72,17 @@ module Geb
|
|
117
72
|
# attempt to write the site to the output directory
|
118
73
|
begin
|
119
74
|
|
75
|
+
# get the destination directory for the site output, depending on the release flag
|
76
|
+
destination_directory = @releasing ? get_site_release_output_directory() : get_site_local_output_directory()
|
77
|
+
|
120
78
|
# clear the output directory
|
121
|
-
Geb.log_start "Clearing site output folder #{
|
122
|
-
clear_site_output_directory()
|
79
|
+
Geb.log_start "Clearing site output folder #{destination_directory} ... "
|
80
|
+
clear_site_output_directory(destination_directory)
|
123
81
|
Geb.log "done."
|
124
82
|
|
125
83
|
# copy the files to the output directory
|
126
|
-
Geb.log_start "Outputting site to #{
|
127
|
-
output_site(tmp_dir)
|
84
|
+
Geb.log_start "Outputting site to #{destination_directory} ... "
|
85
|
+
output_site(tmp_dir, destination_directory)
|
128
86
|
Geb.log "done."
|
129
87
|
|
130
88
|
rescue => e
|
@@ -135,11 +93,60 @@ module Geb
|
|
135
93
|
|
136
94
|
end # def build_pages
|
137
95
|
|
138
|
-
#
|
96
|
+
# build the assets for the site
|
97
|
+
# @raise SiteNotLoaded if the site is not loaded
|
98
|
+
def build_assets
|
99
|
+
|
100
|
+
# make sure the site is laoded, if not, raise an error
|
101
|
+
raise SiteNotLoadedError.new("Could not build assets.") unless @loaded
|
102
|
+
|
103
|
+
# get the destination directory for the site output, depending on the release flag
|
104
|
+
destination_directory = @releasing ? get_site_release_output_directory() : get_site_local_output_directory()
|
105
|
+
|
106
|
+
# get the site asset and output assets directory
|
107
|
+
site_assets_dir = get_site_assets_directory()
|
108
|
+
output_assets_dir = File.join(destination_directory, site_assets_dir.gsub(@site_path, ""))
|
109
|
+
|
110
|
+
Geb.log "Building #{site_name} assets #{@releasing ? 'for release' : 'locally'}\n\n"
|
111
|
+
|
112
|
+
# step through all the asset files and copy them to the output directory
|
113
|
+
Dir.glob("#{site_assets_dir}/**/*").each do |asset_file|
|
114
|
+
|
115
|
+
# skip directories
|
116
|
+
next if File.directory?(asset_file)
|
117
|
+
|
118
|
+
# get the relative path of the asset file and the destination path
|
119
|
+
asset_relative_path = asset_file.gsub(site_assets_dir, "")
|
120
|
+
asset_full_destination_path = File.join(output_assets_dir, asset_relative_path)
|
121
|
+
|
122
|
+
# check if the destination asset file exists
|
123
|
+
if File.exist?(asset_full_destination_path)
|
124
|
+
|
125
|
+
Geb.log " - skipping asset: #{asset_relative_path}"
|
126
|
+
|
127
|
+
else
|
128
|
+
|
129
|
+
Geb.log " - processing asset: #{asset_relative_path}"
|
130
|
+
|
131
|
+
# create the output directory for the asset file
|
132
|
+
output_dir = File.join(output_assets_dir, File.dirname(asset_relative_path))
|
133
|
+
FileUtils.mkdir_p(output_dir)
|
134
|
+
|
135
|
+
# copy the asset file to the output directory
|
136
|
+
FileUtils.cp(asset_file, output_dir)
|
137
|
+
|
138
|
+
end # if else
|
139
|
+
|
140
|
+
end # Dir.glob
|
141
|
+
Geb.log "\nDone building assets for #{site_name}"
|
142
|
+
|
143
|
+
end # def build_assets
|
144
|
+
|
145
|
+
# get the site local output directory
|
139
146
|
# @return [String] the site output directory
|
140
|
-
def
|
147
|
+
def get_site_local_output_directory
|
141
148
|
return File.join(@site_path, @site_config.output_dir, Geb::Defaults::LOCAL_OUTPUT_DIR)
|
142
|
-
end # def
|
149
|
+
end # def get_site_local_output_directory
|
143
150
|
|
144
151
|
# get the page files in the specified path, with specified extentions and ignoring files that match the pattern
|
145
152
|
# @param path [String] the path to the files
|
@@ -150,6 +157,9 @@ module Geb
|
|
150
157
|
# @note the ignore_files_exp and ignore_directories are used to ignore files that are not pages
|
151
158
|
def get_page_files(path, exts = Geb::Defaults::PAGE_EXTENSIONS, ignore_files_exp = Geb::Defaults::TEMPLATE_AND_PARTIAL_IDENTIFIER, ignore_directories = [])
|
152
159
|
|
160
|
+
# make sure every page extention specified starts with a dot
|
161
|
+
exts.map! { |ext| ext.start_with?('.') ? ext : ".#{ext}" }
|
162
|
+
|
153
163
|
# get all files in the path with the specified extentions
|
154
164
|
files = Dir.glob("#{path}/**/*{#{exts.join(',')}}")
|
155
165
|
|
@@ -165,17 +175,19 @@ module Geb
|
|
165
175
|
end # def get_page_files
|
166
176
|
|
167
177
|
# clear the site output directory
|
178
|
+
# @param output_directory [String] the output directory to clear
|
168
179
|
# @return [Nil]
|
169
|
-
def clear_site_output_directory
|
170
|
-
FileUtils.rm_rf(Dir.glob("#{
|
180
|
+
def clear_site_output_directory(output_directory)
|
181
|
+
FileUtils.rm_rf(Dir.glob("#{output_directory}/*"))
|
171
182
|
end # def clear_site_output_directory
|
172
183
|
|
173
184
|
# output the site from specified directory to the output directory. The specified directory is typically
|
174
185
|
# a temporary directory where the site has been built.
|
175
|
-
# @param
|
186
|
+
# @param source_dir [String] the source directory
|
187
|
+
# @param output_dir [String] the output directory
|
176
188
|
# @return [Nil]
|
177
|
-
def output_site(output_dir)
|
178
|
-
FileUtils.cp_r("#{
|
189
|
+
def output_site(source_dir, output_dir)
|
190
|
+
FileUtils.cp_r("#{source_dir}/.", output_dir)
|
179
191
|
end # def output_site
|
180
192
|
|
181
193
|
# get the site assets directory
|
data/lib/geb/site/release.rb
CHANGED
@@ -13,24 +13,31 @@ module Geb
|
|
13
13
|
class Site
|
14
14
|
module Release
|
15
15
|
|
16
|
+
class SiteReleasingError < Geb::Error
|
17
|
+
MESSAGE = "Site is already releasing.".freeze
|
18
|
+
def initialize(e = ""); super(e, MESSAGE); end
|
19
|
+
end # class SiteReleasingError < Geb::Error
|
20
|
+
|
16
21
|
# release the site
|
22
|
+
# @raise SiteNotLoadedError if the site is not loaded
|
17
23
|
def release
|
18
24
|
|
19
|
-
#
|
20
|
-
|
25
|
+
# make sure the site is laoded, if not, raise an error
|
26
|
+
raise Geb::Site::SiteNotLoadedError.new("Could not release the site.") unless @loaded
|
21
27
|
|
22
|
-
#
|
23
|
-
|
28
|
+
# make sure the site is not already releasing, to prevent recursive releases
|
29
|
+
raise Geb::Site::SiteReleasingError.new if @releasing
|
24
30
|
|
25
|
-
#
|
26
|
-
|
27
|
-
|
28
|
-
|
31
|
+
# set the site to releasing
|
32
|
+
@releasing = true
|
33
|
+
|
34
|
+
# build the site
|
35
|
+
build();
|
29
36
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
37
|
+
ensure
|
38
|
+
|
39
|
+
# set the site to not releasing
|
40
|
+
@releasing = false
|
34
41
|
|
35
42
|
end # def release
|
36
43
|
|
@@ -40,29 +47,17 @@ module Geb
|
|
40
47
|
return File.join(@site_path, @site_config.output_dir, Geb::Defaults::RELEASE_OUTPUT_DIR, Geb::Defaults::TEMPLATE_ARCHIVE_FILENAME)
|
41
48
|
end # def get_template_archive_release_path
|
42
49
|
|
43
|
-
# get the site release directory
|
50
|
+
# get the site release output directory
|
44
51
|
# @return [String] the site release directory
|
45
|
-
def
|
52
|
+
def get_site_release_output_directory
|
46
53
|
return File.join(@site_path, @site_config.output_dir, Geb::Defaults::RELEASE_OUTPUT_DIR)
|
47
|
-
end # def
|
48
|
-
|
49
|
-
# clear the site release directory
|
50
|
-
# @return [Nil]
|
51
|
-
def clear_site_release_directory
|
52
|
-
FileUtils.rm_rf(Dir.glob("#{get_site_release_directory()}/*"))
|
53
|
-
end # def clear_site_release_directory
|
54
|
-
|
55
|
-
# output the site from local output to release directory.
|
56
|
-
# @return [Nil]
|
57
|
-
def copy_site_to_release_directory
|
58
|
-
FileUtils.cp_r("#{get_site_output_directory()}/.", get_site_release_directory())
|
59
|
-
end # def output_site
|
54
|
+
end # def get_site_release_output_directory
|
60
55
|
|
61
56
|
# check if the site has been released.
|
62
57
|
# The site is considered released if the release directory exists and is not empty.
|
63
58
|
# @return [Boolean] true if the site has been released, false otherwise
|
64
59
|
def released?
|
65
|
-
return Dir.exist?(
|
60
|
+
return Dir.exist?(get_site_release_output_directory()) && !Dir.empty?(get_site_release_output_directory())
|
66
61
|
end # def released?
|
67
62
|
|
68
63
|
end # module Build
|
data/lib/geb/site/remote.rb
CHANGED
@@ -86,7 +86,7 @@ module Geb
|
|
86
86
|
|
87
87
|
# build up the command arguments
|
88
88
|
command_exclude_pattern = '*.DS_Store'
|
89
|
-
command_source_directory = File.join(
|
89
|
+
command_source_directory = File.join(get_site_release_output_directory(), '/')
|
90
90
|
command_remote_uri = @site_config.remote_uri + ":" + @site_config.remote_path
|
91
91
|
|
92
92
|
# build the rsync command
|
data/lib/geb/site/template.rb
CHANGED
@@ -68,6 +68,7 @@ module Geb
|
|
68
68
|
# @raise InvalidTemplateSpecification if the template paths are not specified
|
69
69
|
# @raise InvalidTemplateSpecification if the resolved template paths are empty
|
70
70
|
# @raise InvalidTemplateSpecification if the template archive cannot be created
|
71
|
+
# @note template will be bundled with the geb.config.yml file, so the site can be re-created from the template
|
71
72
|
def bundle_template
|
72
73
|
|
73
74
|
# raise an error if the site is not loaded
|
@@ -91,6 +92,11 @@ module Geb
|
|
91
92
|
Geb.copy_paths_to_directory(@site_path, resolved_template_paths, tmp_archive_directory)
|
92
93
|
Geb.log "Done copying directories and files to the template archive directory."
|
93
94
|
|
95
|
+
# create a geb config file in the temporary directory
|
96
|
+
Geb.log_start "Generating geb.config.yml in the template archive directory ... "
|
97
|
+
@site_config.generate_config_file(tmp_archive_directory)
|
98
|
+
Geb.log "done."
|
99
|
+
|
94
100
|
# create a template archive with files from the temporary directory into the release directory
|
95
101
|
output_archive_filename = File.join(@site_path, @site_config.output_dir, Geb::Defaults::RELEASE_OUTPUT_DIR, Geb::Defaults::TEMPLATE_ARCHIVE_FILENAME)
|
96
102
|
Geb.log_start "Creating template archive in [#{output_archive_filename}] ... "
|
data/lib/geb/site.rb
CHANGED
@@ -53,6 +53,12 @@ module Geb
|
|
53
53
|
# @return [Boolean] true if the site is loaded
|
54
54
|
attr_reader :loaded
|
55
55
|
|
56
|
+
# @!attribute [r] releasing
|
57
|
+
# @return [Boolean] true if the site is releasing
|
58
|
+
# @note this is used to prevent recursive releases and to ensure site variables are correct
|
59
|
+
# @note this is set to true when the site is being released and reset to false when the release is done
|
60
|
+
attr_reader :releasing
|
61
|
+
|
56
62
|
# @!attribute [r] pages
|
57
63
|
# @return [Hash] the site pages to process
|
58
64
|
attr_reader :pages
|
@@ -63,6 +69,7 @@ module Geb
|
|
63
69
|
|
64
70
|
@validated = false
|
65
71
|
@loaded = false
|
72
|
+
@releasing = false
|
66
73
|
@site_path = nil
|
67
74
|
@template_path = nil
|
68
75
|
@pages = {}
|
data/lib/geb/template.rb
CHANGED
data/lib/geb/utilities.rb
CHANGED
@@ -87,7 +87,7 @@ module Geb
|
|
87
87
|
destination_file_path = File.join(destination_path, relative_template_path)
|
88
88
|
|
89
89
|
# ensure the destination directory exists
|
90
|
-
FileUtils.mkdir_p(File.dirname(
|
90
|
+
FileUtils.mkdir_p(File.dirname(destination_file_path))
|
91
91
|
|
92
92
|
# copy the resolved template path to the destination path
|
93
93
|
if File.directory?(path)
|
data/lib/geb.rb
CHANGED
data/test/api tests/test_cli.rb
CHANGED
@@ -131,7 +131,7 @@ class TestCli < Minitest::Test
|
|
131
131
|
refute_nil Geb::CLI::Commands::Server.method_defined?(:options)
|
132
132
|
refute_empty Geb::CLI::Commands::Server.options, "Server command should have options."
|
133
133
|
|
134
|
-
assert_cli_option Geb::CLI::Commands::Server, :port, :int,
|
134
|
+
assert_cli_option Geb::CLI::Commands::Server, :port, :int, nil
|
135
135
|
assert_cli_option Geb::CLI::Commands::Server, :skip_build, :boolean, false
|
136
136
|
|
137
137
|
end # test "that geb has a server command"
|
@@ -327,4 +327,136 @@ class TestConfig < Minitest::Test
|
|
327
327
|
|
328
328
|
end # test "that the template paths are returned as config value if set"
|
329
329
|
|
330
|
+
test "that generate config file creates a new config file" do
|
331
|
+
|
332
|
+
site = Geb::Site.new
|
333
|
+
site_path = File.join(File.dirname(__FILE__), "..", "files", "test-site")
|
334
|
+
|
335
|
+
site.instance_variable_set :@site_path, site_path
|
336
|
+
|
337
|
+
config = Geb::Config.new(site)
|
338
|
+
|
339
|
+
refute_empty config.instance_variable_get(:@config)
|
340
|
+
|
341
|
+
Dir.mktmpdir do |tmp_dir|
|
342
|
+
|
343
|
+
config.generate_config_file(tmp_dir)
|
344
|
+
|
345
|
+
assert File.exist?(File.join(tmp_dir, Geb::Defaults::SITE_CONFIG_FILENAME))
|
346
|
+
|
347
|
+
new_generated_config = YAML.load_file(File.join(tmp_dir, Geb::Defaults::SITE_CONFIG_FILENAME))
|
348
|
+
|
349
|
+
refute_empty new_generated_config
|
350
|
+
|
351
|
+
assert_nil new_generated_config['site_name']
|
352
|
+
assert_nil new_generated_config['remote_uri']
|
353
|
+
assert_nil new_generated_config['remote_path']
|
354
|
+
|
355
|
+
end # Dir.mktmpdir
|
356
|
+
|
357
|
+
end # test "that generate config file creates a new config file"
|
358
|
+
|
359
|
+
test "that generate config file raises an error if the destination directory doesn't exist" do
|
360
|
+
|
361
|
+
site = Geb::Site.new
|
362
|
+
site_path = File.join(File.dirname(__FILE__), "..", "files", "test-site")
|
363
|
+
|
364
|
+
site.instance_variable_set :@site_path, site_path
|
365
|
+
|
366
|
+
config = Geb::Config.new(site)
|
367
|
+
|
368
|
+
refute_empty config.instance_variable_get(:@config)
|
369
|
+
|
370
|
+
error = assert_raises(Geb::Config::DestinationDirMissing) do
|
371
|
+
config.generate_config_file("fake_dir")
|
372
|
+
end
|
373
|
+
|
374
|
+
assert_includes error.message, "Specified directory [fake_dir] missing."
|
375
|
+
|
376
|
+
end # test "that generate config file raises an error if the destination directory doesn't exist"
|
377
|
+
|
378
|
+
test "that generate config file raises an error if the config file already exists" do
|
379
|
+
|
380
|
+
site = Geb::Site.new
|
381
|
+
site_path = File.join(File.dirname(__FILE__), "..", "files", "test-site")
|
382
|
+
|
383
|
+
site.instance_variable_set :@site_path, site_path
|
384
|
+
|
385
|
+
config = Geb::Config.new(site)
|
386
|
+
|
387
|
+
refute_empty config.instance_variable_get(:@config)
|
388
|
+
|
389
|
+
Dir.mktmpdir do |tmp_dir|
|
390
|
+
|
391
|
+
File.open(File.join(tmp_dir, Geb::Defaults::SITE_CONFIG_FILENAME), 'w') { |f| f.write("test") }
|
392
|
+
|
393
|
+
error = assert_raises(Geb::Config::ConfigAlreadyExists) do
|
394
|
+
config.generate_config_file(tmp_dir)
|
395
|
+
end
|
396
|
+
|
397
|
+
assert_includes error.message, "Specified directory [#{tmp_dir}] already has geb config."
|
398
|
+
|
399
|
+
end # Dir.mktmpdir
|
400
|
+
|
401
|
+
end # test "that generate config file raises an error if the config file already exists"
|
402
|
+
|
403
|
+
test "that generate config sucessfully generates all configuration fields" do
|
404
|
+
|
405
|
+
site = Geb::Site.new
|
406
|
+
site_path = File.join(File.dirname(__FILE__), "..", "files", "test-site")
|
407
|
+
|
408
|
+
site.instance_variable_set :@site_path, site_path
|
409
|
+
|
410
|
+
config = Geb::Config.new(site)
|
411
|
+
|
412
|
+
refute_empty config.instance_variable_get(:@config)
|
413
|
+
|
414
|
+
test_config = {}
|
415
|
+
test_config['site_name'] = "test-site"
|
416
|
+
test_config['remote_uri'] = "https://primjer.hr"
|
417
|
+
test_config['remote_path'] = "/var/www/html"
|
418
|
+
test_config['local_port'] = 737373
|
419
|
+
test_config['output_dir'] = "publicni"
|
420
|
+
test_config['assets_dir'] = "assetsni"
|
421
|
+
test_config['page_extensions'] = [".erb", ".htm", ".php"]
|
422
|
+
test_config['template_paths'] = ["templates", "partials"]
|
423
|
+
test_config['template_and_partial_identifier'] = "erb"
|
424
|
+
test_config['site_variables'] = {
|
425
|
+
'local' => {'site_name' => 'test-site', 'site_url' => 'http://localhost:737373', 'site_path' => '/var/www/html' },
|
426
|
+
'release' => {'site_name' => 'test-site', 'site_url' => 'https://primjer.hr', 'site_path' => '/var/www/html' }
|
427
|
+
}
|
428
|
+
|
429
|
+
config.instance_variable_set :@config, test_config
|
430
|
+
|
431
|
+
Dir.mktmpdir do |tmp_dir|
|
432
|
+
|
433
|
+
config.generate_config_file(tmp_dir)
|
434
|
+
|
435
|
+
assert File.exist?(File.join(tmp_dir, Geb::Defaults::SITE_CONFIG_FILENAME))
|
436
|
+
|
437
|
+
new_generated_config = YAML.load_file(File.join(tmp_dir, Geb::Defaults::SITE_CONFIG_FILENAME))
|
438
|
+
|
439
|
+
refute_empty new_generated_config
|
440
|
+
|
441
|
+
assert_nil new_generated_config['site_name']
|
442
|
+
assert_nil new_generated_config['remote_uri']
|
443
|
+
assert_nil new_generated_config['remote_path']
|
444
|
+
|
445
|
+
assert_equal test_config['local_port'], new_generated_config['local_port']
|
446
|
+
assert_equal test_config['output_dir'], new_generated_config['output_dir']
|
447
|
+
assert_equal test_config['assets_dir'], new_generated_config['assets_dir']
|
448
|
+
assert_equal test_config['page_extensions'], new_generated_config['page_extensions']
|
449
|
+
assert_equal test_config['template_paths'], new_generated_config['template_paths']
|
450
|
+
assert_equal test_config['template_and_partial_identifier'], new_generated_config['template_and_partial_identifier']
|
451
|
+
assert_equal test_config['site_variables']['local'], new_generated_config['site_variables']['local']
|
452
|
+
refute_equal test_config['site_variables']['release'], new_generated_config['site_variables']['release']
|
453
|
+
|
454
|
+
assert_empty new_generated_config['site_variables']['release']['site_name']
|
455
|
+
assert_empty new_generated_config['site_variables']['release']['site_url']
|
456
|
+
assert_empty new_generated_config['site_variables']['release']['site_path']
|
457
|
+
|
458
|
+
end # Dir.mktmpdir
|
459
|
+
|
460
|
+
end # test "that generate config sucessfully generates all configuration fields"
|
461
|
+
|
330
462
|
end # class TestConfig < Minitest::Test
|
data/test/api tests/test_page.rb
CHANGED
@@ -76,17 +76,17 @@ class PageTest < Geb::ApiTest
|
|
76
76
|
site = mock('site')
|
77
77
|
site.stubs(:site_path).returns(Dir.pwd)
|
78
78
|
|
79
|
+
parse_sequence = sequence('parse_sequence')
|
79
80
|
Geb::Page.any_instance.stubs(:page_file_exists?).returns(true)
|
80
|
-
Geb::Page.any_instance.stubs(:parse_for_templates).returns(parsed_page_content)
|
81
|
-
Geb::Page.any_instance.stubs(:parse_for_partials).returns(parsed_page_content)
|
81
|
+
Geb::Page.any_instance.stubs(:parse_for_templates).returns(parsed_page_content).once.in_sequence(parse_sequence)
|
82
|
+
Geb::Page.any_instance.stubs(:parse_for_partials).returns(parsed_page_content).once.in_sequence(parse_sequence)
|
83
|
+
Geb::Page.any_instance.stubs(:parse_for_site_variables).returns(parsed_page_content).once.in_sequence(parse_sequence)
|
82
84
|
File.stubs(:read).returns(page_content)
|
83
85
|
|
84
86
|
page = Geb::Page.new(site, page_path)
|
85
87
|
|
86
88
|
assert_respond_to page, :parse
|
87
89
|
|
88
|
-
page.parse
|
89
|
-
|
90
90
|
assert_respond_to page, :parsed_content
|
91
91
|
assert_equal page.parsed_content, parsed_page_content
|
92
92
|
refute_equal page.parsed_content, page.content
|
@@ -204,6 +204,90 @@ class PageTest < Geb::ApiTest
|
|
204
204
|
|
205
205
|
end # test "that page parse_for_partials method works"
|
206
206
|
|
207
|
+
test "that the parse_for_site_variables method works" do
|
208
|
+
|
209
|
+
page_path = File.join(Dir.pwd, "test", "fixtures", "template.html")
|
210
|
+
site_name = "Some cool site"
|
211
|
+
page_title = "This is some ultra cool page title"
|
212
|
+
page_content = <<-PAGE
|
213
|
+
_{variable_1}_ _{variable_2}_ _{variable_3}_
|
214
|
+
<title>#{page_title}</title>
|
215
|
+
Find the _{page_title}_ here
|
216
|
+
_{page_relative_path}_
|
217
|
+
_{site_name}_
|
218
|
+
Geb version _{geb_version}_
|
219
|
+
PAGE
|
220
|
+
|
221
|
+
site_variables = { "variable_1" => "value_1", "variable_2" => "value_2" }
|
222
|
+
|
223
|
+
config = mock('config')
|
224
|
+
config.stubs(:get_site_variables).returns(site_variables)
|
225
|
+
config.stubs(:site_name).returns(site_name)
|
226
|
+
|
227
|
+
site = mock('site')
|
228
|
+
site.stubs(:site_path).returns(Dir.pwd)
|
229
|
+
site.stubs(:site_config).returns(config)
|
230
|
+
|
231
|
+
File.stubs(:read).returns(page_content)
|
232
|
+
Geb::Page.any_instance.stubs(:page_file_exists?).returns(true)
|
233
|
+
Geb::Page.any_instance.stubs(:parse_for_templates).returns(page_content)
|
234
|
+
Geb::Page.any_instance.stubs(:parse_for_partials).returns(page_content)
|
235
|
+
|
236
|
+
page = Geb::Page.new(site, page_path)
|
237
|
+
|
238
|
+
output_content = page.parse_for_site_variables(page_content)
|
239
|
+
|
240
|
+
assert_includes output_content, "value_1"
|
241
|
+
assert_includes output_content, "value_2"
|
242
|
+
assert_includes output_content, "_{variable_3}_"
|
243
|
+
assert_includes output_content, site_name
|
244
|
+
assert_includes output_content, "Find the #{page_title} here"
|
245
|
+
assert_includes output_content, "Geb version #{Geb::VERSION}"
|
246
|
+
assert_includes output_content, page_path.gsub(Dir.pwd, "")
|
247
|
+
|
248
|
+
end # test "that the parse_for_site_variables method works"
|
249
|
+
|
250
|
+
test "that the parse_for_site_variables method works if site variables are not set" do
|
251
|
+
|
252
|
+
page_path = File.join(Dir.pwd, "test", "fixtures", "template.html")
|
253
|
+
site_name = "Some cool site"
|
254
|
+
page_title = "This is some ultra cool page title"
|
255
|
+
page_content = <<-PAGE
|
256
|
+
_{variable_1}_ _{variable_2}_ _{variable_3}_
|
257
|
+
<title>#{page_title}</title>
|
258
|
+
_{site_name}_
|
259
|
+
_{page_relative_path}_
|
260
|
+
_{site_name}_
|
261
|
+
PAGE
|
262
|
+
|
263
|
+
site_variables = nil
|
264
|
+
|
265
|
+
config = mock('config')
|
266
|
+
config.stubs(:get_site_variables).returns(site_variables)
|
267
|
+
config.stubs(:site_name).returns(site_name)
|
268
|
+
|
269
|
+
site = mock('site')
|
270
|
+
site.stubs(:site_path).returns(Dir.pwd)
|
271
|
+
site.stubs(:site_config).returns(config)
|
272
|
+
|
273
|
+
File.stubs(:read).returns(page_content)
|
274
|
+
Geb::Page.any_instance.stubs(:page_file_exists?).returns(true)
|
275
|
+
Geb::Page.any_instance.stubs(:parse_for_templates).returns(page_content)
|
276
|
+
Geb::Page.any_instance.stubs(:parse_for_partials).returns(page_content)
|
277
|
+
|
278
|
+
page = Geb::Page.new(site, page_path)
|
279
|
+
|
280
|
+
output_content = page.parse_for_site_variables(page_content)
|
281
|
+
|
282
|
+
assert_includes output_content, "_{variable_1}_"
|
283
|
+
assert_includes output_content, "_{variable_2}_"
|
284
|
+
assert_includes output_content, "_{variable_3}_"
|
285
|
+
assert_includes output_content, site_name
|
286
|
+
assert_includes output_content, " <title>#{page_title}</title>"
|
287
|
+
assert_includes output_content, page_path.gsub(Dir.pwd, "")
|
288
|
+
|
289
|
+
end # test "that the parse_for_site_variables method works if site variables are not set"
|
290
|
+
|
207
291
|
test "that page build method works" do
|
208
292
|
|
209
293
|
site_path = Dir.pwd
|