fontcustom 1.3.0.beta4 → 1.3.0

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 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