web_translate_it 1.6.4 → 1.6.5

Sign up to get free protection for your applications and to get access to all the features.
data/examples/en.yml ADDED
@@ -0,0 +1,3 @@
1
+ fr:
2
+ hello: "Bonjour tout le monde"
3
+ test: "Ceci est un test."
data/history.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## Version 1.6.5 /2010-04-19
2
+
3
+ * Enhancement: Remove new line on push/pull result. It now displays `Pulling config/locales/app/fr.yml… 200 OK`.
4
+ * Enhancement: `wti stats` now propose to refresh the stats if the stats displayed are stale.
5
+ * Bug fix: `wti push` used to crash on non-existent files. Close #24.
6
+
1
7
  ## Version 1.6.4 /2010-04-02
2
8
 
3
9
  * Bug fix: Rake tasks not working
@@ -44,20 +44,22 @@ OPTION
44
44
  end
45
45
 
46
46
  def self.pull
47
+ STDOUT.sync = true
47
48
  configuration = fetch_configuration
48
49
  fetch_locales_to_pull(configuration).each do |locale|
49
50
  configuration.files.find_all{ |file| file.locale == locale }.each do |file|
50
- puts "Pulling #{file.file_path}…"
51
+ print "Pulling #{file.file_path}… "
51
52
  puts file.fetch(ARGV.index('--force'))
52
53
  end
53
54
  end
54
55
  end
55
56
 
56
57
  def self.push
58
+ STDOUT.sync = true
57
59
  configuration = fetch_configuration
58
60
  fetch_locales_to_push(configuration).each do |locale|
59
61
  configuration.files.find_all{ |file| file.locale == locale }.each do |file|
60
- puts "Pushing #{file.file_path}…"
62
+ print "Pushing #{file.file_path}… "
61
63
  puts file.upload
62
64
  end
63
65
  end
@@ -65,15 +67,8 @@ OPTION
65
67
 
66
68
  def self.autoconf
67
69
  puts "We will attempt to configure your project automagically"
68
- puts "Please enter your project API Key:"
69
- api_key = STDIN.gets.strip
70
- if api_key == ""
71
- puts "You must enter your project API key provided by Web Translate It"
72
- exit
73
- end
74
- puts "Where should we create the configuration file? (Default: `config/translation.yml`)"
75
- path = STDIN.gets.strip
76
- path = "config/translation.yml" if path == ""
70
+ api_key = Util.ask("Please enter your project API Key")
71
+ path = Util.ask("Where should we create the configuration file?", 'config/translation.yml')
77
72
  FileUtils.mkpath(path.split('/')[0..path.split('/').size-1])
78
73
  project = YAML.load WebTranslateIt::Project.fetch_info(api_key)
79
74
  project_info = project['project']
@@ -103,10 +98,15 @@ OPTION
103
98
  def self.stats
104
99
  configuration = fetch_configuration
105
100
  stats = YAML.load(Project.fetch_stats(configuration.api_key))
101
+ stale = false
106
102
  stats.each do |locale, values|
107
103
  percent_translated = Util.calculate_percentage(values['count_strings_to_proofread'] + values['count_strings_done'] + values['count_strings_to_verify'], values['count_strings'])
108
104
  percent_completed = Util.calculate_percentage(values['count_strings_done'], values['count_strings'])
109
105
  puts "#{locale}: #{percent_translated}% translated, #{percent_completed}% completed #{values['stale'] ? "Stale" : ""}"
106
+ stale = true if values['stale']
107
+ end
108
+ if stale
109
+ CommandLine.stats if Util.ask_yes_no("Some statistics displayed above are stale. Would you like to refresh?", true)
110
110
  end
111
111
  end
112
112
 
@@ -57,11 +57,15 @@ module WebTranslateIt
57
57
  # actually takes place.
58
58
  # This is due to the fact that language file imports are handled by background processing.
59
59
  def upload
60
- File.open(self.file_path) do |file|
61
- WebTranslateIt::Util.http_connection do |http|
62
- request = Net::HTTP::Put::Multipart.new(api_url, "file" => UploadIO.new(file, "text/plain", file.path))
63
- Util.handle_response(http.request(request))
60
+ if File.exists?(self.file_path)
61
+ File.open(self.file_path) do |file|
62
+ WebTranslateIt::Util.http_connection do |http|
63
+ request = Net::HTTP::Put::Multipart.new(api_url, "file" => UploadIO.new(file, "text/plain", file.path))
64
+ Util.handle_response(http.request(request))
65
+ end
64
66
  end
67
+ else
68
+ puts "\nFile #{self.file_path} doesn't exist!"
65
69
  end
66
70
  end
67
71
 
@@ -39,14 +39,83 @@ module WebTranslateIt
39
39
  if response.code.to_i >= 400 and response.code.to_i < 500
40
40
  "We had a problem connecting to Web Translate It with this API key. Make sure it is correct."
41
41
  elsif response.code.to_i >= 500
42
- "Web Translate It is temporarily unavailable. Please try again shortly."
42
+ "Web Translate It is temporarily unavailable and has been notified of this issue. Please try again shortly."
43
43
  else
44
- if return_response
45
- response.body
44
+ return response.body if return_response
45
+ return "200 OK" if response.code.to_i == 200
46
+ return "304 Not Modified" if response.code.to_i == 304
47
+ end
48
+ end
49
+
50
+ ##
51
+ # Ask a question. Returns a true for yes, false for no, default for nil.
52
+
53
+ def self.ask_yes_no(question, default=nil)
54
+ qstr = case default
55
+ when nil
56
+ 'yn'
57
+ when true
58
+ 'Yn'
59
+ else
60
+ 'yN'
61
+ end
62
+
63
+ result = nil
64
+
65
+ while result.nil?
66
+ result = ask("#{question} [#{qstr}]")
67
+ result = case result
68
+ when /^[Yy].*/
69
+ true
70
+ when /^[Nn].*/
71
+ false
72
+ when /^$/
73
+ when nil
74
+ default
46
75
  else
47
- "#{response.code.to_i} OK"
76
+ nil
48
77
  end
49
78
  end
79
+
80
+ return result
81
+ end
82
+
83
+ ##
84
+ # Ask a question. Returns an answer.
85
+
86
+ def self.ask(question, default=nil)
87
+ question = question + " (Default: #{default})" unless default.nil?
88
+ print(question + " ")
89
+ STDOUT.flush
90
+
91
+ result = STDIN.gets
92
+ result.chomp! if result
93
+ result = default if result.nil? or result == ''
94
+ result
95
+ end
96
+
97
+ ##
98
+ # Choose from a list of options. +question+ is a prompt displayed above
99
+ # the list. +list+ is a list of option strings. Returns the pair
100
+ # [option_name, option_index].
101
+
102
+ def self.choose_from_list(question, list)
103
+ STDOUT.puts question
104
+
105
+ list.each_with_index do |item, index|
106
+ STDOUT.puts " #{index+1}. #{item}"
107
+ end
108
+
109
+ STDOUT.print "> "
110
+ STDOUT.flush
111
+
112
+ result = STDIN.gets
113
+
114
+ return nil, nil unless result
115
+
116
+ result = result.strip.to_i - 1
117
+ return list[result], result
50
118
  end
119
+
51
120
  end
52
121
  end
@@ -2,9 +2,10 @@ require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
2
 
3
3
  describe WebTranslateIt::Configuration do
4
4
  describe "#initialize" do
5
+ subject { WebTranslateIt::Configuration::Rails = OpenStruct.new(:root => Pathname.new(File.dirname(__FILE__) + "/../examples")) }
6
+
5
7
  it "should fetch and not blow up" do
6
- WebTranslateIt::Configuration::Rails = OpenStruct.new(:root => Pathname.new(File.dirname(__FILE__) + "/../examples"))
7
- lambda{ WebTranslateIt::Configuration.new }.should_not raise_error
8
+ expect{ WebTranslateIt::Configuration.new }.to_not raise_error
8
9
  end
9
10
 
10
11
  it "should load the content of the YAML file" do
@@ -15,9 +16,8 @@ describe WebTranslateIt::Configuration do
15
16
  YAML.should_receive(:load_file).and_return(config_hash)
16
17
  WebTranslateIt::Configuration.new(File.dirname(__FILE__) + '/../..', 'examples/translation.yml')
17
18
  end
18
-
19
+
19
20
  it "should assign the API key, files" do
20
- WebTranslateIt::Configuration::Rails = OpenStruct.new(:root => Pathname.new(File.dirname(__FILE__) + "/../examples"))
21
21
  configuration = WebTranslateIt::Configuration.new
22
22
  configuration.api_key.should == '4af21ce1fb3a4f7127a60b31ebc41c1446b38bb2'
23
23
  configuration.files.first.should be_a(WebTranslateIt::TranslationFile)
@@ -25,40 +25,36 @@ describe WebTranslateIt::Configuration do
25
25
  end
26
26
 
27
27
  describe "#set_locales_to_ignore" do
28
- before(:each) do
29
- WebTranslateIt::Configuration::Rails = OpenStruct.new(:root => Pathname.new(File.dirname(__FILE__) + "/../examples"))
30
- @configuration = WebTranslateIt::Configuration.new
31
- end
32
-
28
+ let(:configuration) { WebTranslateIt::Configuration.new }
29
+ subject { WebTranslateIt::Configuration::Rails = OpenStruct.new(:root => Pathname.new(File.dirname(__FILE__) + "/../examples")) }
30
+
33
31
  it "should return an array" do
34
32
  config_hash = { 'ignore_locales' => 'en' }
35
- @configuration.set_locales_to_ignore(config_hash).should be_a(Array)
33
+ configuration.set_locales_to_ignore(config_hash).should be_a(Array)
36
34
  end
37
35
 
38
36
  it "should not blow up if no locales are given" do
39
37
  config_hash = { 'ignore_locales' => nil }
40
- @configuration.set_locales_to_ignore(config_hash).should be_a(Array)
41
- @configuration.set_locales_to_ignore(config_hash).should == []
38
+ configuration.set_locales_to_ignore(config_hash).should be_a(Array)
39
+ configuration.set_locales_to_ignore(config_hash).should == []
42
40
  end
43
41
 
44
42
  it "should return an array of 2 elements if given array of strings" do
45
43
  config_hash = { 'ignore_locales' => ['en', 'fr'] }
46
- @configuration.set_locales_to_ignore(config_hash).should be_a(Array)
47
- @configuration.set_locales_to_ignore(config_hash).should == ['en', 'fr']
44
+ configuration.set_locales_to_ignore(config_hash).should be_a(Array)
45
+ configuration.set_locales_to_ignore(config_hash).should == ['en', 'fr']
48
46
  end
49
47
 
50
48
  it "should return an array of 1 element if given a symbol" do
51
49
  config_hash = { 'ignore_locales' => :en }
52
- @configuration.set_locales_to_ignore(config_hash).should be_a(Array)
53
- @configuration.set_locales_to_ignore(config_hash).should == ['en']
50
+ configuration.set_locales_to_ignore(config_hash).should be_a(Array)
51
+ configuration.set_locales_to_ignore(config_hash).should == ['en']
54
52
  end
55
53
 
56
54
  it "should return an array of 2 element if given an array of symbol and string" do
57
55
  config_hash = { 'ignore_locales' => [:en, 'fr'] }
58
- @configuration.set_locales_to_ignore(config_hash).should be_a(Array)
59
- @configuration.set_locales_to_ignore(config_hash).should == ['en', 'fr']
56
+ configuration.set_locales_to_ignore(config_hash).should be_a(Array)
57
+ configuration.set_locales_to_ignore(config_hash).should == ['en', 'fr']
60
58
  end
61
-
62
59
  end
63
-
64
60
  end
@@ -1,9 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper')
2
2
 
3
3
  describe WebTranslateIt::TranslationFile do
4
- before(:each) do
5
- @translation_file = WebTranslateIt::TranslationFile.new(2267, "examples/en.yml", 'fr', "4af21ce1fb3a4f7127a60b31ebc41c1446b38bb2")
6
- end
7
4
 
8
5
  describe "#initialize" do
9
6
  it "should assign id, file_path and api_key" do
@@ -15,44 +12,48 @@ describe WebTranslateIt::TranslationFile do
15
12
  end
16
13
 
17
14
  describe "#fetch" do
15
+ let(:translation_file) { WebTranslateIt::TranslationFile.new(2267, "examples/en.yml", 'fr', "4af21ce1fb3a4f7127a60b31ebc41c1446b38bb2") }
16
+
18
17
  it "should prepare a HTTP request and get a 200 OK if the language file is stale" do
19
18
  file = mock(File)
20
19
  file.stub(:puts => true, :close => true)
21
20
  File.stub(:exist? => true, :mtime => Time.at(0), :new => file)
22
- @translation_file.fetch.should == "200 OK"
21
+ translation_file.fetch.should == "200 OK"
23
22
  end
24
23
 
25
24
  it "should prepare a HTTP request and get a 200 OK if the language file is stale using the force download parameter" do
26
25
  file = mock(File)
27
26
  file.stub(:puts => true, :close => true)
28
27
  File.stub(:exist? => true, :mtime => Time.at(0), :new => file)
29
- @translation_file.fetch(true).should == "200 OK"
28
+ translation_file.fetch(true).should == "200 OK"
30
29
  end
31
30
 
32
31
  it "should prepare a HTTP request and get a 304 OK if the language file is fresh" do
33
32
  file = mock(File)
34
33
  file.stub(:puts => true, :close => true)
35
34
  File.stub(:exist? => true, :mtime => Time.now, :new => file)
36
- @translation_file.fetch.should == "304 OK"
35
+ translation_file.fetch.should == "304 Not Modified"
37
36
  end
38
37
 
39
38
  it "should prepare a HTTP request and get a 200 OK if the language file is fresh using the force download parameter" do
40
39
  file = mock(File)
41
40
  file.stub(:puts => true, :close => true)
42
41
  File.stub(:exist? => true, :mtime => Time.now, :new => file)
43
- @translation_file.fetch(true).should == "200 OK"
42
+ translation_file.fetch(true).should == "200 OK"
44
43
  end
45
44
  end
46
45
 
47
46
  describe "#upload" do
47
+ let(:translation_file) { WebTranslateIt::TranslationFile.new(2267, "examples/en.yml", 'fr', "4af21ce1fb3a4f7127a60b31ebc41c1446b38bb2") }
48
+
48
49
  it "should prepare a HTTP request and get a 200 OK" do
49
- @translation_file.stub(:file_path => File.join(File.dirname(__FILE__), '..', 'examples', 'en.yml'))
50
- @translation_file.upload
50
+ translation_file.stub(:file_path => File.join(File.dirname(__FILE__), '..', 'examples', 'en.yml'))
51
+ translation_file.upload
51
52
  end
52
53
 
53
54
  it "should fail if the file does not exist" do
54
- @translation_file.stub(:file_path => File.join('something', 'that', 'does', 'not', 'exist'))
55
- lambda { @translation_file.upload }.should raise_error
55
+ translation_file.stub(:file_path => File.join('something', 'that', 'does', 'not', 'exist'))
56
+ expect { @translation_file.upload }.to raise_error
56
57
  end
57
58
  end
58
59
  end
@@ -15,7 +15,6 @@ describe WebTranslateIt do
15
15
  @file.stub(:fetch => true, :locale => true)
16
16
  @configuration.stub(:files => [@file])
17
17
  WebTranslateIt::Configuration.stub(:new => @configuration)
18
-
19
18
  end
20
19
 
21
20
  describe "WebTranslateIt.fetch_translations" do
data/version.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 1
3
3
  :minor: 6
4
- :patch: 4
4
+ :patch: 5
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 6
8
- - 4
9
- version: 1.6.4
8
+ - 5
9
+ version: 1.6.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - "\xC3\x89douard Bri\xC3\xA8re"
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-02 00:00:00 +02:00
17
+ date: 2010-04-19 00:00:00 +02:00
18
18
  default_executable: wti
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -40,8 +40,8 @@ dependencies:
40
40
  segments:
41
41
  - 1
42
42
  - 2
43
- - 0
44
- version: 1.2.0
43
+ - 9
44
+ version: 1.2.9
45
45
  type: :development
46
46
  version_requirements: *id002
47
47
  description: A rack middleware and a handful of rake tasks to sync your translations between webtranslateit.com and your rails applications.
@@ -58,6 +58,7 @@ files:
58
58
  - MIT-LICENSE
59
59
  - README.md
60
60
  - version.yml
61
+ - examples/en.yml
61
62
  - examples/locale.rb
62
63
  - examples/translation.yml
63
64
  - lib/web_translate_it/auto_fetch.rb