localeapp 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MzAxNGJkZThkNjM0NDY1MWFhODFhNDhlY2Q5ZGRkMDQzZTEzNzE3Ng==
4
+ ZmEzMjU2ZmQyMTM1NDcxY2MxNmY1MjA4ZGRiY2Y0ZTg0YjAzNjgyZQ==
5
5
  data.tar.gz: !binary |-
6
- NjVkNzMyNTE3OTRlOGI1MmRiMGMzMTgxY2Y5Yzg3YzNhNTlkYWZmNA==
6
+ YTEwOGFlMWY2OTVjZjQ0NjRmMmE1NmQzZDMwMTkxMmQ0Y2Y0ZTMwMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NmJlNzRmYjQ3ZmUxZWRhM2FiNGExNzdlYzc4MTEzY2QzMjlhMGM1MDQ0MjNl
10
- MTBkYTg2YmZmNDAxYmVlY2RhNDIwMmU0YTk1ZTQ4MzMyNWUzNDNhYzM1YzU2
11
- ODNiOWM4Y2NiZmMxNDYyNjAyNDVmZTdkMjkyNDY2M2NhNGMzYjc=
9
+ NzViMWZmNjNlNGZlOGVjZTA4M2ZiOWZkMDMyMDM0NjhlMDVkYWFmYzQ2MzNj
10
+ MDAzOWZlNDM0NWQ0NGJiMTBhYWQ3OGQ2M2U4ODVlYjI2MDRlMjdmODI3ZDZh
11
+ YjM2Nzc2YjdlOWYxNDYxNzIxNjE1ZGM4YjU4Yzc4NzNiZjRlZWE=
12
12
  data.tar.gz: !binary |-
13
- ZTE3NWYyN2EzNDMxNGUxZGFlNmEyYjU2ZWNmN2NlYjMwM2E4OTdiYWRlMDVh
14
- NzVmY2EzM2E3NzVmYTUzYjM2ZWRiZTFkYjZiZjc0ODFmMmM0OGI1OTQ3ZDEw
15
- OGRkYmQyOWE1M2YzMjhmMDk3ZTkyMDA2ODc4NTQ5ZjZkYzI3MjU=
13
+ NGY5MDhhNzZjNzE5MGU1NDI1OTIwODljZWJlNzU1OWIyNDU5ODc3MjhiMmE0
14
+ ZDVlYjI4NDkzYTBkMWE3YjVmY2I0MjE0ODZkZTRhYzAxZGFhYTEzNjQxYWI5
15
+ YzcwYTgwMTNiNzg0OTljYTA0ODM3Yzk1NjMyZTc1OWYxNGY2YWU=
data/.gitignore CHANGED
@@ -3,6 +3,7 @@ pkg/*
3
3
  .bundle
4
4
  Gemfile.lock
5
5
  Gemfile.*.lock
6
+ gemfiles/*.gemfile.lock
6
7
  .yardoc/*
7
8
  doc/*
8
9
  tmp/*
data/.travis.yml CHANGED
@@ -2,22 +2,27 @@ before_install:
2
2
  - gem update bundler
3
3
  rvm:
4
4
  - 1.9.3
5
- - 2.0.0
6
- - 2.1.0
7
- - 2.2.0
5
+ - 2.0
6
+ - 2.1
7
+ - 2.2
8
8
  - jruby
9
9
  - jruby-head
10
10
  gemfile:
11
- - Gemfile.i18n_037
12
- - Gemfile.i18n_050
13
- - Gemfile.i18n_060
11
+ - gemfiles/i18n_0.3.gemfile
12
+ - gemfiles/i18n_0.4.gemfile
13
+ - gemfiles/i18n_0.5.gemfile
14
+ - gemfiles/i18n_0.6.gemfile
15
+ - gemfiles/i18n_0.7.gemfile
14
16
  matrix:
15
17
  exclude:
16
- - rvm: 2.0.0
17
- gemfile: Gemfile.i18n_037
18
- - rvm: 2.1.0
19
- gemfile: Gemfile.i18n_037
20
- - rvm: 2.2.0
21
- gemfile: Gemfile.i18n_037
18
+ - rvm: 2.0
19
+ gemfile: gemfiles/i18n_0.3.gemfile
20
+ - rvm: 2.1
21
+ gemfile: gemfiles/i18n_0.3.gemfile
22
+ - rvm: 2.2
23
+ gemfile: gemfiles/i18n_0.3.gemfile
22
24
  - rvm: jruby-head
23
- gemfile: Gemfile.i18n_037
25
+ gemfile: gemfiles/i18n_0.3.gemfile
26
+ notifications:
27
+ slack:
28
+ secure: JryUWfe2JR0cfNT+TIHwryy8NS8m9/hbRhg+5UqwuYWuEp6gtcWCA05wKsajQyRrGaNGYKu81RA9jpQrirgQWzDUJl5o3sEWbqKZv3pW0ybn8Tx52N1mxW3Puar5KLZ8TPRphKKIJ8/1EhAh4zpC5Mtxv8Sz1/AHuqnlu6l+bb4=
data/Appraisals ADDED
@@ -0,0 +1,20 @@
1
+ appraise "i18n-0.3" do
2
+ gem "i18n", "~> 0.3.0"
3
+ gem "activesupport", "~> 2.3.18"
4
+ end
5
+
6
+ appraise "i18n-0.4" do
7
+ gem "i18n", "~> 0.4.0"
8
+ end
9
+
10
+ appraise "i18n-0.5" do
11
+ gem "i18n", "~> 0.5.0"
12
+ end
13
+
14
+ appraise "i18n-0.6" do
15
+ gem "i18n", "~> 0.6.0"
16
+ end
17
+
18
+ appraise "i18n-0.7" do
19
+ gem "i18n", "~> 0.7.0"
20
+ end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # master
2
2
 
3
+ # Version 1.0.2
4
+
5
+ * Fix a XSS vulnerability where translations keys could contain unescaped HTML (@grekko)
6
+
3
7
  # Version 1.0.1
4
8
 
5
9
  * Fix error when bundling with Rails >= 4.2 (due to a dependency on i18n < 0.7)
@@ -0,0 +1,12 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "i18n", "~> 0.3.0"
6
+ gem "activesupport", "~> 2.3.18"
7
+
8
+ platforms :jruby do
9
+ gem "jruby-openssl"
10
+ end
11
+
12
+ gemspec :path => "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "i18n", "~> 0.4.0"
6
+
7
+ platforms :jruby do
8
+ gem "jruby-openssl"
9
+ end
10
+
11
+ gemspec :path => "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "i18n", "~> 0.5.0"
6
+
7
+ platforms :jruby do
8
+ gem "jruby-openssl"
9
+ end
10
+
11
+ gemspec :path => "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "i18n", "~> 0.6.0"
6
+
7
+ platforms :jruby do
8
+ gem "jruby-openssl"
9
+ end
10
+
11
+ gemspec :path => "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "i18n", "~> 0.7.0"
6
+
7
+ platforms :jruby do
8
+ gem "jruby-openssl"
9
+ end
10
+
11
+ gemspec :path => "../"
@@ -1,16 +1,17 @@
1
1
  module Localeapp
2
2
  class ExceptionHandler
3
- def self.call(exception, locale, key, options)
3
+ def self.call(exception, locale, key_or_keys, options)
4
+ keys = Array(key_or_keys).map { |key| ERB::Util.html_escape(key.to_s) }
4
5
  Localeapp.log(exception.message)
5
6
  # Which exact exception is set up by our i18n shims
6
7
  if exception.is_a? Localeapp::I18nMissingTranslationException
7
- Localeapp.log("Detected missing translation for key(s) #{key.inspect}")
8
+ Localeapp.log("Detected missing translation for key(s) #{keys.inspect}")
8
9
 
9
- [*key].each do |key|
10
+ keys.each do |key|
10
11
  Localeapp.missing_translations.add(locale, key, nil, options || {})
11
12
  end
12
13
 
13
- [locale, key].join(', ')
14
+ [locale, keys].join(', ')
14
15
  else
15
16
  Localeapp.log('Raising exception')
16
17
  raise
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module Localeapp
2
4
  MissingTranslationRecord = Struct.new(:key, :locale, :description, :options) do
3
5
  def blacklisted?
@@ -10,7 +12,7 @@ module Localeapp
10
12
  end
11
13
 
12
14
  class MissingTranslations
13
- @cached_keys = []
15
+ @cached_keys = Set.new
14
16
 
15
17
  class << self
16
18
  attr_accessor :cached_keys
@@ -1,142 +1,25 @@
1
1
  require 'rack/utils'
2
2
 
3
+ require "localeapp/routes/base"
4
+ require "localeapp/routes/projects"
5
+ require "localeapp/routes/translations"
6
+ require "localeapp/routes/export"
7
+ require "localeapp/routes/remove"
8
+ require "localeapp/routes/rename"
9
+ require "localeapp/routes/missing_translations"
10
+ require "localeapp/routes/import"
11
+
3
12
  module Localeapp
4
13
  module Routes
5
14
  VERSION = 'v1'
6
15
 
7
- def project_endpoint(options = {})
8
- [:get, project_url(options)]
9
- end
10
-
11
- def project_url(options = {})
12
- options[:format] ||= 'json'
13
- http_scheme.build(base_options.merge(:path => project_path(options[:format]))).to_s
14
- end
15
-
16
- def translations_url(options={})
17
- options[:format] ||= 'yml'
18
- url = http_scheme.build(base_options.merge(:path => translations_path(options[:format])))
19
- url.query = options[:query].map { |k,v| "#{k}=#{v}" }.join('&') if options[:query]
20
- url.to_s
21
- end
22
-
23
- def translations_endpoint(options = {})
24
- [:get, translations_url(options)]
25
- end
26
-
27
- def create_translation_endpoint(options = {})
28
- [:post, translations_url(options)]
29
- end
30
-
31
- def export_endpoint(options = {})
32
- [:get, export_url(options)]
33
- end
34
-
35
- def remove_endpoint(options = {})
36
- [:delete, remove_url(options)]
37
- end
38
-
39
- def remove_url(options = {})
40
- url = http_scheme.build(base_options.merge(:path => remove_path(options[:key], options[:format])))
41
- url.to_s
42
- end
43
-
44
- def rename_endpoint(options = {})
45
- [:post, rename_url(options)]
46
- end
47
-
48
- def rename_url(options = {})
49
- url = http_scheme.build(base_options.merge(:path => rename_path(options[:current_name], options[:format])))
50
- url.to_s
51
- end
52
-
53
- def export_url(options = {})
54
- options[:format] ||= 'yml'
55
- url = http_scheme.build(base_options.merge(:path => export_path(options[:format])))
56
- url.query = options[:query].map { |k,v| "#{k}=#{v}" }.join('&') if options[:query]
57
- url.to_s
58
- end
59
-
60
- def missing_translations_endpoint(options = {})
61
- [:post, missing_translations_url(options)]
62
- end
63
-
64
- def missing_translations_url(options={})
65
- options[:format] ||= 'json'
66
- url = http_scheme.build(base_options.merge(:path => missing_translations_path(options[:format])))
67
- url.query = options[:query].map { |k,v| "#{k}=#{v}" }.join('&') if options[:query]
68
- url.to_s
69
- end
70
-
71
- def import_endpoint(options = {})
72
- [:post, import_url(options)]
73
- end
74
-
75
- def import_url(options={})
76
- http_scheme.build(base_options.merge(:path => import_path)).to_s
77
- end
78
-
79
- private
80
- def http_scheme
81
- if Localeapp.configuration.secure
82
- URI::HTTPS
83
- else
84
- URI::HTTP
85
- end
86
- end
87
-
88
- def base_options
89
- options = {:host => Localeapp.configuration.host, :port => Localeapp.configuration.port}
90
- if Localeapp.configuration.http_auth_username
91
- options[:userinfo] = "#{Localeapp.configuration.http_auth_username}:#{Localeapp.configuration.http_auth_password}"
92
- end
93
- options
94
- end
95
-
96
- def project_path(format = nil)
97
- path = "/#{VERSION}/projects/#{Localeapp.configuration.api_key}"
98
- path << ".#{format}" if format
99
- path
100
- end
101
-
102
- def translations_path(format = nil)
103
- path = project_path << '/translations'
104
- path << ".#{format}" if format
105
- path
106
- end
107
-
108
- def remove_path(key, format = nil)
109
- raise "remove_path requires a key" if key.nil?
110
- path = translations_path << "/#{escape_key(key)}"
111
- path << ".#{format}" if format
112
- path
113
- end
114
-
115
- def rename_path(current_name, format = nil)
116
- raise "rename_path requires current name" if current_name.nil?
117
- path = translations_path << "/#{escape_key(current_name)}" << '/rename'
118
- path << ".#{format}" if format
119
- path
120
- end
121
-
122
- def escape_key(key)
123
- Rack::Utils.escape(key).gsub(/\./, '%2E')
124
- end
125
-
126
- def export_path(format = nil)
127
- path = project_path << '/translations/all'
128
- path << ".#{format}" if format
129
- path
130
- end
131
-
132
- def missing_translations_path(format = nil)
133
- path = project_path << '/translations/missing'
134
- path << ".#{format}" if format
135
- path
136
- end
137
-
138
- def import_path(format = nil)
139
- project_path << '/import/'
140
- end
16
+ include Base
17
+ include Projects
18
+ include Translations
19
+ include Export
20
+ include Remove
21
+ include Rename
22
+ include MissingTranslations
23
+ include Import
141
24
  end
142
25
  end
@@ -0,0 +1,28 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Base
4
+
5
+ private
6
+
7
+ def http_scheme
8
+ if Localeapp.configuration.secure
9
+ URI::HTTPS
10
+ else
11
+ URI::HTTP
12
+ end
13
+ end
14
+
15
+ def base_options
16
+ options = {:host => Localeapp.configuration.host, :port => Localeapp.configuration.port}
17
+ if Localeapp.configuration.http_auth_username
18
+ options[:userinfo] = "#{Localeapp.configuration.http_auth_username}:#{Localeapp.configuration.http_auth_password}"
19
+ end
20
+ options
21
+ end
22
+
23
+ def escape_key(key)
24
+ Rack::Utils.escape(key).gsub(/\./, '%2E')
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Export
4
+ def export_endpoint(options = {})
5
+ [:get, export_url(options)]
6
+ end
7
+
8
+ def export_url(options = {})
9
+ options[:format] ||= 'yml'
10
+ url = http_scheme.build(base_options.merge(:path => export_path(options[:format])))
11
+ url.query = options[:query].map { |k,v| "#{k}=#{v}" }.join('&') if options[:query]
12
+ url.to_s
13
+ end
14
+
15
+ private
16
+
17
+ def export_path(format = nil)
18
+ path = project_path << '/translations/all'
19
+ path << ".#{format}" if format
20
+ path
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Import
4
+ def import_endpoint(options = {})
5
+ [:post, import_url(options)]
6
+ end
7
+
8
+ def import_url(options={})
9
+ http_scheme.build(base_options.merge(:path => import_path)).to_s
10
+ end
11
+
12
+ private
13
+
14
+ def import_path(format = nil)
15
+ project_path << '/import/'
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module Localeapp
2
+ module Routes
3
+ module MissingTranslations
4
+ def missing_translations_endpoint(options = {})
5
+ [:post, missing_translations_url(options)]
6
+ end
7
+
8
+ def missing_translations_url(options={})
9
+ options[:format] ||= 'json'
10
+ url = http_scheme.build(base_options.merge(:path => missing_translations_path(options[:format])))
11
+ url.query = options[:query].map { |k,v| "#{k}=#{v}" }.join('&') if options[:query]
12
+ url.to_s
13
+ end
14
+
15
+ private
16
+
17
+ def missing_translations_path(format = nil)
18
+ path = project_path << '/translations/missing'
19
+ path << ".#{format}" if format
20
+ path
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Projects
4
+ def project_endpoint(options = {})
5
+ [:get, project_url(options)]
6
+ end
7
+
8
+ def project_url(options = {})
9
+ options[:format] ||= 'json'
10
+ http_scheme.build(base_options.merge(:path => project_path(options[:format]))).to_s
11
+ end
12
+
13
+ private
14
+
15
+ def project_path(format = nil)
16
+ path = "/#{VERSION}/projects/#{Localeapp.configuration.api_key}"
17
+ path << ".#{format}" if format
18
+ path
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Remove
4
+ def remove_endpoint(options = {})
5
+ [:delete, remove_url(options)]
6
+ end
7
+
8
+ def remove_url(options = {})
9
+ url = http_scheme.build(base_options.merge(:path => remove_path(options[:key], options[:format])))
10
+ url.to_s
11
+ end
12
+
13
+ private
14
+
15
+ def remove_path(key, format = nil)
16
+ raise "remove_path requires a key" if key.nil?
17
+ path = translations_path << "/#{escape_key(key)}"
18
+ path << ".#{format}" if format
19
+ path
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Rename
4
+ def rename_endpoint(options = {})
5
+ [:post, rename_url(options)]
6
+ end
7
+
8
+ def rename_url(options = {})
9
+ url = http_scheme.build(base_options.merge(:path => rename_path(options[:current_name], options[:format])))
10
+ url.to_s
11
+ end
12
+
13
+ private
14
+
15
+ def rename_path(current_name, format = nil)
16
+ raise "rename_path requires current name" if current_name.nil?
17
+ path = translations_path << "/#{escape_key(current_name)}" << '/rename'
18
+ path << ".#{format}" if format
19
+ path
20
+ end
21
+
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ module Localeapp
2
+ module Routes
3
+ module Translations
4
+ def translations_url(options={})
5
+ options[:format] ||= 'yml'
6
+ url = http_scheme.build(base_options.merge(:path => translations_path(options[:format])))
7
+ url.query = options[:query].map { |k,v| "#{k}=#{v}" }.join('&') if options[:query]
8
+ url.to_s
9
+ end
10
+
11
+ def translations_endpoint(options = {})
12
+ [:get, translations_url(options)]
13
+ end
14
+
15
+ def create_translation_endpoint(options = {})
16
+ [:post, translations_url(options)]
17
+ end
18
+
19
+ private
20
+
21
+ def translations_path(format = nil)
22
+ path = project_path << '/translations'
23
+ path << ".#{format}" if format
24
+ path
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module Localeapp
2
- VERSION = '1.0.1'
2
+ VERSION = "1.0.2"
3
3
  end
data/localeapp.gemspec CHANGED
@@ -34,4 +34,5 @@ Gem::Specification.new do |s|
34
34
  s.add_development_dependency('aruba', '~> 0.8')
35
35
  s.add_development_dependency('cucumber', '~> 2.0')
36
36
  s.add_development_dependency('fakeweb')
37
+ s.add_development_dependency('appraisal')
37
38
  end
@@ -26,10 +26,20 @@ describe Localeapp::ExceptionHandler, '#call(exception, locale, key, options)' d
26
26
  end
27
27
 
28
28
  it "handles when the default is a Symbol that can't be resolved" do
29
- expect(Localeapp.missing_translations).to receive(:add).with(:en, :foo, nil, {:default => :bar})
29
+ expect(Localeapp.missing_translations).to receive(:add).with(:en, 'foo', nil, {:default => :bar})
30
30
  I18n.t(:foo, :default => :bar)
31
31
  end
32
32
 
33
+ it "escapes html tags from keys to prevent xss attacks" do
34
+ expect(Localeapp.missing_translations).to receive(:add).with(:en, '&lt;script&gt;alert(1);&lt;/script&gt;', nil, {})
35
+ expect(I18n.t('<script>alert(1);</script>')).to eq 'en, &lt;script&gt;alert(1);&lt;/script&gt;'
36
+ end
37
+
38
+ it "joins locale and keys correctly" do
39
+ expect(I18n.t('foo.bar')).to eq 'en, foo.bar'
40
+ expect(I18n.t(%w{foo.bar foo.baz})).to eq 'en, foo.bar, foo.baz'
41
+ end
42
+
33
43
  it "handles missing translation exception" do
34
44
  expect {
35
45
  exception = Localeapp::I18nMissingTranslationException.new(:en, 'foo', {})
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: localeapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Dell
@@ -194,6 +194,20 @@ dependencies:
194
194
  - - ! '>='
195
195
  - !ruby/object:Gem::Version
196
196
  version: '0'
197
+ - !ruby/object:Gem::Dependency
198
+ name: appraisal
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ type: :development
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ! '>='
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
197
211
  description: Synchronizes i18n translation keys and content with localeapp.com so
198
212
  you don't have to manage translations by hand.
199
213
  email:
@@ -210,13 +224,10 @@ files:
210
224
  - .rspec
211
225
  - .rvmrc
212
226
  - .travis.yml
227
+ - Appraisals
213
228
  - CHANGELOG.md
214
229
  - CONTRIBUTING.md
215
230
  - Gemfile
216
- - Gemfile.github_project.rb
217
- - Gemfile.i18n_037
218
- - Gemfile.i18n_050
219
- - Gemfile.i18n_060
220
231
  - README.md
221
232
  - Rakefile
222
233
  - bin/localeapp
@@ -233,6 +244,11 @@ files:
233
244
  - features/support/env.rb
234
245
  - features/support/hooks.rb
235
246
  - features/update.feature
247
+ - gemfiles/i18n_0.3.gemfile
248
+ - gemfiles/i18n_0.4.gemfile
249
+ - gemfiles/i18n_0.5.gemfile
250
+ - gemfiles/i18n_0.6.gemfile
251
+ - gemfiles/i18n_0.7.gemfile
236
252
  - init.rb
237
253
  - lib/localeapp.rb
238
254
  - lib/localeapp/api_call.rb
@@ -261,6 +277,14 @@ files:
261
277
  - lib/localeapp/rails/force_exception_handler_in_translation_helper.rb
262
278
  - lib/localeapp/rails/mimic_rails_missing_translation_display.rb
263
279
  - lib/localeapp/routes.rb
280
+ - lib/localeapp/routes/base.rb
281
+ - lib/localeapp/routes/export.rb
282
+ - lib/localeapp/routes/import.rb
283
+ - lib/localeapp/routes/missing_translations.rb
284
+ - lib/localeapp/routes/projects.rb
285
+ - lib/localeapp/routes/remove.rb
286
+ - lib/localeapp/routes/rename.rb
287
+ - lib/localeapp/routes/translations.rb
264
288
  - lib/localeapp/sender.rb
265
289
  - lib/localeapp/sync_file.rb
266
290
  - lib/localeapp/tasks/localeapp.rake
@@ -1,9 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- group :development do
4
- gem "rspec", ">= 2.4.0"
5
- gem "bundler"
6
- gem "jeweler", "> 1.6.4"
7
- gem 'i18n-spec'
8
- gem 'localeapp'
9
- end
data/Gemfile.i18n_037 DELETED
@@ -1,13 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- gem 'i18n', '0.3.7'
5
- gem 'activesupport', '~> 2.3.18'
6
-
7
- platforms :ruby do
8
- gem 'iconv'
9
- end
10
-
11
- platform :jruby do
12
- gem 'jruby-openssl'
13
- end
data/Gemfile.i18n_050 DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- gem 'i18n', '0.5.0'
5
-
6
- platform :jruby do
7
- gem 'jruby-openssl'
8
- end
data/Gemfile.i18n_060 DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
3
-
4
- gem 'i18n', '~> 0.6.0'
5
-
6
- platform :jruby do
7
- gem 'jruby-openssl'
8
- end