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
         |