google-webfonts 0.2.0 → 0.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
- SHA1:
3
- metadata.gz: f25bcacd54d5215e32e042a398f6d509b8f12aaa
4
- data.tar.gz: fdfdaf3395363ef350b76db9b011e7c15520f606
2
+ SHA256:
3
+ metadata.gz: d67f80b14813326601c41f9f2865fdad8caa0b9d16b427a6eb1d20a0cd8ed89a
4
+ data.tar.gz: 0c20a66e55787843e8f5ddcc7d3c171eb604400fe07a464803008e42fcb7713f
5
5
  SHA512:
6
- metadata.gz: bd56576397bf306107d3d52fd73383d37df8bb739bb43bfce026f066487bd18c873bdeadbafd6b4bb0a9cdaaab6e5e5bde1464be588f1669eeaf265d47901626
7
- data.tar.gz: b73db19e8b453ec28bcbd102495bcb56dda24627b1d56715489f0ab6fe53b482aea2f6317035da7096726ea40dc0b303eb6c3adcf7411e0f529d9acc46c19f46
6
+ metadata.gz: 99976493264cffc8728c444d8dc8791bc8f3422733287a61c05d27bece777948fbec023167642cd7314fd438572110d52dc505d63e2d39f5448e1a2c963a9af1
7
+ data.tar.gz: d403b86434a2b6020c3440b9149588e1edcedbd64f3763e2568ac7a28d3375867e9dc420605835981f0428e0ac3598d042fa05d23c06880fc114fe1de239c72e
data/.gitignore CHANGED
@@ -1,18 +1,13 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- .ruby-version
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /.idea/
10
+ /.code/
11
+ .DS_Store
12
+ /.ruby-gemset
13
+ /.ruby-version
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
1
4
  source 'https://rubygems.org'
2
5
 
3
- # Specify your gem's dependencies in google-webfonts.gemspec
6
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
7
+
4
8
  gemspec
@@ -0,0 +1,41 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ google-webfonts (0.3.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ ansi (1.5.0)
10
+ builder (3.2.3)
11
+ docile (1.3.0)
12
+ json (2.1.0)
13
+ minitest (5.3.5)
14
+ minitest-reporters (1.2.0)
15
+ ansi
16
+ builder
17
+ minitest (>= 5.0)
18
+ ruby-progressbar
19
+ rake (10.5.0)
20
+ ruby-progressbar (1.9.0)
21
+ simplecov (0.16.1)
22
+ docile (~> 1.1)
23
+ json (>= 1.8, < 3)
24
+ simplecov-html (~> 0.10.0)
25
+ simplecov-html (0.10.2)
26
+ yard (0.9.12)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ bundler (~> 1.16)
33
+ google-webfonts!
34
+ minitest (~> 5.0)
35
+ minitest-reporters (~> 1.2)
36
+ rake (~> 10.0)
37
+ simplecov (~> 0.16)
38
+ yard (~> 0.9)
39
+
40
+ BUNDLED WITH
41
+ 1.16.1
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Travis Haynes
1
+ Copyright (c) 2018 Hi5 Development, LLC
2
2
 
3
3
  MIT License
4
4
 
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
19
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Google::Webfonts
2
2
 
3
- Provides a helper for using [Google Webfonts](http://www.google.com/webfonts) in
4
- Rails or Sinatra, although it can be used outside of those frameworks as well.
3
+ Provides a helper for using [Google Webfonts](http://www.google.com/webfonts)
4
+ with the Ruby programming language.
5
5
 
6
6
  ## Installation
7
7
 
@@ -19,77 +19,103 @@ Or install it yourself as:
19
19
 
20
20
  ## Usage
21
21
 
22
- ### Syntax
22
+ ```ruby
23
+ include Google::Webfonts::Helper
23
24
 
24
- google_webfonts_link_tag :font_name => [sizes], ...
25
+ google_webfonts_link_tag font_name: [weights]
26
+ ```
25
27
 
26
28
  ### Examples
27
29
 
28
- Basic usage:
30
+ #### Basic usage:
29
31
 
30
- google_webfonts_link_tag :droid_sans => [400, 700],
31
- :yanone_kaffeesatz => [300, 400]
32
+ ```ruby
33
+ google_webfonts_link_tag droid_sans: [400, 700], yanone_kaffeesatz: [300, 400]
34
+ ```
32
35
 
33
- The sizes are optional, and do not have to be in an Array if you are only
34
- including one size. For example:
36
+ The weights are optional, and do not have to be in an Array if you are only
37
+ including one. For example:
35
38
 
36
- google_webfonts_link_tag :droid_sans
37
- # => generates a tag for Droid+Sans without specifying the font weight
38
-
39
- google_webfonts_link_tag :droid_sans => 400
40
- # => generates a tag for Droid+Sans with 400 weight
41
-
42
- google_webfonts_link_tag :droid_sans => [400, 700]
43
- # => generates a tag for Droid+Sans with 400 and 700 weights
39
+ ```ruby
40
+ # Generate a tag for Droid+Sans without specifying the font weight.
41
+ google_webfonts_link_tag :droid_sans
44
42
 
45
- You can also use a String instead of a Symbol if you'd prefer. For example:
43
+ # Generate a tag for Droid+Sans with 400 weight.
44
+ google_webfonts_link_tag :droid_sans => 400
46
45
 
47
- google_webfonts_link_tag "Droid Sans", "Yanone Kaffeesatz" => 400
48
- # includes Droid+Sans without a specified weight
49
- # and Yanone+Kaffeesatz with weight 400
46
+ # Generate a tag for Droid+Sans with 400 and 700 weights.
47
+ google_webfonts_link_tag :droid_sans => [400, 700]
48
+ ```
49
+
50
+ In certain cases it will be necessary to use Strings instead of Symbols for the
51
+ font names. The helper method titleizes the symbols when converting it to a
52
+ Google Webfonts compatible name. This does not work for every font name. For
53
+ example:
54
+
55
+ ```ruby
56
+ # If a Symbol was provided here, the "T" would be lower-case, which would
57
+ # result in an invalid link.
58
+ google_webfonts_link_tag 'PT Sans'
59
+ ```
50
60
 
51
61
  ### Using in Rails
52
62
 
53
- No additional work required to use this gem in a Rails application. Just add
54
- it to your application's Gemfile, and it is automatically available in your
55
- views.
63
+ Require the gem like this in your Gemfile when using with Rails:
64
+
65
+ ```ruby
66
+ gem 'google-webfonts', require: 'google/webfonts/rails'
67
+ ```
56
68
 
57
- You will, however, need to `include Google::Webfonts::Helper` if you want to use
58
- it outside of a view.
69
+ The `google_webfonts_link_tag` helper method will automatically be available
70
+ to your views. If you need to use it outside of the views, include this module:
71
+
72
+ ```ruby
73
+ include Google::Webfonts::Helper
74
+ ```
59
75
 
60
76
  ### Using in Sinatra
61
77
 
62
78
  Here is a simple "Hello World" example for using Google::Webfonts in a Sinatra
63
79
  app:
64
80
 
65
- # app.rb
66
- require 'rubygems'
67
- require 'sinatra'
68
- require 'google-webfonts' # <= this must be required after 'sinatra'
69
-
70
- get '/' do
71
- erb :index
72
- end
81
+ ```ruby
82
+ # app.rb
83
+ require 'rubygems'
84
+ require 'sinatra'
85
+
86
+ # This must be required after requiring sinatra.
87
+ require 'google/webfonts/sinatra'
88
+
89
+ get '/' do
90
+ erb :index
91
+ end
92
+ ```
73
93
 
74
94
  ###
75
95
 
76
- # views/index.erb
77
- <html>
78
- <head>
79
- <%= google_webfonts_link_tag "Droid Sans" %>
80
- </head>
81
- <body>
82
- <p style="font-family: 'Droid+Sans', sans-serif;">
83
- Hello World!
84
- </p>
85
- </body>
86
- </html>
96
+ ```erb
97
+ # views/index.erb
98
+ <html>
99
+ <head>
100
+ <%= google_webfonts_link_tag "Droid Sans" %>
101
+ </head>
102
+ <body>
103
+ <p style="font-family: 'Droid+Sans', sans-serif;">
104
+ Hello World!
105
+ </p>
106
+ </body>
107
+ </html>
108
+ ```
109
+
110
+ ## Development
111
+
112
+ After checking out the repo, run `bin/setup` to install dependencies. Then,
113
+ run `rake test` to run the tests. You can also run `bin/console` for an
114
+ interactive prompt that will allow you to experiment.
115
+
116
+ To install this gem onto your local machine, run `bundle exec rake install`.
87
117
 
88
118
  ## Contributing
89
119
 
90
- 1. Fork it
91
- 2. Create your feature branch (`git checkout -b my-new-feature`)
92
- 3. Commit your changes (`git commit -am 'Added some feature'`)
93
- 4. Push to the branch (`git push origin my-new-feature`)
94
- 5. Ensure what your code is well tested, and all the tests pass. (`rspec spec`)
95
- 6. Create new Pull Request
120
+ Bug reports and pull requests are welcome on GitHub at
121
+ https://github.com/hi5dev/google-webfonts.
data/Rakefile CHANGED
@@ -1,9 +1,12 @@
1
- require "bundler/gem_tasks"
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/gem_tasks'
2
5
  require 'rake/testtask'
3
6
 
4
7
  Rake::TestTask.new do |t|
5
- t.libs << "test"
8
+ t.libs += %w[lib test]
6
9
  t.test_files = FileList['test/**/*_test.rb']
7
10
  end
8
11
 
9
- task :default => [:test]
12
+ task default: :test
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'google/webfonts'
5
+ require 'irb'
6
+
7
+ IRB.start(__FILE__)
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+ IFS=$'\n\t'
5
+ set -vx
6
+
7
+ bundle install
@@ -1,30 +1,34 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ # frozen_string_literal: true
3
+
4
+ lib = File.expand_path('lib', __dir__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'google-webfonts/version'
6
+
7
+ require 'google/webfonts/version'
5
8
 
6
9
  Gem::Specification.new do |spec|
7
- spec.name = "google-webfonts"
10
+ spec.name = 'google-webfonts'
8
11
  spec.version = Google::Webfonts::VERSION
9
- spec.authors = ["Travis Haynes"]
10
- spec.email = ["travis.j.haynes@gmail.com"]
11
-
12
- spec.summary = "Provides a helper for using Google Webfonts in Rails or " +
13
- "Sinatra, although it can be used outside of those " +
14
- "frameworks as well."
12
+ spec.authors = ['Travis Haynes']
13
+ spec.email = ['travis@hi5dev.com']
14
+ spec.homepage = 'https://github.com/hi5dev/google-webfonts.git'
15
+ spec.summary = 'Simplifies creating link tags for Google Webfonts.'
15
16
 
16
- spec.description = "Google Webfonts helper for Rails or Sinatra applications."
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |file|
18
+ file.match(%r{^(test)/})
19
+ end
17
20
 
18
- spec.homepage = "https://github.com/travishaynes/Google-Webfonts-Helper"
19
- spec.files = `git ls-files -z`.split("\x0")
20
- spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f) }
21
- spec.test_files = spec.files.grep(%r{^test/})
21
+ spec.bindir = 'exe'
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_runtime_dependency 'actionpack', '>= 3.0.0'
24
+ spec.executables = spec.files.grep(%r{^#{spec.bindir}/}) do |file|
25
+ File.basename(file)
26
+ end
25
27
 
26
- spec.add_development_dependency 'bundler', '>= 1.3.0', '< 2.0'
27
- spec.add_development_dependency 'rake'
28
- spec.add_development_dependency 'minitest', '~> 5.3.3'
29
- spec.add_development_dependency 'sinatra', '~> 1.3.2'
28
+ spec.add_development_dependency 'bundler', '~> 1.16'
29
+ spec.add_development_dependency 'minitest', '~> 5.0'
30
+ spec.add_development_dependency 'minitest-reporters', '~> 1.2'
31
+ spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'simplecov', '~> 0.16'
33
+ spec.add_development_dependency 'yard', '~> 0.9'
30
34
  end
@@ -1,22 +1,10 @@
1
- require 'uri'
2
- require 'action_view'
3
- require 'active_support/core_ext'
4
- require 'action_dispatch/http/mime_type'
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
5
3
 
6
- # Public: Module for Google helpers
7
- module Google
8
- # Public: Module for Google Webfonts helpers
9
- module Webfonts
10
- HOST = 'fonts.googleapis.com'
11
- PATH = '/css'
12
- end
13
- end
4
+ warn <<~TEXT
5
+ DEPRECATED: Requiring 'google-webfonts' has been deprecated since version
6
+ 0.3.0, and will be removed in a future version. Require 'google/webfonts'
7
+ instead.
8
+ TEXT
14
9
 
15
- require 'google-webfonts/version'
16
- require 'google-webfonts/link_tag'
17
- require 'google-webfonts/helper'
18
-
19
- require 'google-webfonts/sinatra' if defined? Sinatra
20
-
21
- # include the webfonts helper methods in the Rails view helpers
22
- ActionView::Base.send :include, Google::Webfonts::Helper
10
+ require 'google/webfonts'
@@ -1,3 +1,7 @@
1
- module Sinatra
2
- helpers Google::Webfonts::Helper
3
- end
1
+ warn <<~TEXT
2
+ DEPRECATED: Requiring 'google-webfonts/sinatra' has been deprecated since
3
+ version 0.3.0, and will be removed in a future version. Require
4
+ 'google/webfonts/sinatra' instead.
5
+ TEXT
6
+
7
+ require 'google/webfonts/sinatra'
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'cgi'
5
+ require 'uri'
6
+
7
+ module Google
8
+ module Webfonts
9
+ # The host name for the Google Webfonts CDN.
10
+ CDN_HOST = 'https://fonts.googleapis.com'
11
+
12
+ # The path name for the Google Webfonts on the CDN.
13
+ CDN_PATH = 'css'
14
+
15
+ # Auto load all of the subclasses.
16
+ autoload :Helper, 'google/webfonts/helper'
17
+ autoload :LinkTag, 'google/webfonts/link_tag'
18
+ autoload :VERSION, 'google/webfonts/version'
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ module Google
2
+ module Webfonts
3
+ # Provides a helper method for creating HTML link tags for fonts hosted
4
+ # on Google's Webfonts CDN.
5
+ module Helper
6
+ # Generates a Google Webfonts link tag.
7
+ #
8
+ # @example Fonts without options.
9
+ # google_webfonts_link_tag :droid_sans, :open_sans
10
+ #
11
+ # @example Strings can be used for font names.
12
+ # # :pt_sans would be converted to 'Pt+Sans' (lower-case t), which is
13
+ # # an invalid font name. Strings do not get titleized, so this font
14
+ # # name would require a string instead of a Symbol.
15
+ # google_webfonts_link_tag 'PT Sans'
16
+ #
17
+ # @example Specifying font weights.
18
+ # google_webfonts_link_tag droid_sans: %w[400 500 bold bolditalic]
19
+ #
20
+ # @param [Array<String, Symbol, Hash{String, Symbol => Array<String>}>]
21
+ # options Options for the fonts.
22
+ # @return [String] HTML with the <link> tag.
23
+ def google_webfonts_link_tag(*options)
24
+ # Do not create the link tag unless at least one font was given.
25
+ fail ArgumentError, 'expected at least one font' unless options.any?
26
+
27
+ # Create the HTML for the link tag.
28
+ Google::Webfonts::LinkTag.new(*options).to_s
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,153 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ module Google
5
+ module Webfonts
6
+ # Used to simplify creating <link> tags for Google's Webfonts CDN.
7
+ #
8
+ # @example
9
+ # tag = Google::Webfonts::LinkTag.new(:droid_sans => %w[400 500i])
10
+ # html = tag.to_s
11
+ class LinkTag
12
+ attr_reader :options
13
+
14
+ # Creates a new {Google::Webfonts::LinkTag} instance.
15
+ #
16
+ # @return [Google::Webfonts::LinkTag] The new {LinkTag} instance.
17
+ def initialize(*options)
18
+ @options = parse_options(options).freeze
19
+ end
20
+
21
+ # When making headers or display texts on your website, you'll often
22
+ # want to stylize your text in a decorative way. To simplify your work,
23
+ # Google has provided a collection of font effects that you can use
24
+ # with minimal effort to produce beautiful display text.
25
+ #
26
+ # To use feature, simply add an +effect:+ option when initializing the
27
+ # link tag. Then add the corresponding class name to the HTML element(s)
28
+ # that you want to affect.
29
+ #
30
+ # At the time that version 0.3.0 of this gem was released, this was a
31
+ # beta feature provided by Google.
32
+ #
33
+ # @see https://developers.google.com/fonts/docs/getting_started
34
+ # @return [Array<String>] Any effects to applied to the font.
35
+ def effect
36
+ options[:effect]
37
+ end
38
+
39
+ # Parses the options provided to the initializer into a list of font
40
+ # families.
41
+ #
42
+ # @return [String] The font family formatted for Google Webfont's API.
43
+ def family
44
+ @family ||= family_options.map do |font_name, font_options|
45
+ name = parse_font_name(font_name)
46
+
47
+ options = font_options.sort.uniq
48
+
49
+ options.any? ? "#{name}:#{options.join(',')}" : name
50
+ end.join('|')
51
+ end
52
+
53
+ # Creates the hypertext reference (URL) to the font.
54
+ #
55
+ # @return [URI] URL to the font on Google's CDN.
56
+ def href
57
+ # Return the cached value when present.
58
+ return @href unless @href.nil?
59
+
60
+ # Create a URI to Google's CDN.
61
+ uri = URI.join(Google::Webfonts::CDN_HOST, Google::Webfonts::CDN_PATH)
62
+
63
+ uri.query = "family=#{family}"
64
+
65
+ uri.query += "&text=#{CGI.escape(text.join)}" unless text.nil?
66
+
67
+ uri.query += "&effect=#{CGI.escape(effect.join(','))}" unless effect.nil?
68
+
69
+ @href = uri
70
+ end
71
+
72
+ # Oftentimes, when you want to use a web font on your website or
73
+ # application, you know in advance which letters you'll need. This
74
+ # often occurs when you're using a web font in a logo or heading.
75
+ #
76
+ # In these cases, you should consider specifying a text= value in your
77
+ # font request URL. This allows Google to return a font file that's
78
+ # optimized for your request. In some cases, this can reduce the size
79
+ # of the font file by up to 90%.
80
+ #
81
+ # At the time that version 0.3.0 of this gem was released, this was a
82
+ # beta feature provided by Google.
83
+ #
84
+ # @see https://developers.google.com/fonts/docs/getting_started
85
+ # @return [Array<String>] Which letters to include in the font.
86
+ def text
87
+ options[:text]
88
+ end
89
+
90
+ # Converts the link tag to HTML.
91
+ #
92
+ # @return [String] HTML for the link tag.
93
+ def to_s
94
+ %(<link href="#{href}" rel="stylesheet">)
95
+ end
96
+
97
+ private
98
+
99
+ # Extracts the options for the font families.
100
+ #
101
+ # @return [Hash{String, Symbol => Array<Integer, String>}] The families.
102
+ def family_options
103
+ options.reject {|k,_| %i[effect text].include?(k) }
104
+ end
105
+
106
+ # Converts the Ruby-friendly font name provided to the initializer to a
107
+ # URL-encoded font name that Google's CDN will recognize.
108
+ #
109
+ # @param [String, Symbol] font_name The given font name.
110
+ # @return [String] A URI-encoded key name.
111
+ def parse_font_name(font_name)
112
+ # Strings only get URI-encoded.
113
+ return CGI.escape(font_name) if font_name.is_a?(String)
114
+
115
+ # Convert the font name into an array of its words.
116
+ words = "#{font_name}".split('_')
117
+
118
+ # Capitalize each word in the font name.
119
+ words.map!(&:capitalize)
120
+
121
+ # Convert back to a String, joined by spaces instead of underscores.
122
+ font_name = words.join(' ')
123
+
124
+ # URI-encode the font name.
125
+ CGI.escape(font_name)
126
+ end
127
+
128
+ # Parses the options given to the initializer into a Hash.
129
+ #
130
+ # @return [Hash{String, Symbol => Array}] Options for the LinkTag.
131
+ def parse_options(options)
132
+ {}.tap do |parsed|
133
+ options.each { |opt| parse_option(opt, parsed) }
134
+ end
135
+ end
136
+
137
+ # @param [Hash, String, Symbol] opt
138
+ # @param [Hash] parsed
139
+ # @return [Array<String, Array>]
140
+ # @raise [ArgumentError] If an option cannot be parsed.
141
+ def parse_option(opt, parsed)
142
+ # Font names without options are converted to names with empty options.
143
+ return parsed[opt] = [] if opt.is_a?(String) || opt.is_a?(Symbol)
144
+
145
+ # Add any option in a Hash, ensuring that its value is an Array.
146
+ return opt.each { |k, v| parsed[k] = Array(v) } if opt.is_a?(Hash)
147
+
148
+ # Reject unknown arguments.
149
+ fail ArgumentError, "invalid argument: #{opt.inspect}", caller
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,8 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ # Load the library.
5
+ require 'google/webfonts'
6
+
7
+ # Include the webfonts helper methods in the Rails view helpers.
8
+ ActionView::Base.include(Google::Webfonts::Helper)
@@ -0,0 +1,8 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ # Load the library.
5
+ require 'google/webfonts'
6
+
7
+ # Add the Google Webfonts helper to Sinatra.
8
+ Sinatra.helpers(Google::Webfonts::Helper)
@@ -0,0 +1,9 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ module Google
5
+ module Webfonts
6
+ # The gem's semantic version.
7
+ VERSION = '0.3.0'
8
+ end
9
+ end
metadata CHANGED
@@ -1,115 +1,124 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-webfonts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Travis Haynes
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2014-04-17 00:00:00.000000000 Z
11
+ date: 2018-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: actionpack
14
+ name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.0
20
- type: :runtime
19
+ version: '1.16'
20
+ type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.0.0
26
+ version: '1.16'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3.0
34
- - - <
35
- - !ruby/object:Gem::Version
36
- version: '2.0'
33
+ version: '5.0'
37
34
  type: :development
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - '>='
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-reporters
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
42
46
  - !ruby/object:Gem::Version
43
- version: 1.3.0
44
- - - <
47
+ version: '1.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
45
53
  - !ruby/object:Gem::Version
46
- version: '2.0'
54
+ version: '1.2'
47
55
  - !ruby/object:Gem::Dependency
48
56
  name: rake
49
57
  requirement: !ruby/object:Gem::Requirement
50
58
  requirements:
51
- - - '>='
59
+ - - "~>"
52
60
  - !ruby/object:Gem::Version
53
- version: '0'
61
+ version: '10.0'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
65
  requirements:
58
- - - '>='
66
+ - - "~>"
59
67
  - !ruby/object:Gem::Version
60
- version: '0'
68
+ version: '10.0'
61
69
  - !ruby/object:Gem::Dependency
62
- name: minitest
70
+ name: simplecov
63
71
  requirement: !ruby/object:Gem::Requirement
64
72
  requirements:
65
- - - ~>
73
+ - - "~>"
66
74
  - !ruby/object:Gem::Version
67
- version: 5.3.3
75
+ version: '0.16'
68
76
  type: :development
69
77
  prerelease: false
70
78
  version_requirements: !ruby/object:Gem::Requirement
71
79
  requirements:
72
- - - ~>
80
+ - - "~>"
73
81
  - !ruby/object:Gem::Version
74
- version: 5.3.3
82
+ version: '0.16'
75
83
  - !ruby/object:Gem::Dependency
76
- name: sinatra
84
+ name: yard
77
85
  requirement: !ruby/object:Gem::Requirement
78
86
  requirements:
79
- - - ~>
87
+ - - "~>"
80
88
  - !ruby/object:Gem::Version
81
- version: 1.3.2
89
+ version: '0.9'
82
90
  type: :development
83
91
  prerelease: false
84
92
  version_requirements: !ruby/object:Gem::Requirement
85
93
  requirements:
86
- - - ~>
94
+ - - "~>"
87
95
  - !ruby/object:Gem::Version
88
- version: 1.3.2
89
- description: Google Webfonts helper for Rails or Sinatra applications.
96
+ version: '0.9'
97
+ description:
90
98
  email:
91
- - travis.j.haynes@gmail.com
99
+ - travis@hi5dev.com
92
100
  executables: []
93
101
  extensions: []
94
102
  extra_rdoc_files: []
95
103
  files:
96
- - .gitignore
104
+ - ".gitignore"
97
105
  - Gemfile
106
+ - Gemfile.lock
98
107
  - LICENSE
99
108
  - README.md
100
109
  - Rakefile
110
+ - bin/console
111
+ - bin/setup
101
112
  - google-webfonts.gemspec
102
113
  - lib/google-webfonts.rb
103
- - lib/google-webfonts/helper.rb
104
- - lib/google-webfonts/link_tag.rb
105
114
  - lib/google-webfonts/sinatra.rb
106
- - lib/google-webfonts/version.rb
107
- - test/lib/google-webfonts/helper_test.rb
108
- - test/lib/google-webfonts/link_tag_test.rb
109
- - test/lib/google-webfonts/sinatra_test.rb
110
- - test/lib/google-webfonts_test.rb
111
- - test/test_helper.rb
112
- homepage: https://github.com/travishaynes/Google-Webfonts-Helper
115
+ - lib/google/webfonts.rb
116
+ - lib/google/webfonts/helper.rb
117
+ - lib/google/webfonts/link_tag.rb
118
+ - lib/google/webfonts/rails.rb
119
+ - lib/google/webfonts/sinatra.rb
120
+ - lib/google/webfonts/version.rb
121
+ homepage: https://github.com/hi5dev/google-webfonts.git
113
122
  licenses: []
114
123
  metadata: {}
115
124
  post_install_message:
@@ -118,24 +127,18 @@ require_paths:
118
127
  - lib
119
128
  required_ruby_version: !ruby/object:Gem::Requirement
120
129
  requirements:
121
- - - '>='
130
+ - - ">="
122
131
  - !ruby/object:Gem::Version
123
132
  version: '0'
124
133
  required_rubygems_version: !ruby/object:Gem::Requirement
125
134
  requirements:
126
- - - '>='
135
+ - - ">="
127
136
  - !ruby/object:Gem::Version
128
137
  version: '0'
129
138
  requirements: []
130
139
  rubyforge_project:
131
- rubygems_version: 2.2.1
140
+ rubygems_version: 2.7.3
132
141
  signing_key:
133
142
  specification_version: 4
134
- summary: Provides a helper for using Google Webfonts in Rails or Sinatra, although
135
- it can be used outside of those frameworks as well.
136
- test_files:
137
- - test/lib/google-webfonts/helper_test.rb
138
- - test/lib/google-webfonts/link_tag_test.rb
139
- - test/lib/google-webfonts/sinatra_test.rb
140
- - test/lib/google-webfonts_test.rb
141
- - test/test_helper.rb
143
+ summary: Simplifies creating link tags for Google Webfonts.
144
+ test_files: []
@@ -1,44 +0,0 @@
1
- module Google
2
- module Webfonts
3
-
4
- # Public: Helper module that includes the google_webfonts_link_tag method.
5
- # This module is automatically included in your Rails view helpers.
6
- module Helper
7
- # Public: Generates a Google Webfonts link tag
8
- #
9
- # If you need to specify a font size, use a Hash. Symbols will be
10
- # titleized, so if the font you're using uses a specialized case
11
- # (e.g: "PT Sans"), then you'll need to use a String.
12
- #
13
- # You can specify subsets by using the :subset option. Note that this must
14
- # be a Symbol. "Subset" and "subset" would be turned into a font.
15
- #
16
- # options - The font options. This can be a String, Symbol, or Hash, or
17
- # a combination of all three.
18
- #
19
- # Examples
20
- #
21
- # google_webfonts_link_tag "PT Sans"
22
- #
23
- # google_webfonts_link_tag :droid_sans
24
- #
25
- # google_webfonts_link_tag droid_sans: [400, 700]
26
- #
27
- # google_webfonts_link_tag droid_sans: [400, 700],
28
- # yanone_kaffeesatz: 700
29
- #
30
- # google_webfonts_link_tag :droid_sans,
31
- # yanone_kaffeesatz: 400,
32
- # "PT Sans" => [400, 700]
33
- #
34
- # google_webfonts_link_tag :droid_sans, subset: %w[latin cyrillic]
35
- #
36
- # Returns a <link> tag for the Google Webfonts stylesheet.
37
- # Raises ArgumentError if no options are passed.
38
- def google_webfonts_link_tag(*opts)
39
- raise ArgumentError, 'expected at least one font', caller if opts.empty?
40
- LinkTag.new(request, *opts).result
41
- end
42
- end
43
- end
44
- end
@@ -1,68 +0,0 @@
1
- module Google
2
- module Webfonts
3
- class LinkTag
4
- include ActionView::Helpers::TagHelper
5
-
6
- attr_reader :result
7
-
8
- alias_method :to_s, :result
9
-
10
- def initialize(request, *opts)
11
- @request = request
12
- @subsets = []
13
- @fonts = fonts_from_options(opts)
14
- @result = tag(:link, link_options, false, false)
15
- end
16
-
17
- private
18
-
19
- def fonts_from_options(opts)
20
- opts.map {|option| parse_google_webfont_option(option) }.flatten
21
- end
22
-
23
- def parse_google_webfont_option(option)
24
- case option
25
- when Symbol, String then parse_google_webfont_name(option)
26
- when Hash then parse_google_webfont_hash(option)
27
- else ""
28
- end
29
- end
30
-
31
- def parse_google_webfont_hash(hash)
32
- add_subsets(hash.delete(:subset))
33
-
34
- hash.inject([]) do |result, (font_name, sizes)|
35
- font_name = parse_google_webfont_name(font_name)
36
- result << "#{font_name}:#{Array(sizes).join(",")}"
37
- end
38
- end
39
-
40
- def parse_google_webfont_name(name)
41
- name = name.to_s.titleize if name.is_a?(Symbol)
42
- name.gsub("_", " ")
43
- end
44
-
45
- def link_options
46
- { rel: 'stylesheet',
47
- type: Mime::CSS,
48
- href: uri.to_s }
49
- end
50
-
51
- def add_subsets(subsets)
52
- @subsets += Array(subsets)
53
- end
54
-
55
- def uri
56
- u = @request.ssl? ? URI::HTTPS : URI::HTTP
57
- u.build(host: HOST, path: PATH, query: uri_query)
58
- end
59
-
60
- def uri_query
61
- {}.tap {|q|
62
- q['family'] = @fonts.join("|")
63
- q['subset'] = @subsets.join(",") if @subsets.any?
64
- }.to_query
65
- end
66
- end
67
- end
68
- end
@@ -1,6 +0,0 @@
1
- module Google
2
- module Webfonts
3
- # Public: Current version of the gem
4
- VERSION = "0.2.0"
5
- end
6
- end
@@ -1,21 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Google
4
- module Webfonts
5
- class HelperTest < Minitest::Test
6
- include Helper
7
-
8
- def test_google_webfonts_link_tag
9
- options = { droid_sans: [400, 700] }
10
- link_tag = LinkTag.new(request, options)
11
- assert_equal link_tag.result, google_webfonts_link_tag(options)
12
- end
13
-
14
- private
15
-
16
- def request
17
- OpenStruct.new(:ssl? => false)
18
- end
19
- end
20
- end
21
- end
@@ -1,52 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Google
4
- module Webfonts
5
- class LinkTagTest < Minitest::Test
6
- def setup
7
- @http_request = OpenStruct.new(:ssl? => false)
8
- @https_request = OpenStruct.new(:ssl? => true)
9
- end
10
-
11
- def test_subsets
12
- tag = LinkTag.new(@http_request, droid_sans: [400, 700],
13
- subset: %w[latin cyrillic]).result
14
- assert_tag tag, 'link',
15
- href: 'http://fonts.googleapis.com/css?family=Droid+Sans%3A400%2C700&subset=latin%2Ccyrillic'
16
- end
17
-
18
- def test_uri_protocol
19
- tag = LinkTag.new(@http_request, droid_sans: [400, 700]).result
20
- assert_tag tag, 'link',
21
- href: 'http://fonts.googleapis.com/css?family=Droid+Sans%3A400%2C700'
22
-
23
- tag = LinkTag.new(@https_request, droid_sans: [400, 700]).result
24
- assert_tag tag, 'link',
25
- href: 'https://fonts.googleapis.com/css?family=Droid+Sans%3A400%2C700'
26
- end
27
-
28
- def test_with_font_sizes
29
- tag = LinkTag.new(@http_request, droid_sans: [400, 700]).result
30
- assert_tag tag, 'link',
31
- href: 'http://fonts.googleapis.com/css?family=Droid+Sans%3A400%2C700'
32
-
33
- tag = LinkTag.new(@http_request, droid_sans: [400, 700],
34
- 'PT Sans' => [400, 700]).result
35
- assert_tag tag, 'link',
36
- href: 'http://fonts.googleapis.com/css?family=Droid+Sans%3A400%2C700%7CPT+Sans%3A400%2C700'
37
- end
38
-
39
- def test_strings_are_not_titleized
40
- tag = LinkTag.new(@http_request, 'PT Sans').result
41
- assert_tag tag, 'link',
42
- href: 'http://fonts.googleapis.com/css?family=PT+Sans'
43
- end
44
-
45
- def test_symbols_are_titleized
46
- tag = LinkTag.new(@http_request, :droid_sans).result
47
- assert_tag tag, 'link',
48
- href: 'http://fonts.googleapis.com/css?family=Droid+Sans'
49
- end
50
- end
51
- end
52
- end
@@ -1,25 +0,0 @@
1
- require 'test_helper'
2
-
3
- # create a Sinatra route for testing
4
- get("/") { google_webfonts_link_tag droid_sans: [400, 700] }
5
-
6
- class SinatraTest < Minitest::Test
7
- include Rack::Test::Methods
8
-
9
- def app
10
- Sinatra::Application
11
- end
12
-
13
- def test_google_webfonts_link_tag_helper_loaded_in_sinatra
14
- get "/"
15
- options = { droid_sans: [400, 700] }
16
- link_tag = Google::Webfonts::LinkTag.new(request, options)
17
- assert_equal link_tag.result, last_response.body
18
- end
19
-
20
- private
21
-
22
- def request
23
- OpenStruct.new(:ssl? => false)
24
- end
25
- end
@@ -1,11 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Google::WebfontsTest < Minitest::Test
4
- def test_helper_is_included_in_action_view_base
5
- assert ActionView::Base.ancestors.include?(Google::Webfonts::Helper)
6
- end
7
-
8
- def test_helper_is_included_in_sinatra
9
- assert Sinatra::Application.ancestors.include?(Google::Webfonts::Helper)
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- ENV['RACK_ENV'] = 'test'
2
-
3
- require 'ostruct'
4
- require 'sinatra'
5
- require 'google-webfonts'
6
- require 'minitest/autorun'
7
- require 'minitest/unit'
8
- require 'rack/test'
9
-
10
- class Minitest::Test
11
- def assert_tag(el, tag, props={})
12
- assert el =~ /<#{tag}.*\/>/ , "expected a #{tag} tag"
13
- assert props.all? {|key, value| el.include?("#{key}=\"#{value}\"") },
14
- "tag's properties do not match"
15
- end
16
- end