install_theme 0.6.2 → 0.7.0
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.
- data/History.txt +12 -0
- data/README.rdoc +20 -2
- data/Rakefile +0 -1
- data/lib/install_theme.rb +35 -5
- data/lib/install_theme/cli.rb +5 -5
- data/spec/expected/rails/bloganje/public/stylesheets/sass/style.sass +3 -3
- data/spec/expected/rails/bloganje/public/stylesheets/style.css +1 -1
- data/spec/install_theme_cli_spec.rb +20 -6
- data/spec/install_theme_haml_spec.rb +8 -5
- data/spec/install_theme_spec.rb +76 -6
- metadata +2 -12
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
=== 0.7.0 / 2009-10-07
|
2
|
+
|
3
|
+
Major:
|
4
|
+
* Reversed the order of the first two CLI arguments (in preparation for path/to/template to be optional)
|
5
|
+
* content_path and --partial flags are optional after a template is installed once
|
6
|
+
|
7
|
+
Minor:
|
8
|
+
* README describes how Theme Reuse works
|
9
|
+
* CLI shows help/error message if content_path isn't passed as argument or available from defaults file
|
10
|
+
* improved the clean_stylesheet helper and fixed the corresponding test
|
11
|
+
* if stylesheet path is root of template folder, then use image path for path substitutions
|
12
|
+
|
1
13
|
=== 0.6.2 / 2009-10-06
|
2
14
|
|
3
15
|
Major:
|
data/README.rdoc
CHANGED
@@ -18,14 +18,20 @@ in action.
|
|
18
18
|
|
19
19
|
Simple case:
|
20
20
|
|
21
|
-
install_theme path/to/
|
21
|
+
install_theme path/to/rails_app path/to/template content_path
|
22
22
|
|
23
23
|
Replace some DOM content with <%= yield :some_label %> with --partial:
|
24
24
|
|
25
|
-
install_theme path/to/
|
25
|
+
install_theme path/to/rails_app path/to/template #content_box \
|
26
26
|
--partial "header:#header h2" \
|
27
27
|
--partial sidebar:#sidebar"
|
28
28
|
|
29
|
+
NOTE: The order of the first two arguments has been reversed since the original
|
30
|
+
public release. This is in preparation for path/to/template to be optional.
|
31
|
+
|
32
|
+
Similarly, in 0.7.0 the content_path argument is optional after the first time
|
33
|
+
you install a specific theme (see 'Theme Reuse' section).
|
34
|
+
|
29
35
|
=== Haml Support:
|
30
36
|
|
31
37
|
If your application has Haml installed, the template/theme is automatically converted
|
@@ -35,6 +41,18 @@ Alternately, you can pass the flag --haml to force it.
|
|
35
41
|
|
36
42
|
Or pass the flag --erb to force erb template generation.
|
37
43
|
|
44
|
+
=== Theme Reuse:
|
45
|
+
|
46
|
+
Once you have installed a theme into an application once, that theme remembers the content path
|
47
|
+
and partials you selected. You won't have to type them again.
|
48
|
+
|
49
|
+
That is, after running the `install_theme` command above, you could apply the same theme
|
50
|
+
to another Rails app using just:
|
51
|
+
|
52
|
+
install_theme path/to/app path/to/another_rails_app
|
53
|
+
|
54
|
+
The defaults for each theme are stored in a file `install_theme.yml`.
|
55
|
+
|
38
56
|
== INSTALL:
|
39
57
|
|
40
58
|
install_theme is distributed as a RubyGem, which installs the command line app automatically:
|
data/Rakefile
CHANGED
data/lib/install_theme.rb
CHANGED
@@ -10,10 +10,11 @@ require 'sass/css'
|
|
10
10
|
require 'haml/exec'
|
11
11
|
|
12
12
|
class InstallTheme
|
13
|
-
VERSION = "0.
|
13
|
+
VERSION = "0.7.0"
|
14
14
|
|
15
15
|
attr_reader :template_root, :rails_root, :index_path, :template_type
|
16
16
|
attr_reader :stylesheet_dir, :javascript_dir, :image_dir
|
17
|
+
attr_reader :defaults_file
|
17
18
|
attr_reader :content_path, :partials
|
18
19
|
attr_reader :stdout
|
19
20
|
attr_reader :original_named_yields, :original_body_content
|
@@ -22,14 +23,19 @@ class InstallTheme
|
|
22
23
|
@template_root = File.expand_path(options[:template_root] || File.dirname('.'))
|
23
24
|
@rails_root = File.expand_path(options[:rails_root] || File.dirname('.'))
|
24
25
|
@template_type = (options[:template_type] || detect_template).to_s
|
25
|
-
@
|
26
|
-
@content_path = options[:content_path] || "content"
|
27
|
-
@partials = options[:partials] || {}
|
26
|
+
@defaults_file = options[:defaults_file] || "install_theme.yml"
|
28
27
|
@stylesheet_dir = options[:stylesheet_dir] || detect_stylesheet_dir
|
29
28
|
@javascript_dir = options[:javascript_dir] || detect_javascript_dir
|
30
29
|
@image_dir = options[:image_dir] || detect_image_dir
|
31
30
|
@stdout = options[:stdout] || $stdout
|
31
|
+
|
32
|
+
load_template_defaults unless options[:ignore_defaults]
|
33
|
+
@index_path = options[:index_path] || @index_path || "index.html"
|
34
|
+
@content_path = options[:content_path] || @content_path
|
35
|
+
@partials ||= {}
|
36
|
+
@partials.merge!(options[:partials]) if options[:partials]
|
32
37
|
|
38
|
+
create_install_theme_yml
|
33
39
|
setup_template_temp_path
|
34
40
|
end
|
35
41
|
|
@@ -70,8 +76,23 @@ class InstallTheme
|
|
70
76
|
template_type == 'erb'
|
71
77
|
end
|
72
78
|
|
79
|
+
def valid?
|
80
|
+
template_root && File.exist?(template_root) &&
|
81
|
+
rails_root && File.exist?(rails_root) &&
|
82
|
+
content_path
|
83
|
+
end
|
84
|
+
|
73
85
|
protected
|
74
86
|
|
87
|
+
def load_template_defaults
|
88
|
+
return unless File.exist?(File.join(template_root, defaults_file))
|
89
|
+
require "yaml"
|
90
|
+
defaults = YAML.load_file(File.join(template_root, defaults_file))
|
91
|
+
@content_path = defaults["content_path"]
|
92
|
+
@partials = defaults["partials"]
|
93
|
+
@index_path = defaults["index_path"]
|
94
|
+
end
|
95
|
+
|
75
96
|
def convert_file_to_layout(html_path, layout_path)
|
76
97
|
File.open(File.join(template_temp_path, layout_path), "w") do |f|
|
77
98
|
contents = File.read(File.join(template_root, html_path)).gsub(/\r/, '')
|
@@ -249,6 +270,12 @@ class InstallTheme
|
|
249
270
|
def in_rails_root(&block)
|
250
271
|
FileUtils.chdir(rails_root, &block)
|
251
272
|
end
|
273
|
+
|
274
|
+
def create_install_theme_yml
|
275
|
+
config = { "content_path" => content_path, "partials" => partials }
|
276
|
+
install_theme_yml = File.join(template_root, 'install_theme.yml')
|
277
|
+
File.open(install_theme_yml, 'w') {|f| f << config.to_yaml}
|
278
|
+
end
|
252
279
|
|
253
280
|
def detect_template
|
254
281
|
if detect_template_haml
|
@@ -302,7 +329,10 @@ class InstallTheme
|
|
302
329
|
end
|
303
330
|
|
304
331
|
def clean_stylesheet(contents)
|
305
|
-
contents.gsub(%r{url\((["']?)[\./]*(
|
332
|
+
contents.gsub(%r{url\((["']?)[\./]*(#{image_dir}|#{stylesheet_dir}|)\/?}) do |match|
|
333
|
+
target_path = (!stylesheet_dir.blank? && $2 == stylesheet_dir) ? "stylesheets" : "images"
|
334
|
+
"url(#{$1}/#{target_path}/"
|
335
|
+
end
|
306
336
|
end
|
307
337
|
|
308
338
|
def show_readme
|
data/lib/install_theme/cli.rb
CHANGED
@@ -28,7 +28,7 @@ class InstallTheme
|
|
28
28
|
"Example using XPath: --partial \"header://div[@id='header']\"") do |arg|
|
29
29
|
options[:partials] ||= {}
|
30
30
|
key, css_path = arg.split(/\s*:\s*/)[0..1]
|
31
|
-
options[:partials][key.strip
|
31
|
+
options[:partials][key.strip] = css_path.strip
|
32
32
|
end
|
33
33
|
opts.on("-h", "--help",
|
34
34
|
"Show this help message.") { |arg| stdout.puts opts; exit }
|
@@ -37,14 +37,14 @@ class InstallTheme
|
|
37
37
|
) { |arg| stdout.puts InstallTheme::VERSION; exit }
|
38
38
|
opts.parse!(arguments)
|
39
39
|
end
|
40
|
-
options[:template_root] = arguments.shift
|
41
40
|
options[:rails_root] = arguments.shift
|
41
|
+
options[:template_root] = arguments.shift
|
42
42
|
options[:content_path] = arguments.shift
|
43
|
-
|
44
|
-
|
43
|
+
theme = InstallTheme.new(options)
|
44
|
+
unless theme.valid?
|
45
45
|
stdout.puts parser; exit
|
46
46
|
end
|
47
|
-
|
47
|
+
theme.apply_to_target
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
img, div, a
|
7
|
-
behavior: url(
|
7
|
+
behavior: url(/stylesheets/iepngfix.htc)
|
8
8
|
|
9
9
|
|
10
10
|
body
|
@@ -260,7 +260,7 @@ td, th
|
|
260
260
|
thead
|
261
261
|
|
262
262
|
#infowrap li
|
263
|
-
display: inline:
|
263
|
+
display: inline:
|
264
264
|
|
265
265
|
|
266
266
|
|
@@ -294,7 +294,7 @@ thead
|
|
294
294
|
text-align: left
|
295
295
|
float: left
|
296
296
|
padding: 0 2px
|
297
|
-
font-size: 14px
|
297
|
+
font-size: 14px
|
298
298
|
|
299
299
|
|
300
300
|
a
|
@@ -2,20 +2,21 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
require 'install_theme/cli'
|
3
3
|
|
4
4
|
describe InstallTheme::CLI, "execute" do
|
5
|
-
|
5
|
+
it("parses arguments and run generator") do
|
6
6
|
theme = stub
|
7
7
|
InstallTheme.should_receive(:new).
|
8
|
-
with(:template_root => "path/to/
|
8
|
+
with(:template_root => "path/to/template",
|
9
9
|
:rails_root => "path/to/rails_app",
|
10
10
|
:content_path => "#content_box",
|
11
11
|
:index_path => "root.html",
|
12
12
|
:template_type => "haml",
|
13
|
-
:partials => {
|
13
|
+
:partials => { "header" => '#header h2', "sidebar" => '#sidebar' }
|
14
14
|
).
|
15
15
|
and_return(theme)
|
16
|
+
theme.should_receive(:valid?).and_return(true)
|
16
17
|
theme.should_receive(:apply_to_target)
|
17
18
|
@stdout = stdout do |stdout_io|
|
18
|
-
InstallTheme::CLI.execute(stdout_io, %w[path/to/
|
19
|
+
InstallTheme::CLI.execute(stdout_io, %w[path/to/rails_app path/to/template #content_box
|
19
20
|
--index_path=root.html
|
20
21
|
--haml
|
21
22
|
--partial header:#header\ h2
|
@@ -23,6 +24,19 @@ describe InstallTheme::CLI, "execute" do
|
|
23
24
|
])
|
24
25
|
end
|
25
26
|
end
|
26
|
-
|
27
|
-
it("
|
27
|
+
|
28
|
+
it("allows for content_path and partials to be derived from defaults file") do
|
29
|
+
theme = stub
|
30
|
+
InstallTheme.should_receive(:new).
|
31
|
+
with(:template_root => "path/to/template",
|
32
|
+
:rails_root => "path/to/rails_app",
|
33
|
+
:content_path => nil
|
34
|
+
).
|
35
|
+
and_return(theme)
|
36
|
+
theme.should_receive(:valid?).and_return(true)
|
37
|
+
theme.should_receive(:apply_to_target)
|
38
|
+
@stdout = stdout do |stdout_io|
|
39
|
+
InstallTheme::CLI.execute(stdout_io, %w[path/to/rails_app path/to/template])
|
40
|
+
end
|
41
|
+
end
|
28
42
|
end
|
@@ -4,17 +4,20 @@ describe InstallTheme do
|
|
4
4
|
context "bloganje theme to haml" do
|
5
5
|
before(:all) do
|
6
6
|
setup_base_rails :haml => true
|
7
|
+
@template_root = File.dirname(__FILE__) + "/fixtures/bloganje"
|
8
|
+
FileUtils.rm_rf(File.join(@template_root, "install_theme.yml"))
|
7
9
|
@stdout = stdout do |stdout|
|
8
|
-
@theme = InstallTheme.new(:template_root =>
|
9
|
-
:rails_root
|
10
|
-
:content_path
|
11
|
-
:partials
|
12
|
-
:stdout
|
10
|
+
@theme = InstallTheme.new(:template_root => @template_root,
|
11
|
+
:rails_root => @target_application,
|
12
|
+
:content_path => "#content",
|
13
|
+
:partials => { "header" => '#header h2', "sidebar" => '#sidebar' },
|
14
|
+
:stdout => stdout)
|
13
15
|
@theme.apply_to_target(:stdout => stdout, :generator => {:collision => :force, :quiet => true})
|
14
16
|
end
|
15
17
|
@expected_application = File.dirname(__FILE__) + "/expected/rails/bloganje"
|
16
18
|
end
|
17
19
|
it { @theme.should be_haml }
|
20
|
+
it { @theme.should be_valid }
|
18
21
|
|
19
22
|
%w[app/views/layouts/application.html.haml
|
20
23
|
app/views/layouts/_header.html.haml
|
data/spec/install_theme_spec.rb
CHANGED
@@ -4,11 +4,13 @@ describe InstallTheme do
|
|
4
4
|
context "bloganje theme to ERb using CSS path" do
|
5
5
|
before(:all) do
|
6
6
|
setup_base_rails
|
7
|
+
@template_root = File.dirname(__FILE__) + "/fixtures/bloganje"
|
8
|
+
FileUtils.rm_rf(File.join(@template_root, "install_theme.yml"))
|
7
9
|
@stdout = stdout do |stdout|
|
8
|
-
@theme = InstallTheme.new(:template_root =>
|
10
|
+
@theme = InstallTheme.new(:template_root => @template_root,
|
9
11
|
:rails_root => @target_application,
|
10
12
|
:content_path => "#content",
|
11
|
-
:partials => {
|
13
|
+
:partials => { "header" => '#header h2', "sidebar" => '#sidebar' },
|
12
14
|
:stdout => stdout)
|
13
15
|
@theme.apply_to_target(:stdout => stdout, :generator => {:collision => :force, :quiet => true})
|
14
16
|
end
|
@@ -17,6 +19,7 @@ describe InstallTheme do
|
|
17
19
|
it { @theme.stylesheet_dir.should == "css" }
|
18
20
|
it { @theme.image_dir.should == "img" }
|
19
21
|
it { @theme.should be_erb }
|
22
|
+
it { @theme.should be_valid }
|
20
23
|
|
21
24
|
%w[app/views/layouts/application.html.erb
|
22
25
|
app/views/layouts/_header.html.erb
|
@@ -24,7 +27,7 @@ describe InstallTheme do
|
|
24
27
|
app/helpers/template_helper.rb
|
25
28
|
public/stylesheets/style.css
|
26
29
|
public/stylesheets/theme.css].each do |matching_file|
|
27
|
-
it do
|
30
|
+
it "should having matching file #{matching_file}" do
|
28
31
|
expected = clean_file File.join(@expected_application, matching_file), 'expected'
|
29
32
|
actual = clean_file File.join(@target_application, matching_file), 'actual'
|
30
33
|
diff = `diff #{expected} #{actual} 2> /dev/null`
|
@@ -40,16 +43,24 @@ describe InstallTheme do
|
|
40
43
|
it { should include("<% content_for :header do -%>\n My eCommerce Admin area\n<% end -%>") }
|
41
44
|
it { should include('<div id="rightnow">') }
|
42
45
|
end
|
46
|
+
it "should create install_theme.yml containing the partial information" do
|
47
|
+
expected = clean_file File.join(@template_root, "expected_install_theme.yml"), 'expected'
|
48
|
+
actual = clean_file File.join(@template_root, "install_theme.yml"), 'actual'
|
49
|
+
diff = `diff #{expected} #{actual} 2> /dev/null`
|
50
|
+
rputs diff unless diff.strip.empty?
|
51
|
+
diff.strip.should == ""
|
52
|
+
end
|
43
53
|
end
|
44
54
|
|
45
55
|
context "the-hobbit-website-template theme to ERb using xpath" do
|
46
56
|
before(:all) do
|
47
57
|
setup_base_rails
|
58
|
+
@template_root = File.dirname(__FILE__) + "/fixtures/the-hobbit-website-template"
|
59
|
+
FileUtils.rm_rf(File.join(@template_root, "install_theme.yml"))
|
48
60
|
@stdout = stdout do |stdout|
|
49
|
-
@theme = InstallTheme.new(
|
50
|
-
:template_root => File.dirname(__FILE__) + "/fixtures/the-hobbit-website-template",
|
61
|
+
@theme = InstallTheme.new(:template_root => @template_root,
|
51
62
|
:rails_root => @target_application,
|
52
|
-
:partials => {
|
63
|
+
:partials => { "menu" => "//div[@class='navigation']", "subtitle" => "//div[@class='header']/p" },
|
53
64
|
:content_path => "//div[@class='content']",
|
54
65
|
:stdout => stdout)
|
55
66
|
@theme.apply_to_target(:generator => {:collision => :force, :quiet => true})
|
@@ -58,6 +69,7 @@ describe InstallTheme do
|
|
58
69
|
end
|
59
70
|
it { @theme.stylesheet_dir.should == "" }
|
60
71
|
it { @theme.image_dir.should == "img" }
|
72
|
+
it { @theme.should be_valid }
|
61
73
|
|
62
74
|
%w[app/views/layouts/application.html.erb
|
63
75
|
app/helpers/template_helper.rb
|
@@ -72,6 +84,64 @@ describe InstallTheme do
|
|
72
84
|
diff.strip.should == ""
|
73
85
|
end
|
74
86
|
end
|
87
|
+
it "should create install_theme.yml containing the partial information" do
|
88
|
+
expected = clean_file File.join(@template_root, "expected_install_theme.yml"), 'expected'
|
89
|
+
actual = clean_file File.join(@template_root, "install_theme.yml"), 'actual'
|
90
|
+
diff = `diff #{expected} #{actual} 2> /dev/null`
|
91
|
+
rputs diff unless diff.strip.empty?
|
92
|
+
diff.strip.should == ""
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "use install_theme.yml for defaults" do
|
97
|
+
before(:all) do
|
98
|
+
setup_base_rails
|
99
|
+
@template_root = File.dirname(__FILE__) + "/fixtures/bloganje"
|
100
|
+
FileUtils.chdir(@template_root) do
|
101
|
+
FileUtils.cp_r("expected_install_theme.yml", "install_theme.yml")
|
102
|
+
end
|
103
|
+
@stdout = stdout do |stdout|
|
104
|
+
@theme = InstallTheme.new(:template_root => @template_root,
|
105
|
+
:rails_root => @target_application,
|
106
|
+
:stdout => stdout)
|
107
|
+
@theme.apply_to_target(:stdout => stdout, :generator => {:collision => :force, :quiet => true})
|
108
|
+
end
|
109
|
+
@expected_application = File.dirname(__FILE__) + "/expected/rails/bloganje"
|
110
|
+
end
|
111
|
+
it { File.should be_exist(File.join(@template_root, "install_theme.yml")) }
|
112
|
+
it { @theme.content_path.should == "#content" }
|
113
|
+
it { @theme.should be_valid }
|
114
|
+
%w[app/views/layouts/application.html.erb
|
115
|
+
app/views/layouts/_header.html.erb
|
116
|
+
app/views/layouts/_sidebar.html.erb
|
117
|
+
app/helpers/template_helper.rb
|
118
|
+
public/stylesheets/style.css
|
119
|
+
public/stylesheets/theme.css].each do |matching_file|
|
120
|
+
it "should having matching file #{matching_file}" do
|
121
|
+
expected = clean_file File.join(@expected_application, matching_file), 'expected'
|
122
|
+
actual = clean_file File.join(@target_application, matching_file), 'actual'
|
123
|
+
diff = `diff #{expected} #{actual} 2> /dev/null`
|
124
|
+
rputs diff unless diff.strip.empty?
|
125
|
+
diff.strip.should == ""
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context "invalid if no content_path explicitly or via defaults file" do
|
131
|
+
before(:all) do
|
132
|
+
setup_base_rails
|
133
|
+
@template_root = File.dirname(__FILE__) + "/fixtures/bloganje"
|
134
|
+
FileUtils.rm_rf(File.join(@template_root, "install_theme.yml"))
|
135
|
+
@stdout = stdout do |stdout|
|
136
|
+
@theme = InstallTheme.new(:template_root => @template_root,
|
137
|
+
:rails_root => @target_application,
|
138
|
+
:stdout => stdout)
|
139
|
+
@theme.apply_to_target(:stdout => stdout, :generator => {:collision => :force, :quiet => true})
|
140
|
+
end
|
141
|
+
@expected_application = File.dirname(__FILE__) + "/expected/rails/bloganje"
|
142
|
+
end
|
143
|
+
it { @theme.content_path.should be_nil }
|
144
|
+
it { @theme.should_not be_valid }
|
75
145
|
end
|
76
146
|
end
|
77
147
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: install_theme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dr Nic Williams
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-07 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,16 +42,6 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 2.3.0
|
44
44
|
version:
|
45
|
-
- !ruby/object:Gem::Dependency
|
46
|
-
name: rails
|
47
|
-
type: :development
|
48
|
-
version_requirement:
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 2.3.4
|
54
|
-
version:
|
55
45
|
- !ruby/object:Gem::Dependency
|
56
46
|
name: hoe
|
57
47
|
type: :development
|