fontello_rails_converter 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/CHANGELOG.md +6 -0
- data/bin/fontello +12 -1
- data/lib/fontello_rails_converter/cli.rb +102 -65
- data/lib/fontello_rails_converter/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDAzOGE4NTFmYzg4NTRkNThlOTZlZjBjNWZiY2MyMTBkYmI3ZjkxOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWFjN2QzZTcwNWI1ZDgzMmQ3MGRkOTdhODA1NTBmMjEwMWNjYzZhMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ODNlNzU5OTczYjU0NjI5Mzk3NWFiMzJiODM4Y2ViZWU4ZjgxMDdkOWE4ZTEx
|
10
|
+
MmYwNTI1MTg4N2E5ZWJhOWUzMTc1NTcxYzFhYWM4NTdmYjI2NDU4MzNlZmIz
|
11
|
+
NjYwZTdjYmRmZmYzZmFlMDViNDA3YzRmM2Y2NjM4M2Y4YzVkNTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmI5NDRkNGM2NGQ2ZjgwYjNjMGRlODc4NmE3MTEyYmNhNjQ0YWExYzY0MjMw
|
14
|
+
N2QxZDM4NWIwYWM5NTA0ZTg1MDc2OGMzNjBmZDBkNDVmMGZmZTQzMzQyMzAz
|
15
|
+
YTJkNDNhNTBlOGQ1MTdlNzdkMzU5OWVlMWUxYmY5MzIxYzVlOGM=
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### 0.3.1
|
4
|
+
|
5
|
+
* allow configuration (and automatic creation) of icon guide directory (/rails_root/public/fontello-demo.html), fixes #19
|
6
|
+
* more verbose/helpful CLI output
|
7
|
+
* add `-v`/`--version` switch to CLI for printing out the current version
|
8
|
+
|
3
9
|
### 0.3.0
|
4
10
|
|
5
11
|
* allow setting global options using a .yml file (e.g. /rails_root/config/fontello_rails_converter.yml)
|
data/bin/fontello
CHANGED
@@ -15,6 +15,7 @@ def set_options_based_on_rails_root(options)
|
|
15
15
|
options.merge!({
|
16
16
|
stylesheet_dir: "#{options[:asset_dir]}/stylesheets",
|
17
17
|
font_dir: "#{options[:asset_dir]}/fonts",
|
18
|
+
icon_guide_dir: "#{options[:rails_root_dir]}/public",
|
18
19
|
zip_file: "#{options[:rails_root_dir]}/tmp/fontello.zip",
|
19
20
|
config_file: "#{options[:asset_dir]}/fonts/config.json",
|
20
21
|
fontello_session_id_file: "#{options[:rails_root_dir]}/tmp/fontello_session_id",
|
@@ -24,6 +25,7 @@ end
|
|
24
25
|
|
25
26
|
def set_options_from_file(options)
|
26
27
|
if File.exist?(options[:options_file])
|
28
|
+
puts "Loading options from #{options[:options_file]}"
|
27
29
|
options_from_file = YAML.load_file options[:options_file]
|
28
30
|
options_from_file.each do |key, value|
|
29
31
|
options[key.to_sym] = value if options.keys.include?(key.to_sym)
|
@@ -68,7 +70,7 @@ OptionParser.new do |opts|
|
|
68
70
|
end
|
69
71
|
|
70
72
|
opts.on("--stylesheet-extension", "Pick between e.g. '.css.scss' or '.scss'\n\n") do |opt|
|
71
|
-
options[:
|
73
|
+
options[:stylesheet_extension] = opt
|
72
74
|
end
|
73
75
|
|
74
76
|
opts.separator "`download` options:"
|
@@ -104,10 +106,19 @@ OptionParser.new do |opts|
|
|
104
106
|
options[:font_dir] = opt
|
105
107
|
end
|
106
108
|
|
109
|
+
opts.on("--icon-guide-dir [PATH]", "Target icon guide (fontello-demo.html) directory (default: /rails_root/public)") do |opt|
|
110
|
+
options[:icon_guide_dir] = opt
|
111
|
+
end
|
112
|
+
|
107
113
|
opts.on("-p", "--session-id-file [PATH]", "File to persist fontello session ID (default: /rails_root/tmp/fontello_session_id)") do |opt|
|
108
114
|
options[:font_dir] = opt
|
109
115
|
end
|
110
116
|
|
117
|
+
opts.on_tail("-v", "--version", "Show version") do
|
118
|
+
puts FontelloRailsConverter::VERSION
|
119
|
+
exit
|
120
|
+
end
|
121
|
+
|
111
122
|
opts.separator "\nExamples:\n"\
|
112
123
|
" fontello open -r /path/to/railsapp\n"\
|
113
124
|
" fontello convert\n"\
|
@@ -12,104 +12,141 @@ module FontelloRailsConverter
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def open
|
15
|
+
puts "---- open ----"
|
15
16
|
if config_file_exists?
|
16
17
|
@fontello_api.new_session_from_config unless @options[:open_existing] == true
|
17
18
|
Launchy.open @fontello_api.session_url
|
18
|
-
else
|
19
|
-
puts red("there's no config file yet!")
|
20
|
-
puts red("follow these instructions: https://github.com/railslove/fontello_rails_converter#initial-usage")
|
21
|
-
puts red("to setup your project")
|
22
19
|
end
|
23
20
|
end
|
24
21
|
|
25
22
|
def download
|
26
|
-
|
23
|
+
puts "---- download ----"
|
24
|
+
|
25
|
+
if @options[:use_config] == true && config_file_exists?
|
26
|
+
puts "Using '#{options[:config_file]}' to create new fontello session"
|
27
|
+
@fontello_api.new_session_from_config
|
28
|
+
end
|
29
|
+
|
27
30
|
File.open(@options[:zip_file], "w+") do |file|
|
28
31
|
file.write @fontello_api.download_zip_body
|
29
32
|
end
|
33
|
+
puts green "Downloaded '#{@options[:zip_file]}' from fontello (#{@fontello_api.session_url})"
|
30
34
|
end
|
31
35
|
|
32
36
|
def convert
|
33
|
-
|
34
|
-
|
37
|
+
if @options[:no_download] == true
|
38
|
+
puts "Use existing '#{@options[:zip_file]}' file due to `--no-download` switch"
|
39
|
+
else
|
40
|
+
self.download
|
41
|
+
end
|
35
42
|
|
36
|
-
|
37
|
-
|
38
|
-
filename = file.to_s.split("/").last
|
43
|
+
puts "---- convert -----"
|
44
|
+
prepare_directories
|
39
45
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
target_file = File.join @options[:stylesheet_dir], filename.gsub('.css', @options[:stylesheet_extension])
|
44
|
-
zipfile.extract(file, target_file) { true }
|
45
|
-
puts green("copied #{target_file}")
|
46
|
-
|
47
|
-
if !filename.end_with? "animation.css", "-ie7.css", "-codes.css", "-ie7-codes.css", "-embedded.css"
|
48
|
-
converted_css = self.convert_main_stylesheet File.read(target_file).encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
49
|
-
File.open(target_file, 'w') { |f| f.write(converted_css) }
|
50
|
-
puts green("converted #{target_file} for Sass & asset pipeline")
|
51
|
-
end
|
52
|
-
|
53
|
-
# font files
|
54
|
-
elsif filename.end_with? ".eot", ".woff", ".ttf", ".svg", "config.json"
|
55
|
-
target_file = File.join @options[:font_dir], filename
|
56
|
-
zipfile.extract(file, target_file) { true }
|
57
|
-
puts green("copied #{target_file}")
|
58
|
-
|
59
|
-
# demo.html
|
60
|
-
elsif filename == 'demo.html'
|
61
|
-
target_file = File.join @options[:rails_root_dir], "public", "fontello-demo.html"
|
62
|
-
zipfile.extract(file, target_file) { true }
|
63
|
-
puts green("copied #{target_file}")
|
64
|
-
|
65
|
-
converted_html = convert_demo_html File.read(target_file)
|
66
|
-
File.open(target_file, 'w') { |f| f.write(converted_html) }
|
67
|
-
puts green("converted #{filename}'s HTML for asset pipeline")
|
68
|
-
end
|
46
|
+
if zip_file_exists?
|
47
|
+
Zip::File.open(@options[:zip_file]) do |zipfile|
|
48
|
+
grouped_files = zipfile.group_by{ |file| file.to_s.split("/")[1] }
|
69
49
|
|
50
|
+
copy_and_convert_stylesheets(zipfile, grouped_files['css'])
|
51
|
+
copy_font_files(zipfile, grouped_files['font'])
|
52
|
+
copy_and_convert_icon_guide(zipfile, grouped_files['demo.html'].first)
|
70
53
|
end
|
71
54
|
end
|
72
55
|
end
|
73
56
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
57
|
+
private
|
58
|
+
|
59
|
+
def prepare_directories
|
60
|
+
FileUtils.mkdir_p @options[:font_dir]
|
61
|
+
FileUtils.mkdir_p @options[:stylesheet_dir]
|
62
|
+
FileUtils.mkdir_p @options[:asset_dir]
|
63
|
+
FileUtils.mkdir_p @options[:icon_guide_dir]
|
64
|
+
end
|
79
65
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
66
|
+
def convert_main_stylesheet(content)
|
67
|
+
# asset URLs
|
68
|
+
content.gsub! /\.\.\/font\//, ""
|
69
|
+
content.gsub!(/url\(([^\(]+)\)/) { |m| "url(font-path(#{$1}))" }
|
84
70
|
|
85
|
-
|
86
|
-
|
71
|
+
# turn icon base class into placeholder selector
|
72
|
+
content.gsub! /\[class\^="icon-[^\{]+{/m, "%icon-base {"
|
87
73
|
|
88
|
-
|
89
|
-
|
74
|
+
# get icons
|
75
|
+
icons = content.scan(/\.(icon-\S+):before/).map(&:first)
|
90
76
|
|
91
|
-
|
92
|
-
|
77
|
+
# convert icon classes to placeholder selectors
|
78
|
+
content.gsub!(/^\.(icon-\S+:before) { (.+)$/) { |m| "%#{$1} { @extend %icon-base; #{$2}" }
|
93
79
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
80
|
+
# recreate icon classes using the mixins
|
81
|
+
if icons.any?
|
82
|
+
content += "\n\n"
|
83
|
+
icons.each do |icon|
|
84
|
+
content += ".#{icon} { @extend %#{icon}; }\n"
|
85
|
+
end
|
99
86
|
end
|
87
|
+
|
88
|
+
return content
|
100
89
|
end
|
101
90
|
|
102
|
-
|
103
|
-
|
91
|
+
def copy_font_files(zipfile, files)
|
92
|
+
puts "font files:"
|
93
|
+
files.select{ |file| file.to_s.end_with?(".eot", ".woff", ".ttf", ".svg", "config.json") }.each do |file|
|
94
|
+
filename = file.to_s.split("/").last
|
104
95
|
|
105
|
-
|
96
|
+
target_file = File.join @options[:font_dir], filename
|
97
|
+
zipfile.extract(file, target_file) { true }
|
98
|
+
puts green("Copied #{target_file}")
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def copy_and_convert_stylesheets(zipfile, files)
|
103
|
+
puts "stylesheets:"
|
104
|
+
files.select{ |file| file.to_s.end_with?('.css') }.each do |file|
|
105
|
+
filename = file.to_s.split("/").last
|
106
|
+
|
107
|
+
# extract stylesheet to target location
|
108
|
+
target_file = File.join @options[:stylesheet_dir], filename.gsub('.css', @options[:stylesheet_extension])
|
109
|
+
zipfile.extract(file, target_file) { true }
|
110
|
+
puts green("Copied #{target_file}")
|
111
|
+
|
112
|
+
if !filename.end_with? "animation.css", "-ie7.css", "-codes.css", "-ie7-codes.css", "-embedded.css"
|
113
|
+
converted_css = convert_main_stylesheet File.read(target_file).encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
114
|
+
File.open(target_file, 'w') { |f| f.write(converted_css) }
|
115
|
+
puts green("Converted #{target_file} for Sass & asset pipeline")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def copy_and_convert_icon_guide(zipfile, demo_file)
|
121
|
+
puts "icon guide (demo.html):"
|
122
|
+
|
123
|
+
target_file = File.join @options[:icon_guide_dir], "fontello-demo.html"
|
124
|
+
zipfile.extract(demo_file, target_file) { true }
|
125
|
+
puts green("Copied #{target_file}")
|
126
|
+
|
127
|
+
converted_html = File.read(target_file).gsub! /css\//, "/assets/"
|
128
|
+
File.open(target_file, 'w') { |f| f.write(converted_html) }
|
129
|
+
puts green("Converted demo.html for asset pipeline")
|
130
|
+
end
|
106
131
|
|
107
132
|
def config_file_exists?
|
108
|
-
|
133
|
+
if File.exist?(@options[:config_file])
|
134
|
+
true
|
135
|
+
else
|
136
|
+
puts red("missing config file: #{@options[:config_file]}")
|
137
|
+
puts red("follow these instructions: https://github.com/railslove/fontello_rails_converter#initial-usage")
|
138
|
+
puts red("to setup your project")
|
139
|
+
false
|
140
|
+
end
|
109
141
|
end
|
110
142
|
|
111
|
-
def
|
112
|
-
|
143
|
+
def zip_file_exists?
|
144
|
+
if File.exist?(@options[:zip_file])
|
145
|
+
true
|
146
|
+
else
|
147
|
+
puts red("missing zip file: #{@options[:zip_file]}")
|
148
|
+
false
|
149
|
+
end
|
113
150
|
end
|
114
151
|
|
115
152
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fontello_rails_converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakob Hilden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|