ymdp 0.1.6 → 0.1.7

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.
@@ -1,22 +1,24 @@
1
- def post_file_to_w3c_validator(file_path, doc_type)
2
- query = MultipartPost.build_form_data(
3
- :uploaded_file => File.new(file_path, 'r'),
4
- :charset => '(detect automatically)',
5
- :doctype => doc_type,
6
- :group => '1'
7
- )
1
+ class W3CPoster
2
+ def self.post_file_to_w3c_validator(file_path, doc_type)
3
+ query = MultipartPost.build_form_data(
4
+ :uploaded_file => File.new(file_path, 'r'),
5
+ :charset => '(detect automatically)',
6
+ :doctype => doc_type,
7
+ :group => '1'
8
+ )
8
9
 
9
- Net::HTTP.start('validator.w3.org') do |http|
10
- http.post2("/check", query, MultipartPost::REQ_HEADER)
10
+ Net::HTTP.start('validator.w3.org') do |http|
11
+ http.post2("/check", query, MultipartPost::REQ_HEADER)
12
+ end
11
13
  end
12
- end
13
14
 
14
- def valid_response?(w3c_response)
15
- html = w3c_response.read_body
16
- html.include? "[Valid]"
17
- end
15
+ def self.valid_response?(w3c_response)
16
+ html = w3c_response.read_body
17
+ html.include? "[Valid]"
18
+ end
18
19
 
19
- def w3c_valid?(file_path)
20
- resp = post_file_to_w3c_validator(file_path, 'HTML 4.01 Strict')
21
- valid_response?(resp)
22
- end
20
+ def self.w3c_valid?(file_path)
21
+ resp = post_file_to_w3c_validator(file_path, 'HTML 4.01 Strict')
22
+ valid_response?(resp)
23
+ end
24
+ end
@@ -1,96 +1,63 @@
1
- module YMDP
2
- # Some useful methods that make working with files easier.
1
+ # Provides a wrapper around common calls that interact with the file system.
2
+ #
3
+ module F
4
+
5
+ module_function
6
+
7
+ # Concatenates together the contents of all the files in the <tt>source_path</tt>
8
+ # into the <tt>destination_path</tt>.
3
9
  #
4
- module FileSupport
5
- # Concatenates together the contents of all the files in the <tt>source_path</tt>
6
- # into the <tt>destination_path</tt>.
7
- #
8
- def concat_files(source_path, destination_path)
9
- File.open(destination_path, "a") do |output|
10
- Dir[source_path].each do |path|
11
- File.open(path) do |f|
12
- output.puts f.read
13
- end
14
- end
10
+ def concat_files(source_path, destination_path)
11
+ File.open(destination_path, "a") do |output|
12
+ Dir[source_path].each do |path|
13
+ output.puts File.read(path)
15
14
  end
16
15
  end
17
-
18
- # If the file at <tt>path</tt> exists, prompt the user to overwrite it. If the file doesn't
19
- # exist, return true.
20
- #
21
- def confirm_overwrite(path)
22
- if File.exists?(path)
23
- $stdout.puts "File exists: #{File.expand_path(path)}"
24
- $stdout.print " overwrite? (y/n)"
25
- answer = $stdin.gets
26
-
27
- answer =~ /^y/i
28
- else
29
- true
30
- end
31
- end
32
-
33
- # Parses out the <tt>BASE_PATH</tt> constant from filenames to display them in a
34
- # friendlier way.
35
- #
36
- # TODO: Refactor this so it doesn't use a constant.
37
- #
38
- def display_path(path)
39
- path = File.expand_path(path)
40
- path.gsub(BASE_PATH, "")
41
- end
42
-
43
- # Saves the <tt>output</tt> string to the <tt>destination_path</tt> given
44
- #
45
- def save_to_file(output, destination_path)
46
- unless File.exists?(destination_path)
47
- File.open(destination_path, "w") do |w|
48
- w.write(output)
49
- end
16
+ end
17
+
18
+ # Saves the <tt>output</tt> string to the <tt>destination_path</tt> given.
19
+ #
20
+ # Returns <tt>true</tt> if the destination file was newly created, <tt>false</tt> if
21
+ # it already existed.
22
+ #
23
+ def save_to_file(output, destination_path)
24
+ if File.exists?(destination_path)
25
+ false
26
+ else
27
+ File.open(destination_path, "w") do |w|
28
+ w.write(output)
50
29
  end
30
+ true
51
31
  end
52
-
53
- # Given a <tt>path</tt> and <tt>line_number</tt>, returns the line and two lines previous
54
- #
55
- # Used for displaying validation errors.
56
- #
57
- def get_line_from_file(path, line_number)
58
- line_number = line_number.to_i
59
- output = ""
60
- lines = []
61
-
62
- File.open(path) do |f|
63
- lines = f.readlines
64
- end
65
-
66
- output += "\n"
67
-
68
- 3.times do |i|
69
- line = lines[line_number-(3-i)]
70
- output += line if line
71
- end
72
-
73
- output += "\n"
74
-
75
- output
32
+ end
33
+
34
+ # Given a <tt>path</tt> and <tt>line_number</tt>, returns the line and two lines previous
35
+ #
36
+ # Used for displaying validation errors.
37
+ #
38
+ def get_line_from_file(path, line_number)
39
+ line_number = line_number.to_i
40
+ output = "\n"
41
+ lines = File.readlines(path)
42
+
43
+ 3.times do |i|
44
+ line = lines[line_number-(3-i)]
45
+ output += line if line
76
46
  end
47
+
48
+ output += "\n"
49
+ output
77
50
  end
78
- end
79
51
 
80
- # Provide a wrapper around system calls so they can be mocked in tests.
81
- #
82
- class F
83
- extend YMDP::FileSupport
84
-
85
52
  # Execute a system command. If the parameter <tt>:return</tt> is true, execute the command
86
53
  # with the backtick (`) command and return the results. Otherwise, just execute the command
87
54
  # and let the output go to the screen.
88
55
  #
89
- def self.execute(command, params={})
56
+ def execute(command, params={})
90
57
  if params[:return]
91
58
  `#{command}`
92
59
  else
93
- system command
60
+ Kernel.system command
94
61
  end
95
62
  end
96
63
  end
@@ -4,12 +4,12 @@ require 'timer'
4
4
  require 'compiler/template'
5
5
 
6
6
  module YMDP
7
- module Yaml
8
- module Support
7
+ module Yaml #:nodoc:
8
+ module Support #:nodoc:
9
9
  FILENAME_REGEXP = /(.*)_(..-..)\.yml$/
10
10
 
11
11
  def language_path(lang)
12
- "#{BASE_PATH}/app/assets/yrb/#{lang}"
12
+ "#{base_path}/app/assets/yrb/#{lang}"
13
13
  end
14
14
 
15
15
  def base_filename(path)
@@ -31,12 +31,12 @@ module YMDP
31
31
  end
32
32
  end
33
33
 
34
- module YRB
35
- module Support
34
+ module YRB #:nodoc:
35
+ module Support #:nodoc:
36
36
  FILENAME_REGEXP = /(.*)_(..-..)\.pres$/
37
37
 
38
38
  def language_path(lang)
39
- "#{BASE_PATH}/app/assets/yrb/#{lang}"
39
+ "#{base_path}/app/assets/yrb/#{lang}"
40
40
  end
41
41
 
42
42
  def base_filename(path)
@@ -58,8 +58,8 @@ module YMDP
58
58
  end
59
59
  end
60
60
 
61
- module Translator
62
- module Support
61
+ module Translator #:nodoc:
62
+ module Support #:nodoc:
63
63
  # Mapping of the way Yahoo! Mail represents country codes with the way Google Translate does.
64
64
  #
65
65
  # The key is the Yahoo! Mail representation, and the value is the code Google Translate would expect.
@@ -87,13 +87,10 @@ module YMDP
87
87
  }
88
88
  end
89
89
 
90
- #
91
90
  # Finds English language translation keys which have not been translated
92
91
  # and translates them through Google Translate.
93
92
  #
94
- class Base
95
- include YMDP::FileSupport
96
- extend YMDP::FileSupport
93
+ class Base < YMDP::Base
97
94
  include YMDP::Translator::Support
98
95
 
99
96
  def self.original_translations
@@ -108,10 +105,14 @@ module YMDP
108
105
  raise "Define in child"
109
106
  end
110
107
 
108
+ def self.language_path(lang)
109
+ raise "Define in child"
110
+ end
111
+
111
112
  def self.translate
112
113
  Timer.new(:title => "YMDP").time do
113
114
  original_translations.each do |path|
114
- puts "Processing #{display_path(path)}"
115
+ $stdout.puts "Processing #{display_path(path)}"
115
116
  template.new(path).copy
116
117
  end
117
118
  end
@@ -127,14 +128,12 @@ module YMDP
127
128
  @filename = base_filename(path)
128
129
  end
129
130
 
130
- def copy
131
- copy_lines_to_all_locales
131
+ def language(path)
132
+ raise "Define in child"
132
133
  end
133
134
 
134
- def non_english_locales
135
- @non_english_locales ||= LOCALES.select do |lang, code|
136
- lang !~ /^en/
137
- end
135
+ def copy
136
+ copy_lines_to_all_locales
138
137
  end
139
138
 
140
139
  def non_us_locales
@@ -156,9 +155,9 @@ module YMDP
156
155
 
157
156
  def write_content(destination, content)
158
157
  unless content.blank?
159
- puts "Writing to #{display_path(destination)}"
160
- puts content
161
- puts
158
+ $stdout.puts "Writing to #{display_path(destination)}"
159
+ $stdout.puts content
160
+ $stdout.puts
162
161
  File.open(destination, "a") do |f|
163
162
  f.puts
164
163
  f.puts new_translation_message
@@ -185,11 +184,11 @@ module YMDP
185
184
 
186
185
  def each_line
187
186
  output = []
188
- File.open(path, "r") do |f|
189
- f.readlines.each do |line|
190
- new_line = yield line
191
- output << new_line
192
- end
187
+ @lines ||= File.readlines(path)
188
+
189
+ @lines.each do |line|
190
+ new_line = yield line
191
+ output << new_line
193
192
  end
194
193
  output.flatten.join("\n")
195
194
  end
@@ -204,10 +203,6 @@ module YMDP
204
203
  @all_keys
205
204
  end
206
205
 
207
- def self.all_source_files
208
- raise "Define in child"
209
- end
210
-
211
206
  def parse_template(p)
212
207
  raise "Define in child"
213
208
  end
@@ -225,9 +220,13 @@ module YMDP
225
220
  end
226
221
  end
227
222
 
223
+ def key_is_new?(k, lang)
224
+ k && !all_keys(lang).has_key?(k)
225
+ end
226
+
228
227
  def translate_new_key(line, lang)
229
228
  k, v = key_and_value_from_line(line)
230
- if k && !all_keys(lang).has_key?(k)
229
+ if key_is_new?(k, lang)
231
230
  format(k, translate(v, lang))
232
231
  else
233
232
  nil
@@ -242,9 +241,11 @@ module YMDP
242
241
  end
243
242
 
244
243
  def pre_process(value, lang)
245
- while value =~ /(\{\{[^\{]*\}\})/
244
+ vars = []
245
+ index = 0
246
+ while value =~ /(\{\d+\})/
246
247
  vars << $1
247
- value.sub!(/(\{\{[^\{]*\}\})/, "[#{index}]")
248
+ value.sub!(/(\{\d+\})/, "[#{index}]")
248
249
  index += 1
249
250
  end
250
251
  value
@@ -276,7 +277,7 @@ module YMDP
276
277
 
277
278
  while value =~ /\[(\d)\]/
278
279
  index = $1.to_i
279
- value.sub!(/\[#{index}\]/, vars[index])
280
+ value.sub!(/\[#{index}\]/, "{#{index}}")
280
281
  end
281
282
 
282
283
  value.gsub!(/\((0)\)/, "{0}")
@@ -301,7 +302,7 @@ module YMDP
301
302
  end
302
303
 
303
304
  # Usage:
304
- # YMDP::Translator::Yaml.new().translate
305
+ # YMDP::Translator::Yaml.new().copy
305
306
  #
306
307
  class Yaml < Base
307
308
  include YMDP::Yaml::Support
@@ -341,7 +342,7 @@ module YMDP
341
342
  end
342
343
 
343
344
  # Usage:
344
- # YMDP::Translator::YRB.new().translate
345
+ # YMDP::Translator::YRB.new().copy
345
346
  #
346
347
  class YRB < Base
347
348
  include YMDP::YRB::Support
@@ -360,7 +361,7 @@ module YMDP
360
361
  end
361
362
 
362
363
  def parse_template(p)
363
- YMDP::Template::YRB.new(:file => p, :domain => "staging").to_hash
364
+ YMDP::Compiler::Template::YRB.new(:file => p, :domain => "staging").to_hash
364
365
  end
365
366
 
366
367
  def format(key, value)
@@ -1,5 +1,381 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "ApplicationView" do
4
+ before(:each) do
5
+ @assets_directory = "/om/assets/abcdefg_1"
6
+ @view = YMDP::View.new(@assets_directory)
7
+ stub_io
8
+ end
9
+
10
+ describe "languages" do
11
+ it "should return supported languages" do
12
+ Dir.stub!(:[]).and_return(["yrb/en-US", "yrb/de-DE", "yrb/es-ES"])
13
+ @view.supported_languages.should == ["en-US", "de-DE", "es-ES"]
14
+ end
15
+
16
+ it "should raise an error if en-US doesn't exist" do
17
+ Dir.stub!(:[]).and_return(["yrb/de-DE", "yrb/es-ES"])
18
+ lambda {
19
+ @view.supported_languages
20
+ }.should raise_error("Default YRB key en-US not found")
21
+ end
22
+
23
+ it "should return english languages" do
24
+ Dir.stub!(:[]).and_return(["yrb/en-US", "yrb/de-DE", "yrb/es-ES", "en-SG"])
25
+ @view.english_languages.should == ["en-US", "en-SG"]
26
+ end
27
+ end
28
+
29
+ describe "javascript_include" do
30
+ describe "local JavaScript" do
31
+ it "should include local JavaScript asset" do
32
+ filename = "application.js"
33
+ @view.javascript_include(filename).should == "<script src='#{@assets_directory}/javascripts/#{filename}' type='text/javascript' charset='utf-8'></script>"
34
+ end
35
+
36
+ it "should append .js to local JavaScript filename" do
37
+ pending
38
+ filename = "application"
39
+ @view.javascript_include(filename).should == "<script src='#{@assets_directory}/javascripts/#{filename}.js' type='text/javascript' charset='utf-8'></script>"
40
+ end
41
+ end
42
+
43
+ describe "external JavaScript" do
44
+ it "should include external JavaScript assets" do
45
+ filename = "http://www.site.com/application.js"
46
+ @view.javascript_include(filename).should == "<script src='#{filename}' type='text/javascript' charset='utf-8'></script>"
47
+ end
48
+
49
+ it "should append .js to external JavaScript filename" do
50
+ pending
51
+ filename = "http://www.site.com/application"
52
+ @view.javascript_include(filename).should == "<script src='#{filename}.js' type='text/javascript' charset='utf-8'></script>"
53
+ end
54
+ end
55
+
56
+ it "should include firebug lite" do
57
+ @view.include_firebug_lite.should == "<script src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js' type='text/javascript' charset='utf-8'></script>"
58
+ end
59
+ end
60
+
61
+ describe "render" do
62
+ before(:each) do
63
+ @processed_template = "processed template"
64
+ end
65
+
66
+ describe ":partial" do
67
+ describe "single" do
68
+ describe "Haml" do
69
+ it "should render a partial if a Haml file exists in app/views" do
70
+ File.stub!(:exists?).with(/app\/views\/_application.html.haml$/).and_return(true)
71
+ @view.stub!(:process_haml).and_return(@processed_template)
72
+ @view.render(:partial => 'application').should == @processed_template
73
+ end
74
+
75
+ it "should render a partial if a Haml file exists in app/views/shared" do
76
+ File.stub!(:exists?).with(/app\/views\/shared\/_application.html.haml$/).and_return(true)
77
+ @view.stub!(:process_haml).and_return(@processed_template)
78
+ @view.render(:partial => 'application').should == @processed_template
79
+ end
80
+ end
81
+
82
+ describe "HTML" do
83
+ it "should render a partial if an HTML file exists in app/views" do
84
+ File.stub!(:exists?).with(/app\/views\/_application.html$/).and_return(true)
85
+ @view.stub!(:process_template).and_return(@processed_template)
86
+ @view.render(:partial => 'application').should == @processed_template
87
+ end
88
+
89
+ it "should render a partial if an HTML file exists in app/views/shared" do
90
+ File.stub!(:exists?).with(/app\/views\/shared\/_application.html$/).and_return(true)
91
+ @view.stub!(:process_template).and_return(@processed_template)
92
+ @view.render(:partial => 'application').should == @processed_template
93
+ end
94
+ end
95
+
96
+ describe "ERB" do
97
+ it "should render a partial if an ERB file exists in app/views" do
98
+ File.stub!(:exists?).with(/app\/views\/_application.html.erb$/).and_return(true)
99
+ @view.stub!(:process_template).and_return(@processed_template)
100
+ @view.render(:partial => 'application').should == @processed_template
101
+ end
102
+
103
+ it "should render a partial if an ERB file exists in app/views/shared" do
104
+ File.stub!(:exists?).with(/app\/views\/shared\/_application.html.erb$/).and_return(true)
105
+ @view.stub!(:process_template).and_return(@processed_template)
106
+ @view.render(:partial => 'application').should == @processed_template
107
+ end
108
+ end
109
+ end
4
110
 
111
+ describe "multiple" do
112
+ describe "Haml" do
113
+ it "should render multiple partials" do
114
+ File.stub!(:exists?).with(/app\/views\/_application.html.haml$/).and_return(true)
115
+ File.stub!(:exists?).with(/app\/views\/_sidebar.html.haml$/).and_return(true)
116
+
117
+ @application_haml = "application haml"
118
+ @sidebar_haml = "sidebar haml"
119
+
120
+ @application_file = mock('file', :read => @application_haml)
121
+ @sidebar_file = mock('file', :read => @sidebar_haml)
122
+
123
+ File.stub!(:open).with(/_application.html.haml$/, anything).and_yield(@application_file)
124
+ File.stub!(:open).with(/_sidebar.html.haml$/, anything).and_yield(@sidebar_file)
125
+
126
+ @view.stub!(:process_haml).and_return("application", "sidebar")
127
+
128
+ @view.render(:partial => ['application', 'sidebar']).should == "application\nsidebar"
129
+ end
130
+ end
131
+
132
+ describe "ERB" do
133
+ it "should render multiple partials" do
134
+ File.stub!(:exists?).with(/app\/views\/_application.html.erb$/).and_return(true)
135
+ File.stub!(:exists?).with(/app\/views\/_sidebar.html.erb$/).and_return(true)
136
+
137
+ @application_template = "application erb"
138
+ @sidebar_template = "sidebar erb"
139
+
140
+ @application_file = mock('file', :read => @application_template)
141
+ @sidebar_file = mock('file', :read => @sidebar_template)
142
+
143
+ File.stub!(:open).with(/_application.html.erb$/, anything).and_yield(@application_file)
144
+ File.stub!(:open).with(/_sidebar.html.erb$/, anything).and_yield(@sidebar_file)
145
+
146
+ @view.stub!(:process_template).and_return("application", "sidebar")
147
+
148
+ @view.render(:partial => ['application', 'sidebar']).should == "application\nsidebar"
149
+ end
150
+ end
151
+
152
+ describe "HTML" do
153
+ it "should render multiple partials" do
154
+ File.stub!(:exists?).with(/app\/views\/_application.html$/).and_return(true)
155
+ File.stub!(:exists?).with(/app\/views\/_sidebar.html$/).and_return(true)
156
+
157
+ @application_template = "application html"
158
+ @sidebar_template = "sidebar html"
159
+
160
+ @application_file = mock('file', :read => @application_template)
161
+ @sidebar_file = mock('file', :read => @sidebar_template)
162
+
163
+ File.stub!(:open).with(/_application.html$/, anything).and_yield(@application_file)
164
+ File.stub!(:open).with(/_sidebar.html$/, anything).and_yield(@sidebar_file)
165
+
166
+ @view.stub!(:process_template).and_return("application", "sidebar")
167
+
168
+ @view.render(:partial => ['application', 'sidebar']).should == "application\nsidebar"
169
+ end
170
+ end
171
+ end
172
+
173
+ it "should raise an error if partial can't be found" do
174
+ File.stub!(:exists?).and_return(false)
175
+ lambda {
176
+ @view.render(:partial => 'application')
177
+ }.should raise_error("Could not find partial: application")
178
+ end
179
+ end
180
+
181
+ describe ":javascript" do
182
+ before(:each) do
183
+
184
+ @config = mock('config', :compress_embedded_js? => false, :validate_embedded_js? => false)
185
+ reset_constant(:CONFIG, @config)
186
+
187
+ @compressed_template = "compressed template"
188
+ @processed_script = "<script type='text/javascript'>\n#{@processed_template}\n</script>"
189
+ @compressed_script = "<script type='text/javascript'>\n#{@compressed_template}\n</script>"
190
+ YMDP::Compressor::JavaScript.stub!(:compress).and_return(@compressed_template)
191
+ YMDP::Validator::JavaScript.stub!(:validate)
192
+ end
193
+
194
+ describe "single" do
195
+ before(:each) do
196
+ File.stub!(:exists?).and_return(true)
197
+ @view.stub(:process_template).and_return(@processed_template)
198
+ end
199
+
200
+ it "should render a compressed partial" do
201
+ @config.stub!(:compress_embedded_js?).and_return(true)
202
+ @view.render(:javascript => 'application').should == @compressed_script
203
+ end
204
+
205
+ it "should render an uncompressed partial" do
206
+ @config.stub!(:compress_embedded_js?).and_return(false)
207
+ @view.render(:javascript => 'application').should == @processed_script
208
+ end
209
+
210
+ it "should render compressed without tags" do
211
+ @config.stub!(:compress_embedded_js?).and_return(true)
212
+ @view.render(:javascript => 'application', :tags => false).should == @compressed_template
213
+ end
214
+
215
+ it "should render uncompressed without tags" do
216
+ @config.stub!(:compress_embedded_js?).and_return(false)
217
+ @view.render(:javascript => 'application', :tags => false).should == @processed_template
218
+ end
219
+
220
+ it "should validate with config true" do
221
+ @config.stub!(:validate_embedded_js?).and_return(true)
222
+ F.should_receive(:save_to_file).with(anything, "./tmp/application.js").and_return(true)
223
+ YMDP::Validator::JavaScript.should_receive(:validate)
224
+ @view.render(:javascript => 'application')
225
+ end
226
+
227
+ it "should not validate with config false" do
228
+ @config.stub!(:validate_embedded_js?).and_return(true)
229
+ F.should_receive(:save_to_file).with(anything, "./tmp/application.js").and_return(false)
230
+ YMDP::Validator::JavaScript.should_not_receive(:validate)
231
+ @view.render(:javascript => 'application')
232
+ end
233
+
234
+ it "should not validate if file exists and config true" do
235
+ @config.stub!(:validate_embedded_js?).and_return(false)
236
+ F.should_receive(:save_to_file).with(anything, "./tmp/application.js").and_return(true)
237
+ YMDP::Validator::JavaScript.should_not_receive(:validate)
238
+ @view.render(:javascript => 'application')
239
+ end
240
+
241
+ it "should not validate if file exists and config false" do
242
+ @config.stub!(:validate_embedded_js?).and_return(false)
243
+ F.should_receive(:save_to_file).with(anything, "./tmp/application.js").and_return(true)
244
+ YMDP::Validator::JavaScript.should_not_receive(:validate)
245
+ @view.render(:javascript => 'application')
246
+ end
247
+ end
248
+
249
+ describe "multiple" do
250
+ before(:each) do
251
+ File.stub!(:exists?).with(/app\/javascripts\/application.js$/).and_return(true)
252
+ File.stub!(:exists?).with(/app\/javascripts\/sidebar.js$/).and_return(true)
253
+
254
+ @application_template = "application js"
255
+ @sidebar_template = "sidebar js"
256
+
257
+ @application_file = mock('file', :read => @application_template)
258
+ @sidebar_file = mock('file', :read => @sidebar_template)
259
+
260
+ File.stub!(:open).with(/application.js$/, anything).and_yield(@application_file)
261
+ File.stub!(:open).with(/sidebar.js$/, anything).and_yield(@sidebar_file)
262
+
263
+ @view.stub!(:process_template).and_return("application", "sidebar")
264
+ end
265
+
266
+ it "should render multiple partials" do
267
+ @view.render(:javascript => ['application', 'sidebar']).should == "<script type='text/javascript'>\napplication\nsidebar\n</script>"
268
+ end
269
+
270
+ it "should render multiple partials without tags" do
271
+ @view.render(:javascript => ['application', 'sidebar'], :tags => false).should == "application\nsidebar"
272
+ end
273
+
274
+ it "should render multiple partials to a filename" do
275
+ F.should_receive(:save_to_file).with(anything, "./tmp/javascripts.js")
276
+ @view.render(:javascript => ['application', 'sidebar'], :filename => 'javascripts')
277
+ end
278
+ end
279
+
280
+ it "should not raise an error if partial can't be found" do
281
+ File.stub!(:exists?).and_return(false)
282
+ lambda {
283
+ @view.render(:javascript => 'application')
284
+ }.should_not raise_error
285
+ end
286
+
287
+ it "should return blank string if partial can't be found" do
288
+ File.stub!(:exists?).and_return(false)
289
+ lambda {
290
+ @view.render(:javascript => 'application').should == ""
291
+ }.should_not raise_error
292
+ end
293
+ end
294
+
295
+ describe ":stylesheet" do
296
+ before(:each) do
297
+ @config = mock('config', :compress_css? => false)
298
+ reset_constant(:CONFIG, @config)
299
+
300
+ @compressed_template = "compressed template"
301
+ @processed_script = "<style type='text/css'>\n#{@processed_template}\n</style>"
302
+ @compressed_script = "<style type='text/css'>\n#{@compressed_template}\n</style>"
303
+ YMDP::Compressor::Stylesheet.stub!(:compress).and_return(@compressed_template)
304
+ YMDP::Validator::Stylesheet.stub!(:validate).and_return(true)
305
+ end
306
+
307
+ describe "single" do
308
+ before(:each) do
309
+ File.stub!(:exists?).and_return(true)
310
+ @view.stub(:process_template).and_return(@processed_template)
311
+ end
312
+
313
+ it "should render a compressed partial" do
314
+ @config.stub!(:compress_css?).and_return(true)
315
+ @view.render(:stylesheet => 'application').should == @compressed_script
316
+ end
317
+
318
+ it "should render an uncompressed partial" do
319
+ @config.stub!(:compress_css?).and_return(false)
320
+ @view.render(:stylesheet => 'application').should == @processed_script
321
+ end
322
+
323
+ it "should render compressed without tags" do
324
+ @config.stub!(:compress_css?).and_return(true)
325
+ @view.render(:stylesheet => 'application', :tags => false).should == @compressed_template
326
+ end
327
+
328
+ it "should render uncompressed without tags" do
329
+ @config.stub!(:compress_css?).and_return(false)
330
+ @view.render(:stylesheet => 'application', :tags => false).should == @processed_template
331
+ end
332
+ end
333
+
334
+ describe "multiple" do
335
+ before(:each) do
336
+ File.stub!(:exists?).with(/app\/stylesheets\/application.css$/).and_return(true)
337
+ File.stub!(:exists?).with(/app\/stylesheets\/sidebar.css$/).and_return(true)
338
+
339
+ @application_template = "application css"
340
+ @sidebar_template = "sidebar css"
341
+
342
+ @application_file = mock('file', :read => @application_template)
343
+ @sidebar_file = mock('file', :read => @sidebar_template)
344
+
345
+ File.stub!(:open).with(/application.css$/, anything).and_yield(@application_file)
346
+ File.stub!(:open).with(/sidebar.css$/, anything).and_yield(@sidebar_file)
347
+
348
+ @view.stub!(:process_template).and_return("application", "sidebar")
349
+ end
350
+
351
+ it "should render multiple partials" do
352
+ @view.render(:stylesheet => ['application', 'sidebar']).should == "<style type='text/css'>\napplication\nsidebar\n</style>"
353
+ end
354
+
355
+ it "should render multiple partials without tags" do
356
+ @view.render(:stylesheet => ['application', 'sidebar'], :tags => false).should == "application\nsidebar"
357
+ end
358
+
359
+ it "should render multiple partials to a filename" do
360
+ F.should_receive(:save_to_file).with(anything, "./tmp/stylesheets.css")
361
+ @view.render(:stylesheet => ['application', 'sidebar'], :filename => 'stylesheets')
362
+ end
363
+ end
364
+
365
+ it "should not raise an error if partial can't be found" do
366
+ File.stub!(:exists?).and_return(false)
367
+ lambda {
368
+ @view.render(:stylesheet => 'application')
369
+ }.should_not raise_error
370
+ end
371
+
372
+ it "should return blank string if partial can't be found" do
373
+ File.stub!(:exists?).and_return(false)
374
+ lambda {
375
+ @view.render(:stylesheet => 'application').should == ""
376
+ }.should_not raise_error
377
+ end
378
+ end
379
+
380
+ end
5
381
  end