google-webfonts 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f25bcacd54d5215e32e042a398f6d509b8f12aaa
4
+ data.tar.gz: fdfdaf3395363ef350b76db9b011e7c15520f606
5
+ SHA512:
6
+ metadata.gz: bd56576397bf306107d3d52fd73383d37df8bb739bb43bfce026f066487bd18c873bdeadbafd6b4bb0a9cdaaab6e5e5bde1464be588f1669eeaf265d47901626
7
+ data.tar.gz: b73db19e8b453ec28bcbd102495bcb56dda24627b1d56715489f0ab6fe53b482aea2f6317035da7096726ea40dc0b303eb6c3adcf7411e0f529d9acc46c19f46
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .ruby-version
data/README.md CHANGED
@@ -70,7 +70,9 @@ app:
70
70
  get '/' do
71
71
  erb :index
72
72
  end
73
-
73
+
74
+ ###
75
+
74
76
  # views/index.erb
75
77
  <html>
76
78
  <head>
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
- #!/usr/bin/env rake
2
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/**/*_test.rb']
7
+ end
8
+
9
+ task :default => [:test]
@@ -1,26 +1,30 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/google-webfonts/version', __FILE__)
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'google-webfonts/version'
3
5
 
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["Travis Haynes"]
6
- gem.email = ["travis.j.haynes@gmail.com"]
7
-
8
- gem.description = "Google Webfonts helper for Rails or Sinatra applications."
9
- gem.summary = %q{Provides a helper for using Google Webfonts in Rails or
10
- Sinatra, although it can be used outside of those frameworks as well.}
11
-
12
- gem.homepage = "https://github.com/travishaynes/Google-Webfonts-Helper"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "google-webfonts"
8
+ spec.version = Google::Webfonts::VERSION
9
+ spec.authors = ["Travis Haynes"]
10
+ spec.email = ["travis.j.haynes@gmail.com"]
13
11
 
14
- gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
- gem.files = `git ls-files`.split("\n")
16
- gem.test_files = `git ls-files -- {spec}/*`.split("\n")
17
- gem.name = "google-webfonts"
18
- gem.require_paths = ["lib"]
19
- gem.version = Google::Webfonts::VERSION
20
-
21
- gem.add_runtime_dependency 'actionpack', '>= 3.0.0'
22
-
23
- gem.add_development_dependency 'rspec', '~> 2.8.0'
24
- gem.add_development_dependency 'yard-tomdoc', '~> 0.4.0'
25
- gem.add_development_dependency 'sinatra', '~> 1.3.2'
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."
15
+
16
+ spec.description = "Google Webfonts helper for Rails or Sinatra applications."
17
+
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/})
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_runtime_dependency 'actionpack', '>= 3.0.0'
25
+
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'
26
30
  end
@@ -1,14 +1,20 @@
1
- require "action_view"
1
+ require 'uri'
2
+ require 'action_view'
3
+ require 'active_support/core_ext'
4
+ require 'action_dispatch/http/mime_type'
2
5
 
3
6
  # Public: Module for Google helpers
4
7
  module Google
5
8
  # Public: Module for Google Webfonts helpers
6
9
  module Webfonts
10
+ HOST = 'fonts.googleapis.com'
11
+ PATH = '/css'
7
12
  end
8
13
  end
9
14
 
10
- require "google-webfonts/version"
11
- require "google-webfonts/helper"
15
+ require 'google-webfonts/version'
16
+ require 'google-webfonts/link_tag'
17
+ require 'google-webfonts/helper'
12
18
 
13
19
  require 'google-webfonts/sinatra' if defined? Sinatra
14
20
 
@@ -1,100 +1,44 @@
1
1
  module Google
2
2
  module Webfonts
3
-
3
+
4
4
  # Public: Helper module that includes the google_webfonts_link_tag method.
5
5
  # This module is automatically included in your Rails view helpers.
6
6
  module Helper
7
- include ActionView::Helpers::TagHelper
8
-
9
7
  # Public: Generates a Google Webfonts link tag
10
- #
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
+ #
11
16
  # options - The font options. This can be a String, Symbol, or Hash, or
12
- # a combination of all three. If you need to specify a font
13
- # size, use a Hash, otherwise a String or Symbol will work.
17
+ # a combination of all three.
14
18
  #
15
19
  # Examples
16
20
  #
17
- # google_webfonts_link_tag "Droid Sans"
18
- # # => '<link href="http://fonts.googleapis.com/css?family=Droid+Sans" rel="stylesheet" type="text/css" />'
19
- #
21
+ # google_webfonts_link_tag "PT Sans"
22
+ #
20
23
  # google_webfonts_link_tag :droid_sans
21
- # # => '<link href="http://fonts.googleapis.com/css?family=Droid+Sans" rel="stylesheet" type="text/css" />'
22
- #
23
- # google_webfonts_link_tag :droid_sans => [400, 700]
24
- # # => '<link href="http://fonts.googleapis.com/css?family=Droid+Sans:400,700" rel="stylesheet" type="text/css" />'
25
- #
26
- # google_webfonts_link_tag :droid_sans => [400, 700],
27
- # :yanone_kaffeesatz => [300, 400]
28
- # # => '<link href="http://fonts.googleapis.com/css?family=Droid+Sans:400,700|Yanone+Kaffeesatz:300,400" rel="stylesheet" type="text/css" />'
29
- #
30
- # google_webfonts_link_tag "Droid Sans",
31
- # :yanone_kaffeesatz => 400
32
- # # => '<link href="http://fonts.googleapis.com/css?family=Droid+Sans|Yanone+Kaffeesatz:400" rel="stylesheet" type="text/css" />'
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]
33
35
  #
34
36
  # Returns a <link> tag for the Google Webfonts stylesheet.
35
37
  # Raises ArgumentError if no options are passed.
36
- # Raises ArgumentError if an option is not a Symbol, String, or Hash.
37
- # Raises ArgumentError if a size is not a String or Fixnum.
38
- def google_webfonts_link_tag(*options)
39
- raise ArgumentError, "expected at least one font" if options.empty?
40
-
41
- fonts = []
42
-
43
- options.each do |option|
44
- case option.class.to_s
45
- when "Symbol", "String"
46
- # titleize the font name
47
- font_name = option.to_s.titleize
48
-
49
- # replace any spaces with pluses
50
- font_name = font_name.gsub(" ", "+")
51
-
52
- # include the font
53
- fonts << font_name
54
- when "Hash"
55
- fonts += option.inject([]) do |result, (font_name, sizes)|
56
- # ensure sizes is an Array
57
- sizes = Array(sizes)
58
-
59
- sizes.all? do |size|
60
- unless size.class == Fixnum || size.class == String
61
- raise ArgumentError, "expected a Fixnum or String, got a #{size.class}"
62
- end
63
- end
64
-
65
- # convert font name into a String
66
- font_name = font_name.to_s
67
-
68
- # replace underscores with spaces
69
- # and titleize the font name
70
- font_name = font_name.gsub("_", " ")
71
- font_name = font_name.titleize
72
-
73
- # convert the spaces into pluses
74
- font_name = font_name.gsub(" ", "+")
75
-
76
- # return font_name:sizes where
77
- # sizes is a comma separated list
78
- result << "#{font_name}:#{sizes.join(",")}"
79
- end
80
- else
81
- raise ArgumentError, "expected a String, Symbol, or a Hash, got a #{option.class}"
82
- end
83
- end
84
-
85
- # the fonts are separated by pipes
86
- family = fonts.join("|")
87
-
88
- # return the link tag
89
- tag 'link', {
90
- :rel => :stylesheet,
91
- :type => Mime::CSS,
92
- :href => "http://fonts.googleapis.com/css?family=#{family}"
93
- },
94
- false,
95
- false
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
96
41
  end
97
42
  end
98
-
99
43
  end
100
44
  end
@@ -0,0 +1,68 @@
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 +1,6 @@
1
1
  module Google
2
2
  module Webfonts
3
3
  # Public: Current version of the gem
4
- VERSION = "0.1.2"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,52 @@
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
@@ -0,0 +1,25 @@
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
@@ -0,0 +1,11 @@
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
@@ -0,0 +1,16 @@
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
metadata CHANGED
@@ -1,60 +1,91 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-webfonts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Travis Haynes
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-03-25 00:00:00.000000000 Z
11
+ date: 2014-04-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: actionpack
16
- requirement: &17626300 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: 3.0.0
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *17626300
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
25
27
  - !ruby/object:Gem::Dependency
26
- name: rspec
27
- requirement: &17625580 !ruby/object:Gem::Requirement
28
- none: false
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ~>
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.0
34
+ - - <
35
+ - !ruby/object:Gem::Version
36
+ version: '2.0'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.3.0
44
+ - - <
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - '>='
31
52
  - !ruby/object:Gem::Version
32
- version: 2.8.0
53
+ version: '0'
33
54
  type: :development
34
55
  prerelease: false
35
- version_requirements: *17625580
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
36
61
  - !ruby/object:Gem::Dependency
37
- name: yard-tomdoc
38
- requirement: &17624820 !ruby/object:Gem::Requirement
39
- none: false
62
+ name: minitest
63
+ requirement: !ruby/object:Gem::Requirement
40
64
  requirements:
41
65
  - - ~>
42
66
  - !ruby/object:Gem::Version
43
- version: 0.4.0
67
+ version: 5.3.3
44
68
  type: :development
45
69
  prerelease: false
46
- version_requirements: *17624820
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ version: 5.3.3
47
75
  - !ruby/object:Gem::Dependency
48
76
  name: sinatra
49
- requirement: &17624100 !ruby/object:Gem::Requirement
50
- none: false
77
+ requirement: !ruby/object:Gem::Requirement
51
78
  requirements:
52
79
  - - ~>
53
80
  - !ruby/object:Gem::Version
54
81
  version: 1.3.2
55
82
  type: :development
56
83
  prerelease: false
57
- version_requirements: *17624100
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.2
58
89
  description: Google Webfonts helper for Rails or Sinatra applications.
59
90
  email:
60
91
  - travis.j.haynes@gmail.com
@@ -63,7 +94,6 @@ extensions: []
63
94
  extra_rdoc_files: []
64
95
  files:
65
96
  - .gitignore
66
- - .rspec
67
97
  - Gemfile
68
98
  - LICENSE
69
99
  - README.md
@@ -71,37 +101,41 @@ files:
71
101
  - google-webfonts.gemspec
72
102
  - lib/google-webfonts.rb
73
103
  - lib/google-webfonts/helper.rb
104
+ - lib/google-webfonts/link_tag.rb
74
105
  - lib/google-webfonts/sinatra.rb
75
106
  - lib/google-webfonts/version.rb
76
- - spec/google-webfonts/helper_spec.rb
77
- - spec/google-webfonts/sinatra_spec.rb
78
- - spec/google-webfonts/version_spec.rb
79
- - spec/google-webfonts_spec.rb
80
- - spec/spec_helper.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
81
112
  homepage: https://github.com/travishaynes/Google-Webfonts-Helper
82
113
  licenses: []
114
+ metadata: {}
83
115
  post_install_message:
84
116
  rdoc_options: []
85
117
  require_paths:
86
118
  - lib
87
119
  required_ruby_version: !ruby/object:Gem::Requirement
88
- none: false
89
120
  requirements:
90
- - - ! '>='
121
+ - - '>='
91
122
  - !ruby/object:Gem::Version
92
123
  version: '0'
93
124
  required_rubygems_version: !ruby/object:Gem::Requirement
94
- none: false
95
125
  requirements:
96
- - - ! '>='
126
+ - - '>='
97
127
  - !ruby/object:Gem::Version
98
128
  version: '0'
99
129
  requirements: []
100
130
  rubyforge_project:
101
- rubygems_version: 1.8.10
131
+ rubygems_version: 2.2.1
102
132
  signing_key:
103
- specification_version: 3
133
+ specification_version: 4
104
134
  summary: Provides a helper for using Google Webfonts in Rails or Sinatra, although
105
135
  it can be used outside of those frameworks as well.
106
- test_files: []
107
- has_rdoc:
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
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --colour
@@ -1,126 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Google::Webfonts::Helper do
4
- include Google::Webfonts::Helper
5
-
6
- def validate(tag, family)
7
- # should be a link tag
8
- tag.should =~ /<link.*\/>/
9
-
10
- # should include an href to the google webfonts api
11
- tag.should =~ /href="http:\/\/fonts.googleapis.com\/css\?family=/
12
-
13
- # should be a stylesheet
14
- tag.should =~ /rel="stylesheet"/
15
-
16
- # should be text/css
17
- tag.should =~ /type="text\/css"/
18
-
19
- # should include the expected font-family
20
- tag.should =~ /#{family}/
21
- end
22
-
23
- describe "#google_webfonts_link_tag" do
24
-
25
- context "with no arguments" do
26
- it "should raise ArgumentError" do
27
- expect { google_webfonts_link_tag }.to raise_error ArgumentError
28
- end
29
- end
30
-
31
- context "with something other than a String, Symbol, or Hash" do
32
- it "should raise ArgumentError" do
33
- expect { google_webfonts_link_tag(1) }.to raise_error ArgumentError
34
- end
35
- end
36
-
37
- context "when a size is something other than a String, or Fixnum" do
38
- it "should raise ArgumentError" do
39
- expect { google_webfonts_link_tag(:font => [:symbol]) }.to raise_error ArgumentError
40
- end
41
- end
42
-
43
- specify "with 1 font as a String" do
44
- validate google_webfonts_link_tag("hello"), "Hello"
45
- end
46
-
47
- specify "with 1 font as a Symbol" do
48
- validate google_webfonts_link_tag(:hello), "Hello"
49
- end
50
-
51
- specify "with multiple fonts as Strings" do
52
- validate google_webfonts_link_tag("hello", "world"), "Hello|World"
53
- end
54
-
55
- specify "with multiple fonts as a combination of Strings and Symbols" do
56
- validate google_webfonts_link_tag("hello", :world), "Hello|World"
57
- end
58
-
59
- context "with a Hash and 1 font name" do
60
- context "with a Symbol as the key" do
61
- specify "with 1 font size" do
62
- validate google_webfonts_link_tag(:hello => 100), "Hello:100"
63
- end
64
-
65
- specify "with 2 font sizes" do
66
- validate google_webfonts_link_tag(:hello => [100, 200]), "Hello:100,200"
67
- end
68
- end
69
-
70
- context "with a String as the key" do
71
- specify "with 1 font size" do
72
- validate google_webfonts_link_tag("hello" => 100), "Hello:100"
73
- end
74
-
75
- specify "with 2 font sizes" do
76
- validate google_webfonts_link_tag("hello" => [100, 200]), "Hello:100,200"
77
- end
78
- end
79
- end
80
-
81
- context "with a Hash and 2 font names" do
82
- context "with a Symbol as the key" do
83
- specify "with 1 font size" do
84
- validate google_webfonts_link_tag(:hello => 100, :world => 200), "Hello:100|World:200"
85
- end
86
-
87
- specify "with 2 font sizes" do
88
- validate google_webfonts_link_tag(:hello => [100, 200], :world => [300, 400]), "Hello:100,200|World:300,400"
89
- end
90
- end
91
-
92
- context "with a String as the key" do
93
- specify "with 1 font size" do
94
- validate google_webfonts_link_tag("hello" => 100, "world" => 200), "Hello:100|World:200"
95
- end
96
-
97
- specify "with 2 font sizes" do
98
- validate google_webfonts_link_tag("hello" => [100, 200], "world" => [300, 400]), "Hello:100,200|World:300,400"
99
- end
100
- end
101
- end
102
-
103
- context "when the font name includes an underscore" do
104
- it "should convert the underscore to a +" do
105
- validate google_webfonts_link_tag(:droid_sans => [400, 700]), 'Droid\+Sans:400,700'
106
- end
107
- end
108
-
109
- context "when the font name includes a space" do
110
- it "should conver the space to a +" do
111
- validate google_webfonts_link_tag("Droid Sans" => [400, 700]), 'Droid\+Sans:400,700'
112
- end
113
- end
114
-
115
- context "with a combination of all acceptable values" do
116
- it "should validate" do
117
- validate google_webfonts_link_tag(
118
- :font1, "font2", :font_3, "Font 4",
119
- :font_5 => 100,
120
- "font_6" => [200, 300]
121
- ), 'Font1|Font2|Font\+3|Font\+4|Font\+5:100|Font\+6:200,300'
122
- end
123
- end
124
- end
125
-
126
- end
@@ -1,23 +0,0 @@
1
- # set up a Sinatra route to test
2
- get("/") { google_webfonts_link_tag "Droid Sans" }
3
-
4
- describe "Sinatra" do
5
- include Rack::Test::Methods
6
-
7
- def app
8
- Sinatra::Application
9
- end
10
-
11
- it "should include Google::Webfonts::Helper in Sinatra::Application" do
12
- Sinatra::Application.ancestors.should include Google::Webfonts::Helper
13
- end
14
-
15
- it "should respond to google_webfonts_link_tag" do
16
- tag = "<link href=\"http://fonts.googleapis.com/css?family=Droid+Sans\" rel=\"stylesheet\" type=\"text/css\" />"
17
-
18
- get "/"
19
-
20
- last_response.should be_ok
21
- last_response.body.should eq tag
22
- end
23
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Google::Webfonts::VERSION do
4
- it "should be version 0.1.2" do
5
- Google::Webfonts::VERSION.should eq "0.1.2"
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Google::Webfonts do
4
- it "should include Helper in ActionView::Base" do
5
- ActionView::Base.ancestors.should include Google::Webfonts::Helper
6
- end
7
- end
@@ -1,3 +0,0 @@
1
- require 'rubygems'
2
- require 'sinatra'
3
- require "google-webfonts"