fir-cli 1.2.2 → 1.2.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: c1cc30a7a258c5ed2349009e07307b42bc69d076
4
- data.tar.gz: d2b79e6409a92803b19401771eb47881df1d5eca
3
+ metadata.gz: ea56efea5d40f829e8dda5577bedc83315e7dadb
4
+ data.tar.gz: 5d672c450dd8cc2115b26fdc4681cb7031e20a89
5
5
  SHA512:
6
- metadata.gz: 8d58f484f0618482a0502fa39bfcd87f5877e9c209363343548f9100da03caee367efbe791a893c07b9f78cac4232fa6100c23d63daef6df042a81318db818a2
7
- data.tar.gz: d5ac3c65f17bbe158f07b98ed7b95e72515635bb0c9e1c03415243835e8b058608a570dff2f017b00886d21e962be6413b552b62c08af8beb1d7676549469f88
6
+ metadata.gz: d5e5d7e67186cb666fe8b96576a3046bffdfc985028d8d4b4b61713bc96c4e7a89417c39f37209be8a64df1c4dc2b09797fd34f7f23c3f00316296161a97a7d0
7
+ data.tar.gz: 911c4e30e32238144e65819b84725f9cb70191ff245d4e2ac4ed2a081ead711a3a53ec8fac951d475c13a5d069dde8e35ab78d45c4a963df389ca977f72d694e
data/Gemfile CHANGED
@@ -8,4 +8,4 @@ end
8
8
  # Specify your gem's dependencies in fir.gemspec
9
9
  gemspec
10
10
 
11
- gem "codeclimate-test-reporter", group: :test, require: nil
11
+ gem 'codeclimate-test-reporter', group: :test, require: nil
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- FIR.im CLI
1
+ fir.im-cli
2
2
  ---
3
3
 
4
4
 
@@ -8,12 +8,12 @@ FIR.im CLI
8
8
  [![Gem Version](https://badge.fury.io/rb/fir-cli.svg)](http://badge.fury.io/rb/fir-cli)
9
9
  [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/FIRHQ/fir-cli?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
10
10
 
11
- > FIR.im CLI 可以通过指令查看, 上传, 编译应用
11
+ > fir.im-cli 可以通过指令查看, 上传, 编译应用
12
12
 
13
13
  ## 使用入门
14
14
  ### 从安装入手
15
15
 
16
- FIR.im CLI 使用 Ruby 构建,只要安装相应 ruby gem 即可:
16
+ fir.im-cli 使用 Ruby 构建,只要安装相应 ruby gem 即可:
17
17
 
18
18
  ```shell
19
19
  $ sudo gem install fir-cli
@@ -34,21 +34,54 @@ sudo gem update --system
34
34
  sudo gem install fir-cli
35
35
  ```
36
36
 
37
+ **注意: 如果你的系统是 mac OSX 10.11 以后的版本, 由于10.11引入了 `rootless`, 无法直接安装 fir-cli, 有以下三种解决办法:**
38
+
39
+ 1\. 使用 [RVM](https://rvm.io/) 安装 Ruby, 再安装 fir-cli(推荐)
40
+
41
+ ```shell
42
+ # Install RVM:
43
+ $ \curl -sSL https://get.rvm.io | bash -s stable --ruby
44
+
45
+ $ gem install fir-cli
46
+ ```
47
+
48
+ 2\. 指定 fir-cli 中 bin 文件的 PATH
49
+
50
+ ```shell
51
+ $ export PATH=/usr/local/bin:$PATH;sudo gem install -n /usr/local/bin fir-cli
52
+ ```
53
+
54
+ 3\. 重写 Ruby Gem 的 bindir
55
+
56
+ ```shell
57
+ $ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
58
+ $ sudo gem install fir-cli
59
+ ```
60
+
37
61
  安装后,你可以在命令行执行指令
38
62
 
39
63
  ```shell
40
64
  $ fir
41
65
  Commands:
42
- fir build_apk BUILD_DIR # Build Android app (alias: 'ba').
43
- fir build_ipa BUILD_DIR [options] [settings] # Build iOS app (alias: 'bi').
44
- fir help # Describe available commands or one specific command.
45
- fir info APP_FILE_PATH # Show iOS/Android app's info, support ipa/apk file (aliases: 'i').
46
- fir login # Login FIR.im (aliases: 'l').
47
- fir mapping MAPPING_FILE_PATH # Upload app's mapping file to BugHD.com (aliases: 'm').
66
+ fir build_apk BUILD_DIR # Build Android app (alias: `ba`).
67
+ fir build_ipa BUILD_DIR [options] [settings] # Build iOS app (alias: `bi`).
68
+ fir help # Describe available commands or one specific command (aliases: `h`).
69
+ fir info APP_FILE_PATH # Show iOS/Android app info, support ipa/apk file (aliases: `i`).
70
+ fir login # Login fir.im (aliases: `l`).
71
+ fir mapping MAPPING_FILE_PATH # Upload app mapping file to BugHD.com (aliases: `m`).
48
72
  fir me # Show current user info if user is logined.
49
- fir publish APP_FILE_PATH # Publish iOS/Android app to FIR.im, support ipa/apk file (aliases: 'p').
50
- fir upgrade # Upgrade FIR-CLI and quit (aliases: u).
51
- fir version # Show FIR-CLI version number and quit (aliases: v)
73
+ fir publish APP_FILE_PATH # Publish iOS/Android app to fir.im, support ipa/apk file (aliases: `p`).
74
+ fir upgrade # Upgrade fir-cli and quit (aliases: `u`).
75
+ fir version # Show fir-cli version number and quit (aliases: `v`).
76
+
77
+ Options:
78
+ -T, [--token=TOKEN] # User's API Token at fir.im
79
+ -L, [--logfile=LOGFILE] # Path to writable logfile
80
+ -V, [--verbose], [--no-verbose] # Show verbose
81
+ # Default: true
82
+ -q, [--quiet], [--no-quiet] # Silence commands
83
+ -h, [--help], [--no-help] # Show this help message and quit
84
+
52
85
 
53
86
  Options:
54
87
  -T, [--token=TOKEN] # User's API Token at FIR.im
@@ -62,8 +95,8 @@ Options:
62
95
  ### 参数说明
63
96
 
64
97
  - `alias <short command>` 意味着可以用 alias 别名来代替该指令, 例如 `fir b`
65
- - `-T` 用户在 FIR.im 上的 api_token, `publish` 需要使用此参数
66
- - `-L` 指定 FIR-CLI 的输出 log, 默认为 STDOUT
98
+ - `-T` 用户在 fir.im 上的 api_token, `publish` 需要使用此参数
99
+ - `-L` 指定 fir-cli 的输出 log, 默认为 STDOUT
67
100
  - `-V` Verbose, 默认为输出所有信息( INFO 和 ERROR), 如果设置 `--no-verbose`, 则只输出 ERROR 信息
68
101
  - `-q` 静默模式, 默认关闭
69
102
  - `-h` 查看帮助
@@ -81,11 +114,11 @@ $ fir p path/to/application -T YOUR_FIR_TOKEN
81
114
  ```shell
82
115
  I, [2015-08-26T10:08:35.447209 #6774] INFO -- : Publishing app.......
83
116
  I, [2015-08-26T10:08:35.447334 #6774] INFO -- : ✈ -------------------------------------------- ✈
84
- I, [2015-08-26T10:08:35.514378 #6774] INFO -- : Fetching xxxx@FIR.im uploading info......
117
+ I, [2015-08-26T10:08:35.514378 #6774] INFO -- : Fetching xxxx@fir.im uploading info......
85
118
  I, [2015-08-26T10:08:35.692616 #6774] INFO -- : Uploading app......
86
119
  I, [2015-08-26T10:08:36.920226 #6774] INFO -- : Updating devices info......
87
120
  I, [2015-08-26T10:08:37.075149 #6774] INFO -- : ✈ -------------------------------------------- ✈
88
- I, [2015-08-26T10:08:37.075238 #6774] INFO -- : Fetch app info from FIR.im
121
+ I, [2015-08-26T10:08:37.075238 #6774] INFO -- : Fetch app info from fir.im
89
122
  I, [2015-08-26T10:08:37.235071 #6774] INFO -- : Published succeed: http://fir.im/xxxx
90
123
  I, [2015-08-26T10:08:37.235155 #6774] INFO -- :
91
124
  ```
@@ -101,7 +134,7 @@ $ fir l
101
134
  这时系统会提示输入用户 token, 用户 token 可在 **[这里](http://fir.im/user/info)** 查看
102
135
 
103
136
  ```shell
104
- Please enter your FIR.im API Token:
137
+ Please enter your fir.im API Token:
105
138
  I, [2015-08-26T10:10:28.235295 #6833] INFO -- : Login succeed, previous user's email: xxx@xxx.com
106
139
  I, [2015-08-26T10:10:28.245083 #6833] INFO -- : Login succeed, current user's email: xxx@xxx.com
107
140
  I, [2015-08-26T10:10:28.245152 #6833] INFO -- :
@@ -142,7 +175,7 @@ $ fir bi path/to/workspace -w -S <scheme name>
142
175
  $ fir ba path/to/project
143
176
  ```
144
177
 
145
- ### 一步, 从源代码到 FIR.im
178
+ ### 一步, 从源代码到 fir.im
146
179
  > 只需要输入 -p -T
147
180
 
148
181
  ```shell
@@ -157,11 +190,11 @@ I, [2015-08-26T10:12:00.893819 #7273] INFO -- : Build Success
157
190
  I, [2015-08-26T10:12:00.894051 #7273] INFO -- :
158
191
  I, [2015-08-26T10:12:01.026832 #7273] INFO -- : Publishing app.......
159
192
  I, [2015-08-26T10:12:01.026905 #7273] INFO -- : ✈ -------------------------------------------- ✈
160
- I, [2015-08-26T10:12:01.098759 #7273] INFO -- : Fetching im.fir.OnlyiPad@FIR.im uploading info......
193
+ I, [2015-08-26T10:12:01.098759 #7273] INFO -- : Fetching im.fir.OnlyiPad@fir.im uploading info......
161
194
  I, [2015-08-26T10:12:01.249832 #7273] INFO -- : Uploading app......
162
195
  I, [2015-08-26T10:12:01.859718 #7273] INFO -- : Updating devices info......
163
196
  I, [2015-08-26T10:12:02.015517 #7273] INFO -- : ✈ -------------------------------------------- ✈
164
- I, [2015-08-26T10:12:02.015588 #7273] INFO -- : Fetch app info from FIR.im
197
+ I, [2015-08-26T10:12:02.015588 #7273] INFO -- : Fetch app info from fir.im
165
198
  I, [2015-08-26T10:12:02.210391 #7273] INFO -- : Published succeed: http://fir.im/xxxx
166
199
  I, [2015-08-26T10:12:02.210459 #7273] INFO -- :
167
200
  I, [2015-08-26T10:12:02.210520 #7273] INFO -- :
@@ -201,7 +234,7 @@ $ fir publish -h
201
234
 
202
235
  ## 永远使用最新功能
203
236
 
204
- 下面的指令会自动更新 FIR-CLI
237
+ 下面的指令会自动更新 fir-cli
205
238
 
206
239
  ```shell
207
240
  $ fir upgrade
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
  require File.expand_path('../test/test_helper', __FILE__)
3
3
 
4
- desc "Run the tests."
4
+ desc 'Run the tests.'
5
5
  task :test do
6
- $: << "lib" << "test"
7
- Dir["test/*_test.rb"].each { |f| require f[5..-4] }
6
+ $LOAD_PATH << 'lib' << 'test'
7
+ Dir['test/*_test.rb'].each { |f| require f[5..-4] }
8
8
  end
9
9
 
10
10
  task default: :test
data/bin/fir CHANGED
@@ -4,7 +4,7 @@
4
4
  require_relative '../lib/fir'
5
5
 
6
6
  begin
7
- system "export LC_ALL=en_US.UTF-8;export LC_CTYPE=en_US.UTF-8;export LANG=en_US.UTF-8"
7
+ OS.set_locale
8
8
  FIR::CLI.start ARGV
9
9
  rescue => e
10
10
  raise e if $DEBUG
data/fir-cli.gemspec CHANGED
@@ -5,20 +5,19 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'fir/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "fir-cli"
8
+ spec.name = 'fir-cli'
9
9
  spec.version = FIR::VERSION
10
- spec.authors = ["FIR.im", "NaixSpirit"]
11
- spec.email = ["dev@fir.im"]
12
- spec.date = Time.now.strftime("%Y-%m-%d")
13
- spec.summary = %q{FIR.im command tool}
14
- spec.description = %q{FIR.im command tool, support iOS and Android}
15
- spec.homepage = "http://blog.fir.im/fir_cli"
16
- spec.license = "MIT"
17
-
10
+ spec.authors = ['NaixSpirit']
11
+ spec.email = ['dev@fir.im']
12
+ spec.date = Time.now.strftime('%Y-%m-%d')
13
+ spec.summary = 'fir.im command tool'
14
+ spec.description = 'fir.im command tool, support iOS and Android'
15
+ spec.homepage = 'http://blog.fir.im/fir_cli'
16
+ spec.license = 'MIT'
18
17
  spec.files = `git ls-files -z`.split("\x0")
19
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
22
21
 
23
22
  spec.post_install_message = %q(
24
23
  ______________ ________ ____
@@ -28,21 +27,20 @@ Gem::Specification.new do |spec|
28
27
  /_/ /___/_/ |_| \____/_____/___/
29
28
 
30
29
  ## 更新记录
31
- ### FIR-CLI 1.2.2
32
- - 完全兼容新版 API
33
- - 请使用新版 API Token
34
- - 新版 API Token 查看地址: `http://fir.im/user/info`
35
- - 修正不同系统非 UTF-8 编码问题
36
- - [fir-cli](https://github.com/FIRHQ/fir-cli) 已经开源, 欢迎 fork, issue 和 pull request
30
+ ### fir-cli 1.2.3
31
+ - 修正 `build_apk` 无法找到 apk 的 bug
32
+ - build 完毕后, ipa 和 apk 均以 $name-$version-Build-$build 形式命名
33
+ - [fir-cli](https://github.com/FIRHQ/fir-cli) 已经开源
34
+ - 欢迎 fork, issue 和 pull request
37
35
  )
38
36
 
39
- spec.add_development_dependency "bundler", "~> 1.7"
40
- spec.add_development_dependency "rake", "~> 10.0"
41
- spec.add_development_dependency "minitest", "~> 5.7"
42
- spec.add_development_dependency "pry", "~> 0.10"
37
+ spec.add_development_dependency 'bundler', '~> 1.7'
38
+ spec.add_development_dependency 'rake', '~> 10.0'
39
+ spec.add_development_dependency 'minitest', '~> 5.7'
40
+ spec.add_development_dependency 'pry', '~> 0.10'
43
41
 
44
- spec.add_dependency "thor", "~> 0.19"
45
- spec.add_dependency "CFPropertyList", "~> 2.3"
46
- spec.add_dependency "rest-client", "~> 1.7"
47
- spec.add_dependency "ruby_android", "~> 0.7"
42
+ spec.add_dependency 'thor', '~> 0.19'
43
+ spec.add_dependency 'CFPropertyList', '~> 2.3'
44
+ spec.add_dependency 'rest-client', '~> 1.7'
45
+ spec.add_dependency 'ruby_android', '~> 0.7'
48
46
  end
data/lib/fir/api.yml CHANGED
@@ -1,11 +1,11 @@
1
1
  fir:
2
- domain: 'http://fir.im'
3
- base_url: 'http://api.fir.im'
4
- user_url: 'http://api.fir.im/user'
5
- app_url: 'http://api.fir.im/apps'
2
+ domain: 'http://fir.im'
3
+ base_url: 'http://api.fir.im'
4
+ user_url: 'http://api.fir.im/user'
5
+ app_url: 'http://api.fir.im/apps'
6
6
  udids_url: 'http://api.fir.im/devices/multi_udid'
7
7
  bughd:
8
- domain: 'http://bughd.com'
9
- base_url: 'http://api.bughd.com'
10
- project_url: 'http://api.bughd.com/projects'
8
+ domain: 'http://bughd.com'
9
+ base_url: 'http://api.bughd.com'
10
+ project_url: 'http://api.bughd.com/projects'
11
11
  full_version_url: 'http://api.bughd.com/full_versions'
data/lib/fir/cli.rb CHANGED
@@ -2,16 +2,16 @@
2
2
 
3
3
  module FIR
4
4
  class CLI < Thor
5
- class_option :token, type: :string, aliases: "-T", desc: "User's API Token at FIR.im"
6
- class_option :logfile, type: :string, aliases: "-L", desc: "Path to writable logfile"
7
- class_option :verbose, type: :boolean, aliases: "-V", desc: "Show verbose", default: true
8
- class_option :quiet, type: :boolean, aliases: "-q", desc: "Silence commands"
9
- class_option :help, type: :boolean, aliases: "-h", desc: "Show this help message and quit"
5
+ class_option :token, type: :string, aliases: '-T', desc: "User's API Token at fir.im"
6
+ class_option :logfile, type: :string, aliases: '-L', desc: 'Path to writable logfile'
7
+ class_option :verbose, type: :boolean, aliases: '-V', desc: 'Show verbose', default: true
8
+ class_option :quiet, type: :boolean, aliases: '-q', desc: 'Silence commands'
9
+ class_option :help, type: :boolean, aliases: '-h', desc: 'Show this help message and quit'
10
10
 
11
- desc "build_ipa BUILD_DIR [options] [settings]", "Build iOS app (alias: 'bi')."
11
+ desc 'build_ipa BUILD_DIR [options] [settings]', 'Build iOS app (alias: `bi`).'
12
12
  long_desc <<-LONGDESC
13
13
  `build_ipa` command will auto build your project/workspace to an ipa package
14
- and it also can auto publish your built ipa to FIR.im if use `-p` option.
14
+ and it also can auto publish your built ipa to fir.im if use `-p` option.
15
15
  Internally, it use `xcodebuild` to accomplish these things, use `man xcodebuild` to get more information.
16
16
 
17
17
  Example:
@@ -22,57 +22,57 @@ module FIR
22
22
 
23
23
  $ fir bi <workspace dir> -w -S <scheme name> [-C <configuration>] [-t <target name>] [-o <ipa output dir>] [settings] [-c <changelog>] [-p -T <your api token>]
24
24
  LONGDESC
25
- map ["b", "bi"] => :build_ipa
26
- method_option :workspace, type: :boolean, aliases: "-w", desc: "true/false if build workspace"
27
- method_option :scheme, type: :string, aliases: "-S", desc: "Set the scheme NAME if build workspace"
28
- method_option :configuration, type: :string, aliases: "-C", desc: "Use the build configuration NAME for building each target"
29
- method_option :target, type: :string, aliases: "-t", desc: "Build the target specified by targetname"
30
- method_option :output, type: :string, aliases: "-o", desc: "IPA output path, the default is: BUILD_DIR/fir_build_ipa"
31
- method_option :name, type: :string, aliases: "-n", desc: "IPA name, the default is: YOUR PROJECT NAME"
32
- method_option :publish, type: :boolean, aliases: "-p", desc: "true/false if publish to FIR.im"
33
- method_option :short, type: :string, aliases: "-s", desc: "Set custom short link if publish to FIR.im"
34
- method_option :changelog, type: :string, aliases: "-c", desc: "Set changelog if publish to FIR.im"
35
- method_option :mapping, type: :boolean, aliases: "-M", desc: "true/false if upload app's mapping file to BugHD.com"
36
- method_option :proj, type: :string, aliases: "-P", desc: "Project id in BugHD.com if upload app's mapping file"
37
- def build_ipa *args
25
+ map ['b', 'bi'] => :build_ipa
26
+ method_option :workspace, type: :boolean, aliases: '-w', desc: 'true/false if build workspace'
27
+ method_option :scheme, type: :string, aliases: '-S', desc: 'Set the scheme NAME if build workspace'
28
+ method_option :configuration, type: :string, aliases: '-C', desc: 'Use the build configuration NAME for building each target'
29
+ method_option :target, type: :string, aliases: '-t', desc: 'Build the target specified by targetname'
30
+ method_option :output, type: :string, aliases: '-o', desc: 'IPA output path, the default is: BUILD_DIR/fir_build_ipa'
31
+ method_option :name, type: :string, aliases: '-n', desc: 'IPA name, the default is: YOUR PROJECT NAME'
32
+ method_option :publish, type: :boolean, aliases: '-p', desc: 'true/false if publish to fir.im'
33
+ method_option :short, type: :string, aliases: '-s', desc: 'Set custom short link if publish to fir.im'
34
+ method_option :changelog, type: :string, aliases: '-c', desc: 'Set changelog if publish to fir.im'
35
+ method_option :mapping, type: :boolean, aliases: '-M', desc: 'true/false if upload app mapping file to BugHD.com'
36
+ method_option :proj, type: :string, aliases: '-P', desc: 'Project id in BugHD.com if upload app mapping file'
37
+ def build_ipa(*args)
38
38
  prepare :build_ipa
39
39
 
40
40
  FIR.build_ipa(*args, options)
41
41
  end
42
42
 
43
- desc "build_apk BUILD_DIR", "Build Android app (alias: 'ba')."
43
+ desc 'build_apk BUILD_DIR', 'Build Android app (alias: `ba`).'
44
44
  long_desc <<-LONGDESC
45
45
  `build_apk` command will auto build your project to an apk package
46
- and it also can auto publish your built apk to FIR.im if use `-p` option.
46
+ and it also can auto publish your built apk to fir.im if use `-p` option.
47
47
  Internally, it use `gradle` to accomplish these things, use `gradle --help` to get more information.
48
48
 
49
49
  Example:
50
50
 
51
51
  $ fir ba <project dir> [-o <apk output dir> -c <changelog> -p -T <your api token>]
52
52
  LONGDESC
53
- map ["ba"] => :build_apk
54
- method_option :output, type: :string, aliases: "-o", desc: "APK output path, the default is: BUILD_DIR/build/outputs/apk"
55
- method_option :publish, type: :boolean, aliases: "-p", desc: "true/false if publish to FIR.im"
56
- method_option :short, type: :string, aliases: "-s", desc: "Set custom short link if publish to FIR.im"
57
- method_option :changelog, type: :string, aliases: "-c", desc: "Set changelog if publish to FIR.im"
58
- def build_apk *args
53
+ map ['ba'] => :build_apk
54
+ method_option :output, type: :string, aliases: '-o', desc: 'APK output path, the default is: BUILD_DIR/build/outputs/apk'
55
+ method_option :publish, type: :boolean, aliases: '-p', desc: 'true/false if publish to fir.im'
56
+ method_option :short, type: :string, aliases: '-s', desc: 'Set custom short link if publish to fir.im'
57
+ method_option :changelog, type: :string, aliases: '-c', desc: 'Set changelog if publish to fir.im'
58
+ def build_apk(*args)
59
59
  prepare :build_apk
60
60
 
61
61
  FIR.build_apk(*args, options)
62
62
  end
63
63
 
64
- desc "info APP_FILE_PATH", "Show iOS/Android app's info, support ipa/apk file (aliases: 'i')."
65
- map "i" => :info
66
- method_option :all, type: :boolean, aliases: "-a", desc: "Show all information in application"
67
- def info *args
64
+ desc 'info APP_FILE_PATH', 'Show iOS/Android app info, support ipa/apk file (aliases: `i`).'
65
+ map 'i' => :info
66
+ method_option :all, type: :boolean, aliases: '-a', desc: 'Show all information in application'
67
+ def info(*args)
68
68
  prepare :info
69
69
 
70
70
  FIR.info(*args, options)
71
71
  end
72
72
 
73
- desc "publish APP_FILE_PATH", "Publish iOS/Android app to FIR.im, support ipa/apk file (aliases: 'p')."
73
+ desc 'publish APP_FILE_PATH', 'Publish iOS/Android app to fir.im, support ipa/apk file (aliases: `p`).'
74
74
  long_desc <<-LONGDESC
75
- `publish` command will publish your app file to FIR.im, also the command support to publish app's short & changelog.
75
+ `publish` command will publish your app file to fir.im, also the command support to publish app's short & changelog.
76
76
 
77
77
  Example:
78
78
 
@@ -80,34 +80,34 @@ module FIR
80
80
 
81
81
  $ fir p <app file path> [-c <changelog> -s <custom short link> -m <mapping file path> -P <bughd project id> -T <your api token>]
82
82
  LONGDESC
83
- map "p" => :publish
84
- method_option :short, type: :string, aliases: "-s", desc: "Set custom short link"
85
- method_option :changelog, type: :string, aliases: "-c", desc: "Set changelog"
86
- method_option :mappingfile, type: :string, aliases: "-m", desc: "App's mapping file"
87
- method_option :proj, type: :string, aliases: "-P", desc: "Project id in BugHD.com if upload app's mapping file"
88
- def publish *args
83
+ map 'p' => :publish
84
+ method_option :short, type: :string, aliases: '-s', desc: 'Set custom short link'
85
+ method_option :changelog, type: :string, aliases: '-c', desc: 'Set changelog'
86
+ method_option :mappingfile, type: :string, aliases: '-m', desc: 'App mapping file'
87
+ method_option :proj, type: :string, aliases: '-P', desc: 'Project id in BugHD.com if upload app mapping file'
88
+ def publish(*args)
89
89
  prepare :publish
90
90
 
91
91
  FIR.publish(*args, options)
92
92
  end
93
93
 
94
- desc "login", "Login FIR.im (aliases: 'l')."
95
- map "l" => :login
96
- def login *args
94
+ desc 'login', 'Login fir.im (aliases: `l`).'
95
+ map 'l' => :login
96
+ def login(*args)
97
97
  prepare :login
98
98
 
99
- token = options[:token] || args.first || ask("Please enter your FIR.im API Token:", :white, echo: true)
99
+ token = options[:token] || args.first || ask('Please enter your fir.im API Token:', :white, echo: true)
100
100
  FIR.login(token)
101
101
  end
102
102
 
103
- desc "me", "Show current user info if user is logined."
104
- def me *args
103
+ desc 'me', 'Show current user info if user is logined.'
104
+ def me
105
105
  prepare :me
106
106
 
107
107
  FIR.me
108
108
  end
109
109
 
110
- desc "mapping MAPPING_FILE_PATH", "Upload app's mapping file to BugHD.com (aliases: 'm')."
110
+ desc 'mapping MAPPING_FILE_PATH', 'Upload app mapping file to BugHD.com (aliases: `m`).'
111
111
  long_desc <<-LONGDESC
112
112
  `mapping` command will upload your app's mapping file to BugHD.com if you have the same app/project in BugHD.com.
113
113
 
@@ -115,39 +115,39 @@ module FIR
115
115
 
116
116
  $ fir m <mapping file path> -P <bughd project id> -v <app version> -b <app build> -T <your fir api token>
117
117
  LONGDESC
118
- map "m" => :mapping
119
- method_option :proj, type: :string, aliases: "-P", desc: "Project id in BugHD.com"
120
- method_option :version, type: :string, aliases: "-v", desc: "App version"
121
- method_option :build, type: :string, aliases: "-b", desc: "App build"
122
- def mapping *args
118
+ map 'm' => :mapping
119
+ method_option :proj, type: :string, aliases: '-P', desc: 'Project id in BugHD.com'
120
+ method_option :version, type: :string, aliases: '-v', desc: 'App version'
121
+ method_option :build, type: :string, aliases: '-b', desc: 'App build'
122
+ def mapping(*args)
123
123
  prepare :mapping
124
124
 
125
125
  FIR.mapping(*args, options)
126
126
  end
127
127
 
128
- desc "upgrade", "Upgrade FIR-CLI and quit (aliases: u)."
129
- map "u" => :upgrade
128
+ desc 'upgrade', 'Upgrade fir-cli and quit (aliases: `u`).'
129
+ map 'u' => :upgrade
130
130
  def upgrade
131
131
  prepare :upgrade
132
132
 
133
- say "✈ Upgrade FIR-CLI (use `gem install fir-cli --no-ri --no-rdoc`)"
133
+ say '✈ Upgrade fir-cli (use `gem install fir-cli --no-ri --no-rdoc`)'
134
134
  say `gem install fir-cli --no-ri --no-rdoc`
135
135
  end
136
136
 
137
- desc "version", "Show FIR-CLI version number and quit (aliases: v)"
138
- map ["v", "-v", "--version"] => :version
137
+ desc 'version', 'Show fir-cli version number and quit (aliases: `v`).'
138
+ map ['v', '-v', '--version'] => :version
139
139
  def version
140
- say "FIR-CLI #{FIR::VERSION}"
140
+ say 'fir-cli #{FIR::VERSION}'
141
141
  end
142
142
 
143
- desc "help", "Describe available commands or one specific command."
143
+ desc 'help', 'Describe available commands or one specific command (aliases: `h`).'
144
144
  map Thor::HELP_MAPPINGS => :help
145
- def help command = nil, subcommand = false
145
+ def help(command = nil, subcommand = false)
146
146
  super
147
147
  end
148
148
 
149
149
  no_commands do
150
- def invoke_command command, *args
150
+ def invoke_command(command, *args)
151
151
  logfile = options[:logfile].blank? ? STDOUT : options[:logfile]
152
152
  logfile = '/dev/null' if options[:quiet]
153
153
 
@@ -159,13 +159,12 @@ module FIR
159
159
 
160
160
  private
161
161
 
162
- def prepare task
163
- if options.help?
164
- help(task.to_s)
165
- raise SystemExit
166
- end
167
- $DEBUG = true if ENV["DEBUG"]
162
+ def prepare(task)
163
+ if options.help?
164
+ help(task.to_s)
165
+ fail SystemExit
168
166
  end
169
-
167
+ $DEBUG = true if ENV['DEBUG']
168
+ end
170
169
  end
171
170
  end
@@ -125,7 +125,7 @@ module ActiveSupport
125
125
 
126
126
  def included(base = nil, &block)
127
127
  if base.nil?
128
- raise MultipleIncludedBlocks if instance_variable_defined?(:@_included_block)
128
+ fail MultipleIncludedBlocks if instance_variable_defined?(:@_included_block)
129
129
 
130
130
  @_included_block = block
131
131
  else
@@ -134,9 +134,11 @@ module ActiveSupport
134
134
  end
135
135
 
136
136
  def class_methods(&class_methods_module_definition)
137
- mod = const_defined?(:ClassMethods, false) ?
138
- const_get(:ClassMethods) :
139
- const_set(:ClassMethods, Module.new)
137
+ if const_defined?(:ClassMethods, false)
138
+ mod = const_get(:ClassMethods)
139
+ else
140
+ mod = const_set(:ClassMethods, Module.new)
141
+ end
140
142
 
141
143
  mod.module_eval(&class_methods_module_definition)
142
144
  end
@@ -1,7 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  class Object
4
- # activesupport/lib/active_support/core_ext/object/blank.rb
5
4
  # An object is blank if it's false, empty, or a whitespace string.
6
5
  # For example, '', ' ', +nil+, [], and {} are all blank.
7
6
  #
@@ -15,7 +14,7 @@ class Object
15
14
  #
16
15
  # @return [true, false]
17
16
  def blank?
18
- respond_to?(:empty?) ? !!empty? : !self
17
+ respond_to?(:empty?) ? empty? : !self
19
18
  end
20
19
 
21
20
  # An object is present if it's not blank.
@@ -155,7 +154,7 @@ class Hash
155
154
  # hash.symbolize_keys
156
155
  # # => {:name=>"Rob", :age=>"28"}
157
156
  def symbolize_keys
158
- transform_keys{ |key| key.to_sym rescue key }
157
+ transform_keys { |key| key.to_sym rescue key }
159
158
  end
160
159
 
161
160
  # Returns a new hash with all keys converted by the block operation.
@@ -179,10 +178,11 @@ class Hash
179
178
  # hash.deep_symbolize_keys
180
179
  # # => {:person=>{:name=>"Rob", :age=>"28"}}
181
180
  def deep_symbolize_keys
182
- deep_transform_keys{ |key| key.to_sym rescue key }
181
+ deep_transform_keys { |key| key.to_sym rescue key }
183
182
  end
184
183
 
185
184
  private
185
+
186
186
  # support methods for deep transforming nested hashes and arrays
187
187
  def _deep_transform_keys_in_object(object, &block)
188
188
  case object
@@ -191,7 +191,7 @@ class Hash
191
191
  result[yield(key)] = _deep_transform_keys_in_object(value, &block)
192
192
  end
193
193
  when Array
194
- object.map {|e| _deep_transform_keys_in_object(e, &block) }
194
+ object.map { |e| _deep_transform_keys_in_object(e, &block) }
195
195
  else
196
196
  object
197
197
  end
@@ -199,30 +199,28 @@ class Hash
199
199
  end
200
200
 
201
201
  class File
202
-
203
202
  class << self
204
203
  # A binary file is Mach-O dSYM
205
204
  #
206
205
  # @return [true, false]
207
- def is_dsym? file_path
208
- !!(`file -b #{file_path}` =~ /dSYM/)
206
+ def dsym?(file_path)
207
+ !(`file -b #{file_path}` =~ /dSYM/).nil?
209
208
  end
210
209
 
211
210
  # A file is ASCII text
212
211
  #
213
212
  # @return [true, false]
214
- def is_txt? file_path
215
- !!(`file -b #{file_path}` =~ /text/)
213
+ def text?(file_path)
214
+ !(`file -b #{file_path}` =~ /text/).nil?
216
215
  end
217
216
  end
218
217
  end
219
218
 
220
219
  class String
221
-
222
220
  # Convert String encoding to UTF-8
223
221
  #
224
222
  # @return string
225
223
  def to_utf8
226
- self.encode(Encoding.find('UTF-8'), invalid: :replace, undef: :replace, replace: '')
224
+ encode(Encoding.find('UTF-8'), invalid: :replace, undef: :replace, replace: '')
227
225
  end
228
226
  end