sah 0.0.11 → 0.0.12

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: f4ce5e276d4ed9cf5530715653dcd53ebfb3d85a
4
- data.tar.gz: cbde0a3c90358917d784c1c21809c8c8f8d7290b
3
+ metadata.gz: 393a7e6d9875efdaee240fb172dc5dc599093bb2
4
+ data.tar.gz: 26d09b3e0890833aea94d1663e4c7e5c67e14767
5
5
  SHA512:
6
- metadata.gz: 6f8a902d17c4f785a5edc0b8c73f962d325efbe2e6c303bf2796d8111b24f0925f86b8f84954e6a8c5cfc9f16b071e0569d5a3a205e374706d79bd09587b6e86
7
- data.tar.gz: b1c0c66496e0232d7d4d0fda0ecf910a523df626020f76fbfc29e01d72d1e5d93cb4baf191bf8ffa3c00b3196cd495ea767f3bd948ebd2db92b9b1ba285352f7
6
+ metadata.gz: d9fbc09cb692d722a82a067a2fb2376e0e3b1aae0e0e2478314326dcfe8417e6c79a694128ebc3fc94e05e3f1de7931b1ec2d5f33c76759310575e75e62c872a
7
+ data.tar.gz: 4ecaa80f5c5bbc32ab86c5cf3ac5105ebd6ac5221c63ebfeb8a0f6e8659a2808f9b722fd3c44fd5964b4cdf591e4ee4fec7c71db32b5a6ccd36d9d6dcf61a8e6
data/README.md CHANGED
@@ -10,6 +10,9 @@ This project was heavily inspired by the [hub](https://hub.github.com/).
10
10
 
11
11
  ## Configuration
12
12
 
13
+
14
+ ### profile
15
+
13
16
  git config [--global] sah.profile.default.user "f440"
14
17
  git config [--global] sah.profile.default.password "freq440@gmail.com"
15
18
  git config [--global] sah.profile.default.url "https://exmaple.com"
@@ -25,6 +28,16 @@ If you use multiple Bitbucket Server, define profile(s) and specify it.
25
28
  export SAH_DEFAULT_PROFILE=my_company
26
29
  sah SUB_COMMAND
27
30
 
31
+ ### format
32
+
33
+ The formatting output can use either table(default) or json.
34
+
35
+ sah SUB_COMMAND --format json
36
+ or
37
+ export SAH_DEFAULT_FORMAT=json
38
+ sah SUB_COMMAND
39
+
40
+
28
41
  ## Usage
29
42
 
30
43
  ### browse
data/lib/sah/cli.rb CHANGED
@@ -2,8 +2,6 @@ require "sah"
2
2
  require "open3"
3
3
  require "tempfile"
4
4
  require "thor"
5
- require "hirb"
6
- require "hirb-unicode"
7
5
  require "launchy"
8
6
 
9
7
  module Sah
@@ -14,6 +12,9 @@ module Sah
14
12
  class_option :verbose,
15
13
  type: :boolean, default: false,
16
14
  desc: "Turn on/off verbose mode"
15
+ class_option :format,
16
+ type: :string, default: (ENV["SAH_DEFAULT_FORMAT"] || "table"),
17
+ desc: "Set output format"
17
18
 
18
19
  desc "browse [REPO]", "Browse repository"
19
20
  long_desc <<-LONG_DESCRIPTION
@@ -203,14 +204,14 @@ module Sah
203
204
  abort res.body["errors"].first["message"]
204
205
  end
205
206
  project = res.body
206
- puts Hirb::Helpers::AutoTable.render(project, headers: false)
207
+ puts formatter.render(project, headers: false)
207
208
  else
208
209
  res = api.list_project
209
210
  if res.body.key? "errors"
210
211
  abort res.body["errors"].first["message"]
211
212
  end
212
213
  projects = res.body["values"].sort_by{|e| e["id"].to_i }
213
- puts Hirb::Helpers::AutoTable.render(projects, fields: %w(id key name description))
214
+ puts formatter.render(projects, fields: %w(id key name description))
214
215
  end
215
216
  end
216
217
 
@@ -310,14 +311,14 @@ module Sah
310
311
  abort res.body["errors"].first["message"]
311
312
  end
312
313
  repository = res.body
313
- puts Hirb::Helpers::AutoTable.render(repository, headers: false)
314
+ puts formatter.render(repository, headers: false)
314
315
  else
315
316
  res = api.list_repository(project_key)
316
317
  if res.body.key? "errors"
317
318
  abort res.body["errors"].first["message"]
318
319
  end
319
320
  repositories = (res.body["values"] || []).sort_by{|e| e["id"].to_i }
320
- puts Hirb::Helpers::AutoTable.render(repositories, fields: %w(id slug name))
321
+ puts formatter.render(repositories, fields: %w(id slug name))
321
322
  end
322
323
  end
323
324
 
@@ -369,14 +370,14 @@ module Sah
369
370
  abort res.body["errors"].first["message"]
370
371
  end
371
372
  user = res.body
372
- puts Hirb::Helpers::AutoTable.render(user, headers: false)
373
+ puts formatter.render(user, headers: false)
373
374
  else
374
375
  res = api.list_user
375
376
  if res.body.key? "errors"
376
377
  abort res.body["errors"].first["message"]
377
378
  end
378
379
  users = (res.body["values"] || []).sort_by{|e| e["id"].to_i }
379
- puts Hirb::Helpers::AutoTable.render(users, fields: %w(id slug name displayName))
380
+ puts formatter.render(users, fields: %w(id slug name displayName))
380
381
  end
381
382
  end
382
383
 
@@ -388,13 +389,19 @@ module Sah
388
389
  private
389
390
 
390
391
  def config
391
- @config ||= Config.new(options[:profile], verbose: options[:verbose])
392
+ @config ||= Config.new(options[:profile],
393
+ verbose: options[:verbose],
394
+ format: options[:format])
392
395
  end
393
396
 
394
397
  def api
395
398
  @api ||= API.new(config)
396
399
  end
397
400
 
401
+ def formatter
402
+ @formatter ||= Formatter.new(format: options[:format])
403
+ end
404
+
398
405
  def open_editor
399
406
  tmp = Tempfile.new('sah')
400
407
  editor = ENV['GIT_EDITOR'] || ENV['EDITOR'] || 'vi'
data/lib/sah/config.rb CHANGED
@@ -5,14 +5,15 @@ module Sah
5
5
  attr_accessor :user, :password, :url,
6
6
  :upstream_fetch_pull_request, :upstream_prevent_push,
7
7
  :upstream_remote_name,
8
- :protocol, :verbose
8
+ :protocol, :format, :verbose
9
9
 
10
- def initialize(profile, verbose: false)
10
+ def initialize(profile, verbose: false, format: :table)
11
11
  @user, @password, @url = nil, nil, nil
12
12
  @upstream_fetch_pull_request = false
13
13
  @upstream_prevent_push = false
14
14
  @upstream_remote_name = "upstream"
15
15
  @protocol = "ssh"
16
+ @format = format
16
17
  @verbose = verbose
17
18
 
18
19
  profile_prefix = "sah\.profile\.#{profile}"
@@ -43,6 +44,9 @@ module Sah
43
44
  unless ["ssh", "http"].include? @protocol
44
45
  abort "protocol must be set to ssh or http: #{@protocol}"
45
46
  end
47
+ unless ["json", "table"].include? @format
48
+ abort "format must be set to json or table: #{@format}"
49
+ end
46
50
  end
47
51
  end
48
52
  end
@@ -0,0 +1,38 @@
1
+ require "hirb"
2
+ require "hirb-unicode"
3
+
4
+ module Sah
5
+ class Formatter
6
+ def initialize(format: "table")
7
+ @format = case format
8
+ when "table"
9
+ Format::Hirb
10
+ when "json"
11
+ Format::Json
12
+ else
13
+ abort "format must be set to json or table: #{format}"
14
+ end
15
+ end
16
+
17
+ def render(*args)
18
+ @format.render(*args)
19
+ end
20
+
21
+ module Format
22
+ class Hirb < Hirb::Helpers::AutoTable
23
+ end
24
+
25
+ class Json
26
+ def self.render(objects, fields: [], headers: :_)
27
+ if fields.empty?
28
+ objects.to_json
29
+ else
30
+ objects.map do |object|
31
+ object.select{ |k, v| fields.nil? || fields.include?(k) }
32
+ end.to_json
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/sah/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sah
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
data/lib/sah.rb CHANGED
@@ -2,5 +2,6 @@ require "sah/version"
2
2
  require "sah/api"
3
3
  require "sah/cli"
4
4
  require "sah/config"
5
+ require "sah/formatter"
5
6
 
6
7
  module Sah; end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - f440
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-07 00:00:00.000000000 Z
11
+ date: 2016-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -185,6 +185,7 @@ files:
185
185
  - lib/sah/api.rb
186
186
  - lib/sah/cli.rb
187
187
  - lib/sah/config.rb
188
+ - lib/sah/formatter.rb
188
189
  - lib/sah/version.rb
189
190
  - misc/zsh-completion/_sah
190
191
  - sah.gemspec
@@ -208,7 +209,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
209
  version: '0'
209
210
  requirements: []
210
211
  rubyforge_project:
211
- rubygems_version: 2.4.5.1
212
+ rubygems_version: 2.5.1
212
213
  signing_key:
213
214
  specification_version: 4
214
215
  summary: Command line util for Atlassian Bitbucket Server