rack-r18n 0.0.1 → 0.0.2

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/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