subdomain_locale 0.1.1 → 1.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Isolate +20 -0
- data/LICENSE.txt +22 -0
- data/Rakefile +9 -10
- data/Readme.md +38 -8
- data/lib/subdomain_locale/controller.rb +1 -3
- data/lib/subdomain_locale/mapping.rb +22 -0
- data/lib/subdomain_locale/railtie.rb +9 -0
- data/lib/subdomain_locale/url_for.rb +18 -6
- data/lib/subdomain_locale.rb +0 -1
- data/subdomain_locale.gemspec +16 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/hello_controller.rb +2 -0
- data/test/dummy/app/mailers/hello_mailer.rb +7 -0
- data/test/dummy/app/views/hello/world.html.erb +8 -0
- data/test/dummy/app/views/hello_mailer/world.text.erb +4 -0
- data/test/dummy/app/views/layouts/application.html.erb +12 -0
- data/test/dummy/config/application.rb +14 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/test.rb +12 -0
- data/test/dummy/config/locales/ru.yml +2 -0
- data/test/dummy/config/locales/uk.yml +2 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/mapping_test.rb +25 -0
- data/test/rails_test.rb +55 -0
- data/test/url_for_test.rb +23 -10
- metadata +50 -60
- data/.gemtest +0 -0
- data/lib/subdomain_locale/locale.rb +0 -63
- data/lib/subdomain_locale/version.rb +0 -3
- data/test/controller_test.rb +0 -38
- data/test/lib/i18n.rb +0 -13
- data/test/locale_test.rb +0 -33
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: faeaa8c630da1a8aaea5ec82125d459d60cc026f
|
4
|
+
data.tar.gz: c2d984aaa1f3027ea35641ff757913b694c6242f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 20f97bd6745d902651120fbcc8dfb2bc44b21ee7e10a9e5b939071d9a84c8457f6ddd28ccd9b1d433e4f02bfab0cb521bfd20b89d2a2e2e500bfcba684d516ef
|
7
|
+
data.tar.gz: 8847cd159a0b90131bebf98ff93bfbd042b9beedfdf082ca93e912a5d0a0bbb4c895cd37e28fc8e31525e4ac40b5f6854ee41cd9b1430ffd37050fc31191c799
|
data/Isolate
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
options system: false, cleanup: false
|
2
|
+
|
3
|
+
gem 'bundler', '~> 1.5.0'
|
4
|
+
|
5
|
+
case ENV['RAILS']
|
6
|
+
when '3'
|
7
|
+
version = '~> 3.2.16'
|
8
|
+
gem 'actionpack', version
|
9
|
+
gem 'actionmailer', version
|
10
|
+
gem 'railties', version
|
11
|
+
gem 'i18n', '0.6.5'
|
12
|
+
when nil
|
13
|
+
version = '~> 4.0.0'
|
14
|
+
gem 'actionpack', version
|
15
|
+
gem 'actionmailer', version
|
16
|
+
gem 'railties', version
|
17
|
+
gem 'i18n', '~> 0.6.9'
|
18
|
+
else
|
19
|
+
raise "Unrecognized Rails version: #{ENV['RAILS']}"
|
20
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Semyon Perepelitsa
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
CHANGED
@@ -1,18 +1,17 @@
|
|
1
|
-
gem "hoe", "~> 3.0"
|
2
|
-
require "hoe"
|
3
|
-
|
4
|
-
Hoe.spec 'subdomain_locale' do
|
5
|
-
developer 'Semyon Perepelitsa', 'sema@sema.in'
|
6
|
-
self.urls = %w(https://github.com/semaperepelitsa/subdomain_locale)
|
7
|
-
self.summary = "Moves current locale into subdomain in your Rails app"
|
8
|
-
dependency "i18n", "~> 0.2"
|
9
|
-
end
|
10
|
-
|
11
1
|
require "rake/testtask"
|
2
|
+
require "isolate/now"
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
|
12
5
|
Rake::TestTask.new do |t|
|
13
6
|
t.libs << "test"
|
14
7
|
t.test_files = Dir['test/**/*_test.rb']
|
15
8
|
t.verbose = true
|
16
9
|
end
|
17
10
|
|
11
|
+
task "test:all" do
|
12
|
+
sh "rake test"
|
13
|
+
puts
|
14
|
+
sh "rake test RAILS=3"
|
15
|
+
end
|
16
|
+
|
18
17
|
task :default => :test
|
data/Readme.md
CHANGED
@@ -2,27 +2,57 @@
|
|
2
2
|
|
3
3
|
Moves current locale into subdomain. Installation is quick and simple:
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
```ruby
|
6
|
+
# Gemfile
|
7
|
+
gem 'subdomain_locale', '~> 0.1.0'
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
# config/application.rb
|
10
|
+
config.i18n.available_locales = [:ru, :az, :en, "en-US"] # Put your own available locales
|
11
|
+
config.i18n.default_locale = :az # and make one default
|
12
|
+
```
|
11
13
|
|
12
14
|
Now, start your web server at localhost:3000 and navigate:
|
13
15
|
|
14
16
|
http://lvh.me:3000/ - the default locale (:az)
|
15
17
|
http://ru.lvh.me:3000/ - I18n.locale is set to :ru
|
18
|
+
http://en-us.lvh.me:3000/ - I18n.locale is set to :en-US
|
16
19
|
http://www.lvh.me:3000/ - again, default
|
17
20
|
|
18
21
|
You can also put links to all locales in your view:
|
19
22
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
+
```erb
|
24
|
+
<% I18n.available_locales.each do |locale| %>
|
25
|
+
<%= link_to locale, params.merge(locale: locale) %>
|
26
|
+
<% end %>
|
27
|
+
```
|
28
|
+
|
29
|
+
## Configuring own subdomain-to-locale mapping
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
# config/application.rb
|
33
|
+
|
34
|
+
config.subdomain_locales["us"] = "en-US"
|
35
|
+
# or even
|
36
|
+
# config.subdomain_locales = {"us" => "en-US", "ca" => "en-CA"}
|
37
|
+
```
|
38
|
+
|
39
|
+
Having that configured `http://us.lvh.me:3000` will be rendered with :en-US locale.
|
40
|
+
|
41
|
+
## Development setup
|
42
|
+
|
43
|
+
```
|
44
|
+
gem install isolate
|
45
|
+
rake test:all
|
46
|
+
```
|
47
|
+
|
23
48
|
|
24
49
|
## Changelog
|
25
50
|
|
51
|
+
master
|
52
|
+
|
53
|
+
* Support IETF language tag subdomains, e.g. pt-br.
|
54
|
+
* Allow to create custom mappings, e.g. "us" instead of "en-us".
|
55
|
+
|
26
56
|
0.1.1
|
27
57
|
|
28
58
|
* Adding changelog to the readme.
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "subdomain_locale/locale"
|
2
|
-
|
3
1
|
module SubdomainLocale
|
4
2
|
module Controller
|
5
3
|
def self.included(base)
|
@@ -9,7 +7,7 @@ module SubdomainLocale
|
|
9
7
|
private
|
10
8
|
|
11
9
|
def set_locale
|
12
|
-
|
10
|
+
I18n.locale = SubdomainLocale.mapping.locale_for(request.subdomain)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SubdomainLocale
|
2
|
+
class << self
|
3
|
+
attr_accessor :mapping
|
4
|
+
end
|
5
|
+
|
6
|
+
class Mapping
|
7
|
+
def initialize(mapping)
|
8
|
+
@repository = {}
|
9
|
+
mapping.each do |subdomain, locale|
|
10
|
+
@repository[subdomain] = locale.to_s
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def locale_for(subdomain)
|
15
|
+
@repository[subdomain] || subdomain
|
16
|
+
end
|
17
|
+
|
18
|
+
def subdomain_for(locale)
|
19
|
+
locale and @repository.invert[locale.to_s] || locale.to_s
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -2,6 +2,15 @@ require "rails/railtie"
|
|
2
2
|
|
3
3
|
module SubdomainLocale
|
4
4
|
class Railtie < ::Rails::Railtie
|
5
|
+
config.subdomain_locale = {}
|
6
|
+
|
7
|
+
# Execute after all application initializers, I18n is often configured there.
|
8
|
+
config.after_initialize do |app|
|
9
|
+
require "subdomain_locale/mapping"
|
10
|
+
default = { "" => I18n.default_locale, "www" => I18n.default_locale }
|
11
|
+
mapping = default.merge(app.config.subdomain_locale)
|
12
|
+
SubdomainLocale.mapping = Mapping.new(mapping)
|
13
|
+
end
|
5
14
|
|
6
15
|
initializer "subdomain_locale.url_helpers" do
|
7
16
|
require "subdomain_locale/url_for"
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require "subdomain_locale/locale"
|
2
|
-
|
3
1
|
module SubdomainLocale
|
4
2
|
module UrlFor
|
5
3
|
# Makes url_for(locale: 'ru') the same as url_for(subdomain: 'ru', only_path: false)
|
@@ -10,14 +8,28 @@ module SubdomainLocale
|
|
10
8
|
# After including this module:
|
11
9
|
# url_for params.merge(locale: 'ru') # => http://ru.example.com/current_path
|
12
10
|
def url_for(options=nil)
|
13
|
-
if options.is_a?(Hash)
|
11
|
+
if options.is_a?(Hash)
|
14
12
|
options = options.dup
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
if options.has_key?(:locale)
|
14
|
+
# Locale specified, force full URL
|
15
|
+
locale = options.delete(:locale)
|
16
|
+
options[:subdomain] = subdomain_locales.subdomain_for(locale)
|
17
|
+
options[:only_path] = false
|
18
|
+
elsif options.has_key?(:only_path) && !options[:only_path]
|
19
|
+
# Requested full URL, use current locale
|
20
|
+
options[:subdomain] = subdomain_locales.subdomain_for(current_locale)
|
21
|
+
end
|
18
22
|
end
|
19
23
|
|
20
24
|
super
|
21
25
|
end
|
26
|
+
|
27
|
+
def current_locale
|
28
|
+
I18n.locale
|
29
|
+
end
|
30
|
+
|
31
|
+
def subdomain_locales
|
32
|
+
SubdomainLocale.mapping
|
33
|
+
end
|
22
34
|
end
|
23
35
|
end
|
data/lib/subdomain_locale.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "subdomain_locale"
|
5
|
+
spec.version = "1.0.beta"
|
6
|
+
spec.authors = ["Semyon Perepelitsa"]
|
7
|
+
spec.email = ["sema@sema.in"]
|
8
|
+
spec.summary = "Set I18n locale based on subdomain"
|
9
|
+
spec.homepage = "https://github.com/semaperepelitsa/subdomain_locale"
|
10
|
+
spec.license = "MIT"
|
11
|
+
|
12
|
+
spec.files = File.read("Manifest.txt").split("\n")
|
13
|
+
spec.test_files = spec.files.grep(%r{^test/})
|
14
|
+
|
15
|
+
spec.add_dependency "i18n", "~> 0.2"
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "action_controller/railtie"
|
2
|
+
require "action_mailer/railtie"
|
3
|
+
require "subdomain_locale/railtie"
|
4
|
+
|
5
|
+
module Dummy
|
6
|
+
class Application < Rails::Application
|
7
|
+
config.i18n.enforce_available_locales = true
|
8
|
+
config.i18n.default_locale = :en
|
9
|
+
config.i18n.available_locales = :en, :ru, :uk
|
10
|
+
config.subdomain_locale["ua"] = :uk
|
11
|
+
|
12
|
+
config.secret_key_base = '-'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Dummy::Application.configure do
|
2
|
+
config.eager_load = false
|
3
|
+
config.cache_classes = true
|
4
|
+
config.serve_static_assets = true
|
5
|
+
config.consider_all_requests_local = true
|
6
|
+
config.action_controller.perform_caching = false
|
7
|
+
config.action_dispatch.show_exceptions = false
|
8
|
+
config.action_controller.allow_forgery_protection = false
|
9
|
+
config.active_support.deprecation = :stderr
|
10
|
+
config.action_mailer.delivery_method = :test
|
11
|
+
config.action_mailer.default_url_options = { host: "example.com" }
|
12
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "isolate/now"
|
2
|
+
require "minitest/autorun"
|
3
|
+
require "subdomain_locale/mapping"
|
4
|
+
|
5
|
+
class MappingTest < MiniTest::Unit::TestCase
|
6
|
+
include SubdomainLocale
|
7
|
+
|
8
|
+
def setup
|
9
|
+
@mapping = Mapping.new("ua" => :uk)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_custom
|
13
|
+
assert_equal "uk", @mapping.locale_for("ua")
|
14
|
+
assert_equal "ua", @mapping.subdomain_for(:uk)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_default
|
18
|
+
assert_equal "ru", @mapping.locale_for("ru")
|
19
|
+
assert_equal "ru", @mapping.subdomain_for(:ru)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_nil
|
23
|
+
assert_nil @mapping.subdomain_for(nil)
|
24
|
+
end
|
25
|
+
end
|
data/test/rails_test.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require "isolate/now"
|
5
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
6
|
+
require "minitest/autorun"
|
7
|
+
require "rails/test_help"
|
8
|
+
Rails.backtrace_cleaner.remove_silencers!
|
9
|
+
|
10
|
+
class HelloControllerTest < ActionController::TestCase
|
11
|
+
def test_links
|
12
|
+
@request.host = "example.com"
|
13
|
+
get :world
|
14
|
+
menu = css_select("menu a")
|
15
|
+
assert_equal "/", menu[0]["href"]
|
16
|
+
assert_equal "http://www.example.com/", menu[1]["href"]
|
17
|
+
assert_equal "http://ru.example.com/", menu[2]["href"]
|
18
|
+
assert_equal "http://ua.example.com/", menu[3]["href"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_default
|
22
|
+
@request.host = "www.example.com"
|
23
|
+
get :world
|
24
|
+
assert_response :ok
|
25
|
+
assert_select "p", "Hello"
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_direct
|
29
|
+
@request.host = "ru.example.com"
|
30
|
+
get :world
|
31
|
+
assert_response :ok
|
32
|
+
assert_select "p", "Привет"
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_custom
|
36
|
+
@request.host = "ua.example.com"
|
37
|
+
get :world
|
38
|
+
assert_response :ok
|
39
|
+
assert_select "p", "Привіт"
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_other
|
43
|
+
@request.host = "wtf.example.com"
|
44
|
+
assert_raise(I18n::InvalidLocale) do
|
45
|
+
get :world
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class HelloMailerTest < ActionController::TestCase
|
51
|
+
def test
|
52
|
+
mail = I18n.with_locale(:ru) { HelloMailer.world }
|
53
|
+
assert_equal "http://ru.example.com/", mail.body.to_s.lines[3].chomp
|
54
|
+
end
|
55
|
+
end
|
data/test/url_for_test.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
+
require "isolate/now"
|
1
2
|
require "minitest/autorun"
|
2
|
-
|
3
|
+
require "subdomain_locale"
|
3
4
|
require "subdomain_locale/url_for"
|
4
5
|
|
5
6
|
class UrlForTest < MiniTest::Unit::TestCase
|
@@ -12,34 +13,46 @@ class UrlForTest < MiniTest::Unit::TestCase
|
|
12
13
|
include UrlFor
|
13
14
|
include SubdomainLocale::UrlFor
|
14
15
|
|
15
|
-
def
|
16
|
+
def subdomain_locales
|
17
|
+
@mapping ||= Object.new.tap do |mapping|
|
18
|
+
def mapping.subdomain_for(locale)
|
19
|
+
"ru" if locale == :ru
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def current_locale
|
25
|
+
:ru
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_no_locale
|
16
29
|
@actual = url_for(foo: 'bar')
|
17
30
|
assert_equal [{foo: 'bar'}], @actual
|
18
31
|
end
|
19
32
|
|
20
|
-
def
|
33
|
+
def test_string_argument
|
21
34
|
@actual = url_for('/bar')
|
22
35
|
assert_equal ['/bar'], @actual
|
23
36
|
end
|
24
37
|
|
25
|
-
def
|
38
|
+
def test_locale
|
26
39
|
@actual = url_for(foo: 'bar', locale: :ru)
|
27
40
|
assert_equal [{foo: 'bar', subdomain: 'ru', only_path: false}], @actual
|
28
41
|
end
|
29
42
|
|
30
|
-
def
|
43
|
+
def test_only_path
|
31
44
|
@actual = url_for(foo: 'bar', locale: :ru, only_path: true)
|
32
45
|
assert_equal [{foo: 'bar', subdomain: 'ru', only_path: false}], @actual
|
33
46
|
end
|
34
47
|
|
35
|
-
def
|
36
|
-
@actual = url_for(foo: 'bar',
|
37
|
-
assert_equal [{foo: 'bar', subdomain: '
|
48
|
+
def test_implicit_locale
|
49
|
+
@actual = url_for(foo: 'bar', only_path: false)
|
50
|
+
assert_equal [{foo: 'bar', subdomain: 'ru', only_path: false}], @actual
|
38
51
|
end
|
39
52
|
|
40
|
-
def
|
53
|
+
def test_hash_immutable
|
41
54
|
orig_params = { foo: 'bar', locale: :ru }
|
42
|
-
params = orig_params.dup
|
55
|
+
params = orig_params.dup.freeze
|
43
56
|
url_for(params)
|
44
57
|
assert_equal orig_params, params
|
45
58
|
end
|
metadata
CHANGED
@@ -1,108 +1,98 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: subdomain_locale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.beta
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Semyon Perepelitsa
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: i18n
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- - ~>
|
17
|
+
- - "~>"
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0.2'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- - ~>
|
24
|
+
- - "~>"
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0.2'
|
30
|
-
|
31
|
-
name: rdoc
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '3.10'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '3.10'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: hoe
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '3.0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.0'
|
62
|
-
description: ''
|
27
|
+
description:
|
63
28
|
email:
|
64
29
|
- sema@sema.in
|
65
30
|
executables: []
|
66
31
|
extensions: []
|
67
32
|
extra_rdoc_files: []
|
68
33
|
files:
|
34
|
+
- Isolate
|
35
|
+
- LICENSE.txt
|
69
36
|
- Rakefile
|
70
37
|
- Readme.md
|
71
38
|
- lib/subdomain_locale.rb
|
72
39
|
- lib/subdomain_locale/controller.rb
|
73
|
-
- lib/subdomain_locale/
|
40
|
+
- lib/subdomain_locale/mapping.rb
|
74
41
|
- lib/subdomain_locale/railtie.rb
|
75
42
|
- lib/subdomain_locale/url_for.rb
|
76
|
-
-
|
77
|
-
- test/
|
78
|
-
- test/
|
79
|
-
- test/
|
43
|
+
- subdomain_locale.gemspec
|
44
|
+
- test/dummy/app/controllers/application_controller.rb
|
45
|
+
- test/dummy/app/controllers/hello_controller.rb
|
46
|
+
- test/dummy/app/mailers/hello_mailer.rb
|
47
|
+
- test/dummy/app/views/hello/world.html.erb
|
48
|
+
- test/dummy/app/views/hello_mailer/world.text.erb
|
49
|
+
- test/dummy/app/views/layouts/application.html.erb
|
50
|
+
- test/dummy/config/application.rb
|
51
|
+
- test/dummy/config/environment.rb
|
52
|
+
- test/dummy/config/environments/test.rb
|
53
|
+
- test/dummy/config/locales/ru.yml
|
54
|
+
- test/dummy/config/locales/uk.yml
|
55
|
+
- test/dummy/config/routes.rb
|
56
|
+
- test/mapping_test.rb
|
57
|
+
- test/rails_test.rb
|
80
58
|
- test/url_for_test.rb
|
81
|
-
- .gemtest
|
82
59
|
homepage: https://github.com/semaperepelitsa/subdomain_locale
|
83
|
-
licenses:
|
60
|
+
licenses:
|
61
|
+
- MIT
|
62
|
+
metadata: {}
|
84
63
|
post_install_message:
|
85
|
-
rdoc_options:
|
86
|
-
- --main
|
87
|
-
- README.txt
|
64
|
+
rdoc_options: []
|
88
65
|
require_paths:
|
89
66
|
- lib
|
90
67
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
68
|
requirements:
|
93
|
-
- -
|
69
|
+
- - ">="
|
94
70
|
- !ruby/object:Gem::Version
|
95
71
|
version: '0'
|
96
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
73
|
requirements:
|
99
|
-
- -
|
74
|
+
- - ">"
|
100
75
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
76
|
+
version: 1.3.1
|
102
77
|
requirements: []
|
103
|
-
rubyforge_project:
|
104
|
-
rubygems_version:
|
78
|
+
rubyforge_project:
|
79
|
+
rubygems_version: 2.2.0
|
105
80
|
signing_key:
|
106
|
-
specification_version:
|
107
|
-
summary:
|
108
|
-
test_files:
|
81
|
+
specification_version: 4
|
82
|
+
summary: Set I18n locale based on subdomain
|
83
|
+
test_files:
|
84
|
+
- test/dummy/app/controllers/application_controller.rb
|
85
|
+
- test/dummy/app/controllers/hello_controller.rb
|
86
|
+
- test/dummy/app/mailers/hello_mailer.rb
|
87
|
+
- test/dummy/app/views/hello/world.html.erb
|
88
|
+
- test/dummy/app/views/hello_mailer/world.text.erb
|
89
|
+
- test/dummy/app/views/layouts/application.html.erb
|
90
|
+
- test/dummy/config/application.rb
|
91
|
+
- test/dummy/config/environment.rb
|
92
|
+
- test/dummy/config/environments/test.rb
|
93
|
+
- test/dummy/config/locales/ru.yml
|
94
|
+
- test/dummy/config/locales/uk.yml
|
95
|
+
- test/dummy/config/routes.rb
|
96
|
+
- test/mapping_test.rb
|
97
|
+
- test/rails_test.rb
|
98
|
+
- test/url_for_test.rb
|
data/.gemtest
DELETED
File without changes
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require "i18n"
|
2
|
-
|
3
|
-
module SubdomainLocale
|
4
|
-
class Locale
|
5
|
-
class << self
|
6
|
-
# Sets I18n.locale based on passed subdomain.
|
7
|
-
# Defaults to the I18n.default_locale if the subdomain isn't in I18n.available_locales
|
8
|
-
# I18n.default_locale = :az
|
9
|
-
# Locale.set('ru') # => :ru
|
10
|
-
# Locale.set('az') # => :az
|
11
|
-
# Locale.set('www')# => :az
|
12
|
-
def set(subdomain)
|
13
|
-
I18n.locale = find(subdomain).to_sym
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
|
18
|
-
def find(subdomain)
|
19
|
-
new(subdomain).valid || default
|
20
|
-
end
|
21
|
-
|
22
|
-
def default
|
23
|
-
new(I18n.default_locale)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize(str)
|
28
|
-
@str = str.to_s
|
29
|
-
end
|
30
|
-
|
31
|
-
def to_s
|
32
|
-
@str
|
33
|
-
end
|
34
|
-
|
35
|
-
def to_sym
|
36
|
-
@sym ||= @str.to_sym
|
37
|
-
end
|
38
|
-
|
39
|
-
# Returns subdomain for the locale. If the locale is default, "www" is returned.
|
40
|
-
# I18n.default_locale = :az
|
41
|
-
# Locale.new(:ru).subdomain # => 'ru'
|
42
|
-
# Locale.new(:az).subdomain # => 'www'
|
43
|
-
def subdomain
|
44
|
-
if default?
|
45
|
-
'www'
|
46
|
-
else
|
47
|
-
to_s
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def default?
|
52
|
-
I18n.default_locale.to_sym == self.to_sym
|
53
|
-
end
|
54
|
-
|
55
|
-
def valid
|
56
|
-
self if valid?
|
57
|
-
end
|
58
|
-
|
59
|
-
def valid?
|
60
|
-
I18n.available_locales.include?(self.to_sym)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
data/test/controller_test.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require "minitest/autorun"
|
2
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
3
|
-
require "subdomain_locale/controller"
|
4
|
-
|
5
|
-
class ControllerTest < MiniTest::Unit::TestCase
|
6
|
-
class Controller
|
7
|
-
class Request
|
8
|
-
def subdomain
|
9
|
-
"ru"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def self.before_filter(sym)
|
14
|
-
@@before_filters ||= []
|
15
|
-
@@before_filters << sym
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.before_filters
|
19
|
-
@@before_filters
|
20
|
-
end
|
21
|
-
|
22
|
-
def run
|
23
|
-
@@before_filters.each{ |sym| send(sym) }
|
24
|
-
end
|
25
|
-
|
26
|
-
def request
|
27
|
-
Request.new
|
28
|
-
end
|
29
|
-
|
30
|
-
include SubdomainLocale::Controller
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_sets_locale
|
34
|
-
assert_nil I18n.locale
|
35
|
-
Controller.new.run
|
36
|
-
assert_equal :ru, I18n.locale
|
37
|
-
end
|
38
|
-
end
|
data/test/lib/i18n.rb
DELETED
data/test/locale_test.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require "minitest/autorun"
|
2
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
3
|
-
require "subdomain_locale/locale"
|
4
|
-
|
5
|
-
class LocaleTest < MiniTest::Unit::TestCase
|
6
|
-
include SubdomainLocale
|
7
|
-
|
8
|
-
def test_sets_locale
|
9
|
-
Locale.set("ru")
|
10
|
-
assert_equal :ru, I18n.locale
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_sets_default_locale_for_nil
|
14
|
-
Locale.set(nil)
|
15
|
-
assert_equal :az, I18n.locale
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_subdomain
|
19
|
-
assert_equal "ru", Locale.new(:ru).subdomain
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_default_subdomain
|
23
|
-
assert_equal "www", Locale.new(:az).subdomain
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_default?
|
27
|
-
assert Locale.new(:az).default?
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_not_default?
|
31
|
-
refute Locale.new(:ru).default?
|
32
|
-
end
|
33
|
-
end
|