fontcustom 1.2.0 → 1.3.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +16 -0
- data/CONTRIBUTING.md +35 -15
- data/TODO.md +20 -0
- data/lib/fontcustom.rb +11 -24
- data/lib/fontcustom/base.rb +56 -0
- data/lib/fontcustom/cli.rb +13 -12
- data/lib/fontcustom/generator/font.rb +63 -65
- data/lib/fontcustom/generator/template.rb +81 -52
- data/lib/fontcustom/manifest.rb +42 -0
- data/lib/fontcustom/options.rb +93 -80
- data/lib/fontcustom/scripts/generate.py +116 -127
- data/lib/fontcustom/templates/_fontcustom-rails.scss +13 -18
- data/lib/fontcustom/templates/_fontcustom.scss +10 -18
- data/lib/fontcustom/templates/fontcustom-preview.html +17 -24
- data/lib/fontcustom/templates/fontcustom.css +10 -18
- data/lib/fontcustom/templates/fontcustom.yml +3 -3
- data/lib/fontcustom/utility.rb +145 -0
- data/lib/fontcustom/version.rb +1 -1
- data/lib/fontcustom/watcher.rb +1 -1
- data/spec/fixtures/generators/.fontcustom-manifest-corrupted.json +12 -5
- data/spec/fixtures/generators/.fontcustom-manifest-empty.json +0 -0
- data/spec/fixtures/generators/.fontcustom-manifest.json +49 -14
- data/spec/fixtures/generators/mixed-output/fontcustom_82a59e769bc60192484f2620570bbb59.eot +0 -0
- data/spec/fixtures/generators/mixed-output/fontcustom_82a59e769bc60192484f2620570bbb59.svg +56 -0
- data/spec/fixtures/generators/mixed-output/fontcustom_82a59e769bc60192484f2620570bbb59.ttf +0 -0
- data/spec/fixtures/generators/mixed-output/fontcustom_82a59e769bc60192484f2620570bbb59.woff +0 -0
- data/spec/fixtures/sandbox/.gitkeep +0 -0
- data/spec/fontcustom/base_spec.rb +58 -0
- data/spec/fontcustom/cli_spec.rb +15 -0
- data/spec/fontcustom/generator/font_spec.rb +50 -220
- data/spec/fontcustom/generator/template_spec.rb +30 -194
- data/spec/fontcustom/generator/template_spec.rb.off +215 -0
- data/spec/fontcustom/manifest_spec.rb +16 -0
- data/spec/fontcustom/options_spec.rb +206 -208
- data/spec/fontcustom/utility_spec.rb +163 -0
- data/spec/fontcustom/{watcher_spec.rb → watcher_spec.rb.off} +0 -0
- data/spec/spec_helper.rb +77 -19
- metadata +44 -54
- data/lib/fontcustom/templates/_fontcustom-bootstrap-ie7.scss +0 -22
- data/lib/fontcustom/templates/_fontcustom-bootstrap.scss +0 -63
- data/lib/fontcustom/templates/fontcustom-bootstrap-ie7.css +0 -22
- data/lib/fontcustom/templates/fontcustom-bootstrap.css +0 -63
- data/lib/fontcustom/util.rb +0 -62
- data/spec/fixtures/generators/mixed-output/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.eot +0 -0
- data/spec/fixtures/generators/mixed-output/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.svg +0 -102
- data/spec/fixtures/generators/mixed-output/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.ttf +0 -0
- data/spec/fixtures/generators/mixed-output/fontcustom_cc5ce52f2ae4f9ce2e7ee8131bbfee1e.woff +0 -0
- data/spec/fontcustom/util_spec.rb +0 -82
@@ -1,95 +1,124 @@
|
|
1
1
|
require "json"
|
2
2
|
require "pathname"
|
3
|
-
require "thor"
|
4
|
-
require "thor/group"
|
5
|
-
require "thor/actions"
|
6
3
|
|
7
4
|
module Fontcustom
|
8
5
|
module Generator
|
9
|
-
class Template
|
10
|
-
include
|
11
|
-
include Thor::Actions
|
6
|
+
class Template
|
7
|
+
include Utility
|
12
8
|
|
13
|
-
|
14
|
-
# This is DRYier, easier to maintain.
|
15
|
-
argument :opts
|
9
|
+
attr_reader :manifest, :options
|
16
10
|
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
def initialize(manifest)
|
12
|
+
@manifest = get_manifest(manifest)
|
13
|
+
@options = @manifest[:options]
|
20
14
|
end
|
21
15
|
|
22
|
-
def
|
23
|
-
if
|
24
|
-
|
16
|
+
def generate
|
17
|
+
if ! @manifest[:fonts].empty?
|
18
|
+
delete_old_templates
|
19
|
+
set_relative_paths
|
20
|
+
create_files
|
25
21
|
else
|
26
|
-
raise Fontcustom::Error, "
|
22
|
+
raise Fontcustom::Error, "No generated fonts were detected - aborting template generation."
|
27
23
|
end
|
28
|
-
rescue
|
29
|
-
raise Fontcustom::Error, "Couldn't parse `#{relative_to_root(opts.manifest)}`. Delete it to start from scratch. Any previously generated files will need to be deleted manually."
|
30
24
|
end
|
31
25
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
@data[:templates].each do |file|
|
37
|
-
remove_file file, :verbose => false
|
38
|
-
deleted << file
|
39
|
-
end
|
40
|
-
ensure
|
41
|
-
@data[:templates] = @data[:templates] - deleted
|
42
|
-
json = JSON.pretty_generate @data
|
43
|
-
overwrite_file opts.manifest, json
|
44
|
-
say_changed :delete, deleted
|
45
|
-
end
|
26
|
+
private
|
27
|
+
|
28
|
+
def delete_old_templates
|
29
|
+
delete_from_manifest(:templates)
|
46
30
|
end
|
47
31
|
|
48
|
-
def
|
49
|
-
name = File.basename @
|
50
|
-
fonts = Pathname.new
|
51
|
-
css = Pathname.new
|
52
|
-
preview = Pathname.new
|
32
|
+
def set_relative_paths
|
33
|
+
name = File.basename @manifest[:fonts].first, File.extname(@manifest[:fonts].first)
|
34
|
+
fonts = Pathname.new @options[:output][:fonts]
|
35
|
+
css = Pathname.new @options[:output][:css]
|
36
|
+
preview = Pathname.new @options[:output][:preview]
|
53
37
|
@font_path = File.join fonts.relative_path_from(css).to_s, name
|
54
|
-
@font_path_alt =
|
38
|
+
@font_path_alt = @options[:preprocessor_path].nil? ? @font_path : File.join(@options[:preprocessor_path], name)
|
55
39
|
@font_path_preview = File.join fonts.relative_path_from(preview).to_s, name
|
56
40
|
end
|
57
41
|
|
58
|
-
def
|
59
|
-
@glyphs = @
|
42
|
+
def create_files
|
43
|
+
@glyphs = @manifest[:glyphs]
|
60
44
|
created = []
|
61
45
|
packaged = %w|fontcustom-bootstrap-ie7.css fontcustom.css _fontcustom-bootstrap-ie7.scss _fontcustom-rails.scss
|
62
46
|
fontcustom-bootstrap.css fontcustom-preview.html _fontcustom-bootstrap.scss _fontcustom.scss|
|
63
47
|
css_exts = %w|.css .scss .sass .less .stylus|
|
64
48
|
begin
|
65
|
-
|
49
|
+
@options[:templates].each do |source|
|
66
50
|
name = File.basename source
|
67
51
|
ext = File.extname source
|
68
52
|
target = name.dup
|
69
53
|
|
70
|
-
if packaged.include?(name) &&
|
71
|
-
target.sub! DEFAULT_OPTIONS[:font_name],
|
54
|
+
if packaged.include?(name) && @options[:font_name] != DEFAULT_OPTIONS[:font_name]
|
55
|
+
target.sub! DEFAULT_OPTIONS[:font_name], @options[:font_name]
|
72
56
|
end
|
73
57
|
|
74
|
-
target = if
|
75
|
-
File.join
|
58
|
+
target = if @options[:output].keys.include? name.to_sym
|
59
|
+
File.join @options[:output][name.to_sym], target
|
76
60
|
elsif css_exts.include? ext
|
77
|
-
File.join
|
61
|
+
File.join @options[:output][:css], target
|
78
62
|
elsif name == "fontcustom-preview.html"
|
79
|
-
File.join
|
63
|
+
File.join @options[:output][:preview], target
|
80
64
|
else
|
81
|
-
File.join
|
65
|
+
File.join @options[:output][:fonts], target
|
82
66
|
end
|
83
67
|
|
84
|
-
template source, target, :verbose => false
|
68
|
+
template source, target, :verbose => false, :force => true
|
85
69
|
created << target
|
86
70
|
end
|
87
71
|
ensure
|
88
72
|
say_changed :create, created
|
89
|
-
@
|
90
|
-
|
91
|
-
|
73
|
+
@manifest[:templates] = (@manifest[:templates] + created).uniq
|
74
|
+
save_manifest
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#
|
79
|
+
# Template Helpers
|
80
|
+
#
|
81
|
+
|
82
|
+
def font_name
|
83
|
+
@options[:font_name]
|
84
|
+
end
|
85
|
+
|
86
|
+
def font_face(style = :normal)
|
87
|
+
case style
|
88
|
+
when :rails
|
89
|
+
url = "font-url"
|
90
|
+
path = @font_path_alt
|
91
|
+
when :preview
|
92
|
+
url = "url"
|
93
|
+
path = @font_path_preview
|
94
|
+
else
|
95
|
+
url = "url"
|
96
|
+
path = @font_path
|
97
|
+
end
|
98
|
+
%Q|@font-face {
|
99
|
+
font-family: "#{font_name}";
|
100
|
+
src: #{url}("#{path}.eot");
|
101
|
+
src: #{url}("#{path}.eot?#iefix") format("embedded-opentype"),
|
102
|
+
#{url}("#{path}.woff") format("woff"),
|
103
|
+
#{url}("#{path}.ttf") format("truetype"),
|
104
|
+
#{url}("#{path}.svg##{font_name}") format("svg");
|
105
|
+
font-weight: normal;
|
106
|
+
font-style: normal;
|
107
|
+
}|
|
108
|
+
end
|
109
|
+
|
110
|
+
def glyph_selectors
|
111
|
+
output = @glyphs.map do |name, value|
|
112
|
+
@options[:css_selector].sub("{{glyph}}", name.to_s) + ":before"
|
113
|
+
end
|
114
|
+
output.join ",\n"
|
115
|
+
end
|
116
|
+
|
117
|
+
def glyphs
|
118
|
+
output = @glyphs.map do |name, value|
|
119
|
+
%Q|#{@options[:css_selector].sub('{{glyph}}', name.to_s)}:before { content: "\\#{value[:codepoint].to_s(16)}\" }|
|
92
120
|
end
|
121
|
+
output.join "\n"
|
93
122
|
end
|
94
123
|
end
|
95
124
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Fontcustom
|
2
|
+
class Manifest
|
3
|
+
include Utility
|
4
|
+
|
5
|
+
attr_accessor :manifest
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
@options = options
|
9
|
+
update_or_create_manifest
|
10
|
+
end
|
11
|
+
|
12
|
+
def update_or_create_manifest
|
13
|
+
if File.exists? @options[:manifest]
|
14
|
+
update_manifest
|
15
|
+
else
|
16
|
+
create_manifest
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def update_manifest
|
23
|
+
@manifest = get_manifest
|
24
|
+
if @manifest[:options] != @options
|
25
|
+
@manifest[:options] = @options
|
26
|
+
save_manifest
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_manifest
|
31
|
+
@manifest = {
|
32
|
+
:checksum => { :current => "", :previous => "" },
|
33
|
+
:fonts => [],
|
34
|
+
:glyphs => {},
|
35
|
+
:options => @options,
|
36
|
+
:templates => []
|
37
|
+
}
|
38
|
+
json = JSON.pretty_generate @manifest
|
39
|
+
write_file @options[:manifest], json, :create
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/fontcustom/options.rb
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
require "yaml"
|
2
|
-
require "thor/shell"
|
3
|
-
require "thor/shell/basic"
|
4
|
-
require "thor/shell/color"
|
5
|
-
require "fontcustom/util"
|
6
2
|
|
7
3
|
module Fontcustom
|
8
4
|
class Options
|
9
|
-
include
|
5
|
+
include Utility
|
10
6
|
|
11
|
-
|
7
|
+
attr_accessor :options
|
12
8
|
|
13
|
-
def initialize(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
# Overwrite example defaults (used in Thor's help) with real defaults, if unchanged
|
18
|
-
EXAMPLE_OPTIONS.keys.each do |key|
|
19
|
-
options.delete(key) if options[key] == EXAMPLE_OPTIONS[key]
|
20
|
-
end
|
21
|
-
@cli_options = DEFAULT_OPTIONS.dup.merge options
|
22
|
-
|
23
|
-
@shell = Thor::Shell::Color.new
|
24
|
-
set_options
|
9
|
+
def initialize(cli_options = {})
|
10
|
+
@cli_options = symbolize_hash(cli_options)
|
11
|
+
parse_options
|
25
12
|
end
|
26
13
|
|
27
14
|
private
|
28
15
|
|
29
|
-
def
|
16
|
+
def parse_options
|
17
|
+
overwrite_examples
|
30
18
|
set_config_path
|
31
19
|
load_config
|
32
20
|
merge_options
|
33
|
-
|
21
|
+
clean_font_name
|
22
|
+
set_manifest_path
|
34
23
|
set_input_paths
|
35
24
|
set_output_paths
|
36
25
|
set_template_paths
|
37
26
|
end
|
38
27
|
|
28
|
+
# We give Thor fake defaults to generate more useful help messages.
|
29
|
+
# Here, we delete any CLI options that match those examples.
|
30
|
+
# TODO There's *got* a be a cleaner way to customize Thor help messages.
|
31
|
+
def overwrite_examples
|
32
|
+
EXAMPLE_OPTIONS.keys.each do |key|
|
33
|
+
@cli_options.delete(key) if @cli_options[key] == EXAMPLE_OPTIONS[key]
|
34
|
+
end
|
35
|
+
@cli_options = DEFAULT_OPTIONS.dup.merge @cli_options
|
36
|
+
@cli_options[:project_root] ||= Dir.pwd
|
37
|
+
end
|
38
|
+
|
39
39
|
def set_config_path
|
40
|
-
@config = if @cli_options[:config]
|
40
|
+
@cli_options[:config] = if @cli_options[:config]
|
41
41
|
path = expand_path @cli_options[:config]
|
42
42
|
|
43
43
|
# :config is the path to fontcustom.yml
|
@@ -49,7 +49,7 @@ module Fontcustom
|
|
49
49
|
File.join path, "fontcustom.yml"
|
50
50
|
|
51
51
|
else
|
52
|
-
raise Fontcustom::Error, "
|
52
|
+
raise Fontcustom::Error, "No configuration file found at `#{relative_to_root(path)}`."
|
53
53
|
end
|
54
54
|
else
|
55
55
|
# fontcustom.yml is in the project_root
|
@@ -68,108 +68,116 @@ module Fontcustom
|
|
68
68
|
|
69
69
|
def load_config
|
70
70
|
@config_options = {}
|
71
|
-
if @config
|
72
|
-
say_message :
|
71
|
+
if @cli_options[:config]
|
72
|
+
say_message :debug, "Using settings from `#{relative_to_root(@cli_options[:config])}`." if @cli_options[:debug]
|
73
73
|
begin
|
74
|
-
config = YAML.load File.open(@config)
|
74
|
+
config = YAML.load File.open(@cli_options[:config])
|
75
75
|
if config # empty YAML returns false
|
76
76
|
@config_options = symbolize_hash(config)
|
77
77
|
else
|
78
|
-
say_message :
|
78
|
+
say_message :warn, "`#{relative_to_root(@cli_options[:config])}` was empty. Using defaults."
|
79
79
|
end
|
80
80
|
rescue Exception => e
|
81
|
-
raise Fontcustom::Error, "
|
81
|
+
raise Fontcustom::Error, "Error parsing `#{relative_to_root(@cli_options[:config])}`:\n#{e.message}"
|
82
82
|
end
|
83
|
-
else
|
84
|
-
say_message :status, "No configuration file set. Generate one with `fontcustom config` to save your settings."
|
85
83
|
end
|
86
84
|
end
|
87
85
|
|
88
86
|
def merge_options
|
89
87
|
@cli_options.delete_if { |key, val| val == DEFAULT_OPTIONS[key] }
|
88
|
+
@options = DEFAULT_OPTIONS.merge(@config_options).merge(@cli_options)
|
89
|
+
end
|
90
90
|
|
91
|
-
|
92
|
-
options = options.
|
93
|
-
options = options.merge symbolize_hash(@cli_options)
|
94
|
-
send :remove_instance_variable, :@config_options
|
95
|
-
send :remove_instance_variable, :@cli_options
|
96
|
-
|
97
|
-
# :config is excluded since it's already been set
|
98
|
-
keys = %w|project_root input output manifest templates font_name css_prefix preprocessor_path skip_first autowidth no_hash debug quiet|
|
99
|
-
keys.each { |key| instance_variable_set("@#{key}", options[key.to_sym]) }
|
100
|
-
|
101
|
-
@font_name = @font_name.strip.gsub(/\W/, "-")
|
91
|
+
def clean_font_name
|
92
|
+
@options[:font_name] = @options[:font_name].strip.gsub(/\W/, "-")
|
102
93
|
end
|
103
94
|
|
104
|
-
def
|
105
|
-
@manifest = if ! @manifest.nil?
|
106
|
-
expand_path @manifest
|
107
|
-
elsif @config
|
108
|
-
File.join File.dirname(@config), ".fontcustom-manifest.json"
|
95
|
+
def set_manifest_path
|
96
|
+
@options[:manifest] = if ! @options[:manifest].nil?
|
97
|
+
expand_path @options[:manifest]
|
98
|
+
elsif @options[:config]
|
99
|
+
File.join File.dirname(@options[:config]), ".fontcustom-manifest.json"
|
109
100
|
else
|
110
|
-
File.join @project_root, ".fontcustom-manifest.json"
|
101
|
+
File.join @options[:project_root], ".fontcustom-manifest.json"
|
111
102
|
end
|
112
103
|
end
|
113
104
|
|
114
105
|
def set_input_paths
|
115
|
-
if @input.is_a? Hash
|
116
|
-
@input = symbolize_hash(@input)
|
117
|
-
if @input.has_key? :vectors
|
118
|
-
@input[:vectors] = expand_path @input[:vectors]
|
119
|
-
unless File.directory? @input[:vectors]
|
120
|
-
raise Fontcustom::Error,
|
106
|
+
if @options[:input].is_a? Hash
|
107
|
+
@options[:input] = symbolize_hash(@options[:input])
|
108
|
+
if @options[:input].has_key? :vectors
|
109
|
+
@options[:input][:vectors] = expand_path @options[:input][:vectors]
|
110
|
+
unless File.directory? @options[:input][:vectors]
|
111
|
+
raise Fontcustom::Error,
|
112
|
+
"INPUT[:vectors] (`#{relative_to_root(@options[:input][:vectors])}`) should be "\
|
113
|
+
"a directory. Check `#{relative_to_root(@options[:config])}` or your CLI options."
|
121
114
|
end
|
122
115
|
else
|
123
|
-
raise Fontcustom::Error,
|
116
|
+
raise Fontcustom::Error,
|
117
|
+
"INPUT should have a :vectors key. Check `#{relative_to_root(@options[:config])}` "\
|
118
|
+
"or your CLI options."
|
124
119
|
end
|
125
120
|
|
126
|
-
if @input.has_key? :templates
|
127
|
-
@input[:templates] = expand_path @input[:templates]
|
128
|
-
unless File.directory? @input[:templates]
|
129
|
-
raise Fontcustom::Error,
|
121
|
+
if @options[:input].has_key? :templates
|
122
|
+
@options[:input][:templates] = expand_path @options[:input][:templates]
|
123
|
+
unless File.directory? @options[:input][:templates]
|
124
|
+
raise Fontcustom::Error,
|
125
|
+
"INPUT[:templates] (`#{relative_to_root(@options[:input][:templates])}`) "\
|
126
|
+
"should be a directory. Check `#{relative_to_root(@options[:config])}` or "\
|
127
|
+
"your CLI options."
|
130
128
|
end
|
131
129
|
else
|
132
|
-
@input[:templates] = @input[:vectors]
|
130
|
+
@options[:input][:templates] = @options[:input][:vectors]
|
133
131
|
end
|
134
132
|
else
|
135
|
-
input = @input ? expand_path(@input) : @project_root
|
133
|
+
input = @options[:input] ? expand_path(@options[:input]) : @options[:project_root]
|
136
134
|
unless File.directory? input
|
137
|
-
raise Fontcustom::Error,
|
135
|
+
raise Fontcustom::Error,
|
136
|
+
"INPUT (`#{relative_to_root(input)}`) should be a directory. Check "\
|
137
|
+
"`#{relative_to_root(@options[:config])}` or your CLI options."
|
138
138
|
end
|
139
|
-
@input = { :vectors => input, :templates => input }
|
139
|
+
@options[:input] = { :vectors => input, :templates => input }
|
140
140
|
end
|
141
141
|
|
142
|
-
if Dir[File.join(@input[:vectors], "*.svg")].empty?
|
143
|
-
raise Fontcustom::Error, "`#{relative_to_root(@input[:vectors])}` doesn't contain any SVGs."
|
142
|
+
if Dir[File.join(@options[:input][:vectors], "*.svg")].empty?
|
143
|
+
raise Fontcustom::Error, "`#{relative_to_root(@options[:input][:vectors])}` doesn't contain any SVGs."
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
147
|
def set_output_paths
|
148
|
-
if @output.is_a? Hash
|
149
|
-
@output = symbolize_hash(@output)
|
150
|
-
|
148
|
+
if @options[:output].is_a? Hash
|
149
|
+
@options[:output] = symbolize_hash(@options[:output])
|
150
|
+
unless @options[:output].has_key? :fonts
|
151
|
+
raise Fontcustom::Error,
|
152
|
+
"OUTPUT should have a :fonts key. Check `#{relative_to_root(@options[:config])}` "\
|
153
|
+
"or your CLI options."
|
154
|
+
end
|
151
155
|
|
152
|
-
@output.each do |key, val|
|
153
|
-
@output[key] = expand_path val
|
156
|
+
@options[:output].each do |key, val|
|
157
|
+
@options[:output][key] = expand_path val
|
154
158
|
if File.exists?(val) && ! File.directory?(val)
|
155
|
-
raise Fontcustom::Error,
|
159
|
+
raise Fontcustom::Error,
|
160
|
+
"OUTPUT[:#{key.to_s}] (`#{relative_to_root(@options[:output][key])}`) should be "\
|
161
|
+
"a directory. Check `#{relative_to_root(@options[:config])}` or your CLI options."
|
156
162
|
end
|
157
163
|
end
|
158
164
|
|
159
|
-
@output[:css] ||= @output[:fonts]
|
160
|
-
@output[:preview] ||= @output[:fonts]
|
165
|
+
@options[:output][:css] ||= @options[:output][:fonts]
|
166
|
+
@options[:output][:preview] ||= @options[:output][:fonts]
|
161
167
|
else
|
162
|
-
if @output.is_a? String
|
163
|
-
output = expand_path @output
|
168
|
+
if @options[:output].is_a? String
|
169
|
+
output = expand_path @options[:output]
|
164
170
|
if File.exists?(output) && ! File.directory?(output)
|
165
|
-
raise Fontcustom::Error,
|
171
|
+
raise Fontcustom::Error,
|
172
|
+
"OUTPUT (`#{relative_to_root(output)}`) should be a directory. Check "\
|
173
|
+
"`#{relative_to_root(@options[:config])}` or your CLI options."
|
166
174
|
end
|
167
175
|
else
|
168
|
-
output = File.join @project_root, @font_name
|
169
|
-
say_message :
|
176
|
+
output = File.join @options[:project_root], @options[:font_name]
|
177
|
+
say_message :debug, "Generated files will be saved to `#{relative_to_root(output)}/`." if @options[:debug]
|
170
178
|
end
|
171
179
|
|
172
|
-
@output = {
|
180
|
+
@options[:output] = {
|
173
181
|
:fonts => output,
|
174
182
|
:css => output,
|
175
183
|
:preview => output
|
@@ -185,7 +193,7 @@ module Fontcustom
|
|
185
193
|
def set_template_paths
|
186
194
|
template_path = File.join Fontcustom.gem_lib, "templates"
|
187
195
|
|
188
|
-
@templates = @templates.map do |template|
|
196
|
+
@options[:templates] = @options[:templates].map do |template|
|
189
197
|
case template
|
190
198
|
when "preview"
|
191
199
|
File.join template_path, "fontcustom-preview.html"
|
@@ -204,8 +212,13 @@ module Fontcustom
|
|
204
212
|
when "bootstrap-ie7-scss"
|
205
213
|
File.join template_path, "_fontcustom-bootstrap-ie7.scss"
|
206
214
|
else
|
207
|
-
template = File.expand_path File.join(@input[:templates], template) unless template[0] == "/"
|
208
|
-
|
215
|
+
template = File.expand_path File.join(@options[:input][:templates], template) unless template[0] == "/"
|
216
|
+
unless File.exists? template
|
217
|
+
config = @options[:config] ? " `#{relative_to_root(@options[:config])}` or" : ""
|
218
|
+
raise Fontcustom::Error,
|
219
|
+
"Custom template `#{relative_to_root(template)}` doesn't exist. "\
|
220
|
+
"Check#{config} your CLI options."
|
221
|
+
end
|
209
222
|
template
|
210
223
|
end
|
211
224
|
end
|