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.
- data/History.txt +21 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/ymdp/application_view.rb +153 -116
- data/lib/ymdp/base.rb +22 -1
- data/lib/ymdp/compiler/domains.rb +1 -1
- data/lib/ymdp/compiler/git_helper.rb +18 -15
- data/lib/ymdp/compiler/template.rb +46 -40
- data/lib/ymdp/configuration/config.rb +3 -3
- data/lib/ymdp/processor/compressor.rb +66 -13
- data/lib/ymdp/processor/form_post.rb +2 -2
- data/lib/ymdp/processor/validator.rb +36 -16
- data/lib/ymdp/processor/w3c.rb +20 -18
- data/lib/ymdp/support/file.rb +45 -78
- data/lib/ymdp/translator/base.rb +39 -38
- data/spec/application_view_spec.rb +376 -0
- data/spec/compiler_spec.rb +49 -7
- data/spec/compiler_template_spec.rb +243 -11
- data/spec/compressor_spec.rb +123 -0
- data/spec/configuration_spec.rb +116 -3
- data/spec/file_spec.rb +103 -0
- data/spec/git_helper_spec.rb +53 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/stubs.rb +42 -2
- data/spec/translator_spec.rb +317 -1
- data/spec/validator_spec.rb +171 -0
- data/spec/ymdp_base_spec.rb +40 -0
- data/ymdp.gemspec +11 -4
- metadata +11 -4
- data/lib/ymdp/helpers.rb +0 -4
- data/lib/ymdp/support/blank.rb +0 -58
data/spec/configuration_spec.rb
CHANGED
@@ -1,13 +1,41 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "Configuration" do
|
4
|
+
before(:each) do
|
5
|
+
stub_screen_io
|
6
|
+
reset_constant(:YMDP_ENV, "test")
|
7
|
+
end
|
8
|
+
|
4
9
|
describe "Config" do
|
5
10
|
before(:each) do
|
11
|
+
# using strings for some boolean values to avoid false positives
|
12
|
+
|
6
13
|
@config_yml = {
|
7
14
|
"config" => {
|
8
15
|
"username" => "captmal",
|
9
|
-
"password" => "
|
10
|
-
"growl" =>
|
16
|
+
"password" => "inara",
|
17
|
+
"growl" => 'growl',
|
18
|
+
"verbose" => 'verbose',
|
19
|
+
"compress" => {
|
20
|
+
"embedded_js" => "compress_embedded_js",
|
21
|
+
"js_assets" => "compress_js_assets",
|
22
|
+
"css" => "compress_css",
|
23
|
+
"obfuscate" => "obfuscate"
|
24
|
+
},
|
25
|
+
"validate" => {
|
26
|
+
"embedded_js" => {
|
27
|
+
"test" => "validate_embedded_js"
|
28
|
+
},
|
29
|
+
"js_assets" => {
|
30
|
+
"test" => "validate_js_assets"
|
31
|
+
},
|
32
|
+
"json_assets" => {
|
33
|
+
"test" => "validate_json_assets"
|
34
|
+
},
|
35
|
+
"html" => {
|
36
|
+
"test" => "validate_html"
|
37
|
+
}
|
38
|
+
}
|
11
39
|
}
|
12
40
|
}
|
13
41
|
YAML.stub!(:load_file).and_return(@config_yml)
|
@@ -22,10 +50,60 @@ describe "Configuration" do
|
|
22
50
|
@config.password.should == @config_yml["config"]["password"]
|
23
51
|
end
|
24
52
|
|
25
|
-
it "should return growl" do
|
53
|
+
it "should return growl?" do
|
26
54
|
@config.growl?.should == @config_yml["config"]["growl"]
|
27
55
|
end
|
28
56
|
|
57
|
+
it "should return verbose?" do
|
58
|
+
@config.verbose?.should == @config_yml["config"]["verbose"]
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "compress settings" do
|
62
|
+
|
63
|
+
it "should return compress_embedded_js?" do
|
64
|
+
@config.compress_embedded_js?.should == @config_yml["config"]["compress"]["embedded_js"]
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return compress_js_assets?" do
|
68
|
+
@config.compress_js_assets?.should == @config_yml["config"]["compress"]["js_assets"]
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return compress_css?" do
|
72
|
+
@config.compress_css?.should == @config_yml["config"]["compress"]["css"]
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return obfuscate?" do
|
76
|
+
@config.obfuscate?.should == @config_yml["config"]["compress"]["obfuscate"]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "validate settings" do
|
81
|
+
it "should return validate_embedded_js?" do
|
82
|
+
@config.validate_embedded_js?.should == @config_yml["config"]["validate"]["embedded_js"][YMDP_ENV]
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should return validate_js_assets?" do
|
86
|
+
@config.validate_js_assets?.should == @config_yml["config"]["validate"]["js_assets"][YMDP_ENV]
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should return validate_json_assets?" do
|
90
|
+
@config.validate_json_assets?.should == @config_yml["config"]["validate"]["json_assets"][YMDP_ENV]
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should return validate_html?" do
|
94
|
+
@config.validate_html?.should == @config_yml["config"]["validate"]["html"][YMDP_ENV]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "each" do
|
99
|
+
it "should go through each of the values" do
|
100
|
+
$stdout.should_receive(:puts).exactly(@config_yml["config"].keys.length).times
|
101
|
+
@config.each do |key, value|
|
102
|
+
$stdout.puts key
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
29
107
|
describe "[]" do
|
30
108
|
it "should return username" do
|
31
109
|
@config["username"].should == @config_yml["config"]["username"]
|
@@ -35,5 +113,40 @@ describe "Configuration" do
|
|
35
113
|
@config["password"].should == @config_yml["config"]["password"]
|
36
114
|
end
|
37
115
|
end
|
116
|
+
|
117
|
+
describe "file not found" do
|
118
|
+
before(:each) do
|
119
|
+
File.stub!(:exists?).and_return(false)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should raise an error" do
|
123
|
+
lambda {
|
124
|
+
@config = YMDP::Configuration::Config.new
|
125
|
+
}.should raise_error(/File not found/)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should output to the screen" do
|
129
|
+
$stdout.should_receive(:puts).with(/with the following command/)
|
130
|
+
lambda {
|
131
|
+
@config = YMDP::Configuration::Config.new
|
132
|
+
}.should raise_error(/File not found/)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "Server" do
|
138
|
+
before(:each) do
|
139
|
+
@servers_yml = {
|
140
|
+
"servers" => {
|
141
|
+
"server" => "staging"
|
142
|
+
}
|
143
|
+
}
|
144
|
+
YAML.stub!(:load_file).and_return(@servers_yml)
|
145
|
+
@servers = YMDP::Configuration::Servers.new
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should return servers hash" do
|
149
|
+
@servers.servers.should == @servers_yml["servers"]
|
150
|
+
end
|
38
151
|
end
|
39
152
|
end
|
data/spec/file_spec.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "F" do
|
4
|
+
before(:each) do
|
5
|
+
stub_file_io
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "concat_files" do
|
9
|
+
before(:each) do
|
10
|
+
Dir.stub!(:[]).with("./dir/*").and_return(["./dir/first.html", "./dir/second.html"])
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should get the directory" do
|
14
|
+
Dir.should_receive(:[]).with("./dir/*").and_return([])
|
15
|
+
F.concat_files("./dir/*", "destination")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should read each file in the directory" do
|
19
|
+
File.should_receive(:read).and_return("first", "second")
|
20
|
+
F.concat_files("./dir/*", "destination")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should write the contents of each file in the directory" do
|
24
|
+
File.stub!(:read).and_return("first", "second")
|
25
|
+
@file.should_receive(:puts).with("first")
|
26
|
+
@file.should_receive(:puts).with("second")
|
27
|
+
F.concat_files("./dir/*", "destination")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should write to the destination file" do
|
31
|
+
File.should_receive(:open).with("destination", "a").and_yield(@file)
|
32
|
+
F.concat_files("./dir/*", "destination")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "save_to_file" do
|
37
|
+
before(:each) do
|
38
|
+
@output = "output"
|
39
|
+
@destination_path = "@destination"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should check the existence of destination_path" do
|
43
|
+
File.should_receive(:exists?).with(@destination_path)
|
44
|
+
F.save_to_file(@output, @destination_path)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should return false if it exists" do
|
48
|
+
File.stub!(:exists?).with(@destination_path).and_return(true)
|
49
|
+
F.save_to_file(@output, @destination_path).should == false
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should open the destination path" do
|
53
|
+
File.should_receive(:open).with(@destination_path, "w").and_return(@file)
|
54
|
+
F.save_to_file(@output, @destination_path)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should write to the destination file" do
|
58
|
+
@file.should_receive(:write).with(@output)
|
59
|
+
F.save_to_file(@output, @destination_path)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return true" do
|
63
|
+
F.save_to_file(@output, @destination_path).should be_true
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "get_line_from_file" do
|
68
|
+
before(:each) do
|
69
|
+
@path = "path"
|
70
|
+
@lines = ["first\n", "second\n", "third\n", "fourth\n", "fifth\n", "sixth\n", "seventh\n"]
|
71
|
+
File.stub!(:readlines).with(@path).and_return(@lines)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should read lines from file" do
|
75
|
+
File.should_receive(:readlines).and_return(@lines)
|
76
|
+
F.get_line_from_file(@path, 7)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should get the previous three lines" do
|
80
|
+
F.get_line_from_file(@path, 7).should == "\nfifth\nsixth\nseventh\n\n"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# I'm not sure how to test the ` method because it calls system calls that don't seem
|
85
|
+
# reachable.
|
86
|
+
#
|
87
|
+
describe "execute" do
|
88
|
+
it "should call system" do
|
89
|
+
Kernel.should_receive(:system).with("ls")
|
90
|
+
F.execute("ls")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should call system" do
|
94
|
+
Kernel.should_receive(:system).with("ls")
|
95
|
+
F.execute("ls", :reutrn => false)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should not call system" do
|
99
|
+
Kernel.should_not_receive(:system)
|
100
|
+
F.execute("ls", :return => true)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'compiler/git_helper'
|
4
|
+
|
5
|
+
describe "GitHelper" do
|
6
|
+
before(:each) do
|
7
|
+
stub_screen_io
|
8
|
+
|
9
|
+
@repo = mock('repo')
|
10
|
+
Repo.stub!(:new).and_return(@repo)
|
11
|
+
|
12
|
+
F.stub!(:execute).with("git status", :return => true).and_return("# On branch git-helper")
|
13
|
+
@commit = mock('commit', :id => "abcdefg")
|
14
|
+
@commits = mock('commits', :first => @commit)
|
15
|
+
@repo.stub!(:commits).with("git-helper").and_return(@commits)
|
16
|
+
|
17
|
+
@git = YMDP::GitHelper.new
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should instantiate" do
|
21
|
+
@git.should_not be_nil
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should get hash" do
|
25
|
+
@git.get_hash("branch").should == "abcdefg"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should get current branch" do
|
29
|
+
@git.get_current_branch.should == "git-helper"
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "commit" do
|
33
|
+
before(:each) do
|
34
|
+
@repo.stub!(:add)
|
35
|
+
F.stub!(:execute).with(/git commit/, :return => true).and_return("Committed")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should add current directory" do
|
39
|
+
@repo.should_receive(:add).with(".")
|
40
|
+
@git.do_commit("message")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should commit with message" do
|
44
|
+
F.should_receive(:execute).with("git commit -am \"message\"", :return => true).and_return("Committed")
|
45
|
+
@git.do_commit("message")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should output results" do
|
49
|
+
$stdout.should_receive(:puts).with("Committed")
|
50
|
+
@git.do_commit("message")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/stubs.rb
CHANGED
@@ -3,6 +3,7 @@ def stub_io
|
|
3
3
|
stub_file_io
|
4
4
|
stub_file_utils
|
5
5
|
stub_yaml
|
6
|
+
stub_growl
|
6
7
|
end
|
7
8
|
|
8
9
|
def stub_screen_io
|
@@ -13,9 +14,14 @@ end
|
|
13
14
|
def stub_file_io(unprocessed_file="")
|
14
15
|
@file ||= mock('file').as_null_object
|
15
16
|
@file.stub!(:read).and_return(unprocessed_file)
|
16
|
-
|
17
|
+
@file.stub!(:write)
|
18
|
+
@file.stub!(:puts)
|
19
|
+
|
20
|
+
File.stub!(:new).and_return(@file)
|
17
21
|
File.stub!(:exists?).and_return(false)
|
18
22
|
File.stub!(:open).and_yield(@file)
|
23
|
+
File.stub!(:read).and_return(unprocessed_file)
|
24
|
+
File.stub!(:readlines).and_return(["first\n", "second\n"])
|
19
25
|
end
|
20
26
|
|
21
27
|
def stub_file_utils
|
@@ -24,6 +30,10 @@ def stub_file_utils
|
|
24
30
|
FileUtils.stub!(:cp_r)
|
25
31
|
FileUtils.stub!(:mkdir_p)
|
26
32
|
F.stub!(:concat_files)
|
33
|
+
F.stub!(:get_line_from_file).and_return("")
|
34
|
+
F.stub!(:save_to_file)
|
35
|
+
F.stub!(:save_to_tmp_file)
|
36
|
+
F.stub!(:execute).and_return("")
|
27
37
|
end
|
28
38
|
|
29
39
|
def stub_yaml(output_hash={})
|
@@ -36,9 +46,24 @@ def stub_erb(processed_file="")
|
|
36
46
|
ERB.stub!(:new).and_return(@erb)
|
37
47
|
end
|
38
48
|
|
49
|
+
def stub_haml_class
|
50
|
+
eval %(
|
51
|
+
module Haml
|
52
|
+
class Engine
|
53
|
+
end
|
54
|
+
end
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
def stub_haml(processed_file)
|
59
|
+
@haml = mock('haml').as_null_object
|
60
|
+
@haml.stub!(:render).and_return(processed_file)
|
61
|
+
Haml::Engine.stub!(:new).and_return(@haml)
|
62
|
+
end
|
63
|
+
|
39
64
|
def stub_git_helper
|
40
65
|
@git_helper = mock('git_helper').as_null_object
|
41
|
-
GitHelper.stub!(:new).and_return(@git_helper)
|
66
|
+
YMDP::GitHelper.stub!(:new).and_return(@git_helper)
|
42
67
|
end
|
43
68
|
|
44
69
|
def stub_timer
|
@@ -47,7 +72,22 @@ def stub_timer
|
|
47
72
|
Timer.stub!(:new).and_return(@timer)
|
48
73
|
end
|
49
74
|
|
75
|
+
def stub_growl
|
76
|
+
@g = Object.new
|
77
|
+
Growl.stub(:new).and_return(@g)
|
78
|
+
@g.stub(:notify).as_null_object
|
79
|
+
end
|
80
|
+
|
50
81
|
def reset_constant(constant, value)
|
51
82
|
Object.send(:remove_const, constant)
|
52
83
|
Object.const_set(constant, value)
|
84
|
+
end
|
85
|
+
|
86
|
+
def stub_config
|
87
|
+
@config = mock('config')
|
88
|
+
@config.stub!(:[]).with("doctype").and_return("HTML 4.0 Transitional")
|
89
|
+
@config.stub!(:validate_html?).and_return(false)
|
90
|
+
@config.stub!(:compress_embedded_js?).and_return(false)
|
91
|
+
@config.stub!(:verbose?).and_return(false)
|
92
|
+
reset_constant(:CONFIG, @config)
|
53
93
|
end
|
data/spec/translator_spec.rb
CHANGED
@@ -3,4 +3,320 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
require 'translator/base'
|
4
4
|
|
5
5
|
describe "Translator" do
|
6
|
-
|
6
|
+
before(:each) do
|
7
|
+
stub_timer
|
8
|
+
stub_screen_io
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Yaml" do
|
12
|
+
before(:each) do
|
13
|
+
YAML.stub!(:load_file).and_return({"hi" => "what"})
|
14
|
+
@original_translations = ["application_en-US.yml", "sidebar_en-US.yml"]
|
15
|
+
Dir.stub!(:[]).with(/app\/assets\/yrb\/en-US\/\*\.yml/).and_return(@original_translations)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "class methods" do
|
19
|
+
it "should output a message for each file" do
|
20
|
+
File.stub!(:readlines).and_return([""])
|
21
|
+
@original_translations.each do |file|
|
22
|
+
$stdout.should_receive(:puts).with(/Processing /)
|
23
|
+
end
|
24
|
+
YMDP::Translator::Yaml.translate
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should instantiate a new template" do
|
28
|
+
@original_translations.each do |file|
|
29
|
+
@yaml = mock('yaml', :copy => true)
|
30
|
+
YMDP::Translator::Yaml.should_receive(:new).with(file).and_return(@yaml)
|
31
|
+
end
|
32
|
+
YMDP::Translator::Yaml.translate
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should copy the new template" do
|
36
|
+
@original_translations.each do |file|
|
37
|
+
@yaml = mock('yaml', :copy => true)
|
38
|
+
@yaml.should_receive(:copy)
|
39
|
+
YMDP::Translator::Yaml.stub!(:new).with(file).and_return(@yaml)
|
40
|
+
end
|
41
|
+
YMDP::Translator::Yaml.translate
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "instance methods" do
|
46
|
+
before(:each) do
|
47
|
+
@path = "path_en-US.yml"
|
48
|
+
@yml = YMDP::Translator::Yaml.new(@path)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should instantiate" do
|
52
|
+
@yml.should_not be_nil
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should copy keys" do
|
56
|
+
File.stub!(:readlines).with("path_en-US.yml").and_return(["key: value\n"])
|
57
|
+
#
|
58
|
+
@file = mock('file', :puts => true)
|
59
|
+
@file.should_receive(:puts).with(/key: translated value/)
|
60
|
+
|
61
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
62
|
+
|
63
|
+
size = YMDP::Translator::Yaml::LOCALES.size - 1
|
64
|
+
|
65
|
+
YMDP::Translator::Yaml::LOCALES.each do |lang, code|
|
66
|
+
unless lang == "en-US"
|
67
|
+
Dir.should_receive(:[]).with(/app\/assets\/yrb\/#{lang}\/\*\.yml/).and_return(["keys_#{lang}.yml"])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
Translate.stub!(:t).with("value", "ENGLISH", anything).exactly(size).and_return("translated value")
|
72
|
+
|
73
|
+
@yml.copy
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should not copy comments" do
|
77
|
+
File.stub!(:readlines).with("path_en-US.yml").and_return(["# comment\n"])
|
78
|
+
|
79
|
+
@file = mock('file', :puts => true)
|
80
|
+
@file.should_not_receive(:puts).with(/key: translated value/)
|
81
|
+
|
82
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
83
|
+
|
84
|
+
size = YMDP::Translator::Yaml::LOCALES.size - 1
|
85
|
+
Translate.stub!(:t).with("value", "ENGLISH", anything).exactly(size).and_return("translated value")
|
86
|
+
|
87
|
+
@yml.copy
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should not copy empty keys" do
|
91
|
+
File.stub!(:readlines).with("path_en-US.yml").and_return(["KEY=\n"])
|
92
|
+
|
93
|
+
@file = mock('file', :puts => true)
|
94
|
+
@file.should_not_receive(:puts).with(/key: translated value/)
|
95
|
+
|
96
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
97
|
+
|
98
|
+
size = YMDP::Translator::Yaml::LOCALES.size - 1
|
99
|
+
Translate.stub!(:t).with("value", "ENGLISH", anything).exactly(size).and_return("translated value")
|
100
|
+
|
101
|
+
@yml.copy
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should copy keys with variables" do
|
105
|
+
File.stub!(:readlines).with("path_en-US.yml").and_return(["key: value {0}\n"])
|
106
|
+
|
107
|
+
@file = mock('file', :puts => true)
|
108
|
+
@file.should_receive(:puts).with(/key: translated value {0}/)
|
109
|
+
|
110
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
111
|
+
|
112
|
+
size = YMDP::Translator::Yaml::LOCALES.size - 1
|
113
|
+
|
114
|
+
YMDP::Translator::Yaml::LOCALES.each do |lang, code|
|
115
|
+
unless lang == "en-US"
|
116
|
+
Dir.should_receive(:[]).with(/app\/assets\/yrb\/#{lang}\/\*\.yml/).and_return(["keys_#{lang}.yml"])
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
Translate.stub!(:t).with("value [0]", "ENGLISH", anything).exactly(size).and_return("translated value [0]")
|
121
|
+
|
122
|
+
@yml.copy
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "YRB" do
|
128
|
+
before(:each) do
|
129
|
+
@original_translations = ["application_en-US.pres", "sidebar_en-US.pres"]
|
130
|
+
Dir.stub!(:[]).with(/app\/assets\/yrb\/en-US\/\*\.pres/).and_return(@original_translations)
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "class methods" do
|
134
|
+
it "should output a message for each file" do
|
135
|
+
File.stub!(:readlines).and_return([""])
|
136
|
+
@original_translations.each do |file|
|
137
|
+
$stdout.should_receive(:puts).with(/Processing /)
|
138
|
+
end
|
139
|
+
YMDP::Translator::YRB.translate
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should instantiate a new template" do
|
143
|
+
@original_translations.each do |file|
|
144
|
+
@yrb = mock('yrb', :copy => true)
|
145
|
+
YMDP::Translator::YRB.should_receive(:new).with(file).and_return(@yrb)
|
146
|
+
end
|
147
|
+
YMDP::Translator::YRB.translate
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should copy the new template" do
|
151
|
+
@original_translations.each do |file|
|
152
|
+
@yrb = mock('yrb', :copy => true)
|
153
|
+
@yrb.should_receive(:copy)
|
154
|
+
YMDP::Translator::YRB.stub!(:new).with(file).and_return(@yrb)
|
155
|
+
end
|
156
|
+
YMDP::Translator::YRB.translate
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "instance methods" do
|
161
|
+
before(:each) do
|
162
|
+
@path = "path_en-US.pres"
|
163
|
+
@yrb = YMDP::Translator::YRB.new(@path)
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should instantiate" do
|
167
|
+
@yrb.should_not be_nil
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should copy keys" do
|
171
|
+
File.stub!(:readlines).with("path_en-US.pres").and_return(["KEY=value\n"])
|
172
|
+
|
173
|
+
@file = mock('file', :puts => true)
|
174
|
+
@file.should_receive(:puts).with(/KEY=translated value/)
|
175
|
+
|
176
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
177
|
+
|
178
|
+
size = YMDP::Translator::YRB::LOCALES.size - 1
|
179
|
+
|
180
|
+
@template = mock('template', :to_hash => {"key" => "value"})
|
181
|
+
YMDP::Compiler::Template::YRB.stub!(:new).and_return(@template)
|
182
|
+
|
183
|
+
YMDP::Translator::YRB::LOCALES.each do |lang, code|
|
184
|
+
unless lang == "en-US"
|
185
|
+
Dir.should_receive(:[]).with(/app\/assets\/yrb\/#{lang}\/\*\.pres/).and_return(["keys_#{lang}.pres"])
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
Translate.stub!(:t).with("value", "ENGLISH", anything).exactly(size).and_return("translated value")
|
190
|
+
|
191
|
+
@yrb.copy
|
192
|
+
end
|
193
|
+
|
194
|
+
it "should not copy comments" do
|
195
|
+
File.stub!(:readlines).with("path_en-US.pres").and_return(["# comment\n"])
|
196
|
+
|
197
|
+
@file = mock('file', :puts => true)
|
198
|
+
@file.should_not_receive(:puts).with(/KEY=translated value/)
|
199
|
+
|
200
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
201
|
+
|
202
|
+
size = YMDP::Translator::YRB::LOCALES.size - 1
|
203
|
+
Translate.stub!(:t).with("value", "ENGLISH", anything).exactly(size).and_return("translated value")
|
204
|
+
|
205
|
+
@yrb.copy
|
206
|
+
end
|
207
|
+
|
208
|
+
it "should not copy empty keys" do
|
209
|
+
File.stub!(:readlines).with("path_en-US.pres").and_return(["KEY=\n"])
|
210
|
+
|
211
|
+
@file = mock('file', :puts => true)
|
212
|
+
@file.should_not_receive(:puts).with(/KEY=translated value/)
|
213
|
+
|
214
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
215
|
+
|
216
|
+
size = YMDP::Translator::YRB::LOCALES.size - 1
|
217
|
+
Translate.stub!(:t).with("value", "ENGLISH", anything).exactly(size).and_return("translated value")
|
218
|
+
|
219
|
+
@yrb.copy
|
220
|
+
end
|
221
|
+
|
222
|
+
it "should copy keys with variables" do
|
223
|
+
File.stub!(:readlines).with("path_en-US.pres").and_return(["KEY=value {0}\n"])
|
224
|
+
|
225
|
+
@file = mock('file', :puts => true)
|
226
|
+
@file.should_receive(:puts).with(/KEY=translated value {0}/)
|
227
|
+
|
228
|
+
File.stub!(:open).with(anything, "a").and_yield(@file)
|
229
|
+
|
230
|
+
size = YMDP::Translator::YRB::LOCALES.size - 1
|
231
|
+
|
232
|
+
@template = mock('template', :to_hash => {"key" => "value"})
|
233
|
+
YMDP::Compiler::Template::YRB.stub!(:new).and_return(@template)
|
234
|
+
|
235
|
+
YMDP::Translator::YRB::LOCALES.each do |lang, code|
|
236
|
+
unless lang == "en-US"
|
237
|
+
Dir.should_receive(:[]).with(/app\/assets\/yrb\/#{lang}\/\*\.pres/).and_return(["keys_#{lang}.pres"])
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
Translate.stub!(:t).with("value [0]", "ENGLISH", anything).exactly(size).and_return("translated value [0]")
|
242
|
+
|
243
|
+
@yrb.copy
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
describe "Base" do
|
249
|
+
describe "class methods" do
|
250
|
+
it "should raise error on original_translations" do
|
251
|
+
lambda {
|
252
|
+
YMDP::Translator::Base.original_translations
|
253
|
+
}.should raise_error("Define in child")
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should raise error on all_source_files" do
|
257
|
+
lambda {
|
258
|
+
YMDP::Translator::Base.all_source_files
|
259
|
+
}.should raise_error("Define in child")
|
260
|
+
end
|
261
|
+
|
262
|
+
it "should raise error on template" do
|
263
|
+
lambda {
|
264
|
+
YMDP::Translator::Base.template
|
265
|
+
}.should raise_error("Define in child")
|
266
|
+
end
|
267
|
+
|
268
|
+
it "should raise error on translate" do
|
269
|
+
lambda {
|
270
|
+
YMDP::Translator::Base.translate
|
271
|
+
}.should raise_error("Define in child")
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
describe "instance methods" do
|
276
|
+
it "should raise an error on instantiation" do
|
277
|
+
lambda {
|
278
|
+
@base = YMDP::Translator::Base.new("path")
|
279
|
+
}.should raise_error("Define in child")
|
280
|
+
end
|
281
|
+
end
|
282
|
+
|
283
|
+
describe "raise in child" do
|
284
|
+
before(:each) do
|
285
|
+
class YMDPTranslatorBase < YMDP::Translator::Base
|
286
|
+
def language(path)
|
287
|
+
"en-US"
|
288
|
+
end
|
289
|
+
|
290
|
+
def base_filename(path)
|
291
|
+
path
|
292
|
+
end
|
293
|
+
end
|
294
|
+
@thing = YMDPTranslatorBase.new("path")
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should raise an error calling parse_template" do
|
298
|
+
lambda {
|
299
|
+
@thing.parse_template("path")
|
300
|
+
}.should raise_error("Define in child")
|
301
|
+
end
|
302
|
+
|
303
|
+
it "should raise an error calling format" do
|
304
|
+
lambda {
|
305
|
+
@thing.format("a", "b")
|
306
|
+
}.should raise_error("Define in child")
|
307
|
+
end
|
308
|
+
|
309
|
+
it "should raise an error calling key_and_value_from_line" do
|
310
|
+
lambda {
|
311
|
+
@thing.key_and_value_from_line("line")
|
312
|
+
}.should raise_error("Define in child")
|
313
|
+
end
|
314
|
+
|
315
|
+
it "should raise an error calling comment?" do
|
316
|
+
lambda {
|
317
|
+
@thing.comment?("line")
|
318
|
+
}.should raise_error("Define in child")
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|