phrase 0.4.8 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -17,6 +17,8 @@ test/version_tmp
17
17
  /tmp
18
18
  .phrase
19
19
  .rvmrc
20
+ .ruby-version
21
+ .ruby-gemset
20
22
  .DS_Store
21
23
  /phrase
22
24
  .rspec
@@ -1,6 +1,42 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
 
3
3
  module Phrase::Tool::Commands
4
+ def self.possible_commands_with_options
5
+ {
6
+ default: {
7
+ version: false,
8
+ help: false
9
+ },
10
+ init: {
11
+ secret: "",
12
+ default_locale: "en",
13
+ domain: "phrase",
14
+ format: nil,
15
+ locale_filename: nil,
16
+ locale_directory: nil,
17
+ target_directory: nil
18
+ },
19
+ push: {
20
+ tags: [],
21
+ recursive: false,
22
+ locale: nil,
23
+ format: nil,
24
+ update_translations: false
25
+ },
26
+ pull: {
27
+ format: nil,
28
+ target: nil,
29
+ tag: nil
30
+ },
31
+ tags: {
32
+ list: true
33
+ }
34
+ }
35
+ end
36
+
37
+ def self.possible_commands
38
+ self.possible_commands_with_options.keys
39
+ end
4
40
  end
5
41
 
6
42
  require "phrase/tool/commands/base"
@@ -32,8 +32,8 @@ module Phrase::Tool::Commands
32
32
  $stdout.puts msg
33
33
  end
34
34
 
35
- def self.exit_command
36
- exit()
35
+ def self.exit_command(status = false)
36
+ exit(status)
37
37
  end
38
38
 
39
39
  protected
@@ -70,8 +70,8 @@ module Phrase::Tool::Commands
70
70
  self.class.print_message(msg)
71
71
  end
72
72
 
73
- def exit_command
74
- self.class.exit_command
73
+ def exit_command(status = false)
74
+ self.class.exit_command(status)
75
75
  end
76
76
  end
77
77
  end
@@ -3,11 +3,11 @@
3
3
  class Phrase::Tool::Commands::Push < Phrase::Tool::Commands::Base
4
4
  FORMATS_CONTAINING_LOCALE = %q(po yml qph ts xlf)
5
5
  RAILS_DEFAULT_FOLDER = "./config/locales/"
6
-
6
+
7
7
  def initialize(options, args)
8
8
  super(options, args)
9
9
  require_auth_token!
10
-
10
+
11
11
  @file_names = @args[1..-1]
12
12
  @locale = @options.get(:locale)
13
13
  @format = @options.get(:format)
@@ -15,13 +15,13 @@ class Phrase::Tool::Commands::Push < Phrase::Tool::Commands::Base
15
15
  @recursive = @options.get(:recursive)
16
16
  @update_translations = @options.get(:update_translations)
17
17
  end
18
-
18
+
19
19
  def execute!
20
20
  unless @tags.empty? or valid_tags_are_given?(@tags)
21
21
  print_error "Invalid tags: Only letters, numbers, underscores and dashes are allowed"
22
22
  exit_command
23
23
  end
24
-
24
+
25
25
  files = choose_files_to_upload(@file_names, @recursive)
26
26
 
27
27
  if files.empty?
@@ -31,7 +31,7 @@ class Phrase::Tool::Commands::Push < Phrase::Tool::Commands::Base
31
31
  upload_files(files)
32
32
  end
33
33
  end
34
-
34
+
35
35
  private
36
36
  def choose_files_to_upload(file_names, recursive=false)
37
37
  files = []
@@ -40,14 +40,14 @@ private
40
40
  if rails_default_locale_folder_available?
41
41
  file_names = [RAILS_DEFAULT_FOLDER]
42
42
  print_message "No file or directory specified, using #{RAILS_DEFAULT_FOLDER}"
43
- else
43
+ else
44
44
  print_error "Need either a file or directory:"
45
45
  print_error "phrase push FILE"
46
46
  print_error "phrase push DIRECTORY"
47
47
  exit_command
48
48
  end
49
49
  end
50
-
50
+
51
51
  file_names.each do |file_name|
52
52
  if File.directory?(file_name)
53
53
  pattern = recursive ? "#{File.expand_path(file_name)}/**/*" : "#{File.expand_path(file_name)}/**"
@@ -55,13 +55,13 @@ private
55
55
  else
56
56
  files << file_name
57
57
  end
58
- end
58
+ end
59
59
 
60
- files
60
+ files.reject { |file| File.directory?(file) }
61
61
  end
62
62
 
63
63
  def upload_files(files)
64
- files.each do |file|
64
+ files.each do |file|
65
65
  if file_exists?(file)
66
66
  upload_file(file)
67
67
  else
@@ -69,7 +69,7 @@ private
69
69
  end
70
70
  end
71
71
  end
72
-
72
+
73
73
  def upload_file(file)
74
74
  if file_valid?(file)
75
75
  begin
@@ -91,25 +91,25 @@ private
91
91
  print_error "Notice: Could not upload #{file} (type not supported)"
92
92
  end
93
93
  end
94
-
94
+
95
95
  def file_content(file)
96
96
  content = File.open(file).read
97
97
  content = utf16_to_utf8(content) if file_seems_to_be_utf16?(file)
98
98
  content
99
99
  end
100
-
100
+
101
101
  def force_use_of_default_locale?(file_path)
102
102
  not Phrase::Formats.file_format_exposes_locale?(file_path)
103
103
  end
104
-
104
+
105
105
  def utf16_to_utf8(string)
106
106
  string.encode("UTF-8", "UTF-16")
107
107
  end
108
-
108
+
109
109
  def file_seems_to_be_utf16?(file)
110
110
  Phrase::Tool::EncodingDetector.file_seems_to_be_utf16?(file)
111
111
  end
112
-
112
+
113
113
  def file_valid?(filepath)
114
114
  extension = filepath.split('.').last
115
115
  allowed_file_extensions.include?(extension)
@@ -118,15 +118,15 @@ private
118
118
  def file_exists?(file)
119
119
  File.exist?(file)
120
120
  end
121
-
121
+
122
122
  def valid_tags_are_given?(tags)
123
123
  tags.all? { |tag| Phrase::Tool::TagValidator.valid?(tag) }
124
124
  end
125
-
125
+
126
126
  def rails_default_locale_folder_available?
127
127
  File.exist?(RAILS_DEFAULT_FOLDER) && File.directory?(RAILS_DEFAULT_FOLDER)
128
128
  end
129
-
129
+
130
130
  def detect_locale_name_from_file_path(file_path)
131
131
  Phrase::Formats.detect_locale_name_from_file_path(file_path)
132
132
  end
@@ -4,27 +4,23 @@ class Phrase::Tool::Commands::ShowHelp < Phrase::Tool::Commands::Base
4
4
  def initialize(options, args)
5
5
  super(options, args)
6
6
  end
7
-
7
+
8
8
  def execute!
9
9
  show_help
10
10
  end
11
-
12
- private
13
-
14
- def show_help
15
- print_message <<USAGE
16
- usage: phrase <command> [<args>]
17
-
18
- phrase init --secret=<YOUR SECRET> --default-locale=<DEFAULT LOCALE, e.g. en> --default-format=<FORMAT, e.g. yml> --default-target=<TARGET, default is ./phrase/locales/>
19
11
 
20
- phrase push FILE [--tags=<tags>] [--locale=<locale>]
21
- phrase push DIRECTORY [--tags=<tags>] [--locale=<locale>]
12
+ private
22
13
 
23
- phrase pull [LOCALE] [--target=<target-folder>] [--format=<format>] [--tag=<tag>]
14
+ def show_help
15
+ msg = "usage: phrase <command> [<args>]\n"
16
+ Phrase::Tool::Commands.possible_commands.each do |command, suffix|
17
+ msg << " #{extract_help(command)}\n"
18
+ end
24
19
 
25
- phrase tags [-l, --list]
20
+ print_message msg
21
+ end
26
22
 
27
- phrase --version
28
- USAGE
23
+ def extract_help(command)
24
+ OptionsFactory.options_for(command, {}).help
29
25
  end
30
26
  end
@@ -5,37 +5,7 @@ require File.expand_path('../options_factory', __FILE__)
5
5
  class Phrase::Tool::Options
6
6
  def initialize(args, command="")
7
7
  @command = command
8
- # specify all possible arguments here
9
- @data = {
10
- default: {
11
- version: false,
12
- help: false
13
- },
14
- init: {
15
- secret: "",
16
- default_locale: "en",
17
- domain: "phrase",
18
- format: nil,
19
- locale_filename: nil,
20
- locale_directory: nil,
21
- target_directory: nil
22
- },
23
- push: {
24
- tags: [],
25
- recursive: false,
26
- locale: nil,
27
- format: nil,
28
- update_translations: false
29
- },
30
- pull: {
31
- format: nil,
32
- target: nil,
33
- tag: nil
34
- },
35
- tags: {
36
- list: true
37
- }
38
- }
8
+ @data = Phrase::Tool::Commands.possible_commands_with_options
39
9
  options.parse!(args)
40
10
  end
41
11
 
@@ -8,6 +8,8 @@ class OptionsFactory
8
8
  end
9
9
 
10
10
  def self.init(opts, set)
11
+ opts.banner = "phrase init"
12
+
11
13
  opts.on("--secret=YOUR_AUTH_TOKEN", String, "Your auth token") do |secret|
12
14
  set[:secret] = secret
13
15
  end
@@ -39,6 +41,8 @@ class OptionsFactory
39
41
  private_class_method :init
40
42
 
41
43
  def self.push(opts, set)
44
+ opts.banner = "phrase push FILE|DIRECTORY"
45
+
42
46
  opts.on("--tags=foo,bar", Array, "List of tags for phrase push (separated by comma)") do |tags|
43
47
  set[:tags] = tags
44
48
  end
@@ -62,6 +66,8 @@ class OptionsFactory
62
66
  private_class_method :push
63
67
 
64
68
  def self.pull(opts, set)
69
+ opts.banner = "phrase pull [LOCALE]"
70
+
65
71
  opts.on("--format=yml", String, "See documentation for list of allowed formats") do |format|
66
72
  set[:format] = format
67
73
  end
@@ -77,6 +83,8 @@ class OptionsFactory
77
83
  private_class_method :pull
78
84
 
79
85
  def self.tags(opts, set)
86
+ opts.banner = "phrase tags"
87
+
80
88
  opts.on("-l", "--list", "List all tags") do |list|
81
89
  set[:list] = list
82
90
  end
@@ -84,6 +92,8 @@ class OptionsFactory
84
92
  private_class_method :tags
85
93
 
86
94
  def self.default(opts, set)
95
+ opts.banner = ""
96
+
87
97
  opts.on_tail("-v", "--version", "Show version number") do |version|
88
98
  set[:version] = true
89
99
  end
@@ -1,3 +1,3 @@
1
1
  module Phrase
2
- VERSION = "0.4.8"
2
+ VERSION = "0.4.9"
3
3
  end
data/phrase.gemspec CHANGED
@@ -22,9 +22,9 @@ Gem::Specification.new do |s|
22
22
  s.require_paths = ["lib"]
23
23
  s.add_dependency('colorize')
24
24
  s.add_dependency('json')
25
+ s.add_dependency('i18n')
25
26
  s.add_development_dependency('rake')
26
27
  s.add_development_dependency('rspec')
27
- s.add_development_dependency('i18n')
28
28
  s.add_development_dependency('webmock')
29
29
  s.add_development_dependency('vcr')
30
30
  s.add_development_dependency('timecop')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phrase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.8
4
+ version: 0.4.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-12 00:00:00.000000000 Z
12
+ date: 2013-07-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: colorize
16
- requirement: &70113365447600 !ruby/object:Gem::Requirement
16
+ requirement: &70209041741460 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70113365447600
24
+ version_requirements: *70209041741460
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70113365447140 !ruby/object:Gem::Requirement
27
+ requirement: &70209041741000 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,21 +32,21 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70113365447140
35
+ version_requirements: *70209041741000
36
36
  - !ruby/object:Gem::Dependency
37
- name: rake
38
- requirement: &70113365446680 !ruby/object:Gem::Requirement
37
+ name: i18n
38
+ requirement: &70209041740540 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
43
  version: '0'
44
- type: :development
44
+ type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70113365446680
46
+ version_requirements: *70209041740540
47
47
  - !ruby/object:Gem::Dependency
48
- name: rspec
49
- requirement: &70113365446240 !ruby/object:Gem::Requirement
48
+ name: rake
49
+ requirement: &70209041740100 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70113365446240
57
+ version_requirements: *70209041740100
58
58
  - !ruby/object:Gem::Dependency
59
- name: i18n
60
- requirement: &70113365445720 !ruby/object:Gem::Requirement
59
+ name: rspec
60
+ requirement: &70209041739580 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70113365445720
68
+ version_requirements: *70209041739580
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: webmock
71
- requirement: &70113365445220 !ruby/object:Gem::Requirement
71
+ requirement: &70209041739080 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70113365445220
79
+ version_requirements: *70209041739080
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: vcr
82
- requirement: &70113365444560 !ruby/object:Gem::Requirement
82
+ requirement: &70209041738420 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70113365444560
90
+ version_requirements: *70209041738420
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: timecop
93
- requirement: &70113365443760 !ruby/object:Gem::Requirement
93
+ requirement: &70209041737620 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70113365443760
101
+ version_requirements: *70209041737620
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: genspec
104
- requirement: &70113365443340 !ruby/object:Gem::Requirement
104
+ requirement: &70209041737200 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70113365443340
112
+ version_requirements: *70209041737200
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: rails
115
- requirement: &70113365442920 !ruby/object:Gem::Requirement
115
+ requirement: &70209041736740 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70113365442920
123
+ version_requirements: *70209041736740
124
124
  description: phrase allows you to edit translations in-place on the page itself. More
125
125
  information at phraseapp.com
126
126
  email: