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 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 @:dirs@ for translation dirs,
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
- # :dirs => "i18n"
9
- attr_reader :options, :dirs
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[:dirs] ||= "i18n"
16
- @dirs = Array(@options[:dirs]).map do |dir|
17
- (Pathname(__FILE__).dirname + dir).expand_path
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
- set_r18n(env)
23
- @app.call(env)
23
+ @env = env
24
+ ::R18n.thread_set {generate_r18n}
25
+ @app.call(@env)
24
26
  end
25
27
 
26
- def set_r18n(env)
27
- request = Rack::Request.new(env)
28
- locales = ::R18n::I18n.parse_http(env['HTTP_ACCEPT_LANGUAGE'])
29
- locales.insert(0, request.params[:locale]) if request.params[:locale]
30
- ::R18n.set(::R18n::I18n.new(locales, @dirs))
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
- - 1
9
- version: 0.0.1
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-20 00:00:00 +01:00
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