localeapp 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +15 -0
- data/features/pull.feature +1 -1
- data/features/support/env.rb +2 -1
- data/features/support/hooks.rb +8 -1
- data/lib/localeapp.rb +2 -1
- data/lib/localeapp/cli/command.rb +1 -1
- data/lib/localeapp/cli/daemon.rb +1 -1
- data/lib/localeapp/cli/install.rb +4 -3
- data/lib/localeapp/poller.rb +14 -19
- data/lib/localeapp/rails.rb +3 -4
- data/lib/localeapp/rails/controller.rb +1 -1
- data/lib/localeapp/sync_file.rb +45 -0
- data/lib/localeapp/updater.rb +2 -2
- data/lib/localeapp/version.rb +1 -1
- data/localeapp.gemspec +1 -1
- data/spec/fixtures/string_log.yml +3 -0
- data/spec/fixtures/symbol_log.yml +3 -0
- data/spec/localeapp/poller_spec.rb +2 -24
- data/spec/localeapp/sync_file_spec.rb +61 -0
- metadata +48 -9
- checksums.yaml +0 -15
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,20 @@
|
|
1
1
|
# master
|
2
2
|
|
3
|
+
# Version 0.8.0
|
4
|
+
|
5
|
+
* Fix problem with line ending in three dots. (@holli)
|
6
|
+
* Change deprecated File.exists? to File.exist?
|
7
|
+
* Fix "install --github" so it append README.md, before it truncated the README.md file with new content, now its
|
8
|
+
append content in a more proper manner. Also fix .gitignore injection so it ensure newline.
|
9
|
+
* Extract synchronisation data into SyncFile and SyncData classes. These value objects allow us to read synchronisation data from yaml files that have both strings and symbols as keys. Sync files now use strings as keys when serialising to yaml. If you find that you have a log/localeapp.yml file that contains the string !ruby, run localeapp pull to update to "regular" yaml syntax.
|
10
|
+
* Tweak Aruba config for jRuby (development related only).
|
11
|
+
* Fix minor typo in "updater" output message.
|
12
|
+
|
13
|
+
# Version 0.7.2
|
14
|
+
|
15
|
+
* Display a message when the timestamp used for an update command is too old
|
16
|
+
* Do not even try to hit the API when this timestamp is too old (since the API will return a 422 error anyway)
|
17
|
+
|
3
18
|
# Version 0.7.1
|
4
19
|
|
5
20
|
* Raise Localeapp::MissingApiKey when api_key is empty
|
data/features/pull.feature
CHANGED
@@ -25,7 +25,7 @@ Feature: Pulling all translation
|
|
25
25
|
When I run `localeapp pull`
|
26
26
|
Then the output should contain:
|
27
27
|
"""
|
28
|
-
Could not write locale file, please make sure that config/locales exists and is
|
28
|
+
Could not write locale file, please make sure that config/locales exists and is writable
|
29
29
|
"""
|
30
30
|
|
31
31
|
Scenario: Running pull with no initializer file, passing the key on the command line
|
data/features/support/env.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'aruba/cucumber'
|
2
|
+
require 'aruba/jruby'
|
3
|
+
|
2
4
|
require File.expand_path(File.join(File.dirname(__FILE__), '../../spec/support/localeapp_integration_data'))
|
3
5
|
World(LocaleappIntegrationData)
|
4
6
|
|
@@ -18,4 +20,3 @@ module FakeWebHelper
|
|
18
20
|
end
|
19
21
|
end
|
20
22
|
World(FakeWebHelper)
|
21
|
-
|
data/features/support/hooks.rb
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
Before do
|
2
2
|
ENV['FAKE_WEB_DURING_CUCUMBER_RUN'] = '1'
|
3
|
-
@aruba_timeout_seconds = 15
|
3
|
+
@aruba_timeout_seconds = RUBY_PLATFORM == 'java' ? 60 : 15
|
4
|
+
end
|
5
|
+
|
6
|
+
# Globally @announce-cmd to track down slow cmd.
|
7
|
+
Aruba.configure do |config|
|
8
|
+
config.before_cmd do |cmd|
|
9
|
+
puts "$ '#{cmd}'"
|
10
|
+
end
|
4
11
|
end
|
data/lib/localeapp.rb
CHANGED
@@ -29,6 +29,7 @@ require 'localeapp/routes'
|
|
29
29
|
require 'localeapp/api_call'
|
30
30
|
require 'localeapp/api_caller'
|
31
31
|
require 'localeapp/sender'
|
32
|
+
require 'localeapp/sync_file'
|
32
33
|
require 'localeapp/poller'
|
33
34
|
require 'localeapp/updater'
|
34
35
|
require 'localeapp/key_checker'
|
@@ -108,7 +109,7 @@ module Localeapp
|
|
108
109
|
end
|
109
110
|
|
110
111
|
def has_config_file?
|
111
|
-
default_config_file_paths.any? { |path| File.
|
112
|
+
default_config_file_paths.any? { |path| File.exist?(path) }
|
112
113
|
end
|
113
114
|
|
114
115
|
def default_config_file_paths
|
data/lib/localeapp/cli/daemon.rb
CHANGED
@@ -40,7 +40,7 @@ module Localeapp
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def kill_existing
|
43
|
-
if File.
|
43
|
+
if File.exist? Localeapp.configuration.daemon_pid_file
|
44
44
|
begin
|
45
45
|
daemon_pid = File.read(Localeapp.configuration.daemon_pid_file)
|
46
46
|
Process.kill("QUIT", daemon_pid.to_i)
|
@@ -206,14 +206,15 @@ CONTENT
|
|
206
206
|
|
207
207
|
def create_gitignore
|
208
208
|
File.open('.gitignore', 'a+') do |file|
|
209
|
-
file.write config_dir
|
209
|
+
file.write "\n#{config_dir}"
|
210
210
|
end
|
211
211
|
end
|
212
212
|
|
213
213
|
def create_readme
|
214
|
-
File.open('README.md', '
|
214
|
+
File.open('README.md', 'a+') do |file|
|
215
215
|
file.write <<-CONTENT
|
216
|
-
|
216
|
+
|
217
|
+
---
|
217
218
|
|
218
219
|
A ruby translation project managed on [Locale](http://www.localeapp.com/) that's open to all!
|
219
220
|
|
data/lib/localeapp/poller.rb
CHANGED
@@ -13,31 +13,26 @@ module Localeapp
|
|
13
13
|
attr_accessor :updated_at
|
14
14
|
|
15
15
|
def initialize
|
16
|
-
@
|
17
|
-
@
|
16
|
+
@sync_file = SyncFile.new( Localeapp.configuration.synchronization_data_file )
|
17
|
+
@polled_at = sync_data.polled_at
|
18
|
+
@updated_at = sync_data.updated_at
|
18
19
|
end
|
19
20
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
default_synchronization_data
|
24
|
-
else
|
25
|
-
default_synchronization_data
|
26
|
-
end
|
21
|
+
def sync_data
|
22
|
+
sync_file.refresh
|
23
|
+
sync_file.data
|
27
24
|
end
|
28
25
|
|
29
26
|
def write_synchronization_data!(polled_at, updated_at)
|
30
|
-
|
31
|
-
f.write({:polled_at => polled_at.to_i, :updated_at => updated_at.to_i}.to_yaml)
|
32
|
-
end
|
27
|
+
sync_file.write(polled_at, updated_at)
|
33
28
|
end
|
34
29
|
|
35
30
|
def needs_polling?
|
36
|
-
|
31
|
+
sync_data.polled_at < (Time.now.to_i - Localeapp.configuration.poll_interval)
|
37
32
|
end
|
38
33
|
|
39
34
|
def needs_reloading?
|
40
|
-
|
35
|
+
sync_data.updated_at != @updated_at
|
41
36
|
end
|
42
37
|
|
43
38
|
def poll!
|
@@ -65,13 +60,13 @@ module Localeapp
|
|
65
60
|
@success = false
|
66
61
|
end
|
67
62
|
|
68
|
-
|
63
|
+
private
|
64
|
+
|
65
|
+
# a SyncFile object representing the synchronization file
|
66
|
+
attr_reader :sync_file
|
67
|
+
|
69
68
|
def current_time
|
70
69
|
Time.now
|
71
70
|
end
|
72
|
-
|
73
|
-
def default_synchronization_data
|
74
|
-
{:polled_at => 0, :updated_at => 0}
|
75
|
-
end
|
76
71
|
end
|
77
72
|
end
|
data/lib/localeapp/rails.rb
CHANGED
@@ -27,11 +27,10 @@ module Localeapp
|
|
27
27
|
|
28
28
|
def self.initialize_synchronization_data_file
|
29
29
|
sync_file = Localeapp.configuration.synchronization_data_file
|
30
|
-
if !File.
|
30
|
+
if !File.exist?(sync_file)
|
31
31
|
FileUtils.mkdir_p(File.dirname(sync_file))
|
32
|
-
|
33
|
-
|
34
|
-
end
|
32
|
+
file = Localeapp::SyncFile.new(sync_file)
|
33
|
+
file.write(Time.now.to_i, Time.now.to_i)
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
@@ -20,7 +20,7 @@ module Localeapp
|
|
20
20
|
if ::Localeapp.poller.needs_reloading?
|
21
21
|
::Localeapp.log_with_time 'reloading I18n'
|
22
22
|
I18n.reload!
|
23
|
-
::Localeapp.poller.updated_at = ::Localeapp.poller.
|
23
|
+
::Localeapp.poller.updated_at = ::Localeapp.poller.sync_data.updated_at
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Localeapp
|
4
|
+
SyncFile = Struct.new(:path) do
|
5
|
+
def refresh
|
6
|
+
@data = if File.exist?(path)
|
7
|
+
SyncData.from_hash( Localeapp.load_yaml_file(path) )
|
8
|
+
else
|
9
|
+
SyncData.default
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def write(polled_at, updated_at)
|
14
|
+
data.polled_at = polled_at
|
15
|
+
data.updated_at = updated_at
|
16
|
+
File.open(path, 'w+') { |f| f.write(data.to_yaml) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def data
|
20
|
+
@data ||= SyncData.default
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
SyncData = Struct.new(:polled_at, :updated_at) do
|
25
|
+
def self.default
|
26
|
+
new(0, 0)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.from_hash(hash)
|
30
|
+
return default unless hash.is_a?(Hash)
|
31
|
+
new(
|
32
|
+
hash['polled_at'] || hash[:polled_at],
|
33
|
+
hash['updated_at'] || hash[:updated_at]
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_hash
|
38
|
+
{'polled_at' => polled_at.to_i, 'updated_at' => updated_at.to_i}
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_yaml
|
42
|
+
to_hash.to_yaml
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/localeapp/updater.rb
CHANGED
@@ -44,7 +44,7 @@ module Localeapp
|
|
44
44
|
|
45
45
|
def generate_yaml(translations)
|
46
46
|
if defined?(Psych) && defined?(Psych::VERSION)
|
47
|
-
Psych.dump(translations, :line_width => -1)[4..-1]
|
47
|
+
Psych.dump(translations, :line_width => -1)[4..-1]
|
48
48
|
else
|
49
49
|
translations.ya2yaml[5..-1]
|
50
50
|
end
|
@@ -80,7 +80,7 @@ module Localeapp
|
|
80
80
|
def atomic_write(file_name, temp_dir = Dir.tmpdir)
|
81
81
|
target_dir = File.dirname(file_name)
|
82
82
|
unless File.directory?(target_dir)
|
83
|
-
raise "Could not write locale file, please make sure that #{target_dir} exists and is
|
83
|
+
raise "Could not write locale file, please make sure that #{target_dir} exists and is writable"
|
84
84
|
end
|
85
85
|
|
86
86
|
permissions = File.stat(file_name).mode if File.exist?(file_name)
|
data/lib/localeapp/version.rb
CHANGED
data/localeapp.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.add_dependency('gli')
|
29
29
|
|
30
30
|
s.add_development_dependency('rake')
|
31
|
-
s.add_development_dependency('rspec')
|
31
|
+
s.add_development_dependency('rspec', '~> 2.14.1')
|
32
32
|
s.add_development_dependency('yard')
|
33
33
|
s.add_development_dependency('RedCloth')
|
34
34
|
s.add_development_dependency('aruba')
|
@@ -24,39 +24,17 @@ describe Localeapp::Poller do
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
describe "#synchronization_data" do
|
28
|
-
let(:default_data) { {:polled_at => 0, :updated_at => 0} }
|
29
|
-
|
30
|
-
before do
|
31
|
-
@original_configuration_file = Localeapp.configuration.synchronization_data_file
|
32
|
-
end
|
33
|
-
|
34
|
-
it "returns default data if there is a yml file that is empty" do
|
35
|
-
Localeapp.configuration.synchronization_data_file = "#{File.dirname(__FILE__)}/../fixtures/empty_log.yml"
|
36
|
-
@poller.synchronization_data.should == default_data
|
37
|
-
end
|
38
|
-
|
39
|
-
it "returns default data when the yml file doesn't exist" do
|
40
|
-
Localeapp.configuration.synchronization_data_file = "non_existant_file.yml"
|
41
|
-
@poller.synchronization_data.should == default_data
|
42
|
-
end
|
43
|
-
|
44
|
-
after do
|
45
|
-
Localeapp.configuration.synchronization_data_file = @original_configuration_file
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
27
|
describe "#write_synchronization_data!(polled_at, updated_at)" do
|
50
28
|
let(:polled_at_time) { Time.at(1000000) }
|
51
29
|
let(:updated_at_time) { Time.at(1000010) }
|
52
30
|
|
53
31
|
it "updates polled_at in the synchronization file" do
|
54
|
-
polled_at = lambda { @poller.
|
32
|
+
polled_at = lambda { @poller.sync_data.polled_at }
|
55
33
|
expect { @poller.write_synchronization_data!(polled_at_time, updated_at_time) }.to change(polled_at, :call).to(polled_at_time.to_i)
|
56
34
|
end
|
57
35
|
|
58
36
|
it "updates updated_at in the synchronization file" do
|
59
|
-
updated_at = lambda { @poller.
|
37
|
+
updated_at = lambda { @poller.sync_data.updated_at }
|
60
38
|
expect { @poller.write_synchronization_data!(polled_at_time, updated_at_time) }.to change(updated_at, :call).to(updated_at_time.to_i)
|
61
39
|
end
|
62
40
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Localeapp::SyncFile do
|
4
|
+
let(:base_dir) { File.join(File.dirname(__FILE__), '../fixtures') }
|
5
|
+
|
6
|
+
context "#data" do
|
7
|
+
it "is a default SyncData object" do
|
8
|
+
expect(Localeapp::SyncFile.new.data).to eq Localeapp::SyncData.default
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#refresh" do
|
13
|
+
def sync_file(path)
|
14
|
+
Localeapp::SyncFile.new("#{base_dir}/#{path}")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "sets the sync data by reading from the path when log file has string keys" do
|
18
|
+
file = sync_file('string_log.yml')
|
19
|
+
expect{ file.refresh }.to change(file, :data).to(Localeapp::SyncData.new(12345, 67890))
|
20
|
+
end
|
21
|
+
|
22
|
+
it "sets the sync data by reading from the path when log file has symbol keys" do
|
23
|
+
file = sync_file('symbol_log.yml')
|
24
|
+
expect{ file.refresh }.to change(file, :data).to(Localeapp::SyncData.new(54321, 98760))
|
25
|
+
end
|
26
|
+
|
27
|
+
it "sets the sync data to default values when file is missing" do
|
28
|
+
file = sync_file('this_file_does_not_exist.yml')
|
29
|
+
expect{ file.refresh }.to_not change(file, :data)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "sets the sync data to default values when file is empty" do
|
33
|
+
file = sync_file('empty_log.yml')
|
34
|
+
expect{ file.refresh }.to_not change(file, :data)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "#write" do
|
39
|
+
let(:file) { Localeapp::SyncFile.new("#{base_dir}/example_write.yml") }
|
40
|
+
|
41
|
+
after do
|
42
|
+
File.delete("#{base_dir}/example_write.yml")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "sets polled_at" do
|
46
|
+
polled_at = Proc.new { file.data.polled_at }
|
47
|
+
expect{ file.write('aaa', 'bbb') }.to change(polled_at, :call).to('aaa')
|
48
|
+
end
|
49
|
+
|
50
|
+
it "sets updated_at" do
|
51
|
+
updated_at = Proc.new { file.data.updated_at }
|
52
|
+
expect{ file.write('ccc', 'ddd') }.to change(updated_at, :call).to('ddd')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "writes to the configuration file" do
|
56
|
+
file.write(123, 456)
|
57
|
+
# using a regexp here since 1.9.3 output has an extra space after the first "---"
|
58
|
+
expect( File.read("#{base_dir}/example_write.yml") ).to match /--- ?\npolled_at: 123\nupdated_at: 456\n/
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: localeapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Christopher Dell
|
@@ -9,11 +10,12 @@ authors:
|
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2014-
|
13
|
+
date: 2014-06-02 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: i18n
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
17
19
|
requirements:
|
18
20
|
- - ! '>='
|
19
21
|
- !ruby/object:Gem::Version
|
@@ -21,6 +23,7 @@ dependencies:
|
|
21
23
|
type: :runtime
|
22
24
|
prerelease: false
|
23
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
24
27
|
requirements:
|
25
28
|
- - ! '>='
|
26
29
|
- !ruby/object:Gem::Version
|
@@ -28,6 +31,7 @@ dependencies:
|
|
28
31
|
- !ruby/object:Gem::Dependency
|
29
32
|
name: json
|
30
33
|
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
31
35
|
requirements:
|
32
36
|
- - ! '>='
|
33
37
|
- !ruby/object:Gem::Version
|
@@ -35,6 +39,7 @@ dependencies:
|
|
35
39
|
type: :runtime
|
36
40
|
prerelease: false
|
37
41
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
38
43
|
requirements:
|
39
44
|
- - ! '>='
|
40
45
|
- !ruby/object:Gem::Version
|
@@ -42,6 +47,7 @@ dependencies:
|
|
42
47
|
- !ruby/object:Gem::Dependency
|
43
48
|
name: rest-client
|
44
49
|
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
45
51
|
requirements:
|
46
52
|
- - ! '>='
|
47
53
|
- !ruby/object:Gem::Version
|
@@ -49,6 +55,7 @@ dependencies:
|
|
49
55
|
type: :runtime
|
50
56
|
prerelease: false
|
51
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
52
59
|
requirements:
|
53
60
|
- - ! '>='
|
54
61
|
- !ruby/object:Gem::Version
|
@@ -56,6 +63,7 @@ dependencies:
|
|
56
63
|
- !ruby/object:Gem::Dependency
|
57
64
|
name: rack
|
58
65
|
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
59
67
|
requirements:
|
60
68
|
- - ! '>='
|
61
69
|
- !ruby/object:Gem::Version
|
@@ -63,6 +71,7 @@ dependencies:
|
|
63
71
|
type: :runtime
|
64
72
|
prerelease: false
|
65
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
66
75
|
requirements:
|
67
76
|
- - ! '>='
|
68
77
|
- !ruby/object:Gem::Version
|
@@ -70,6 +79,7 @@ dependencies:
|
|
70
79
|
- !ruby/object:Gem::Dependency
|
71
80
|
name: ya2yaml
|
72
81
|
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
73
83
|
requirements:
|
74
84
|
- - ! '>='
|
75
85
|
- !ruby/object:Gem::Version
|
@@ -77,6 +87,7 @@ dependencies:
|
|
77
87
|
type: :runtime
|
78
88
|
prerelease: false
|
79
89
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
80
91
|
requirements:
|
81
92
|
- - ! '>='
|
82
93
|
- !ruby/object:Gem::Version
|
@@ -84,6 +95,7 @@ dependencies:
|
|
84
95
|
- !ruby/object:Gem::Dependency
|
85
96
|
name: gli
|
86
97
|
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
87
99
|
requirements:
|
88
100
|
- - ! '>='
|
89
101
|
- !ruby/object:Gem::Version
|
@@ -91,6 +103,7 @@ dependencies:
|
|
91
103
|
type: :runtime
|
92
104
|
prerelease: false
|
93
105
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
94
107
|
requirements:
|
95
108
|
- - ! '>='
|
96
109
|
- !ruby/object:Gem::Version
|
@@ -98,6 +111,7 @@ dependencies:
|
|
98
111
|
- !ruby/object:Gem::Dependency
|
99
112
|
name: rake
|
100
113
|
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
101
115
|
requirements:
|
102
116
|
- - ! '>='
|
103
117
|
- !ruby/object:Gem::Version
|
@@ -105,6 +119,7 @@ dependencies:
|
|
105
119
|
type: :development
|
106
120
|
prerelease: false
|
107
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
108
123
|
requirements:
|
109
124
|
- - ! '>='
|
110
125
|
- !ruby/object:Gem::Version
|
@@ -112,20 +127,23 @@ dependencies:
|
|
112
127
|
- !ruby/object:Gem::Dependency
|
113
128
|
name: rspec
|
114
129
|
requirement: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
115
131
|
requirements:
|
116
|
-
- -
|
132
|
+
- - ~>
|
117
133
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
134
|
+
version: 2.14.1
|
119
135
|
type: :development
|
120
136
|
prerelease: false
|
121
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
122
139
|
requirements:
|
123
|
-
- -
|
140
|
+
- - ~>
|
124
141
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
142
|
+
version: 2.14.1
|
126
143
|
- !ruby/object:Gem::Dependency
|
127
144
|
name: yard
|
128
145
|
requirement: !ruby/object:Gem::Requirement
|
146
|
+
none: false
|
129
147
|
requirements:
|
130
148
|
- - ! '>='
|
131
149
|
- !ruby/object:Gem::Version
|
@@ -133,6 +151,7 @@ dependencies:
|
|
133
151
|
type: :development
|
134
152
|
prerelease: false
|
135
153
|
version_requirements: !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
136
155
|
requirements:
|
137
156
|
- - ! '>='
|
138
157
|
- !ruby/object:Gem::Version
|
@@ -140,6 +159,7 @@ dependencies:
|
|
140
159
|
- !ruby/object:Gem::Dependency
|
141
160
|
name: RedCloth
|
142
161
|
requirement: !ruby/object:Gem::Requirement
|
162
|
+
none: false
|
143
163
|
requirements:
|
144
164
|
- - ! '>='
|
145
165
|
- !ruby/object:Gem::Version
|
@@ -147,6 +167,7 @@ dependencies:
|
|
147
167
|
type: :development
|
148
168
|
prerelease: false
|
149
169
|
version_requirements: !ruby/object:Gem::Requirement
|
170
|
+
none: false
|
150
171
|
requirements:
|
151
172
|
- - ! '>='
|
152
173
|
- !ruby/object:Gem::Version
|
@@ -154,6 +175,7 @@ dependencies:
|
|
154
175
|
- !ruby/object:Gem::Dependency
|
155
176
|
name: aruba
|
156
177
|
requirement: !ruby/object:Gem::Requirement
|
178
|
+
none: false
|
157
179
|
requirements:
|
158
180
|
- - ! '>='
|
159
181
|
- !ruby/object:Gem::Version
|
@@ -161,6 +183,7 @@ dependencies:
|
|
161
183
|
type: :development
|
162
184
|
prerelease: false
|
163
185
|
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
none: false
|
164
187
|
requirements:
|
165
188
|
- - ! '>='
|
166
189
|
- !ruby/object:Gem::Version
|
@@ -168,6 +191,7 @@ dependencies:
|
|
168
191
|
- !ruby/object:Gem::Dependency
|
169
192
|
name: fakeweb
|
170
193
|
requirement: !ruby/object:Gem::Requirement
|
194
|
+
none: false
|
171
195
|
requirements:
|
172
196
|
- - ! '>='
|
173
197
|
- !ruby/object:Gem::Version
|
@@ -175,6 +199,7 @@ dependencies:
|
|
175
199
|
type: :development
|
176
200
|
prerelease: false
|
177
201
|
version_requirements: !ruby/object:Gem::Requirement
|
202
|
+
none: false
|
178
203
|
requirements:
|
179
204
|
- - ! '>='
|
180
205
|
- !ruby/object:Gem::Version
|
@@ -245,6 +270,7 @@ files:
|
|
245
270
|
- lib/localeapp/rails/mimic_rails_missing_translation_display.rb
|
246
271
|
- lib/localeapp/routes.rb
|
247
272
|
- lib/localeapp/sender.rb
|
273
|
+
- lib/localeapp/sync_file.rb
|
248
274
|
- lib/localeapp/tasks/localeapp.rake
|
249
275
|
- lib/localeapp/updater.rb
|
250
276
|
- lib/localeapp/version.rb
|
@@ -252,6 +278,8 @@ files:
|
|
252
278
|
- spec/fixtures/empty_log.yml
|
253
279
|
- spec/fixtures/en.yml
|
254
280
|
- spec/fixtures/es.yml
|
281
|
+
- spec/fixtures/string_log.yml
|
282
|
+
- spec/fixtures/symbol_log.yml
|
255
283
|
- spec/localeapp/api_call_spec.rb
|
256
284
|
- spec/localeapp/api_caller_spec.rb
|
257
285
|
- spec/localeapp/cli/add_spec.rb
|
@@ -270,6 +298,7 @@ files:
|
|
270
298
|
- spec/localeapp/rails/controller_spec.rb
|
271
299
|
- spec/localeapp/routes_spec.rb
|
272
300
|
- spec/localeapp/sender_spec.rb
|
301
|
+
- spec/localeapp/sync_file_spec.rb
|
273
302
|
- spec/localeapp/updater_spec.rb
|
274
303
|
- spec/localeapp_spec.rb
|
275
304
|
- spec/spec_helper.rb
|
@@ -279,26 +308,33 @@ files:
|
|
279
308
|
homepage: http://www.localeapp.com
|
280
309
|
licenses:
|
281
310
|
- MIT
|
282
|
-
metadata: {}
|
283
311
|
post_install_message:
|
284
312
|
rdoc_options: []
|
285
313
|
require_paths:
|
286
314
|
- lib
|
287
315
|
required_ruby_version: !ruby/object:Gem::Requirement
|
316
|
+
none: false
|
288
317
|
requirements:
|
289
318
|
- - ! '>='
|
290
319
|
- !ruby/object:Gem::Version
|
291
320
|
version: '0'
|
321
|
+
segments:
|
322
|
+
- 0
|
323
|
+
hash: 1045409387889628647
|
292
324
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
325
|
+
none: false
|
293
326
|
requirements:
|
294
327
|
- - ! '>='
|
295
328
|
- !ruby/object:Gem::Version
|
296
329
|
version: '0'
|
330
|
+
segments:
|
331
|
+
- 0
|
332
|
+
hash: 1045409387889628647
|
297
333
|
requirements: []
|
298
334
|
rubyforge_project: localeapp
|
299
|
-
rubygems_version:
|
335
|
+
rubygems_version: 1.8.23.2
|
300
336
|
signing_key:
|
301
|
-
specification_version:
|
337
|
+
specification_version: 3
|
302
338
|
summary: Easy i18n translation management with localeapp.com
|
303
339
|
test_files:
|
304
340
|
- features/add.feature
|
@@ -316,6 +352,8 @@ test_files:
|
|
316
352
|
- spec/fixtures/empty_log.yml
|
317
353
|
- spec/fixtures/en.yml
|
318
354
|
- spec/fixtures/es.yml
|
355
|
+
- spec/fixtures/string_log.yml
|
356
|
+
- spec/fixtures/symbol_log.yml
|
319
357
|
- spec/localeapp/api_call_spec.rb
|
320
358
|
- spec/localeapp/api_caller_spec.rb
|
321
359
|
- spec/localeapp/cli/add_spec.rb
|
@@ -334,6 +372,7 @@ test_files:
|
|
334
372
|
- spec/localeapp/rails/controller_spec.rb
|
335
373
|
- spec/localeapp/routes_spec.rb
|
336
374
|
- spec/localeapp/sender_spec.rb
|
375
|
+
- spec/localeapp/sync_file_spec.rb
|
337
376
|
- spec/localeapp/updater_spec.rb
|
338
377
|
- spec/localeapp_spec.rb
|
339
378
|
- spec/spec_helper.rb
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ODgxZTYzZjkxY2VlZDBiM2E4ODI5ZjU3MTMxNGRkMjNiMGM0MTNlZA==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
ZDc5YzViOWJjNTVlNGU5NGNiNjI1MjI4MTM1ZDQyN2E0OWMwZWY1ZA==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
MDYyOWNkNDBiZTRjODI0MmYxZDc5MjA2YjkwY2NmZWNmMmZkZGU3MjYzN2My
|
10
|
-
YTJiZDJmYzAzMjRmYWUzYzU2NWJjMjRlYTQ5MTUwNWZkNjQ3YTA4ZThhNmNl
|
11
|
-
ZmQ1ZDY2MGRiN2Y3NzQ1ODNlYTQxMWVmMzM1N2Q5OTA3ZDdkMjU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ZjhjZTlkNDJmMzE4ODQ0NzNhMmI2ZjA1OWY1ZjNlYTRlOTY2ZmI1MjgyZjEy
|
14
|
-
NmU3N2JiNTJhYjQ3YjQ5ZjAxMjljYmUyNmE1YzMwMzJjNzgyYzk3NmRhNTM3
|
15
|
-
MzRiMzNlYzhhMDg1ZDA5OGI3MWZiMTNlNzdjNjYxNDBlNzk1Mjk=
|