rack-r18n 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +1 -1
- data/lib/rack-r18n.rb +45 -12
- data/test/setup.rb +15 -0
- data/test/suite/lib/rack-r18n.rb +29 -0
- metadata +5 -3
data/README.textile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
h1. Rack-R18n
|
2
2
|
|
3
3
|
A small Rack middleware taking care of setting up your R18n locales.
|
4
|
-
You may pass @:default@ for a default locale and @:
|
4
|
+
You may pass @:default@ for a default locale and @:place@ for translation place,
|
5
5
|
defaults to "i18n".
|
data/lib/rack-r18n.rb
CHANGED
@@ -5,29 +5,62 @@ module Rack
|
|
5
5
|
class R18n
|
6
6
|
# Avaible options:
|
7
7
|
# :default => en
|
8
|
-
# :
|
9
|
-
|
8
|
+
# :place => "i18n"
|
9
|
+
# Note: This is relative to #root
|
10
|
+
attr_reader :options, :place
|
10
11
|
def initialize(app, options = {})
|
11
12
|
@app = app
|
12
13
|
@options = options
|
13
14
|
|
14
15
|
::R18n::I18n.default = @options[:default] || "en"
|
15
|
-
@options[:
|
16
|
-
@
|
17
|
-
(Pathname(
|
16
|
+
@options[:place] ||= "i18n"
|
17
|
+
@place = Array(@options[:place]).map do |dir|
|
18
|
+
(Pathname(self.class.root) + dir).expand_path
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
22
|
def call(env)
|
22
|
-
|
23
|
-
|
23
|
+
@env = env
|
24
|
+
::R18n.thread_set {generate_r18n}
|
25
|
+
@app.call(@env)
|
24
26
|
end
|
25
27
|
|
26
|
-
def
|
27
|
-
request = Rack::Request.new(env)
|
28
|
-
locales = ::R18n::I18n.parse_http(env['HTTP_ACCEPT_LANGUAGE'])
|
29
|
-
|
30
|
-
|
28
|
+
def generate_r18n
|
29
|
+
request = Rack::Request.new(@env)
|
30
|
+
locales = ::R18n::I18n.parse_http(@env['HTTP_ACCEPT_LANGUAGE'])
|
31
|
+
if locale = session_locale(@env['rack.session'], locales, request.params[:locale])
|
32
|
+
locale.insert(0, locale)
|
33
|
+
end
|
34
|
+
::R18n::I18n.new(locales, @place)
|
35
|
+
end
|
36
|
+
|
37
|
+
def session_locale(session, locales, locale=nil)
|
38
|
+
if locale
|
39
|
+
if session
|
40
|
+
session[:locale] = locale
|
41
|
+
end
|
42
|
+
elsif session && session[:locale]
|
43
|
+
locale = session[:locale]
|
44
|
+
end
|
45
|
+
locale
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.root
|
49
|
+
@@root ||= if defined? Merb
|
50
|
+
Merb.root
|
51
|
+
elsif defined? Sinatra
|
52
|
+
Sinatra.root
|
53
|
+
elsif defined? Rails
|
54
|
+
Rails.root
|
55
|
+
elsif defined? Rango
|
56
|
+
Rango.root
|
57
|
+
else
|
58
|
+
Dir.pwd
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.root=(root)
|
63
|
+
@@root = root
|
31
64
|
end
|
32
65
|
|
33
66
|
end
|
data/test/setup.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Add PROJECT/lib to $LOAD_PATH
|
2
|
+
$LOAD_PATH.unshift(File.expand_path("#{__FILE__}/../../lib"))
|
3
|
+
|
4
|
+
# Ensure baretest is required
|
5
|
+
require 'baretest'
|
6
|
+
|
7
|
+
require 'rack-r18n'
|
8
|
+
|
9
|
+
# Some defaults on BareTest (see Kernel#BareTest)
|
10
|
+
BareTest do
|
11
|
+
require_baretest "0.4.0" # minimum baretest version to run these tests
|
12
|
+
require_ruby "1.9.1" # minimum ruby version to run these tests
|
13
|
+
use :support # Use :support in all suites
|
14
|
+
use :rack_test
|
15
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
BareTest.suite "rack-r18n" do
|
2
|
+
suite "#session_locale" do
|
3
|
+
setup do
|
4
|
+
@locales = Object.new
|
5
|
+
@r18n = Rack::R18n.new(proc {})
|
6
|
+
end
|
7
|
+
suite "setting a locale" do
|
8
|
+
suite "if a locale is given" do
|
9
|
+
assert "it gets written to the session" do
|
10
|
+
@r18n.session_locale(@session = {}, @locales, "en")
|
11
|
+
equal("en", @session[:locale])
|
12
|
+
end
|
13
|
+
assert "it doesn't bail if there's no session" do
|
14
|
+
equal("en", @r18n.session_locale(nil, @locales, "en"))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
suite "if no locale is given" do
|
18
|
+
assert "it takes the one from session of avaible" do
|
19
|
+
equal("en", @r18n.session_locale({:locale => "en"}, @locales, nil))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
suite "not setting a locale" do
|
24
|
+
assert "nothing is set" do
|
25
|
+
equal(nil, @r18n.session_locale(nil, @locales, nil))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -5,15 +5,15 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Simon Hafner aka Tass
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain:
|
16
|
-
date: 2010-03
|
16
|
+
date: 2010-05-03 00:00:00 +02:00
|
17
17
|
default_executable:
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
@@ -50,6 +50,8 @@ extra_rdoc_files: []
|
|
50
50
|
|
51
51
|
files:
|
52
52
|
- lib/rack-r18n.rb
|
53
|
+
- test/setup.rb
|
54
|
+
- test/suite/lib/rack-r18n.rb
|
53
55
|
- LICENSE
|
54
56
|
- README.textile
|
55
57
|
has_rdoc: true
|