install_theme 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,12 @@
1
+ === 0.4.1 / 2009-09-27
2
+
3
+ Major:
4
+ * Allow a class name instead of a DOM element id for the content path
5
+ * Templates can have assets in the root of the template folder
6
+
7
+ Minor:
8
+ * cleaning actual/expected files so EOL characters aren't the cause of diff mismatches
9
+
1
10
  === 0.4.0 / 2009-09-27
2
11
 
3
12
  * rename gem to install_theme from convert_theme
@@ -6,7 +6,7 @@ require 'rubigen'
6
6
  require 'rubigen/scripts/generate'
7
7
 
8
8
  class InstallTheme
9
- VERSION = "0.4.0"
9
+ VERSION = "0.4.1"
10
10
 
11
11
  attr_reader :template_root, :rails_root, :index_path, :template_type
12
12
  attr_reader :stylesheet_dir, :javascript_dir, :image_dir
@@ -66,10 +66,10 @@ class InstallTheme
66
66
  protected
67
67
 
68
68
  def convert_file_to_layout(html_path, layout_path)
69
- File.open(File.join(template_temp_path, layout_path), "w") do |file|
69
+ File.open(File.join(template_temp_path, layout_path), "w") do |f|
70
70
  index_file = File.read(File.join(template_root, html_path)).gsub(/\r/, '')
71
71
  doc = Hpricot(index_file)
72
- doc.search("##{content_id}").each { |elm| elm.inner_html = "<%= yield %>" }
72
+ doc.search("##{content_id},.#{content_id}").each { |elm| elm.inner_html = "<%= yield %>" }
73
73
  inside_yields.to_a.each do |name, css_path|
74
74
  doc.search(css_path).each do |elm|
75
75
  inside_yields_originals[name] = elm.inner_html.strip
@@ -77,11 +77,25 @@ class InstallTheme
77
77
  end
78
78
  end
79
79
  contents = doc.to_html
80
- contents.gsub!(%r{(["'])/?#{image_dir}}, '\1/images')
81
- contents.gsub!(%r{(["'])/?#{stylesheet_dir}}, '\1/stylesheets')
82
- contents.gsub!(%r{(["'])/?#{javascript_dir}}, '\1/javascripts')
80
+ template_images.each do |file|
81
+ image = File.basename(file)
82
+ contents.gsub!(%r{(["'])/?[\w_\-\/]*#{image}}, '\1/images/' + image)
83
+ end
84
+ template_stylesheets.each do |file|
85
+ stylesheet = File.basename(file)
86
+ contents.gsub!(%r{(["'])/?[\w_\-\/]*#{stylesheet}}, '\1/stylesheets/' + stylesheet)
87
+ end
88
+ template_javascripts.each do |file|
89
+ javascript = File.basename(file)
90
+ contents.gsub!(%r{(["'])/?[\w_\-\/]*#{javascript}}, '\1/javascripts/' + javascript)
91
+ end
92
+
93
+ contents.gsub!(%r{(["'])/?#{image_dir}}, '\1/images') unless image_dir.blank?
94
+ contents.gsub!(%r{(["'])/?#{stylesheet_dir}}, '\1/stylesheets') unless stylesheet_dir.blank?
95
+ contents.gsub!(%r{(["'])/?#{javascript_dir}}, '\1/javascripts') unless javascript_dir.blank?
96
+
83
97
  contents.sub!(%r{\s*</head>}, "\n <%= yield(:head) %>\n</head>")
84
- file << contents
98
+ f << contents
85
99
  end
86
100
  end
87
101
 
@@ -139,7 +153,7 @@ class InstallTheme
139
153
  if path = Dir[File.join(template_root, '**/*.css')].first
140
154
  File.dirname(path).gsub(template_root, '').gsub(%r{^/}, '')
141
155
  else
142
- 'stylescheets'
156
+ 'stylesheets'
143
157
  end
144
158
  end
145
159
 
@@ -160,15 +174,15 @@ class InstallTheme
160
174
  end
161
175
 
162
176
  def template_stylesheets
163
- Dir[File.join(template_root, stylesheet_dir, '*')]
177
+ Dir[File.join(template_root, stylesheet_dir, '*.css')]
164
178
  end
165
179
 
166
180
  def template_javascripts
167
- Dir[File.join(template_root, javascript_dir, '*')]
181
+ Dir[File.join(template_root, javascript_dir, '*.js')]
168
182
  end
169
183
 
170
184
  def template_images
171
- Dir[File.join(template_root, image_dir, '*')]
185
+ Dir[File.join(template_root, image_dir, '*.{jpg,png,gif}')]
172
186
  end
173
187
 
174
188
  def show_readme
@@ -25,7 +25,7 @@ describe InstallTheme do
25
25
  it { File.should be_exist(File.join(@target_application, "app/views/layouts/application.html.erb")) }
26
26
  it { File.should be_exist(File.join(@expected_application, "app/views/layouts/application.html.erb")) }
27
27
  it "should create app/views/layouts/application.html.erb as a layout file" do
28
- expected = clean_file(File.join(@expected_application, "app/views/layouts/application.html.erb"))
28
+ expected = clean_html(File.join(@expected_application, "app/views/layouts/application.html.erb"))
29
29
  actual = File.join(@target_application, "app/views/layouts/application.html.erb")
30
30
  diff = `diff #{expected} #{actual} 2> /dev/null`
31
31
  rputs diff unless diff.strip.empty?
@@ -63,7 +63,7 @@ describe InstallTheme do
63
63
  end
64
64
  describe "becomes a Rails app" do
65
65
  it "should create app/views/layouts/application.html.erb as a layout file" do
66
- expected = clean_file(File.join(@expected_application, "app/views/layouts/application.html.erb"))
66
+ expected = clean_html(File.join(@expected_application, "app/views/layouts/application.html.erb"))
67
67
  actual = File.join(@target_application, "app/views/layouts/application.html.erb")
68
68
  diff = `diff #{expected} #{actual} 2> /dev/null`
69
69
  rputs diff unless diff.strip.empty?
@@ -83,5 +83,83 @@ describe InstallTheme do
83
83
  end
84
84
  end
85
85
  end
86
+
87
+ context "djclub theme to ERb" do
88
+ before do
89
+ setup_base_rails
90
+ @stdout = stdout do |stdout|
91
+ @theme = InstallTheme.new(
92
+ :template_root => File.dirname(__FILE__) + "/fixtures/djclub",
93
+ :rails_root => @target_application,
94
+ :inside_yields => { :menu => '#header ul' },
95
+ :content_id => "content", :stdout => stdout)
96
+ @theme.apply_to_target(:generator => {:collision => :force, :quiet => true})
97
+ end
98
+ @expected_application = File.dirname(__FILE__) + "/expected/rails/djclub"
99
+ end
100
+ it { @theme.stylesheet_dir.should == "" }
101
+ it { @theme.image_dir.should == "images" }
102
+ describe "becomes a Rails app" do
103
+ it { File.should be_exist(File.join(@target_application, "app/views/layouts/application.html.erb")) }
104
+ it "should create app/views/layouts/application.html.erb as a layout file" do
105
+ expected = clean_html(File.join(@expected_application, "app/views/layouts/application.html.erb"))
106
+ actual = File.join(@target_application, "app/views/layouts/application.html.erb")
107
+ diff = `diff #{expected} #{actual} 2> /dev/null`
108
+ rputs diff unless diff.strip.empty?
109
+ diff.strip.should == ""
110
+ end
111
+
112
+ %w[public/stylesheets/style.css].each do |matching_file|
113
+ it { File.should be_exist(File.join(@target_application, matching_file)) }
114
+ it { File.should be_exist(File.join(@expected_application, matching_file)) }
115
+ it do
116
+ expected = clean_file File.join(@expected_application, matching_file)
117
+ actual = clean_file File.join(@target_application, matching_file)
118
+ diff = `diff #{expected} #{actual} 2> /dev/null`
119
+ rputs diff unless diff.strip.empty?
120
+ diff.strip.should == ""
121
+ end
122
+ end
123
+ end
124
+ end
125
+
126
+ context "the-hobbit-website-template theme to ERb" do
127
+ before do
128
+ setup_base_rails
129
+ @stdout = stdout do |stdout|
130
+ @theme = InstallTheme.new(
131
+ :template_root => File.dirname(__FILE__) + "/fixtures/the-hobbit-website-template",
132
+ :rails_root => @target_application,
133
+ :inside_yields => { :menu => '.navigation', :subtitle => '.header p' },
134
+ :content_id => "content", :stdout => stdout)
135
+ @theme.apply_to_target(:generator => {:collision => :force, :quiet => true})
136
+ end
137
+ @expected_application = File.dirname(__FILE__) + "/expected/rails/the-hobbit-website-template"
138
+ end
139
+ it { @theme.stylesheet_dir.should == "" }
140
+ it { @theme.image_dir.should == "img" }
141
+ describe "becomes a Rails app" do
142
+ it { File.should be_exist(File.join(@target_application, "app/views/layouts/application.html.erb")) }
143
+ it "should create app/views/layouts/application.html.erb as a layout file" do
144
+ expected = clean_html(File.join(@expected_application, "app/views/layouts/application.html.erb"))
145
+ actual = File.join(@target_application, "app/views/layouts/application.html.erb")
146
+ diff = `diff #{expected} #{actual} 2> /dev/null`
147
+ rputs diff unless diff.strip.empty?
148
+ diff.strip.should == ""
149
+ end
150
+
151
+ %w[public/stylesheets/default.css].each do |matching_file|
152
+ it { File.should be_exist(File.join(@target_application, matching_file)) }
153
+ it { File.should be_exist(File.join(@expected_application, matching_file)) }
154
+ it do
155
+ expected = clean_file File.join(@expected_application, matching_file)
156
+ actual = clean_file File.join(@target_application, matching_file)
157
+ diff = `diff #{expected} #{actual} 2> /dev/null`
158
+ rputs diff unless diff.strip.empty?
159
+ diff.strip.should == ""
160
+ end
161
+ end
162
+ end
163
+ end
86
164
  end
87
165
 
@@ -18,15 +18,24 @@ module Kernel
18
18
  end
19
19
  end
20
20
 
21
- def clean_file(orig_file)
21
+ def clean_html(orig_file)
22
22
  tmp_dir = ENV['TMPDIR'] || '/tmp'
23
- file = File.join(tmp_dir, 'clean_file.html')
23
+ file = File.join(tmp_dir, 'clean_html.html')
24
24
  File.open(file, "w") do |f|
25
25
  f << Hpricot(open(orig_file)).to_html
26
26
  end
27
27
  file
28
28
  end
29
29
 
30
+ def clean_file(orig_file)
31
+ tmp_dir = ENV['TMPDIR'] || '/tmp'
32
+ file = File.join(tmp_dir, 'clean_html.html')
33
+ File.open(file, "w") do |f|
34
+ f << File.open(orig_file).readlines.join("\n")
35
+ end
36
+ file
37
+ end
38
+
30
39
  def setup_base_rails(options = {})
31
40
  tmp_path = File.dirname(__FILE__) + "/tmp"
32
41
  FileUtils.rm_rf(tmp_path)
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.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dr Nic Williams