localio 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c21e5dff4337729edd1fc6269aded7e26a016865
4
- data.tar.gz: a0159d82208d6738b0afc6d2912133eafc5c86b1
3
+ metadata.gz: 2ab1bb80d6ff76d09f5a49870da6def8a557327c
4
+ data.tar.gz: 0d5ac9d5fbeacb0ae31ea0bffcb7ba5ad0e192e8
5
5
  SHA512:
6
- metadata.gz: c80d19c1d239b3b6bfdb2a1d1d34eda8dab8ea8ff8db87092350633d55686220bf6966e6d0b0dfef12c164d9e61488f4e5a0923bc3516c246cf4aef350ecdf55
7
- data.tar.gz: fccb1c83520acd2912dce8a783d0b7d37b7fbbc893067026f152d3c585d43b093c21f8f80d2623f27658f0fb6c11b135578d013c1dbb0cbc41876c4c185e5e5f
6
+ metadata.gz: cfaeda3f347fef27740843416e499de7e0e634ab3cdece0c0bfd03ada9e789cd32bdbd6736a7469d847a911acc19ec85c33e3db614d0a8c4f7f5913aea055a25
7
+ data.tar.gz: ed4cc7851740012f89fedfcaeb00083d33cfd61a6f4e49f2fc49fc47328ee9439fa0d85d0126c58a625dbb13ba95c3d6479e15d42e14220a27641611a42d872b
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,8 @@
1
+ Contributing
2
+ ============
3
+
4
+ 1. Fork it
5
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
6
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
7
+ 4. Push to the branch (`git push origin my-new-feature`)
8
+ 5. Create new Pull Request
data/README.md CHANGED
@@ -44,9 +44,11 @@ platform :ios
44
44
  output_path 'out/'
45
45
 
46
46
  source :google_drive,
47
- :spreadsheet => '[Localizables] My Project!',
48
- :login => 'your_email@gmail.com',
49
- :password => 'your_password'
47
+ :spreadsheet => '[Localizables] My Project!',
48
+ :login => 'your_email@gmail.com',
49
+ :password => 'your_password'
50
+
51
+ formatting :smart # This is optional, formatting :smart is used by default.
50
52
  ````
51
53
 
52
54
  This would connect localio to your Google Drive and process the spreadsheet with title "[Localizables] My Project!".
@@ -55,35 +57,96 @@ The list of possible commands is this.
55
57
 
56
58
  Option | Description | Default
57
59
  ----------------------------|------------------------------------------------------------------|--------
58
- `platform` | (Req.) Target platform for the localizable files. | ---
59
- `source` | (Req.) Information on where to find the spreadsheet w/ the info | ---
60
+ `platform` | (Req.) Target platform for the localizable files. | `nil`
61
+ `source` | (Req.) Information on where to find the spreadsheet w/ the info | `nil`
60
62
  `output_path` | (Req.) Target directory for the localizables. | `out/`
61
63
  `formatting` | The formatter that will be used for key processing. | `smart`
62
64
 
63
-
64
65
  #### Supported platforms
65
66
 
66
- * `:android` for Android string.xml files.
67
- * `:ios` for iOS Localizable.strings files.
68
- * `:rails` for Rails YAML files.
69
- * `:json` for an easy JSON format for localizables.
67
+ * `:android` for Android string.xml files. The `output_path` needed is the path for the `res` directory.
68
+ * `:ios` for iOS Localizable.strings files. The `output_path` needed is base directory where `en.lproj/` and such would go.
69
+ * `:rails` for Rails YAML files. The `output_path` needed is your `config/locales` directory.
70
+ * `:json` for an easy JSON format for localizables. The `output_path` is yours to decide :)
70
71
 
71
72
  #### Supported sources
72
73
 
73
- * `:google_drive` will connect to Google Drive.
74
- * `:xls` will use a local XLS file.
74
+ ##### Google Drive
75
+
76
+ `source :google_drive` will get the translation strings from Google Drive.
77
+
78
+ You will have to provide some required parameters too. Here is a list of all the parameters.
79
+
80
+ Option | Description
81
+ ----------------------------|-------------------------------------------------------------------------
82
+ `:spreadsheet` | (Req.) Title of the spreadsheet you want to use. Can be a partial match.
83
+ `:login` | (Req.) Your Google login.
84
+ `:password` | (Req.) Your Google password.
85
+
86
+ **NOTE** As it is a very bad practice to put your login and your password in a plain file, specially when you would want to upload your project to some repository, it is **VERY RECOMMENDED** that you use environment variables in here. Ruby syntax is accepted so you can use `ENV['GOOGLE_LOGIN']` and `ENV['GOOGLE_PASSWORD']` in here.
87
+
88
+ For example, this.
89
+
90
+ ````ruby
91
+ source :google_drive,
92
+ :spreadsheet => '[Localizables] My Project!',
93
+ :login => ENV['GOOGLE_LOGIN'],
94
+ :password => ENV['GOOGLE_PASSWORD']
95
+ ````
96
+
97
+ And in your .bashrc (or .bash_profile, .zshrc or whatever), you could export those environment variables like this:
98
+
99
+ ````ruby
100
+ export GOOGLE_LOGIN="your_login"
101
+ export GOOGLE_PASSWORD="your_password"
102
+ ````
103
+
104
+ ##### XLS
105
+
106
+ `source :xls` will use a local XLS file. In the parameter's hash you should specify a `:path`.
107
+
108
+ Option | Description
109
+ ----------------------------|-------------------------------------------------------------------------
110
+ `:path` | (Req.) Path for your XLS file.
111
+
112
+ ````ruby
113
+ source :xls,
114
+ :path => 'YourExcelFileWithTranslations.xls'
115
+ ````
116
+
117
+ ##### XLSX
118
+
119
+ Currently XLSX is not supported though the code is there (not tested, though) and it will be included in a future release.
75
120
 
76
121
  #### Key formatters
77
122
 
123
+ If you don't specify a formatter for keys, :smart will be used.
124
+
78
125
  * `:none` for no formatting.
79
- * `:snake_case` for snake case formatting (ie "this_kind_of_keys").
80
- * `:camel_case` for camel case formatting (ie "thisKindOfKeys").
126
+ * `:snake_case` for snake case formatting (ie "this_kind_of_key").
127
+ * `:camel_case` for camel case formatting (ie "ThisKindOfKey").
81
128
  * `:smart` use a different formatting depending on the platform.
82
129
 
130
+ Here you have some examples on how the behavior would be:
131
+
132
+ Platform | "App name" | "ANOTHER_KIND_OF_KEY"
133
+ -------------------|--------------|----------------------
134
+ `:none` | App name | ANOTHER_KIND_OF_KEY
135
+ `:snake_case` | app_name | another_kind_of_key
136
+ `:camel_case` | appName | AnotherKindOfKey
137
+ `:smart` (ios) | _App_name | _Another_kind_of_key
138
+ `:smart` (android) | app_name | another_kind_of_key
139
+ `:smart` (ruby) | app_name | another_kind_of_key
140
+ `:smart` (json) | app_name | another_kind_of_key
141
+
142
+ Example of use:
143
+
144
+ ````ruby
145
+ formatting :camel_case
146
+ ````
147
+
148
+ Normally you would want a smart formatter, because it is adjusted (or tries to) to the usual code conventions of each platform for localizable strings.
149
+
83
150
  ## Contributing
84
151
 
85
- 1. Fork it
86
- 2. Create your feature branch (`git checkout -b my-new-feature`)
87
- 3. Commit your changes (`git commit -am 'Add some feature'`)
88
- 4. Push to the branch (`git push origin my-new-feature`)
89
- 5. Create new Pull Request
152
+ Please read the [contributing guide](https://github.com/mrmans0n/localio/blob/master/CONTRIBUTING.md).
data/bin/localize CHANGED
@@ -2,4 +2,9 @@
2
2
 
3
3
  require 'localio'
4
4
 
5
- Localio.from_cmdline(ARGV)
5
+ begin
6
+ Localio.from_cmdline(ARGV)
7
+ rescue => e
8
+ abort e.message
9
+ end
10
+
data/lib/localio.rb CHANGED
@@ -10,7 +10,7 @@ module Localio
10
10
  if File.exist? 'Locfile'
11
11
  process_locfile('Locfile')
12
12
  else
13
- abort 'Locfile not found in current directory, and no compatible file supplied in arguments.'
13
+ raise ArgumentError, 'Locfile not found in current directory, and no compatible file supplied in arguments.'
14
14
  end
15
15
  else
16
16
  process_locfile(ARGV.shift)
@@ -14,7 +14,7 @@ module Formatter
14
14
  when :snake_case
15
15
  key.space_to_underscore.strip_tag.downcase
16
16
  else
17
- abort 'Unknown formatting used. Must use :smart, :none, :camel_case or :snake_case'
17
+ raise ArgumentError, 'Unknown formatting used. Must use :smart, :none, :camel_case or :snake_case'
18
18
  end
19
19
  end
20
20
  end
@@ -15,7 +15,7 @@ module LocalizableWriter
15
15
  when :rails
16
16
  RailsWriter.write languages, terms, path, formatter, options
17
17
  else
18
- abort 'Platform not supported! Current possibilities are :android, :ios, :json, :rails'
18
+ raise ArgumentError, 'Platform not supported! Current possibilities are :android, :ios, :json, :rails'
19
19
  end
20
20
  end
21
21
  end
@@ -1,6 +1,6 @@
1
1
  require 'localio/processors/google_drive_processor'
2
2
  require 'localio/processors/xls_processor'
3
- require 'localio/processors/xlsx_processor'
3
+ # require 'localio/processors/xlsx_processor'
4
4
 
5
5
  module Processor
6
6
  def self.load_localizables(service, options)
@@ -13,7 +13,7 @@ module Processor
13
13
  raise 'Temporarily disabled due to rubyzip problems. Sorry!'
14
14
  # XlsxProcessor.load_localizables options
15
15
  else
16
- abort 'Unsupported service! Try with :google_drive, :xlsx or :xls in the source argument'
16
+ raise ArgumentError, 'Unsupported service! Try with :google_drive, :xlsx or :xls in the source argument'
17
17
  end
18
18
  end
19
19
  end
@@ -7,18 +7,18 @@ class GoogleDriveProcessor
7
7
 
8
8
  # Parameter validations
9
9
  spreadsheet = options[:spreadsheet]
10
- abort ':spreadsheet required for Google Drive source!' if spreadsheet.nil?
10
+ raise ArgumentError, ':spreadsheet required for Google Drive source!' if spreadsheet.nil?
11
11
  login = options[:login]
12
- abort ':login required for Google Drive source!' if login.nil?
12
+ raise ArgumentError, ':login required for Google Drive source!' if login.nil?
13
13
  password = options[:password]
14
- abort ':password required for Google Drive source!' if password.nil?
14
+ raise ArgumentError, ':password required for Google Drive source!' if password.nil?
15
15
 
16
16
  # Log in and get spreadsheet
17
17
  puts 'Logging in to Google Drive...'
18
18
  begin
19
19
  session = GoogleDrive.login(login, password)
20
20
  rescue
21
- abort 'Couldn\'t access Google Drive. Check your credentials in :login and :password'
21
+ raise 'Couldn\'t access Google Drive. Check your credentials in :login and :password'
22
22
  end
23
23
  puts 'Logged in!'
24
24
 
@@ -39,7 +39,7 @@ class GoogleDriveProcessor
39
39
 
40
40
  # TODO we could pass a :page_index in the options hash and get that worksheet instead, defaulting to zero?
41
41
  worksheet = matching_spreadsheets[0].worksheets[0]
42
- abort 'Unable to retrieve the first worksheet from the spreadsheet. Are there any pages?' if worksheet.nil?
42
+ raise 'Unable to retrieve the first worksheet from the spreadsheet. Are there any pages?' if worksheet.nil?
43
43
 
44
44
  # At this point we have the worksheet, so we want to store all the key / values
45
45
  first_valid_row_index = nil
@@ -50,9 +50,9 @@ class GoogleDriveProcessor
50
50
  last_valid_row_index = row if worksheet[row, 1].downcase == '[end]'
51
51
  end
52
52
 
53
- abort 'Invalid format: Could not find any [key] keyword in the A column of the worksheet' if first_valid_row_index.nil?
54
- abort 'Invalid format: Could not find any [end] keyword in the A column of the worksheet' if last_valid_row_index.nil?
55
- abort 'Invalid format: [end] must not be before [key] in the A column' if first_valid_row_index > last_valid_row_index
53
+ raise IndexError, 'Invalid format: Could not find any [key] keyword in the A column of the worksheet' if first_valid_row_index.nil?
54
+ raise IndexError, 'Invalid format: Could not find any [end] keyword in the A column of the worksheet' if last_valid_row_index.nil?
55
+ raise IndexError, 'Invalid format: [end] must not be before [key] in the A column' if first_valid_row_index > last_valid_row_index
56
56
 
57
57
  languages = Hash.new('languages')
58
58
  default_language = nil
@@ -7,7 +7,7 @@ class XlsProcessor
7
7
 
8
8
  # Parameter validations
9
9
  path = options[:path]
10
- abort ':path attribute is missing from the source, and it is required for xls spreadsheets' if path.nil?
10
+ raise ArgumentError, ':path attribute is missing from the source, and it is required for xls spreadsheets' if path.nil?
11
11
 
12
12
  Spreadsheet.client_encoding = 'UTF-8'
13
13
 
@@ -15,7 +15,7 @@ class XlsProcessor
15
15
 
16
16
  # TODO we could pass a :page_index in the options hash and get that worksheet instead, defaulting to zero?
17
17
  worksheet = book.worksheet 0
18
- abort 'Unable to retrieve the first worksheet from the spreadsheet. Are there any pages?' if worksheet.nil?
18
+ raise 'Unable to retrieve the first worksheet from the spreadsheet. Are there any pages?' if worksheet.nil?
19
19
 
20
20
  # At this point we have the worksheet, so we want to store all the key / values
21
21
  first_valid_row_index = nil
@@ -26,9 +26,9 @@ class XlsProcessor
26
26
  last_valid_row_index = row if worksheet[row, 0].to_s.downcase == '[end]'
27
27
  end
28
28
 
29
- abort 'Invalid format: Could not find any [key] keyword in the A column of the worksheet' if first_valid_row_index.nil?
30
- abort 'Invalid format: Could not find any [end] keyword in the A column of the worksheet' if last_valid_row_index.nil?
31
- abort 'Invalid format: [end] must not be before [key] in the A column' if first_valid_row_index > last_valid_row_index
29
+ raise IndexError, 'Invalid format: Could not find any [key] keyword in the A column of the worksheet' if first_valid_row_index.nil?
30
+ raise IndexError, 'Invalid format: Could not find any [end] keyword in the A column of the worksheet' if last_valid_row_index.nil?
31
+ raise IndexError, 'Invalid format: [end] must not be before [key] in the A column' if first_valid_row_index > last_valid_row_index
32
32
 
33
33
  languages = Hash.new('languages')
34
34
  default_language = nil
@@ -41,7 +41,7 @@ class XlsProcessor
41
41
  end
42
42
  end
43
43
 
44
- abort 'There are no language columns in the worksheet' if languages.count == 0
44
+ raise 'There are no language columns in the worksheet' if languages.count == 0
45
45
 
46
46
  default_language = languages[0] if default_language.to_s == ''
47
47
 
@@ -7,13 +7,13 @@ class XlsxProcessor
7
7
 
8
8
  # Parameter validations
9
9
  path = options[:path]
10
- abort ':path attribute is missing from the source, and it is required for xlsx spreadsheets' if path.nil?
10
+ raise ArgumentError, ':path attribute is missing from the source, and it is required for xlsx spreadsheets' if path.nil?
11
11
 
12
12
  book = SimpleXlsxReader.open path
13
13
 
14
14
  # TODO we could pass a :page_index in the options hash and get that worksheet instead, defaulting to zero?
15
15
  worksheet = book.sheets.first
16
- abort 'Unable to retrieve the first worksheet from the spreadsheet. Are there any pages?' if worksheet.nil?
16
+ raise 'Unable to retrieve the first worksheet from the spreadsheet. Are there any pages?' if worksheet.nil?
17
17
 
18
18
  # At this point we have the worksheet, so we want to store all the key / values
19
19
  first_valid_row_index = nil
@@ -24,9 +24,9 @@ class XlsxProcessor
24
24
  last_valid_row_index = row if worksheet[row, 0].to_s.downcase == '[end]'
25
25
  end
26
26
 
27
- abort 'Invalid format: Could not find any [key] keyword in the A column of the worksheet' if first_valid_row_index.nil?
28
- abort 'Invalid format: Could not find any [end] keyword in the A column of the worksheet' if last_valid_row_index.nil?
29
- abort 'Invalid format: [end] must not be before [key] in the A column' if first_valid_row_index > last_valid_row_index
27
+ raise IndexError, 'Invalid format: Could not find any [key] keyword in the A column of the worksheet' if first_valid_row_index.nil?
28
+ raise IndexError, 'Invalid format: Could not find any [end] keyword in the A column of the worksheet' if last_valid_row_index.nil?
29
+ raise IndexError, 'Invalid format: [end] must not be before [key] in the A column' if first_valid_row_index > last_valid_row_index
30
30
 
31
31
  languages = Hash.new('languages')
32
32
  default_language = nil
@@ -39,7 +39,7 @@ class XlsxProcessor
39
39
  end
40
40
  end
41
41
 
42
- abort 'There are no language columns in the worksheet' if languages.count == 0
42
+ raise 'There are no language columns in the worksheet' if languages.count == 0
43
43
 
44
44
  default_language = languages[0] if default_language.to_s == ''
45
45
 
@@ -1,3 +1,3 @@
1
1
  module Localio
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/localio.gemspec CHANGED
@@ -30,5 +30,5 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "micro-optparse", "~> 1.1.5"
31
31
  spec.add_dependency "google_drive", "~> 0.3.6"
32
32
  spec.add_dependency "spreadsheet", "~> 0.8.9"
33
- spec.add_dependency "simple_xlsx_reader", "~> 0.9.7"
33
+ # spec.add_dependency "simple_xlsx_reader", "~> 0.9.7"
34
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: localio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nacho Lopez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-31 00:00:00.000000000 Z
11
+ date: 2013-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -94,20 +94,6 @@ dependencies:
94
94
  - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.8.9
97
- - !ruby/object:Gem::Dependency
98
- name: simple_xlsx_reader
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ~>
102
- - !ruby/object:Gem::Version
103
- version: 0.9.7
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ~>
109
- - !ruby/object:Gem::Version
110
- version: 0.9.7
111
97
  description: Automatic Localizable file generation for multiple platforms (Rails,
112
98
  Android, iOS, JSON)
113
99
  email:
@@ -118,6 +104,7 @@ extensions: []
118
104
  extra_rdoc_files: []
119
105
  files:
120
106
  - .gitignore
107
+ - CONTRIBUTING.md
121
108
  - Gemfile
122
109
  - LICENSE.txt
123
110
  - README.md