crowdin-cli 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 167ef12c5091fa606c78a514bb4ba5eca0f1edf4
4
- data.tar.gz: f2e3308d437fcac56099fb9ca118619508c703b5
3
+ metadata.gz: daa20289026306a2008ed1ecc5ef161d7a6a4101
4
+ data.tar.gz: 77731ee49a71b4b23f04e2a5aa864821e1d2016b
5
5
  SHA512:
6
- metadata.gz: 731742a0475fe5070dda8bad25d7b6afbac5fc86ed2b8fe6f051d9b6127d0604085d13a63cf163824c45a4f18a9c1ab8a86921d948bb6eeaeb5a4146cd8e0bbd
7
- data.tar.gz: 1e50b3cb3bf5d5b7f148a6c905d1fd8c1e6f289d59a92f01f32eacce9f366355fbfe0ca178d2dbaef49a67af169aa6654f53795c58ebf80f274d8bf5352e8efa
6
+ metadata.gz: 939acca8288fdee76d5f1cf7e4256d09f4b4ccc228f45c0e810d581cc88b860838f736410ce2363e54f01e35268fde2ed6b31deb3a263509d0dc959cb1a54a03
7
+ data.tar.gz: de55fe67aa2668fb7c34096804f795c414eb87181f024f3f955c0e60f33bae289d96bdb1b8e2cf2e35c3595479f2d7f842bb941ea63cdab76d0fbe23bf3dbf57
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2012-2014 Anton Maminov
3
+ Copyright (c) 2012-2015 Anton Maminov
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -68,6 +68,8 @@ files:
68
68
  * `%original_path%` - Take parent folders names in Crowdin project to build file path in resulted bundle
69
69
  * `%file_extension%` - Original file extension
70
70
  * `%file_name%` - File name without extension
71
+ * `%osx_code%` - OS X Locale identifier used to name ".lproj" directories
72
+ * `%osx_xliff%` - OS X Locale used to name xliff files (i.e. uk.xliff)
71
73
 
72
74
  Example for Android projects:
73
75
  ```
@@ -120,6 +122,25 @@ files:
120
122
  translation: /locale/%two_letters_code%/**/%original_file_name%
121
123
  ```
122
124
 
125
+ ### API Credentials from environment variables
126
+
127
+ You could load the API Credentials from an environment variable, e.g.
128
+
129
+ ```
130
+ api_key_env: 'CROWDIN_API_KEY'
131
+ project_identifier_env: 'CROWDIN_PROJECT_ID'
132
+
133
+ ```
134
+
135
+ If mix, `api_key` and `project_identifier` have priority:
136
+
137
+ ```
138
+ api_key_env: CROWDIN_API_KEY # Low priority
139
+ project_identifier_env: CROWDIN_PROJECT # Low priority
140
+ api_key: xxx # High priority
141
+ project_identifier: yyy # Hight priority
142
+ ```
143
+
123
144
  ### Split project configuration and user credentials
124
145
 
125
146
  The `crowdin.yaml` file contains project-specific configuration and user credentials(`api_key`, `project_identifier`).
@@ -192,6 +213,26 @@ base_path: /path/to/your/project
192
213
  preserve_hierarchy: true
193
214
  ```
194
215
 
216
+ ### [I Have No Idea How To Call This Section]
217
+
218
+ This add support for 2 optional parameters in the yaml file section: `dest` and `type`.
219
+ This is useful typically for some projects, where the uploaded name must be different so Crowdin can detect the type correctly.
220
+ `dest` allows you to specify a file name on Crowdin.
221
+ **NOTE**: `dest` only works for single files. Don't try to use it with patterns (multiple files).
222
+
223
+ Configuration sample is below:
224
+
225
+ ```
226
+ files
227
+ -
228
+ source: '/conf/messages'
229
+ dest: '/messages.properties'
230
+ translation: '/conf/messages.%two_letters_code%'
231
+ type: 'properties'
232
+
233
+
234
+ ```
235
+
195
236
  ### Escape quotes for `.properties` file format
196
237
 
197
238
  Defines whether single quote should be escaped by another single quote or backslash in exported translations.
@@ -376,6 +417,6 @@ Tested with the following Ruby versions:
376
417
 
377
418
  Author: Anton Maminov (anton.maminov@gmail.com)
378
419
 
379
- Copyright: 2012-2014 [crowdin.com](http://crowdin.com/)
420
+ Copyright: 2012-2015 [crowdin.com](http://crowdin.com/)
380
421
 
381
422
  This project is licensed under the MIT license, a copy of which can be found in the LICENSE file.
@@ -76,6 +76,7 @@ def export_pattern_to_path(path, export_pattern, lang, languages_mapping = nil)
76
76
  '%locale_with_underscore%' => lang['locale'].gsub('-', '_'),
77
77
  '%android_code%' => android_locale_code(lang['locale']),
78
78
  '%osx_code%' => osx_language_code(lang['crowdin_code']) + '.lproj',
79
+ '%osx_xliff%' => osx_language_code(lang['crowdin_code']) + '.xliff',
79
80
  }
80
81
 
81
82
  placeholders = pattern.inject([]){ |memo, h| memo << h.first[/%(.*)%/, 1] }
@@ -203,6 +204,7 @@ def get_invalid_placeholders(export_pattern)
203
204
  '%locale_with_underscore%',
204
205
  '%android_code%',
205
206
  '%osx_code%',
207
+ '%osx_liff%',
206
208
  '%original_file_name%',
207
209
  '%original_path%',
208
210
  '%file_extension%',
@@ -235,7 +237,7 @@ end
235
237
 
236
238
  # Extract compressed files +files_list+ in a ZIP archive +zipfile_name+ to +dest_path+
237
239
  #
238
- # +files_list+ is a Hash of key-value pairs. Where key is a posible archive filename based on current project configuration
240
+ # +files_list+ is a Hash of key-value pairs. Where key is a possible archive filename based on current project configuration
239
241
  # and value is the expanded filename
240
242
  #
241
243
  def unzip_file_with_translations(zipfile_name, dest_path, files_list)
@@ -246,7 +248,7 @@ def unzip_file_with_translations(zipfile_name, dest_path, files_list)
246
248
  unmatched_files = []
247
249
 
248
250
  Zip::File.open(zipfile_name) do |zipfile|
249
- zipfile.select{ |zip_entry| zip_entry.file? }.each do |f|
251
+ zipfile.select { |zip_entry| zip_entry.file? }.each do |f|
250
252
  # `f' - relative path in archive
251
253
  file = files_list[f.name]
252
254
  if file
@@ -316,6 +318,13 @@ def display_tree(files_tree, level = -2, branches = [])
316
318
  end
317
319
  end
318
320
 
321
+ class String
322
+ def strip_heredoc
323
+ indent = scan(/^[ \t]*(?=\S)/).min.size || 0
324
+ gsub(/^[ \t]{#{indent}}/, '')
325
+ end
326
+ end
327
+
319
328
  ###
320
329
  include GLI::App
321
330
 
@@ -329,7 +338,7 @@ sort_help :manually # help commands are ordered in the order declared
329
338
  wrap_help_text :to_terminal
330
339
 
331
340
  desc I18n.t('app.switches.verbose.desc')
332
- switch [:v, :verbose], :negatable => false
341
+ switch [:v, :verbose], negatable: false
333
342
 
334
343
  desc I18n.t('app.flags.config.desc')
335
344
  default_value File.join(Dir.pwd, 'crowdin.yaml')
@@ -389,7 +398,7 @@ command :upload do |c|
389
398
  local_files << local_file
390
399
  else
391
400
  Find.find(@base_path) do |source_path|
392
- dest = source_path.sub(/\A#{@base_path}/, '') # relative path in Crowdin
401
+ dest = source_path.sub(/\A#{Regexp.escape(@base_path)}/, '') # relative path in Crowdin
393
402
 
394
403
  if File.directory?(source_path)
395
404
  if ignores.any? { |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
@@ -418,11 +427,11 @@ command :upload do |c|
418
427
  end # @config['files']
419
428
 
420
429
  if dest_files.empty?
421
- exit_now! <<EOS
422
- No source files to upload.
423
- Check your configuration file to ensure that they contain valid directives.
424
- See http://crowdin.com/page/cli-tool#configuration-file for more details.
425
- EOS
430
+ exit_now! <<-EOS.strip_heredoc
431
+ No source files to upload.
432
+ Check your configuration file to ensure that they contain valid directives.
433
+ See http://crowdin.com/page/cli-tool#configuration-file for more details.
434
+ EOS
426
435
  end
427
436
 
428
437
  common_dir = @preserve_hierarchy ? '' : find_common_directory_path(dest_files)
@@ -435,7 +444,7 @@ EOS
435
444
  #
436
445
  create_dirs = local_project_tree[:dirs] - remote_project_tree[:dirs]
437
446
  create_dirs.each do |dir|
438
- puts "Create directory `#{dir}`"
447
+ puts "Creating directory `#{dir}`"
439
448
  @crowdin.add_directory(dir)
440
449
  end
441
450
 
@@ -524,7 +533,7 @@ EOS
524
533
  if project_languages.include?(language)
525
534
  project_languages = [] << language
526
535
  else
527
- exit_now!("language '#{language}' doesn't exist in a project")
536
+ exit_now!("language '#{language}' doesn't exist in the project")
528
537
  end
529
538
  end
530
539
 
@@ -557,7 +566,8 @@ EOS
557
566
  end
558
567
 
559
568
  if File.exists?(File.join(@base_path, file['source']))
560
- dest = file['source'].sub(/\A#{@base_path}/, '')
569
+ dest = file['dest'] || file['source']
570
+ dest.sub!(/\A#{Regexp.escape(@base_path)}/, '')
561
571
  dest_files << dest
562
572
 
563
573
  file_translation_languages.each do |lang|
@@ -566,7 +576,7 @@ EOS
566
576
  end
567
577
  else
568
578
  Find.find(@base_path) do |source_path|
569
- dest = source_path.sub(/\A#{@base_path}/, '') # relative path in Crowdin
579
+ dest = source_path.sub(/\A#{Regexp.escape(@base_path)}/, '') # relative path in Crowdin
570
580
 
571
581
  if File.directory?(source_path)
572
582
  if ignores.any? { |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
@@ -593,11 +603,11 @@ EOS
593
603
  end # @config['files']
594
604
 
595
605
  if dest_files.empty?
596
- exit_now! <<EOS
597
- No translation files to upload.
598
- Check your configuration file to ensure that they contain valid directives.
599
- See http://crowdin.com/page/cli-tool#configuration-file for more details.
600
- EOS
606
+ exit_now! <<-EOS.strip_heredoc
607
+ No translation files to upload.
608
+ Check your configuration file to ensure that they contain valid directives.
609
+ See https://crowdin.com/page/cli-tool#configuration-file for more details.
610
+ EOS
601
611
  end
602
612
 
603
613
  common_dir = @preserve_hierarchy ? '' : find_common_directory_path(dest_files)
@@ -608,23 +618,23 @@ EOS
608
618
 
609
619
  if remote_project_tree[:files].include?(file[:dest])
610
620
  if File.exist?(file[:source])
611
- print "Uploading translation file `#{file[:source].sub(/\A#{@base_path}/, '')}'"
621
+ print "Uploading translation file `#{file[:source].sub(/\A#{Regexp.escape(@base_path)}/, '')}'"
612
622
 
613
623
  resp = @crowdin.upload_translation([] << file, language, params)
614
624
  case resp['files'].first[1]
615
625
  when 'skipped'
616
- puts "\rUploading translation file `#{file[:source].sub(/\A#{@base_path}/, '')}' - Skipped"
626
+ puts "\rUploading translation file `#{file[:source].sub(/\A#{Regexp.escape(@base_path)}/, '')}' - Skipped"
617
627
  when 'uploaded'
618
- puts "\rUploading translation file `#{file[:source].sub(/\A#{@base_path}/, '')}' - OK"
628
+ puts "\rUploading translation file `#{file[:source].sub(/\A#{Regexp.escape(@base_path)}/, '')}' - OK"
619
629
  when 'not_allowed'
620
- puts "\rUploading translation file `#{file[:source].sub(/\A#{@base_path}/, '')}' - is not possible"
630
+ puts "\rUploading translation file `#{file[:source].sub(/\A#{Regexp.escape(@base_path)}/, '')}' - is not possible"
621
631
  end
622
632
  else
623
633
  puts "Warning: Local file `#{file[:source]}' does not exist"
624
634
  end
625
635
  else
626
636
  # if source file does not exist, don't upload translations
627
- puts "Warning: Skip `#{file[:source].sub(/\A#{@base_path}/, '')}'"
637
+ puts "Warning: Skip `#{file[:source].sub(/\A#{Regexp.escape(@base_path)}/, '')}'. Translation can not be uploaded for a non-existent source file `#{file[:dest]}'. Please upload sources first."
628
638
  end
629
639
  end
630
640
  end
@@ -641,7 +651,7 @@ command :download do |c|
641
651
  c.desc I18n.t('app.commands.download.flags.language.desc')
642
652
  c.long_desc I18n.t('app.commands.download.flags.language.long_desc')
643
653
  c.arg_name 'language_code'
644
- c.flag [:l, :language], :default_value => 'all'
654
+ c.flag [:l, :language], default_value: 'all'
645
655
 
646
656
  c.action do |global_options ,options, args|
647
657
  language = options[:language]
@@ -669,7 +679,7 @@ command :download do |c|
669
679
  end
670
680
 
671
681
  # use export API method before to download the most recent translations
672
- print 'Build ZIP archive with the latest translations '
682
+ print 'Building ZIP archive with the latest translations '
673
683
  export_translations = @crowdin.export_translations
674
684
  if export_translations['success']
675
685
  if export_translations['success']['status'] == 'built'
@@ -704,7 +714,7 @@ command :download do |c|
704
714
  end
705
715
 
706
716
  if File.exists?(File.join(@base_path, file['source']))
707
- dest = file['source'].sub(/\A#{@base_path}/, '')
717
+ dest = file['source'].sub(/\A#{Regexp.escape(@base_path)}/, '')
708
718
 
709
719
  file_translation_languages.each do |lang|
710
720
  zipped_file = export_pattern_to_path(dest, file['translation'], lang)
@@ -715,7 +725,7 @@ command :download do |c|
715
725
 
716
726
  else
717
727
  Find.find(@base_path) do |source_path|
718
- dest = source_path.sub(/\A#{@base_path}/, '') # relative path in Crowdin
728
+ dest = source_path.sub(/\A#{Regexp.escape(@base_path)}/, '') # relative path in Crowdin
719
729
 
720
730
  if File.directory?(source_path)
721
731
  if ignores.any? { |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
@@ -762,7 +772,7 @@ command :list do |ls_cmd|
762
772
  ls_cmd.desc I18n.t('app.commands.list.commands.project.desc')
763
773
  ls_cmd.command :project do |proj_cmd|
764
774
  proj_cmd.desc I18n.t('app.commands.list.switches.tree.desc')
765
- proj_cmd.switch ['tree'], :negatable => false
775
+ proj_cmd.switch ['tree'], negatable: false
766
776
 
767
777
  proj_cmd.action do |global_options, options, args|
768
778
  project_info = @crowdin.project_info
@@ -780,7 +790,7 @@ command :list do |ls_cmd|
780
790
  ls_cmd.desc I18n.t('app.commands.list.commands.sources.desc')
781
791
  ls_cmd.command :sources do |src_cmd|
782
792
  src_cmd.desc I18n.t('app.commands.list.switches.tree.desc')
783
- src_cmd.switch ['tree'], :negatable => false
793
+ src_cmd.switch ['tree'], negatable: false
784
794
 
785
795
  src_cmd.action do |global_options, options, args|
786
796
  local_files = []
@@ -806,7 +816,7 @@ command :list do |ls_cmd|
806
816
  local_files << local_file
807
817
  else
808
818
  Find.find(@base_path) do |source_path|
809
- dest = source_path.sub(/\A#{@base_path}/, '') # relative path in Crowdin
819
+ dest = source_path.sub(/\A#{Regexp.escape(@base_path)}/, '') # relative path in Crowdin
810
820
 
811
821
  if File.directory?(source_path)
812
822
  if ignores.any? { |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
@@ -850,7 +860,7 @@ command :list do |ls_cmd|
850
860
  ls_cmd.desc I18n.t('app.commands.list.commands.translations.desc')
851
861
  ls_cmd.command :translations do |trans_cmd|
852
862
  trans_cmd.desc I18n.t('app.commands.list.switches.tree.desc')
853
- trans_cmd.switch ['tree'], :negatable => false
863
+ trans_cmd.switch ['tree'], negatable: false
854
864
 
855
865
  trans_cmd.action do |global_options, options, args|
856
866
  project_info = @crowdin.project_info
@@ -867,7 +877,7 @@ command :list do |ls_cmd|
867
877
  ignores = file['ignore'] || []
868
878
 
869
879
  if File.exists?(File.join(@base_path, file['source']))
870
- dest = file['source'].sub(/\A#{@base_path}/, '')
880
+ dest = file['source'].sub(/\A#{Regexp.escape(@base_path)}/, '')
871
881
 
872
882
  translation_languages.each do |lang|
873
883
  local_file = export_pattern_to_path(dest, file['translation'], lang, languages_mapping)
@@ -876,7 +886,7 @@ command :list do |ls_cmd|
876
886
 
877
887
  else
878
888
  Find.find(@base_path) do |source_path|
879
- dest = source_path.sub(/\A#{@base_path}/, '') # relative path in Crowdin
889
+ dest = source_path.sub(/\A#{Regexp.escape(@base_path)}/, '') # relative path in Crowdin
880
890
 
881
891
  if File.directory?(source_path)
882
892
  if ignores.any? { |pattern| File.fnmatch?(pattern, dest, File::FNM_PATHNAME) }
@@ -935,70 +945,107 @@ pre do |globals ,command, options, args|
935
945
  ]
936
946
 
937
947
  unless File.exists?(globals[:config])
938
- exit_now! <<EOS
939
- Can't find configuration file (default `crowdin.yaml').
940
- Type `crowdin-cli help` to know how to specify custom configuration file
948
+ exit_now! <<-EOS.strip_heredoc
949
+ Can't find configuration file (default `crowdin.yaml').
950
+ Type `crowdin-cli help` to know how to specify custom configuration file
941
951
 
942
- See http://crowdin.com/page/cli-tool#configuration-file for more details
943
- EOS
944
- else
945
- begin
946
- @config = YAML.load_file(globals[:config]) || {}
947
- rescue Psych::SyntaxError => err
948
- exit_now! <<EOS
949
- Could not parse YAML: #{err.message}
950
-
951
- We were unable to successfully parse the crowdin.yaml file that you provided - it most likely is not well-formed YAML.
952
- Please check whether your crowdin.yaml is valid YAML - you can use the http://yamllint.com/ validator to do this - and make any necessary changes to fix it.
953
- EOS
954
- end
952
+ See http://crowdin.com/page/cli-tool#configuration-file for more details
953
+ EOS
954
+ end
955
+
956
+ # load project-specific configuration
957
+ #
958
+ begin
959
+ # undocumented feature
960
+ # you can use ERB in your config file, e.g.
961
+ # api_key: <%= # ruby code ... %>
962
+ #
963
+ @config = YAML.load(ERB.new(File.read(globals[:config])).result) || {}
964
+ rescue Psych::SyntaxError => err
965
+ exit_now! <<-EOS.strip_heredoc
966
+ Could not parse YAML: #{err.message}
967
+
968
+ We were unable to successfully parse the crowdin.yaml file that you provided - most likely it is not well-formatted YAML.
969
+ Please check whether your crowdin.yaml is valid YAML - you can use the http://yamllint.com/ validator to do this - and make any necessary changes to fix it.
970
+ EOS
971
+ end
955
972
 
956
- if File.exists?(globals[:identity])
957
- identity = YAML.load_file(globals[:identity]) || {}
958
- ['api_key', 'project_identifier', 'base_path'].each do |key|
959
- @config[key] = identity[key] if identity[key]
973
+ # try to load the API credentials from an environment variable, e.g.
974
+ #
975
+ # project_identifier_env: 'CROWDIN_PROJECT_ID'
976
+ # api_key_env: 'CROWDIN_API_KEY'
977
+ #
978
+ ['api_key', 'project_identifier'].each do |key|
979
+ if @config["#{key}_env"]
980
+ unless @config[key] # project credentials have a higher priority if they are specified in the config
981
+ @config[key] = ENV[@config["#{key}_env"]]
960
982
  end
961
983
  end
984
+ end
962
985
 
963
- ['api_key', 'project_identifier'].each do |key|
964
- unless @config[key]
965
- exit_now! <<EOS
966
- Configuration file misses required option `#{key}`
967
-
968
- See http://crowdin.com/page/cli-tool#configuration-file for more details
969
- EOS
970
- end
986
+ # user credentials in the user-specific config file have a higher priority than project-specific
987
+ #
988
+ if File.exists?(globals[:identity])
989
+ identity = YAML.load(ERB.new(File.read(globals[:identity])).result) || {}
990
+ ['api_key', 'project_identifier', 'base_path'].each do |key|
991
+ @config[key] = identity[key] if identity[key]
971
992
  end
993
+ end
972
994
 
973
- unless @config['files']
974
- exit_now! <<EOS
975
- Configuration file misses required section `files`
995
+ ['api_key', 'project_identifier'].each do |key|
996
+ unless @config[key]
997
+ exit_now! <<-EOS.strip_heredoc
998
+ Configuration file misses required option `#{key}`
976
999
 
977
- See http://crowdin.com/page/cli-tool#configuration-file for more details
978
- EOS
1000
+ See http://crowdin.com/page/cli-tool#configuration-file for more details
1001
+ EOS
979
1002
  end
980
1003
  end
981
1004
 
1005
+ unless @config['files']
1006
+ exit_now! <<-EOS.strip_heredoc
1007
+ Configuration file misses required section `files`
1008
+
1009
+ See https://crowdin.com/page/cli-tool#configuration-file for more details
1010
+ EOS
1011
+ end
1012
+
982
1013
  @config['files'].each do |file|
1014
+ unless file['source']
1015
+ exit_now! <<-EOS.strip_heredoc
1016
+ Files section misses required parameter `source`
1017
+
1018
+ See https://crowdin.com/page/cli-tool#configuration-file for more details
1019
+ EOS
1020
+ end
1021
+
1022
+ unless file['translation']
1023
+ exit_now! <<-EOS.strip_heredoc
1024
+ Files section misses required parameter `translation`
1025
+
1026
+ See https://crowdin.com/page/cli-tool#configuration-file for more details
1027
+ EOS
1028
+ end
1029
+
983
1030
  file['source'] = '/' + file['source'] unless file['source'].start_with?('/')
984
1031
  #file['translation'] = '/' + file['translation'] unless file['translation'].start_with?('/')
985
1032
 
986
1033
  if file['source'].include?('**')
987
1034
  if file['source'].scan('**').size > 1
988
- exit_now! <<EOS
989
- Source pattern `#{file['source']}` is not valid. The mask `**` can be used only once in the source pattern.
990
- EOS
1035
+ exit_now! <<-EOS.strip_heredoc
1036
+ Source pattern `#{file['source']}` is not valid. The mask `**` can be used only once in the source pattern.
1037
+ EOS
991
1038
  elsif file['source'].scan('**').size == 1 and !file['source'].match(/\/\*\*\//)
992
- exit_now! <<EOS
993
- Source pattern `#{file['source']}` is not valid. The mask `**` must be surrounded by backslashes `/` in the source pattern.
994
- EOS
1039
+ exit_now! <<-EOS.strip_heredoc
1040
+ Source pattern `#{file['source']}` is not valid. The mask `**` must be surrounded by slashes `/` in the source pattern.
1041
+ EOS
995
1042
  end
996
1043
  else
997
1044
  if file['translation'].include?('**')
998
- exit_now! <<EOS
999
- Translation pattern `#{file['translation']}` is not valid. The mask `**` can't be used.
1000
- When using `**` in 'translation' pattern it will always contain sub-path from 'source' for certain file.
1001
- EOS
1045
+ exit_now! <<-EOS.strip_heredoc
1046
+ Translation pattern `#{file['translation']}` is not valid. The mask `**` can't be used.
1047
+ When using `**` in 'translation' pattern it will always contain sub-path from 'source' for certain file.
1048
+ EOS
1002
1049
  end
1003
1050
  end
1004
1051
 
@@ -1008,9 +1055,9 @@ EOS
1008
1055
  @base_path = @config['base_path']
1009
1056
  else
1010
1057
  @base_path = Dir.pwd
1011
- puts <<EOS
1012
- Warning: Configuration file misses parameter `base_path` that defines your project root directory. Using `#{@base_path}` as a root directory.
1013
- EOS
1058
+ puts <<-EOS.strip_heredoc
1059
+ Warning: Configuration file misses parameter `base_path` that defines your project root directory. Using `#{@base_path}` as a root directory.
1060
+ EOS
1014
1061
  end
1015
1062
 
1016
1063
  @preserve_hierarchy = false
@@ -1021,9 +1068,9 @@ EOS
1021
1068
  when false
1022
1069
  false
1023
1070
  else
1024
- exit_now! <<EOS
1025
- Parameter `preserve_hierarchy` allows values of true or false.
1026
- EOS
1071
+ exit_now! <<-EOS.strip_heredoc
1072
+ Parameter `preserve_hierarchy` allows values of true or false.
1073
+ EOS
1027
1074
  end
1028
1075
  end
1029
1076
 
@@ -1053,7 +1100,7 @@ post do |globals, command, options, args|
1053
1100
  # Post logic here
1054
1101
  # Use skips_post before a command to skip this
1055
1102
  # block on that command only
1056
- #puts "Executed #{command.name}" if globals[:verbose]
1103
+ # puts "Executed #{command.name}" if globals[:verbose]
1057
1104
  end
1058
1105
 
1059
1106
  on_error do |exception|
@@ -1,5 +1,5 @@
1
1
  module Crowdin
2
2
  module CLI
3
- VERSION = '0.4.1'
3
+ VERSION = '0.4.2'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crowdin-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Crowdin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-20 00:00:00.000000000 Z
11
+ date: 2015-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  version: '0'
157
157
  requirements: []
158
158
  rubyforge_project:
159
- rubygems_version: 2.2.2
159
+ rubygems_version: 2.4.5
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: Crowdin CLI.