i18n-js 0.1.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/spec/i18n_spec.rb ADDED
@@ -0,0 +1,169 @@
1
+ require "spec_helper"
2
+
3
+ if File.basename(Rails.root) != "tmp"
4
+ warn <<-TXT
5
+ \e[31;5m
6
+ WARNING: That will remove your project!
7
+ Please go to #{File.expand_path(File.dirname(__FILE__) + "/..")} and run `rake spec`\e[0m
8
+ TXT
9
+ exit 1
10
+ end
11
+
12
+ describe SimplesIdeias::I18n do
13
+ before do
14
+ # Remove temporary directory if already present
15
+ FileUtils.rm_r(Rails.root) if File.exist?(Rails.root)
16
+
17
+ # Create temporary directory to test the files generation
18
+ %w( config public/javascripts ).each do |path|
19
+ FileUtils.mkdir_p Rails.root.join(path)
20
+ end
21
+
22
+ # Overwrite defaut locales path to use fixtures
23
+ I18n.load_path = [File.dirname(__FILE__) + "/resources/locales.yml"]
24
+ end
25
+
26
+ after do
27
+ # Remove temporary directory
28
+ FileUtils.rm_r(Rails.root)
29
+ end
30
+
31
+ it "copies the configuration file" do
32
+ File.should_not be_file(SimplesIdeias::I18n.config_file)
33
+ SimplesIdeias::I18n.setup!
34
+ File.should be_file(SimplesIdeias::I18n.config_file)
35
+ end
36
+
37
+ it "keeps existing configuration file" do
38
+ File.open(SimplesIdeias::I18n.config_file, "w+") {|f| f << "ORIGINAL"}
39
+ SimplesIdeias::I18n.setup!
40
+
41
+ File.read(SimplesIdeias::I18n.config_file).should == "ORIGINAL"
42
+ end
43
+
44
+ it "copies JavaScript library" do
45
+ path = Rails.root.join("public/javascripts/i18n.js")
46
+
47
+ File.should_not be_file(path)
48
+ SimplesIdeias::I18n.setup!
49
+ File.should be_file(path)
50
+ end
51
+
52
+ it "loads configuration file" do
53
+ SimplesIdeias::I18n.setup!
54
+
55
+ SimplesIdeias::I18n.config?.should be_true
56
+ SimplesIdeias::I18n.config.should be_kind_of(HashWithIndifferentAccess)
57
+ SimplesIdeias::I18n.config.should_not be_empty
58
+ end
59
+
60
+ it "exports messages to default path when configuration file doesn't exist" do
61
+ SimplesIdeias::I18n.export!
62
+ File.should be_file(Rails.root.join("public/javascripts/translations.js"))
63
+ end
64
+
65
+ it "exports messages using the default configuration file" do
66
+ set_config "default.yml"
67
+ SimplesIdeias::I18n.should_receive(:save).with(translations, "public/javascripts/translations.js")
68
+ SimplesIdeias::I18n.export!
69
+ end
70
+
71
+ it "exports messages using custom output path" do
72
+ set_config "custom_path.yml"
73
+ SimplesIdeias::I18n.should_receive(:save).with(translations, "public/javascripts/translations/all.js")
74
+ SimplesIdeias::I18n.export!
75
+ end
76
+
77
+ it "sets default scope to * when not specified" do
78
+ set_config "no_scope.yml"
79
+ SimplesIdeias::I18n.should_receive(:save).with(translations, "public/javascripts/no_scope.js")
80
+ SimplesIdeias::I18n.export!
81
+ end
82
+
83
+ it "exports to multiple files" do
84
+ set_config "multiple_files.yml"
85
+ SimplesIdeias::I18n.export!
86
+
87
+ File.should be_file(Rails.root.join("public/javascripts/all.js"))
88
+ File.should be_file(Rails.root.join("public/javascripts/tudo.js"))
89
+ end
90
+
91
+ it "exports with multiple conditions" do
92
+ set_config "multiple_conditions.yml"
93
+ SimplesIdeias::I18n.export!
94
+ File.should be_file(Rails.root.join("public/javascripts/bitsnpieces.js"))
95
+ end
96
+
97
+ it "filters translations using scope *.date.formats" do
98
+ result = SimplesIdeias::I18n.filter(translations, "*.date.formats")
99
+ result[:en][:date].keys.should == [:formats]
100
+ result[:fr][:date].keys.should == [:formats]
101
+ end
102
+
103
+ it "filters translations using scope [*.date.formats, *.number.currency.format]" do
104
+ result = SimplesIdeias::I18n.scoped_translations(["*.date.formats", "*.number.currency.format"])
105
+ result[:en].keys.collect(&:to_s).sort.should == %w[ date number ]
106
+ result[:fr].keys.collect(&:to_s).sort.should == %w[ date number ]
107
+ end
108
+
109
+ it "filters translations using multi-star scope" do
110
+ result = SimplesIdeias::I18n.scoped_translations("*.*.formats")
111
+
112
+ result[:en].keys.collect(&:to_s).sort.should == %w[ date time ]
113
+ result[:fr].keys.collect(&:to_s).sort.should == %w[ date time ]
114
+
115
+ result[:en][:date].keys.should == [:formats]
116
+ result[:en][:time].keys.should == [:formats]
117
+
118
+ result[:fr][:date].keys.should == [:formats]
119
+ result[:fr][:time].keys.should == [:formats]
120
+ end
121
+
122
+ it "filters translations using alternated stars" do
123
+ result = SimplesIdeias::I18n.scoped_translations("*.admin.*.title")
124
+
125
+ result[:en][:admin].keys.collect(&:to_s).sort.should == %w[ edit show ]
126
+ result[:fr][:admin].keys.collect(&:to_s).sort.should == %w[ edit show ]
127
+
128
+ result[:en][:admin][:show][:title].should == "Show"
129
+ result[:fr][:admin][:show][:title].should == "Visualiser"
130
+
131
+ result[:en][:admin][:edit][:title].should == "Edit"
132
+ result[:fr][:admin][:edit][:title].should == "Editer"
133
+ end
134
+
135
+ it "performs a deep merge" do
136
+ target = {:a => {:b => 1}}
137
+ result = SimplesIdeias::I18n.deep_merge(target, {:a => {:c => 2}})
138
+
139
+ result[:a].should == {:b => 1, :c => 2}
140
+ end
141
+
142
+ it "performs a banged deep merge" do
143
+ target = {:a => {:b => 1}}
144
+ SimplesIdeias::I18n.deep_merge!(target, {:a => {:c => 2}})
145
+
146
+ target[:a].should == {:b => 1, :c => 2}
147
+ end
148
+
149
+ it "updates the javascript library" do
150
+ FakeWeb.register_uri(:get, "http://github.com/fnando/i18n-js/raw/master/lib/i18n.js", :body => "UPDATED")
151
+
152
+ SimplesIdeias::I18n.setup!
153
+ SimplesIdeias::I18n.update!
154
+ File.read(SimplesIdeias::I18n.javascript_file).should == "UPDATED"
155
+ end
156
+
157
+ private
158
+ # Set the configuration as the current one
159
+ def set_config(path)
160
+ config = HashWithIndifferentAccess.new(YAML.load_file(File.dirname(__FILE__) + "/resources/#{path}"))
161
+ SimplesIdeias::I18n.should_receive(:config?).and_return(true)
162
+ SimplesIdeias::I18n.should_receive(:config).and_return(config)
163
+ end
164
+
165
+ # Shortcut to SimplesIdeias::I18n.translations
166
+ def translations
167
+ SimplesIdeias::I18n.translations
168
+ end
169
+ end
File without changes
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ # Find more details about this configuration file at http://github.com/fnando/i18n-js
2
+ translations:
3
+ - file: "public/javascripts/bitsnpieces.js"
4
+ only:
5
+ - "*.date.formats"
6
+ - "*.number.currency"
File without changes
File without changes
File without changes
@@ -1,14 +1,4 @@
1
- require "rubygems"
2
- gem "test-unit"
3
- require "test/unit"
4
- require "mocha"
5
-
6
- begin
7
- require "active_support/all"
8
- rescue LoadError
9
- require "active_support"
10
- end
11
-
1
+ require "active_support/all"
12
2
  require "active_support/version"
13
3
  require "active_support/test_case"
14
4
  require "ostruct"
@@ -21,6 +11,9 @@ FakeWeb.allow_net_connect = false
21
11
 
22
12
  # Stub Rails.root, so we don"t need to load the whole Rails environment.
23
13
  # Be careful! The specified folder will be removed!
24
- Rails = OpenStruct.new(:root => Pathname.new(File.dirname(__FILE__) + "/tmp"), :version => "0")
14
+ Rails = OpenStruct.new({
15
+ :root => Pathname.new(File.dirname(__FILE__) + "/tmp"),
16
+ :version => "0"
17
+ })
25
18
 
26
- require File.dirname(__FILE__) + "/../lib/i18n-js"
19
+ require "i18n-js"
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i18n-js
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 1
9
- - 6
10
- version: 0.1.6
4
+ prerelease:
5
+ version: 1.0.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Nando Vieira
@@ -15,48 +10,114 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2010-09-23 00:00:00 -03:00
13
+ date: 2011-02-07 00:00:00 -02:00
19
14
  default_executable:
20
- dependencies: []
21
-
22
- description:
23
- email: fnando.vieira@gmail.com
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: i18n
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: fakeweb
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: activesupport
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 3.0.0
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rspec
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 2.5.0
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: ruby-debug19
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: spec-js
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 0.1.0.beta.0
80
+ type: :development
81
+ version_requirements: *id006
82
+ description: It's a small library to provide the Rails I18n translations on the Javascript.
83
+ email:
84
+ - fnando.vieira@gmail.com
24
85
  executables: []
25
86
 
26
87
  extensions: []
27
88
 
28
- extra_rdoc_files:
29
- - README.rdoc
89
+ extra_rdoc_files: []
90
+
30
91
  files:
92
+ - .gitignore
93
+ - Gemfile
94
+ - Gemfile.lock
31
95
  - README.rdoc
32
96
  - Rakefile
33
- - init.rb
34
- - install.rb
97
+ - i18n-js.gemspec
35
98
  - lib/i18n-js.rb
36
99
  - lib/i18n-js/railtie.rb
37
100
  - lib/i18n-js/version.rb
38
101
  - lib/tasks/i18n-js_tasks.rake
39
102
  - source/i18n-js.yml
40
103
  - source/i18n.js
41
- - test/i18n-test.html
42
- - test/i18n-test.js
43
- - test/i18n_js_test.rb
44
- - test/jsunittest/jsunittest.js
45
- - test/jsunittest/unittest.css
46
- - test/resources/custom_path.yml
47
- - test/resources/default.yml
48
- - test/resources/locales.yml
49
- - test/resources/multiple_files.yml
50
- - test/resources/no_scope.yml
51
- - test/resources/simple_scope.yml
52
- - test/test_helper.rb
104
+ - spec/i18n_spec.js
105
+ - spec/i18n_spec.rb
106
+ - spec/resources/custom_path.yml
107
+ - spec/resources/default.yml
108
+ - spec/resources/locales.yml
109
+ - spec/resources/multiple_conditions.yml
110
+ - spec/resources/multiple_files.yml
111
+ - spec/resources/no_scope.yml
112
+ - spec/resources/simple_scope.yml
113
+ - spec/spec_helper.rb
53
114
  has_rdoc: true
54
- homepage: http://github.com/fnando/i18n-js
115
+ homepage: http://rubygems.org/gems/i18n-js
55
116
  licenses: []
56
117
 
57
118
  post_install_message:
58
- rdoc_options:
59
- - --charset=UTF-8
119
+ rdoc_options: []
120
+
60
121
  require_paths:
61
122
  - lib
62
123
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -64,26 +125,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
125
  requirements:
65
126
  - - ">="
66
127
  - !ruby/object:Gem::Version
67
- hash: 3
68
- segments:
69
- - 0
70
128
  version: "0"
71
129
  required_rubygems_version: !ruby/object:Gem::Requirement
72
130
  none: false
73
131
  requirements:
74
132
  - - ">="
75
133
  - !ruby/object:Gem::Version
76
- hash: 3
77
- segments:
78
- - 0
79
134
  version: "0"
80
135
  requirements: []
81
136
 
82
137
  rubyforge_project:
83
- rubygems_version: 1.3.7
138
+ rubygems_version: 1.5.0
84
139
  signing_key:
85
140
  specification_version: 3
86
141
  summary: It's a small library to provide the Rails I18n translations on the Javascript.
87
142
  test_files:
88
- - test/i18n_js_test.rb
89
- - test/test_helper.rb
143
+ - spec/i18n_spec.js
144
+ - spec/i18n_spec.rb
145
+ - spec/resources/custom_path.yml
146
+ - spec/resources/default.yml
147
+ - spec/resources/locales.yml
148
+ - spec/resources/multiple_conditions.yml
149
+ - spec/resources/multiple_files.yml
150
+ - spec/resources/no_scope.yml
151
+ - spec/resources/simple_scope.yml
152
+ - spec/spec_helper.rb
data/init.rb DELETED
@@ -1 +0,0 @@
1
- require "i18n-js"
data/install.rb DELETED
@@ -1,7 +0,0 @@
1
- # Install hook code here
2
- puts <<-TXT
3
- Run rake i18n:setup to copy i18n.js to your javascript directory
4
- and i18n-js.yml to your config folder (if not already present).
5
-
6
- Then you're ready to go! More details at http://github.com/fnando/i18n-js
7
- TXT
data/test/i18n-test.html DELETED
@@ -1,50 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <title>JavaScript unit test file</title>
6
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
7
- <script src="jsunittest/jsunittest.js" type="text/javascript"></script>
8
- <link rel="stylesheet" href="jsunittest/unittest.css" type="text/css" />
9
-
10
- <style type="text/css" media="screen">
11
- #logger p {
12
- background: #ffc;
13
- padding: 5px;
14
- }
15
- </style>
16
- <script type="text/javascript" charset="utf-8">
17
- function log(name, message) {
18
- var tag = document.getElementById("logger");
19
- message = message.toString();
20
- message = message.replace(/&/gm, "&amp;");
21
- message = message.replace(/</gm, "&lt;");
22
- message = message.replace(/>/gm, "&gt;");
23
- tag.innerHTML += "<p><strong>" + name + ":</strong> " + message + "</p>";
24
- }
25
- </script>
26
- <script src="../source/i18n.js" type="text/javascript"></script>
27
- </head>
28
- <body>
29
-
30
- <div id="content">
31
- <div id="header">
32
- <h1>JavaScript unit test file</h1>
33
- <p>
34
- This file tests <strong>i18n.js</strong>.
35
- </p>
36
- </div>
37
-
38
- <!-- Log output (one per Runner, via {testLog: "testlog"} option)-->
39
- <div id="testlog"></div>
40
-
41
- <!-- General debugger -->
42
- <div id="logger"></div>
43
-
44
- <!-- Put sample/test html here -->
45
- <div id="sample">
46
- </div>
47
- </div>
48
- <script src="i18n-test.js" type="text/javascript" charset="utf-8"></script>
49
- </body>
50
- </html>