styleguide-api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 07294314006ad4217991f4b26ff1040cbe0fb67b
4
+ data.tar.gz: 8b0b554d67165c9b4ccd49f79bbcee5431ab3399
5
+ SHA512:
6
+ metadata.gz: c2795266f07d5a29c4a31df12f769f95b42924c94db9316143de48e360b71bb9daadde920156c1427c8d388891711416d25110ec5ef064d1ff1ba609e4ac70b1
7
+ data.tar.gz: 029fb948f604ac22484b7ae9eb8dd11b1df98171b4cc42a5f08936acbe1fab33258e5a43448a66bc93f6e50750a06682a07764808fbf47c5a665ab9f195cb6e2
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ # v0.1.0
4
+
5
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem’s dependencies in styleguide-api.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Nico Hagenburger
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
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.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # Style Guide API
2
+
3
+ TODO: Write a gem description
4
+
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application’s Gemfile:
9
+
10
+ ``` ruby
11
+ gem "styleguide-api"
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install styleguide-api
21
+
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+
28
+ ## Contributing
29
+
30
+ 1. Fork it ( https://github.com/livingstyleguide/styleguide-api/fork )
31
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
32
+ 3. Commit your changes (`git commit -am "Add some feature"`)
33
+ 4. Push to the branch (`git push origin my-new-feature`)
34
+ 5. Create a new Pull Request
35
+
36
+
37
+ ## Copyright
38
+
39
+ Copyright 2015 [Nico Hagenburger](http://www.hagenburger.net).
40
+ Released under [MIT License](LICENSE.txt).
41
+ Get in touch with [@hagenburger](http://twitter.com/hagenburger) on Twitter or [open an issue](https://github.com/livingstyleguide/styleguide-api/issues/new).
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require "rake/testtask"
4
+
5
+ Rake::TestTask.new :test do |t|
6
+ t.libs << "lib"
7
+ t.libs << "test"
8
+ t.test_files = FileList["test/**/*_test.rb"]
9
+ t.verbose = true
10
+ end
11
+
12
+ task default: [:test]
@@ -0,0 +1,99 @@
1
+ require "styleguide-api/version"
2
+ require "styleguide-api/helpers"
3
+ require "tilt"
4
+ require "open-uri"
5
+ require "json"
6
+
7
+ module StyleGuideAPI
8
+ class << self
9
+ attr_accessor :live
10
+ attr_accessor :theme
11
+ end
12
+
13
+ def self.initialize
14
+ @live = false
15
+ @templates = {}
16
+ @template_paths = {}
17
+ @data = nil
18
+ @theme = nil
19
+ @stylesheets = {}
20
+ end
21
+ initialize
22
+
23
+ def self.data
24
+ return @data if @data and not (live and @template_paths.any?)
25
+ @data = {}
26
+ load_templates
27
+ @data
28
+ end
29
+
30
+ def self.load(uri)
31
+ json = open(uri).read
32
+ @data = JSON.parse(json)
33
+ end
34
+
35
+ def self.add_templates(glob, options = {})
36
+ current_theme = options[:theme] || theme
37
+ @template_paths[current_theme] ||= []
38
+ @template_paths[current_theme] << glob
39
+ end
40
+
41
+ def self.add_stylesheet(file)
42
+ @stylesheets[theme] ||= []
43
+ @stylesheets[theme] << file
44
+ end
45
+
46
+ def self.render(template_name, locals = {}, &block)
47
+ scope = locals.delete(:scope) || Object.new
48
+ template = template_for(template_name)
49
+ template.render(scope, locals, &block)
50
+ end
51
+
52
+ def self.template_for(name)
53
+ @templates[theme][name] if @templates[theme] && @templates[theme][name]
54
+ template = data[theme]["templates"][name]
55
+ @templates[theme] ||= {}
56
+ @templates[theme][name] = Tilt[template["type"]].new { template["source"] }
57
+ end
58
+
59
+ def self.theme
60
+ @theme ||= themes.first || "default"
61
+ end
62
+
63
+ def self.themes
64
+ (@template_paths.keys + (@data ? @data.keys : [])).uniq
65
+ end
66
+
67
+ def self.to_json
68
+ data.to_json
69
+ end
70
+
71
+ def self.stylesheets
72
+ data[theme]["stylesheets"] || []
73
+ end
74
+
75
+ private
76
+ def self.load_templates
77
+ themes.each do |theme|
78
+ @data[theme] ||= {
79
+ "templates" => {},
80
+ "stylesheets" => @stylesheets[theme]
81
+ }
82
+ @template_paths[theme].each do |glob|
83
+ path = glob.split("*").first
84
+ Dir.glob(glob).each do |file|
85
+ key, type = file.sub("/_", "/").sub(/^#{path}(.+?)\.(\w+)$/, "\\1"), $2
86
+ if Tilt[type]
87
+ @data[theme]["templates"][key] = {
88
+ "source" => File.read(file).strip,
89
+ "type" => type
90
+ }
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ end
98
+
99
+ require "styleguide-api/middleman" if defined?(Middleman)
@@ -0,0 +1,13 @@
1
+ module StyleGuideAPI::Helpers
2
+
3
+ def style_template(name, locals = {}, &block)
4
+ StyleGuideAPI::render(name, locals, &block)
5
+ end
6
+
7
+ def style_css
8
+ StyleGuideAPI.stylesheets.map do |url|
9
+ %Q(<link href="#{url}" rel="stylesheet">)
10
+ end.join("\n")
11
+ end
12
+
13
+ end
@@ -0,0 +1,43 @@
1
+ require 'middleman-core'
2
+
3
+ class StyleGuideAPI::MiddlemanExtension < ::Middleman::Extension
4
+ option :templates, '', 'Glob to load templates'
5
+
6
+ def initialize(app, options_hash = {}, &block)
7
+ super
8
+
9
+ app.configure :development do
10
+ StyleGuideAPI.live = true
11
+ end
12
+
13
+ if options_hash.has_key?(:templates)
14
+ StyleGuideAPI.add_templates options_hash[:templates]
15
+ end
16
+
17
+ if options_hash.has_key?(:load)
18
+ StyleGuideAPI.load options_hash[:load]
19
+ end
20
+
21
+ if options_hash.has_key?(:theme)
22
+ StyleGuideAPI.theme = options_hash[:theme]
23
+ end
24
+ end
25
+
26
+ helpers StyleGuideAPI::Helpers
27
+
28
+ helpers do
29
+ def style_template(name, locals = {}, &block)
30
+ locals[:scope] = self
31
+ if block_given?
32
+ template = StyleGuideAPI.data[StyleGuideAPI.theme]["templates"][name]
33
+ type = template["type"].to_sym
34
+ handler_class = ::Padrino::Helpers::OutputHelpers.handlers[type]
35
+ html = handler_class.new(self).capture_from_template(&block)
36
+ block = Proc.new { html }
37
+ end
38
+ StyleGuideAPI::render(name, locals, &block)
39
+ end
40
+ end
41
+ end
42
+
43
+ StyleGuideAPI::MiddlemanExtension.register(:styleguide_api)
@@ -0,0 +1,3 @@
1
+ module StyleGuideAPI
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "styleguide-api/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "styleguide-api"
8
+ spec.version = StyleGuideAPI::VERSION
9
+ spec.authors = ["Nico Hagenburger"]
10
+ spec.email = ["nico@hagenburger.net"]
11
+ spec.summary = %q{Helpers for creating a style guide API}
12
+ spec.description = %q{Helpers for a style guide API provider and consumer with Tilt templates}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "tilt"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.7"
24
+ spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "minitest"
26
+ spec.add_development_dependency "heredoc_unindent"
27
+ end
@@ -0,0 +1 @@
1
+ <div class="product"><%= name %></div>
@@ -0,0 +1,10 @@
1
+ {
2
+ "my-theme": {
3
+ "templates": {
4
+ "my-template": {
5
+ "source": ".my-template",
6
+ "type": "haml"
7
+ }
8
+ }
9
+ }
10
+ }
@@ -0,0 +1 @@
1
+ .user= name
@@ -0,0 +1,2 @@
1
+ .first-name= name
2
+ .last-name= yield
@@ -0,0 +1 @@
1
+ .user= name
@@ -0,0 +1 @@
1
+ .user-blue= name
@@ -0,0 +1 @@
1
+ .user-red= name
@@ -0,0 +1,50 @@
1
+ require "test_helper"
2
+
3
+ describe StyleGuideAPI::Helpers do
4
+
5
+ before do
6
+ StyleGuideAPI.add_templates "test/fixtures/render_test/*.haml"
7
+ StyleGuideAPI.add_stylesheet "base.css"
8
+ StyleGuideAPI.add_stylesheet "more.css"
9
+ @helpers = Class.new do
10
+ extend StyleGuideAPI::Helpers
11
+ end
12
+ end
13
+
14
+ after do
15
+ StyleGuideAPI.initialize
16
+ end
17
+
18
+ describe "rendering templates" do
19
+
20
+ it "should render templates" do
21
+ result = @helpers.style_template("user", name: "Homer")
22
+ assert_equal <<-HTML.strip, result.strip
23
+ <div class='user'>Homer</div>
24
+ HTML
25
+ end
26
+
27
+ it "should accept blocks" do
28
+ result = @helpers.style_template("block", name: "Homer") { "Simpson" }
29
+ assert_equal <<-HTML.unindent.strip, result.strip
30
+ <div class='first-name'>Homer</div>
31
+ <div class='last-name'>Simpson</div>
32
+ HTML
33
+ end
34
+
35
+ end
36
+
37
+ describe "stylesheets" do
38
+
39
+ it "should create stylesheet link tags" do
40
+ result = @helpers.style_css
41
+ assert_equal <<-HTML.unindent.strip, result
42
+ <link href="base.css" rel="stylesheet">
43
+ <link href="more.css" rel="stylesheet">
44
+ HTML
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
data/test/load_test.rb ADDED
@@ -0,0 +1,60 @@
1
+ require "test_helper"
2
+
3
+ describe StyleGuideAPI do
4
+
5
+ after do
6
+ StyleGuideAPI.initialize
7
+ end
8
+
9
+ describe "loading templates" do
10
+
11
+ it "should load templates" do
12
+ StyleGuideAPI.add_templates "test/fixtures/load_test/**/*.*"
13
+ data = {
14
+ "user" => {
15
+ "source" => ".user= name",
16
+ "type" => "haml"
17
+ },
18
+ "products/ball" => {
19
+ "source" => "<div class=\"product\"><%= name %></div>",
20
+ "type" => "erb"
21
+ }
22
+ }
23
+ assert_equal(data, StyleGuideAPI.data["default"]["templates"])
24
+
25
+ FileUtils.cp "test/fixtures/load_test/user.haml",
26
+ "test/fixtures/load_test/new-user.haml"
27
+ assert_equal(data, StyleGuideAPI.data["default"]["templates"])
28
+
29
+ FileUtils.rm "test/fixtures/load_test/new-user.haml"
30
+ end
31
+
32
+ it "should dynamically load templates" do
33
+ StyleGuideAPI.live = true
34
+ StyleGuideAPI.add_templates "test/fixtures/load_test/**/*.*"
35
+ assert_equal %w(products/ball user),
36
+ StyleGuideAPI.data["default"]["templates"].keys.sort
37
+
38
+ FileUtils.cp "test/fixtures/load_test/user.haml",
39
+ "test/fixtures/load_test/new-user.haml"
40
+ assert_equal %w(new-user products/ball user),
41
+ StyleGuideAPI.data["default"]["templates"].keys.sort
42
+
43
+ FileUtils.rm "test/fixtures/load_test/new-user.haml"
44
+ end
45
+
46
+ it "should load templates from JSON" do
47
+ StyleGuideAPI.load("test/fixtures/load_test/style.json")
48
+ assert_equal "my-theme", StyleGuideAPI.theme
49
+ assert_equal "<div class='my-template'></div>", StyleGuideAPI.render("my-template").strip
50
+ end
51
+
52
+ it "should add a CSS file" do
53
+ StyleGuideAPI.add_templates "test/fixtures/load_test/**/*.*"
54
+ StyleGuideAPI.add_stylesheet "styles.css"
55
+ assert_equal %w(styles.css), StyleGuideAPI.data["default"]["stylesheets"]
56
+ end
57
+
58
+ end
59
+
60
+ end
@@ -0,0 +1,34 @@
1
+ require "test_helper"
2
+ require "json"
3
+
4
+ describe StyleGuideAPI do
5
+
6
+ after do
7
+ StyleGuideAPI.initialize
8
+ end
9
+
10
+ describe "providing templates" do
11
+
12
+ it "should provide templates as JSON" do
13
+ StyleGuideAPI.add_templates "test/fixtures/load_test/*.haml"
14
+ StyleGuideAPI.add_stylesheet "http://abc.xy/styles.css"
15
+ json = <<-JSON
16
+ {
17
+ "default": {
18
+ "stylesheets": ["http://abc.xy/styles.css"],
19
+ "templates": {
20
+ "user": {
21
+ "source": ".user= name",
22
+ "type": "haml"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ JSON
28
+ assert_equal(JSON.parse(json), JSON.parse(StyleGuideAPI.to_json))
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
@@ -0,0 +1,33 @@
1
+ require "test_helper"
2
+ require "tilt/haml"
3
+
4
+ describe StyleGuideAPI do
5
+
6
+ before do
7
+ StyleGuideAPI.add_templates "test/fixtures/render_test/*.haml"
8
+ end
9
+
10
+ after do
11
+ StyleGuideAPI.initialize
12
+ end
13
+
14
+ describe "rendering templates" do
15
+
16
+ it "should render templates" do
17
+ result = StyleGuideAPI.render("user", name: "Homer")
18
+ assert_equal <<-HTML.strip, result.strip
19
+ <div class='user'>Homer</div>
20
+ HTML
21
+ end
22
+
23
+ it "should accept blocks" do
24
+ result = StyleGuideAPI.render("block", name: "Homer") { "Simpson" }
25
+ assert_equal <<-HTML.unindent.strip, result.strip
26
+ <div class='first-name'>Homer</div>
27
+ <div class='last-name'>Simpson</div>
28
+ HTML
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,3 @@
1
+ require "minitest/autorun"
2
+ require "heredoc_unindent"
3
+ require "styleguide-api"
@@ -0,0 +1,26 @@
1
+ require "test_helper"
2
+ require "tilt/haml"
3
+
4
+ describe StyleGuideAPI do
5
+
6
+ after do
7
+ StyleGuideAPI.initialize
8
+ end
9
+
10
+ describe "rendering templates" do
11
+
12
+ it "should render templates" do
13
+ StyleGuideAPI.add_templates "test/fixtures/themes_test/red/*.haml", theme: "red"
14
+ StyleGuideAPI.add_templates "test/fixtures/themes_test/blue/*.haml", theme: "blue"
15
+
16
+ result = StyleGuideAPI.render("user", name: "Homer")
17
+ assert_match "user-red", result.strip
18
+
19
+ StyleGuideAPI.theme = "blue"
20
+ result = StyleGuideAPI.render("user", name: "Homer")
21
+ assert_match "user-blue", result.strip
22
+ end
23
+
24
+ end
25
+
26
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: styleguide-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nico Hagenburger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tilt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: heredoc_unindent
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Helpers for a style guide API provider and consumer with Tilt templates
84
+ email:
85
+ - nico@hagenburger.net
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - CHANGELOG.md
92
+ - Gemfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - lib/styleguide-api.rb
97
+ - lib/styleguide-api/helpers.rb
98
+ - lib/styleguide-api/middleman.rb
99
+ - lib/styleguide-api/version.rb
100
+ - styleguide-api.gemspec
101
+ - test/fixtures/load_test/products/_ball.erb
102
+ - test/fixtures/load_test/style.json
103
+ - test/fixtures/load_test/user.haml
104
+ - test/fixtures/render_test/block.haml
105
+ - test/fixtures/render_test/user.haml
106
+ - test/fixtures/themes_test/blue/user.haml
107
+ - test/fixtures/themes_test/red/user.haml
108
+ - test/helper_test.rb
109
+ - test/load_test.rb
110
+ - test/provider_test.rb
111
+ - test/render_test.rb
112
+ - test/test_helper.rb
113
+ - test/themes_test.rb
114
+ homepage: ''
115
+ licenses:
116
+ - MIT
117
+ metadata: {}
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ requirements: []
133
+ rubyforge_project:
134
+ rubygems_version: 2.2.2
135
+ signing_key:
136
+ specification_version: 4
137
+ summary: Helpers for creating a style guide API
138
+ test_files:
139
+ - test/fixtures/load_test/products/_ball.erb
140
+ - test/fixtures/load_test/style.json
141
+ - test/fixtures/load_test/user.haml
142
+ - test/fixtures/render_test/block.haml
143
+ - test/fixtures/render_test/user.haml
144
+ - test/fixtures/themes_test/blue/user.haml
145
+ - test/fixtures/themes_test/red/user.haml
146
+ - test/helper_test.rb
147
+ - test/load_test.rb
148
+ - test/provider_test.rb
149
+ - test/render_test.rb
150
+ - test/test_helper.rb
151
+ - test/themes_test.rb
152
+ has_rdoc: