fontcustom 1.3.0.beta4 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83ae4b0585895308ea825062bedefd5f52e1601f
4
- data.tar.gz: 94f1938fe393cd56761d7facc448c73f01131a9f
3
+ metadata.gz: c3398b6e31a2d23df76685528575c74d5f0d7739
4
+ data.tar.gz: 8ff178040adf1fc60c82edf1cf69cc0e427b00cf
5
5
  SHA512:
6
- metadata.gz: a57e93b5b0b0fed46f13d4d246747de4e6a241d684f4736bb5ac25598e2cf1b8108d0ffc32e08731fa74e3e903567da4c9658dc4979f6507b23fd1d6967d4571
7
- data.tar.gz: 94c7d261fabc35340808134ca63a422d986befff99fdc816a6067f1bca6f563606a6a969dbfde5ded65866d8c217960b18d6fcc03db5da8e2f723d8002672819
6
+ metadata.gz: 2d4d505b543b0c4c6be525f7151b4a5601547ba4decc860e1e985dceaa41da9a143a8bfc350ce608d83dbf3f9ddee3c6a6650ce4cd286ed5fdf857815f032beb
7
+ data.tar.gz: 58d1fc4dd1f3e4ee499adfb2a53252cd08330fb59c9661c2da523d9eac3999bb9e8a913bc9754497261080334224f66bb4dfd788d17474c2d1ee616db839f115
@@ -1,18 +1,20 @@
1
- ## 1.3.0.beta (11/25/2013)
1
+ ## 1.3.0 (12/24/2013)
2
2
 
3
- **Delete your old `.fontcustom-manifest.json` and output directories before using this version.**
3
+ **If upgrading from 1.2.0, delete your old `.fontcustom-manifest.json` and output directories first.**
4
4
 
5
- The big news: fixed glyph code points. Automatically assigned for now, but changing them by hand is just a matter of modifying the generated `.fontcustom-manifest.json`. A few breaking changes (`css_prefix`, custom template syntax, possibly others). Error messages and docs are currently sparse — my apologies in advance.
5
+ The big news: fixed glyph code points. Automatically assigned for now, but changing them by hand is just a matter of modifying the generated `.fontcustom-manifest.json`. A few breaking changes (`css_prefix`, custom template syntax, possibly others).
6
6
 
7
- * Fixed glyph code points ([#56](https://github.com/FontCustom/fontcustom/issues/56))
7
+ * Adds fixed glyph code points ([#56](https://github.com/FontCustom/fontcustom/issues/56))
8
+ * Drops bootstrap templates (maintenance overhead, unsure if anyone was using them)
9
+ * Stores relative paths for collaborative editing ([#149](https://github.com/FontCustom/fontcustom/pull/149))
8
10
  * Changes `css_prefix` to `css_selector` to allow greater flexibility ([#126](https://github.com/FontCustom/fontcustom/pull/126))
9
11
  * Skips compilation if inputs have not changed (and `force` option to bypass checks)
10
12
  * Adds CSS template helpers for convenience and DRYness
11
- * Drops bootstrap templates (maintenance overhead, unsure if anyone was using them)
12
-
13
- Next up:
14
-
15
- * Storing relative paths for collaborative editing ([#149](https://github.com/FontCustom/fontcustom/pull/149))
13
+ * Improves rendering on Chrome Windows ([#143](https://github.com/FontCustom/fontcustom/pull/143))
14
+ * Improves Windows hinting ([#160](https://github.com/FontCustom/fontcustom/pull/160))
15
+ * Fixes Python 2.6 optsparse syntax ([#159](https://github.com/FontCustom/fontcustom/issues/159))
16
+ * Fixes bug where changes in custom templates were not detected by `watch`
17
+ * Improves error and debuggging messages
16
18
 
17
19
  ## 1.2.0 (11/2/2013)
18
20
 
data/TODO.md CHANGED
@@ -2,10 +2,6 @@
2
2
 
3
3
  ### 1.3.0
4
4
 
5
- * update manifest content in spec_helper
6
- * fix failing travis-ci specs
7
- * reactivate watcher
8
- * more helpful messages when running without INPUT
9
5
  * redirect fontcustom.com to github repo (use wiki for documentation)
10
6
 
11
7
  ### Future
@@ -15,13 +15,15 @@ module Fontcustom
15
15
  def compile
16
16
  current = checksum
17
17
  previous = @manifest.get(:checksum)[:previous]
18
+
19
+ say_message :status, "Forcing compile." if @options[:force]
18
20
  if @options[:force] || current != previous
19
21
  @manifest.set :checksum, {:previous => previous, :current => current}
20
22
  start_generators
21
23
  @manifest.reload
22
24
  @manifest.set :checksum, {:previous => current, :current => current}
23
25
  else
24
- say_message :status, "No changes detected. Skipping compilation."
26
+ say_message :status, "No changes detected. Skipping compile."
25
27
  end
26
28
  end
27
29
 
@@ -68,13 +68,12 @@ module Fontcustom
68
68
  def watch(input = nil)
69
69
  say "Font Custom is watching your icons. Press Ctrl + C to stop.", :yellow unless options[:quiet]
70
70
  opts = options.merge :input => input, :skip_first => !! options[:skip_first]
71
- opts = Options.new(opts)
72
71
  Watcher.new(opts).watch
73
72
  rescue Fontcustom::Error => e
74
73
  say_status :error, e.message, :red
75
74
  end
76
75
 
77
- desc "config [DIR]", "Generates an annotated configuration file (fontcustom.yml) in DIR. Default: `pwd`"
76
+ desc "config [DIR]", "Generates a starter configuration file (fontcustom.yml) in DIR. Default: `pwd`"
78
77
  def config(dir = Dir.pwd)
79
78
  template "fontcustom.yml", File.join(dir, "fontcustom.yml")
80
79
  end
@@ -6,7 +6,7 @@ module Fontcustom
6
6
  class Font
7
7
  include Utility
8
8
 
9
- attr_reader :manifest, :options
9
+ attr_reader :manifest
10
10
 
11
11
  def initialize(manifest)
12
12
  @manifest = Fontcustom::Manifest.new manifest
@@ -6,7 +6,7 @@ module Fontcustom
6
6
  class Template
7
7
  include Utility
8
8
 
9
- attr_reader :manifest, :options
9
+ attr_reader :manifest
10
10
 
11
11
  def initialize(manifest)
12
12
  @manifest = Fontcustom::Manifest.new manifest
@@ -128,6 +128,13 @@ module Fontcustom
128
128
  #{url}("#{path}.svg##{font_name}") format("svg");
129
129
  font-weight: normal;
130
130
  font-style: normal;
131
+ }
132
+
133
+ @media screen and (-webkit-min-device-pixel-ratio:0) {
134
+ @font-face {
135
+ font-family: "#{font_name}";
136
+ src: url("#{path}.svg##{font_name}") format("svg");
137
+ }
131
138
  }|
132
139
  end
133
140
 
@@ -1,11 +1,10 @@
1
1
  require "yaml"
2
+ require "pp"
2
3
 
3
4
  module Fontcustom
4
5
  class Options
5
6
  include Utility
6
7
 
7
- attr_accessor :options
8
-
9
8
  def initialize(cli_options = {})
10
9
  @manifest = cli_options[:manifest]
11
10
  @cli_options = symbolize_hash(cli_options)
@@ -24,6 +23,7 @@ module Fontcustom
24
23
  set_input_paths
25
24
  set_output_paths
26
25
  check_template_paths
26
+ print_debug if @options[:debug]
27
27
  end
28
28
 
29
29
  # We give Thor fake defaults to generate more useful help messages.
@@ -60,11 +60,11 @@ module Fontcustom
60
60
  def load_config
61
61
  @config_options = {}
62
62
  if @cli_options[:config]
63
- say_message :debug, "Using settings from `#{@cli_options[:config]}`." if @cli_options[:debug]
64
63
  begin
65
64
  config = YAML.load File.open(@cli_options[:config])
66
65
  if config # empty YAML returns false
67
66
  @config_options = symbolize_hash(config)
67
+ say_message :debug, "Using settings from `#{@cli_options[:config]}`." if @cli_options[:debug] || @config_options[:debug]
68
68
  else
69
69
  say_message :warn, "`#{@cli_options[:config]}` was empty. Using defaults."
70
70
  end
@@ -109,7 +109,12 @@ module Fontcustom
109
109
  @options[:input][:templates] = @options[:input][:vectors]
110
110
  end
111
111
  else
112
- input = @options[:input] ? @options[:input] : "."
112
+ if @options[:input]
113
+ input = @options[:input]
114
+ else
115
+ input = "."
116
+ say_message :warn, "No input directory given. Using present working directory."
117
+ end
113
118
  check_input input
114
119
  @options[:input] = { :vectors => input, :templates => input }
115
120
  end
@@ -163,7 +168,7 @@ module Fontcustom
163
168
  path = File.expand_path File.join(@options[:input][:templates], template) unless template[0] == "/"
164
169
  unless File.exists? path
165
170
  raise Fontcustom::Error,
166
- "Custom template `#{template}` doesn't exist. Check your options."
171
+ "Custom template `#{template}` wasn't found in `#{@options[:input][:templates]}/`. Check your options."
167
172
  end
168
173
  end
169
174
  end
@@ -177,5 +182,11 @@ module Fontcustom
177
182
  "Input `#{dir}` isn't a directory. Check your options."
178
183
  end
179
184
  end
185
+
186
+ def print_debug
187
+ message = line_break(16)
188
+ message << @options.pretty_inspect.split("\n ").join(line_break(16))
189
+ say_message :debug, "Using options:#{message}"
190
+ end
180
191
  end
181
192
  end
@@ -17,7 +17,6 @@ try:
17
17
  except ImportError:
18
18
  import optparse
19
19
  parser = optparse.OptionParser()
20
- parser.add_option('manifest', help='Path to .fontcustom-manifest.json')
21
20
  (nothing, args) = parser.parse_args()
22
21
 
23
22
  manifestfile = open(args.manifest, 'r+')
@@ -94,7 +93,7 @@ try:
94
93
  manifest['fonts'].append(fontfile + '.svg')
95
94
 
96
95
  # Hint the TTF file
97
- subprocess.call('ttfautohint -s -f -n ' + fontfile + '.ttf ' + fontfile + '-hinted.ttf > /dev/null 2>&1 && mv ' + fontfile + '-hinted.ttf ' + fontfile + '.ttf', shell=True)
96
+ subprocess.call('ttfautohint -s -f -n -W ' + fontfile + '.ttf ' + fontfile + '-hinted.ttf > /dev/null 2>&1 && mv ' + fontfile + '-hinted.ttf ' + fontfile + '.ttf', shell=True)
98
97
 
99
98
  # Fix SVG header for webkit
100
99
  # from: https://github.com/fontello/font-builder/blob/master/bin/fontconvert.py
@@ -4,42 +4,34 @@
4
4
  # `fontcustom help` or visiting <http://fontcustom.com>.
5
5
  # --------------------------------------------------------------------------- #
6
6
 
7
- #font_name: fontcustom
8
- #css_selector: .icon-{{glyph}}
9
- #preprocessor_path: ""
10
- #autowidth: false
11
- #no_hash: false
12
- #force: false
13
- #debug: false
14
- #quiet: false
7
+ font_name: fontcustom
8
+ css_selector: .icon-{{glyph}}
9
+ preprocessor_path: ""
10
+ autowidth: false
11
+ no_hash: false
12
+ force: false
13
+ debug: false
14
+ quiet: false
15
15
 
16
16
 
17
17
  # --------------------------------------------------------------------------- #
18
18
  # Input Paths
19
19
  # --------------------------------------------------------------------------- #
20
20
 
21
- #input: assets/fonts/fontcustom/source # as a string
22
-
23
- # OR
24
-
25
- #input: # as a hash
26
- # vectors: app/assets/fonts/fontcustom/vectors # required
27
- # templates: app/assets/fonts/fontcustom/templates
21
+ input:
22
+ vectors: app/assets/fonts/fontcustom/vectors # required
23
+ templates: app/assets/fonts/fontcustom/templates
28
24
 
29
25
 
30
26
  # --------------------------------------------------------------------------- #
31
27
  # Output Paths
32
28
  # --------------------------------------------------------------------------- #
33
29
 
34
- #output: assets/fonts/fontcustom # as a string
35
-
36
- # OR
37
-
38
- #output: # as a hash
39
- # fonts: app/assets/fonts # required
40
- # css: app/assets/stylesheets
41
- # preview: app/views/styleguide
42
- # my-custom-template.yml: config
30
+ output:
31
+ fonts: app/assets/fonts # required
32
+ css: app/assets/stylesheets
33
+ preview: app/views/styleguide
34
+ #my-custom-template.yml: path/to/template/output
43
35
 
44
36
 
45
37
  # --------------------------------------------------------------------------- #
@@ -49,7 +41,7 @@
49
41
  # referenced by their baserame.
50
42
  # --------------------------------------------------------------------------- #
51
43
 
52
- #templates:
53
- # - scss
54
- # - preview
55
- # - my-custom-template.yml
44
+ templates:
45
+ - scss
46
+ - preview
47
+ #- my-custom-template.yml
@@ -91,25 +91,27 @@ module Fontcustom
91
91
  #
92
92
 
93
93
  def say_message(status, message, color = nil)
94
- return if options[:quiet] && status != :error
94
+ return if options[:quiet] && status != :error && status != :debug
95
95
  color = :red if [:error, :debug, :warn].include?(status)
96
96
  say_status status, message, color
97
97
  end
98
98
 
99
99
  def say_changed(status, changed)
100
- return if options[:quiet]
100
+ return if options[:quiet] || ! options[:debug] && status == :delete
101
101
  say_status status, changed.join(line_break)
102
102
  end
103
103
 
104
104
  # magic number for Thor say_status line breaks
105
- def line_break
106
- "\n#{" " * 14}"
105
+ def line_break(n = 14)
106
+ "\n#{" " * n}"
107
107
  end
108
108
 
109
- private
110
-
111
109
  def options
112
- @options || @cli_options
110
+ if @data
111
+ @data[:options]
112
+ else
113
+ @options || @cli_options || @config_options || {}
114
+ end
113
115
  end
114
116
  end
115
117
  end
@@ -1,3 +1,3 @@
1
1
  module Fontcustom
2
- VERSION = "1.3.0.beta4"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -5,31 +5,29 @@ module Fontcustom
5
5
  class Watcher
6
6
  include Utility
7
7
 
8
- def initialize(opts)
9
- @opts = opts
10
- @vector_listener = Listen.to(@opts.input[:vectors]).relative_paths(true).filter(/\.(eps|svg)$/).change(&callback)
8
+ def initialize(options, is_test = false)
9
+ @base = Fontcustom::Base.new options
10
+ @options = @base.options
11
+ @is_test = is_test
11
12
 
12
- templates = @opts.templates.dup
13
- templates.delete_if do |template|
14
- template.match Fontcustom.gem_lib
15
- end
16
- unless templates.empty?
17
- templates = templates.map do |template|
18
- File.basename template
19
- end
20
- @template_listener = Listen.to(@opts.input[:templates]).relative_paths(true).filter(/(#{templates.join("|")})/).change(&callback)
21
- end
13
+ templates = @options[:templates].dup.map { |template| File.basename(template) }
14
+ packaged = %w|preview css scss scss-rails|
15
+ templates.delete_if { |template| packaged.include?(template) }
22
16
 
23
- # Modified to allow testing
24
- @is_test = @opts.instance_variable_get :@is_test
25
- if @is_test
26
- @vector_listener = @vector_listener.polling_fallback_message(false)
27
- @template_listener = @template_listener.polling_fallback_message(false) if @template_listener
17
+ if templates.empty?
18
+ @listener = Listen.to(@options[:input][:vectors])
19
+ else
20
+ @listener = Listen.to(@options[:input][:vectors], @options[:input][:templates])
28
21
  end
22
+
23
+ @listener = @listener.relative_paths(true)
24
+ @listener = @listener.filter(/(#{templates.join("|")}|.+\.svg)$/)
25
+ @listener = @listener.change(&callback)
26
+ @listener = @listener.polling_fallback_message(false) if @is_test
29
27
  end
30
28
 
31
29
  def watch
32
- compile unless @opts.skip_first
30
+ compile unless @options[:skip_first]
33
31
  start
34
32
  rescue SignalException # Catches Ctrl + C
35
33
  stop
@@ -39,18 +37,15 @@ module Fontcustom
39
37
 
40
38
  def start
41
39
  if @is_test # Non-blocking listener
42
- @vector_listener.start
43
- @template_listener.start if @template_listener
40
+ @listener.start
44
41
  else
45
- @vector_listener.start!
46
- @template_listener.start! if @template_listener
42
+ @listener.start!
47
43
  end
48
44
  end
49
45
 
50
46
  def stop
51
- @vector_listener.stop
52
- @template_listener.stop if @template_listener
53
- say "\nFont Custom is signing off. Good night and good luck.", :yellow
47
+ @listener.stop
48
+ shell.say "\nFont Custom is signing off. Good night and good luck.", :yellow
54
49
  end
55
50
 
56
51
  def callback
@@ -68,17 +63,7 @@ module Fontcustom
68
63
  end
69
64
 
70
65
  def compile
71
- Generator::Font.start [@opts]
72
- Generator::Template.start [@opts]
73
- end
74
-
75
- def say(*args)
76
- return if @opts.quiet
77
- @opts.instance_variable_get(:@shell).say *args
78
- end
79
-
80
- def say_message(*args)
81
- @opts.say_message *args
66
+ @base.compile
82
67
  end
83
68
  end
84
69
  end
@@ -26,26 +26,20 @@ describe Fontcustom::Options do
26
26
  context ".set_config_path" do
27
27
  context "when :config is set" do
28
28
  it "should use options[:config] if it's a file" do
29
- FileUtils.cd fixture do
30
- o = options :config => "options/any-file-name.yml"
31
- o.send :set_config_path
32
- o.instance_variable_get(:@cli_options)[:config].should == "options/any-file-name.yml"
33
- end
29
+ o = options :config => "options/any-file-name.yml"
30
+ o.send :set_config_path
31
+ o.instance_variable_get(:@cli_options)[:config].should == "options/any-file-name.yml"
34
32
  end
35
33
 
36
34
  it "should search for fontcustom.yml if options[:config] is a dir" do
37
- FileUtils.cd fixture do
38
- o = options :config => "options/config-is-in-dir"
39
- o.send :set_config_path
40
- o.instance_variable_get(:@cli_options)[:config].should == "options/config-is-in-dir/fontcustom.yml"
41
- end
35
+ o = options :config => "options/config-is-in-dir"
36
+ o.send :set_config_path
37
+ o.instance_variable_get(:@cli_options)[:config].should == "options/config-is-in-dir/fontcustom.yml"
42
38
  end
43
39
 
44
40
  it "should raise error if :config doesn't exist" do
45
- FileUtils.cd fixture do
46
- o = options :config => "does-not-exist"
47
- expect { o.send :set_config_path }.to raise_error Fontcustom::Error, /configuration file/
48
- end
41
+ o = options :config => "does-not-exist"
42
+ expect { o.send :set_config_path }.to raise_error Fontcustom::Error, /configuration file/
49
43
  end
50
44
  end
51
45
 
@@ -67,11 +61,9 @@ describe Fontcustom::Options do
67
61
  end
68
62
 
69
63
  it "should be false if nothing is found" do
70
- FileUtils.cd fixture do
71
- o = options :manifest => "options/no-config-here/.fontcustom-manifest.json"
72
- o.send :set_config_path
73
- o.instance_variable_get(:@cli_options)[:config].should == false
74
- end
64
+ o = options :manifest => "options/no-config-here/.fontcustom-manifest.json"
65
+ o.send :set_config_path
66
+ o.instance_variable_get(:@cli_options)[:config].should == false
75
67
  end
76
68
  end
77
69
  end
@@ -131,7 +123,7 @@ describe Fontcustom::Options do
131
123
  context ".clean_font_name" do
132
124
  it "should normalize the font name" do
133
125
  o = options
134
- o.options = { :font_name => " A_stR4nG3 nAm3 Ø& " }
126
+ o.instance_variable_set :@options, { :font_name => " A_stR4nG3 nAm3 Ø& " }
135
127
  o.send :clean_font_name
136
128
  o.options[:font_name].should == "A_stR4nG3--nAm3---"
137
129
  end
@@ -141,7 +133,7 @@ describe Fontcustom::Options do
141
133
  it "should raise error if input[:vectors] doesn't contain SVGs" do
142
134
  FileUtils.cd fixture("shared") do
143
135
  o = options
144
- o.options = { :input => "vectors-empty" }
136
+ o.instance_variable_set :@options, { :input => "vectors-empty" }
145
137
  expect { o.send :set_input_paths }.to raise_error Fontcustom::Error, /doesn't contain any SVGs/
146
138
  end
147
139
  end
@@ -150,7 +142,7 @@ describe Fontcustom::Options do
150
142
  it "should set :templates as :vectors if :templates isn't set" do
151
143
  FileUtils.cd fixture("shared") do
152
144
  o = options
153
- o.options = { :input => { :vectors => "vectors" } }
145
+ o.instance_variable_set :@options, { :input => { :vectors => "vectors" } }
154
146
  o.send :set_input_paths
155
147
  o.options[:input][:templates].should == "vectors"
156
148
  end
@@ -159,7 +151,7 @@ describe Fontcustom::Options do
159
151
  it "should preserve :templates if it's set" do
160
152
  FileUtils.cd fixture("shared") do
161
153
  o = options
162
- o.options = { :input => { :vectors => "vectors", :templates => "templates" } }
154
+ o.instance_variable_set :@options, { :input => { :vectors => "vectors", :templates => "templates" } }
163
155
  o.send :set_input_paths
164
156
  o.options[:input][:templates].should == "templates"
165
157
  end
@@ -168,7 +160,7 @@ describe Fontcustom::Options do
168
160
  it "should raise an error if :vectors isn't set" do
169
161
  FileUtils.cd fixture("shared") do
170
162
  o = options
171
- o.options = { :input => { :templates => "templates" } }
163
+ o.instance_variable_set :@options, { :input => { :templates => "templates" } }
172
164
  expect { o.send :set_input_paths }.to raise_error Fontcustom::Error, /have a :vectors key/
173
165
  end
174
166
  end
@@ -176,7 +168,7 @@ describe Fontcustom::Options do
176
168
  it "should raise an error if :vectors doesn't point to an existing directory" do
177
169
  FileUtils.cd fixture("shared") do
178
170
  o = options
179
- o.options = {
171
+ o.instance_variable_set :@options, {
180
172
  :config => "fontcustom.yml",
181
173
  :input => { :vectors => "not-a-dir" }
182
174
  }
@@ -189,7 +181,7 @@ describe Fontcustom::Options do
189
181
  it "should return a hash of locations" do
190
182
  FileUtils.cd fixture("shared") do
191
183
  o = options
192
- o.options = { :input => "vectors" }
184
+ o.instance_variable_set :@options, { :input => "vectors" }
193
185
  o.send :set_input_paths
194
186
  o.options[:input].should have_key(:vectors)
195
187
  o.options[:input].should have_key(:templates)
@@ -199,7 +191,7 @@ describe Fontcustom::Options do
199
191
  it "should set :templates to match :vectors" do
200
192
  FileUtils.cd fixture("shared") do
201
193
  o = options
202
- o.options = { :input => "vectors" }
194
+ o.instance_variable_set :@options, { :input => "vectors" }
203
195
  o.send :set_input_paths
204
196
  o.options[:input][:templates].should == "vectors"
205
197
  end
@@ -208,7 +200,7 @@ describe Fontcustom::Options do
208
200
  it "should raise an error if :vectors doesn't point to a directory" do
209
201
  FileUtils.cd fixture("shared") do
210
202
  o = options
211
- o.options = {
203
+ o.instance_variable_set :@options, {
212
204
  :config => "fontcustom.yml",
213
205
  :input => "not-a-dir"
214
206
  }
@@ -223,7 +215,7 @@ describe Fontcustom::Options do
223
215
  context "when :debug is true" do
224
216
  it "should print a warning" do
225
217
  o = options
226
- o.options = {
218
+ o.instance_variable_set :@options, {
227
219
  :debug => true,
228
220
  :font_name => "Test-Font"
229
221
  }
@@ -236,7 +228,7 @@ describe Fontcustom::Options do
236
228
  context "when :output is a hash" do
237
229
  it "should set :css and :preview to match :fonts if either aren't set" do
238
230
  o = options
239
- o.options = { :output => { :fonts => "output/fonts" } }
231
+ o.instance_variable_set :@options, { :output => { :fonts => "output/fonts" } }
240
232
  o.send :set_output_paths
241
233
  o.options[:output][:css].should == "output/fonts"
242
234
  o.options[:output][:preview].should == "output/fonts"
@@ -244,7 +236,7 @@ describe Fontcustom::Options do
244
236
 
245
237
  it "should preserve :css and :preview if they do exist" do
246
238
  o = options
247
- o.options = {
239
+ o.instance_variable_set :@options, {
248
240
  :output => {
249
241
  :fonts => "output/fonts",
250
242
  :css => "output/styles",
@@ -258,7 +250,7 @@ describe Fontcustom::Options do
258
250
 
259
251
  it "should create additional paths if they are given" do
260
252
  o = options
261
- o.options = {
253
+ o.instance_variable_set :@options, {
262
254
  :output => {
263
255
  :fonts => "output/fonts",
264
256
  "special.js" => "assets/javascripts"
@@ -270,7 +262,7 @@ describe Fontcustom::Options do
270
262
 
271
263
  it "should raise an error if :fonts isn't set" do
272
264
  o = options
273
- o.options = {
265
+ o.instance_variable_set :@options, {
274
266
  :config => "fontcustom.yml",
275
267
  :output => { :css => "output/styles" }
276
268
  }
@@ -281,7 +273,7 @@ describe Fontcustom::Options do
281
273
  context "when :output is a string" do
282
274
  it "should return a hash of output locations" do
283
275
  o = options
284
- o.options = { :output => "output/fonts" }
276
+ o.instance_variable_set :@options, { :output => "output/fonts" }
285
277
  o.send :set_output_paths
286
278
  o.options[:output].should be_a(Hash)
287
279
  o.options[:output].should have_key(:fonts)
@@ -291,7 +283,7 @@ describe Fontcustom::Options do
291
283
 
292
284
  it "should set :css and :preview to match :fonts" do
293
285
  o = options
294
- o.options = { :output => "output/fonts" }
286
+ o.instance_variable_set :@options, { :output => "output/fonts" }
295
287
  o.send :set_output_paths
296
288
  o.options[:output][:css].should == "output/fonts"
297
289
  o.options[:output][:preview].should == "output/fonts"
@@ -300,7 +292,7 @@ describe Fontcustom::Options do
300
292
  it "should raise an error if :fonts exists but isn't a directory" do
301
293
  FileUtils.cd fixture("shared") do
302
294
  o = options
303
- o.options = {
295
+ o.instance_variable_set :@options, {
304
296
  :config => "fontcustom.yml",
305
297
  :output => "not-a-dir"
306
298
  }
@@ -313,11 +305,11 @@ describe Fontcustom::Options do
313
305
  context ".check_template_paths" do
314
306
  it "should raise an error if a template does not exist" do
315
307
  o = options
316
- o.options = {
308
+ o.instance_variable_set :@options, {
317
309
  :input => { :templates => fixture("shared/templates") },
318
310
  :templates => %w|fake-template.txt|
319
311
  }
320
- expect { o.send :check_template_paths }.to raise_error Fontcustom::Error, /doesn't exist/
312
+ expect { o.send :check_template_paths }.to raise_error Fontcustom::Error, /wasn't found/
321
313
  end
322
314
  end
323
315
  end
@@ -4,27 +4,27 @@ require "fontcustom/watcher"
4
4
 
5
5
  describe Fontcustom::Watcher do
6
6
  # Silence messages without passing :quiet => true to everything
7
- before(:each) do
8
- Fontcustom::Options.any_instance.stub :say_message
9
- end
7
+ #before(:each) do
8
+ #Fontcustom::Options.any_instance.stub :say_message
9
+ #end
10
10
 
11
11
  def watcher(options)
12
- Fontcustom::Generator::Font.stub :start
13
- Fontcustom::Generator::Template.stub :start
14
- opts = Fontcustom::Options.new(options)
15
- opts.instance_variable_set :@is_test, true # undocumented — non-blocking use of watcher for testing
16
- Fontcustom::Watcher.new opts
12
+ Fontcustom::Manifest.any_instance.stub :write_file
13
+ Fontcustom::Base.any_instance.stub :compile
14
+
15
+ # undocumented — non-blocking use of watcher for testing
16
+ Fontcustom::Watcher.new options, true
17
17
  end
18
18
 
19
19
  context "#watch" do
20
- it "should call generators on init" do
21
- Fontcustom::Generator::Font.should_receive(:start).once
22
- Fontcustom::Generator::Template.should_receive(:start).once
20
+ it "should compile on init" do
21
+ Fontcustom::Base.any_instance.should_receive(:compile).once
22
+
23
23
  w = watcher(
24
- :project_root => fixture,
25
24
  :input => "shared/vectors",
26
25
  :output => "output"
27
26
  )
27
+
28
28
  # silence output
29
29
  capture(:stdout) do
30
30
  w.watch
@@ -33,14 +33,14 @@ describe Fontcustom::Watcher do
33
33
  end
34
34
 
35
35
  it "should not call generators on init if options[:skip_first] is passed" do
36
- Fontcustom::Generator::Font.should_not_receive(:start)
37
- Fontcustom::Generator::Template.should_not_receive(:start)
36
+ Fontcustom::Base.any_instance.should_not_receive(:compile)
37
+
38
38
  w = watcher(
39
- :project_root => fixture,
40
39
  :input => "shared/vectors",
41
40
  :output => "output",
42
41
  :skip_first => true
43
42
  )
43
+
44
44
  capture(:stdout) do
45
45
  w.watch
46
46
  w.send :stop
@@ -48,14 +48,14 @@ describe Fontcustom::Watcher do
48
48
  end
49
49
 
50
50
  it "should call generators when vectors change" do
51
- Fontcustom::Generator::Font.should_receive(:start).once
52
- Fontcustom::Generator::Template.should_receive(:start).once
51
+ Fontcustom::Base.any_instance.should_receive(:compile).once
52
+
53
53
  w = watcher(
54
- :project_root => fixture,
55
54
  :input => "shared/vectors",
56
55
  :output => "output",
57
56
  :skip_first => true
58
57
  )
58
+
59
59
  capture(:stdout) do
60
60
  begin
61
61
  w.watch
@@ -69,16 +69,16 @@ describe Fontcustom::Watcher do
69
69
  end
70
70
  end
71
71
 
72
- it "should call generators when watched templates change" do
73
- Fontcustom::Generator::Font.should_receive(:start).once
74
- Fontcustom::Generator::Template.should_receive(:start).once
72
+ it "should call generators when custom templates change" do
73
+ Fontcustom::Base.any_instance.should_receive(:compile).once
74
+
75
75
  w = watcher(
76
- :project_root => fixture,
77
76
  :input => {:vectors => "shared/vectors", :templates => "shared/templates"},
78
77
  :templates => %w|css preview custom.css|,
79
78
  :output => "output",
80
79
  :skip_first => true
81
80
  )
81
+
82
82
  capture(:stdout) do
83
83
  begin
84
84
  template = fixture "shared/templates/custom.css"
@@ -97,14 +97,14 @@ describe Fontcustom::Watcher do
97
97
  end
98
98
 
99
99
  it "should do nothing when non-vectors change" do
100
- Fontcustom::Generator::Font.should_not_receive(:start)
101
- Fontcustom::Generator::Template.should_not_receive(:start)
100
+ Fontcustom::Base.any_instance.should_not_receive(:compile)
101
+
102
102
  w = watcher(
103
- :project_root => fixture,
104
103
  :input => "shared/vectors",
105
104
  :output => "output",
106
105
  :skip_first => true
107
106
  )
107
+
108
108
  capture(:stdout) do
109
109
  begin
110
110
  w.watch
@@ -4,34 +4,39 @@ require "fileutils"
4
4
  require File.expand_path("../../lib/fontcustom.rb", __FILE__)
5
5
 
6
6
  RSpec.configure do |c|
7
+ c.before(:all) do
8
+ FileUtils.cd fixture
9
+ puts "Running `cd #{Dir.pwd}`"
10
+ end
11
+
7
12
  def fixture(path = "")
8
13
  File.join(File.expand_path("../fixtures", __FILE__), path)
9
14
  end
10
15
 
11
- def manifest_contents(root = Dir.pwd)
16
+ def manifest_contents
12
17
  {
13
18
  :checksum => {
14
19
  :current => "82a59e769bc60192484f2620570bbb59e225db97c1aac3f242a2e49d6060a19c",
15
20
  :previous => "82a59e769bc60192484f2620570bbb59e225db97c1aac3f242a2e49d6060a19c"
16
21
  },
17
22
  :fonts => [
18
- "#{root}/fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.ttf",
19
- "#{root}/fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.svg",
20
- "#{root}/fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.woff",
21
- "#{root}/fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.eot"
23
+ "fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.ttf",
24
+ "fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.svg",
25
+ "fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.woff",
26
+ "fontcustom/fontcustom_82a59e769bc60192484f2620570bbb59.eot"
22
27
  ],
23
28
  :glyphs => {
24
29
  :"a_r3ally-exotic-f1le-name" => {
25
30
  :codepoint => 61696,
26
- :source => "#{root}/vectors/a_R3ally-eXotic f1Le Name.svg"
31
+ :source => "vectors/a_R3ally-eXotic f1Le Name.svg"
27
32
  },
28
33
  :c => {
29
34
  :codepoint => 61697,
30
- :source => "#{root}/vectors/C.svg"
35
+ :source => "vectors/C.svg"
31
36
  },
32
37
  :d => {
33
38
  :codepoint => 61698,
34
- :source => "#{root}/vectors/D.svg"}
39
+ :source => "vectors/D.svg"}
35
40
  },
36
41
  :options => {
37
42
  :autowidth => false,
@@ -39,23 +44,23 @@ RSpec.configure do |c|
39
44
  :css_selector => ".icon-{{glyph}}",
40
45
  :debug => false,
41
46
  :font_name => "fontcustom",
47
+ :force => true,
42
48
  :input => {
43
- :templates => "#{root}/vectors",
44
- :vectors => "#{root}/vectors"
49
+ :templates => "vectors",
50
+ :vectors => "vectors"
45
51
  },
46
- :manifest => "#{root}/.fontcustom-manifest.json",
47
52
  :no_hash => false,
48
53
  :output => {
49
- :css => "#{root}/fontcustom",
50
- :fonts => "#{root}/fontcustom",
51
- :preview => "#{root}/fontcustom"
54
+ :css => "fontcustom",
55
+ :fonts => "fontcustom",
56
+ :preview => "fontcustom"
52
57
  },
53
58
  :preprocessor_path => nil,
54
- :project_root => "#{root}",
55
59
  :quiet => true,
56
60
  :templates => [
57
- "#{Fontcustom.gem_lib}/templates/fontcustom.css",
58
- "#{Fontcustom.gem_lib}/templates/fontcustom-preview.html"
61
+ "css",
62
+ "scss",
63
+ "preview"
59
64
  ]
60
65
  },
61
66
  :templates => []
@@ -80,7 +85,7 @@ RSpec.configure do |c|
80
85
 
81
86
  def live_test
82
87
  testdir = fixture File.join("sandbox", "test")
83
- FileUtils.rm_r testdir
88
+ FileUtils.rm_r testdir if File.directory?(testdir)
84
89
  FileUtils.mkdir testdir
85
90
  FileUtils.cp_r fixture("shared/vectors"), testdir
86
91
  FileUtils.cd testdir do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fontcustom
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0.beta4
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kai Zau
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-20 00:00:00.000000000 Z
12
+ date: 2013-12-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -169,7 +169,7 @@ files:
169
169
  - spec/fontcustom/manifest_spec.rb
170
170
  - spec/fontcustom/options_spec.rb
171
171
  - spec/fontcustom/utility_spec.rb
172
- - spec/fontcustom/watcher_spec.rb.off
172
+ - spec/fontcustom/watcher_spec.rb
173
173
  - spec/spec_helper.rb
174
174
  homepage: http://fontcustom.com
175
175
  licenses: []
@@ -186,9 +186,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
186
186
  version: '0'
187
187
  required_rubygems_version: !ruby/object:Gem::Requirement
188
188
  requirements:
189
- - - '>'
189
+ - - '>='
190
190
  - !ruby/object:Gem::Version
191
- version: 1.3.1
191
+ version: '0'
192
192
  requirements: []
193
193
  rubyforge_project:
194
194
  rubygems_version: 2.1.9
@@ -230,5 +230,5 @@ test_files:
230
230
  - spec/fontcustom/manifest_spec.rb
231
231
  - spec/fontcustom/options_spec.rb
232
232
  - spec/fontcustom/utility_spec.rb
233
- - spec/fontcustom/watcher_spec.rb.off
233
+ - spec/fontcustom/watcher_spec.rb
234
234
  - spec/spec_helper.rb