yacli 0.1.8 → 0.2.0

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDI1MTYxMTU4ZTVhOTU4MzE4MGY4ZGJhYjI2OGVmNWNlNmNhMGZmZQ==
4
+ YTZlNzk5YzU1Y2FiNDk5NzNkMjllMzkyNDE2NmYzYjY2NDhhZTQ1Yw==
5
5
  data.tar.gz: !binary |-
6
- MzQwZDllOTljMDVhZmE3ZGEzZjk5MzIwZTIwYzA5YmQ3MjRmZDc4YQ==
6
+ ZjMwY2NhMWFmNmNkYTI4NDcxNTE4MTg3YWE0OWQ2OWUyZDJlNDMyMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDc4ODNmNjQ4NTlhZjk1NjQyMjU1Mjg1ZGFhZDJmMjhjODA4MzMxNDZmZjU5
10
- YTQ3YzE2YTczNDczNjljOTJiYTU1MjIwOGQ5N2RlMDVlZTY4MjQwNTM3YTNj
11
- MWQwYTExNGFkMTk3NTIwMTRlM2VhNGIxMTFkOTUwMDAxZWQ2OGE=
9
+ MjMxZDI4NGUwYWU5N2QxZDNkN2JlOTc1NmQ4NjUxMzU3MDZjNzQwMzZhZDE2
10
+ NmU4ODE3NDZmNmQ1ZWZjYzBlMTc3NDJlMGZlNGMzYzZjOGUyNzk3YzVkMzBl
11
+ MmQ0MzljZjEwMmIzN2JhYzZkYWY4YTUzOWRlMDA2ZWQ5ZTAxMTk=
12
12
  data.tar.gz: !binary |-
13
- YmZlZjVjMTBmOGE5ZGNkMjQ3MjA4OWJlY2NlMDNlNDI5ZDg2YThmZmQ1ODgz
14
- MjRiMDMwMGU1YWMyNTllMzQyMDllYWI1MjAwYjZmN2VkODhkZGI0MzhhNzFm
15
- NjRhMTYxZTg5ZTYwNjFiMDA1YzM3ZjFmMWQ1YjNmZDRlM2M0OTg=
13
+ YzU0NGQzZWY1NThkMWFhMGI0YjZhZTI1YWRmM2NmYjM0YjZkZTNjNzQ5MTRh
14
+ MGU5M2I0M2Y0NmZiZWU1ZDFjZWMxMTBlYjQ5OWIzNjc5YTIxYzgwZDBhZDRm
15
+ MmMxNzk2NmVkZDY3NzcxNTkyMmNhNzlhMjA0OTkzOWMzMWNmODc=
data/.rubocop.yml ADDED
@@ -0,0 +1,38 @@
1
+ Style/MutableConstant:
2
+ Enabled: false
3
+
4
+ Documentation:
5
+ Enabled: false
6
+
7
+ Metrics/LineLength:
8
+ Max: 225
9
+
10
+ Metrics/MethodLength:
11
+ Max: 100
12
+
13
+ Metrics/AbcSize:
14
+ Max: 50
15
+
16
+ SpecialGlobalVars:
17
+ Enabled: false
18
+
19
+ Style/AlignHash:
20
+ EnforcedHashRocketStyle: table
21
+ EnforcedColonStyle: table
22
+
23
+ Style/TrailingCommaInLiteral:
24
+ Enabled: true
25
+ EnforcedStyleForMultiline: comma
26
+
27
+ AllCops:
28
+ TargetRubyVersion: 2.2
29
+ UseCache: true
30
+ Include:
31
+ - '**/Gemfile*'
32
+ - '**/Rakefile*'
33
+ - '**/*.rake'
34
+ - '**/*.rb'
35
+ Exclude:
36
+ - 'gems/**/*'
37
+ - '**/*.lock'
38
+ - '**/gems/**/*'
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in yacli.gemspec
4
- gemspec
4
+ gemspec
data/README.md CHANGED
@@ -3,11 +3,12 @@ yacli
3
3
  [![Gem Version](http://img.shields.io/gem/v/yacli.svg)][gem]
4
4
  [![Build Status](http://img.shields.io/travis/rombob/yacli.svg)][travis]
5
5
  [![Coverage Status](https://img.shields.io/coveralls/rombob/yacli.svg)][coveralls]
6
+ [![Codacy Badge](https://api.codacy.com/project/badge/grade/dc6b761f73aa423ba610746d19f8597c)][codacy]
6
7
 
7
8
  [gem]: https://rubygems.org/gems/yacli
8
9
  [travis]: http://travis-ci.org/rombob/yacli
9
10
  [coveralls]: https://coveralls.io/r/rombob/yacli
10
-
11
+ [codacy]: https://www.codacy.com/app/github_50/yacli
11
12
 
12
13
  Prerequisites
13
14
  -------------
data/Rakefile CHANGED
@@ -1,8 +1,19 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
2
3
 
3
- task :default => [:spec]
4
+ task default: [:spec]
4
5
  desc 'run Rspec specs'
5
6
  task :spec do
6
7
  sh 'rspec spec'
7
8
  end
8
9
 
10
+ desc 'Run Rspec spec with reports'
11
+ task :spec_report do
12
+ sh 'rspec spec --format RspecJunitFormatter --out spec/reports/rspec.xml'
13
+ end
14
+
15
+ desc 'Run RuboCop on the lib directory'
16
+ RuboCop::RakeTask.new(:rubocop) do |task|
17
+ task.formatters = [%w(files offenses)]
18
+ task.fail_on_error = false
19
+ end
data/bin/yacli CHANGED
@@ -1,4 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'bundler/setup'
2
3
 
4
+ puts "INFO: Running using ruby version: #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
5
+
6
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
3
7
  require 'yacli/cli'
4
- Yacli::Run.go
8
+ begin
9
+ result = Yacli::Cli.start
10
+ puts "result: #{result}"
11
+ rescue StandardError => e
12
+ puts "ERROR: #{e}"
13
+ puts "ERROR: #{e.backtrace.join("\n")}"
14
+
15
+ exit 1
16
+ end
17
+
18
+ exit result == 0 ? 0 : 1
data/lib/yacli/base.rb CHANGED
@@ -1,21 +1,47 @@
1
1
  require 'logger'
2
2
  require 'socket'
3
+ require 'open3'
4
+
5
+ module ToBoolean
6
+ def to_bool
7
+ return true if self == true || to_s.strip =~ /^(true|yes|y|1)$/i
8
+ false
9
+ end
10
+ end
11
+
12
+ class NilClass; include ToBoolean; end
13
+ class TrueClass; include ToBoolean; end
14
+ class FalseClass; include ToBoolean; end
15
+ class Numeric; include ToBoolean; end
16
+ class String; include ToBoolean; end
3
17
 
4
18
  module Yacli
5
19
  class Base
6
20
  def init_logger(log_path = nil)
7
21
  output_file = log_path.nil? ? STDOUT : log_path
8
22
  logger = Logger.new(output_file)
9
- logger.level = (!ENV['DEBUG'].nil?) ? Logger::DEBUG : Logger::INFO
23
+ logger.level = !ENV['DEBUG'].nil? ? Logger::DEBUG : Logger::INFO
10
24
  logger.debug "logger.level: #{logger.level}"
11
25
  logger
12
26
  end
13
-
14
- def error_exit(msg, exit_code = 1)
27
+
28
+ def initialize(opt = {})
29
+ @opt = opt
30
+ @log = init_logger
31
+ @log.debug "@opt: #{@opt.inspect}"
32
+ end
33
+
34
+ def error_exit(msg)
15
35
  @log.error msg
16
36
  raise ExecutionError
17
37
  end
18
-
38
+
39
+ def init_opt(key, opt, default = '')
40
+ val = opt[key] || default
41
+ @log.debug "#{key}: #{val}"
42
+ val
43
+ end
44
+
19
45
  def pass_cli(cmd, valid_out_pattern = nil)
20
46
  cmd += ' 2>&1'
21
47
  @log.debug "running cmd: #{cmd}"
@@ -23,13 +49,50 @@ module Yacli
23
49
  success_exec = $?.success?
24
50
  @log.info "cmd_out: #{cmd_out}"
25
51
  @log.debug "success_exec: #{success_exec}"
26
-
52
+
27
53
  valid_content = valid_out_pattern.nil? ? true : !cmd_out.match(/#{valid_out_pattern}/).nil?
28
54
  @log.debug "valid_content: #{valid_content}"
29
-
30
- raise InvalidExitCodeError.new(cmd_out) if !success_exec
31
- raise InvalidContentError.new(cmd_out) if !valid_content
32
- { :success => success_exec, :output => cmd_out }
55
+
56
+ raise InvalidExitCodeError, cmd_out unless success_exec
57
+ raise InvalidContentError, cmd_out unless valid_content
58
+ { success: success_exec, output: cmd_out }
59
+ end
60
+
61
+ def cli(opts = {})
62
+ cmd = init_opt(:cmd, opts, '')
63
+ valid_out_pattern = init_opt(:valid_out_pattern, opts, nil)
64
+ reverse_match = init_opt(:reverse_match, opts, false)
65
+ hide_output = init_opt(:hide_output, opts, false).to_bool
66
+ include_stderr = init_opt(:include_stderr, opts, true).to_bool
67
+ cmd += ' 2>&1' if include_stderr
68
+ @log.debug "running cmd: #{cmd}"
69
+
70
+ cmd_out = []
71
+ exit_code = nil
72
+ Open3.popen2(cmd) do |stdin, stdout, thread|
73
+ stdin.close
74
+ while line = stdout.gets
75
+ @log.info ">>> #{line.chomp}" unless hide_output
76
+ cmd_out << line.chomp
77
+ end
78
+
79
+ exit_code = thread.value
80
+ end
81
+ success_exec = exit_code.success?
82
+ cmd_out = cmd_out.join($INPUT_RECORD_SEPARATOR)
83
+ @log.debug "success_exec: #{success_exec.inspect}"
84
+ @log.debug "cmd_out: #{cmd_out.inspect}" unless hide_output
85
+
86
+ @log.debug "reverse_match: #{reverse_match.inspect}"
87
+ output_match = reverse_match ? cmd_out.match(/#{valid_out_pattern}/).nil? : !cmd_out.match(/#{valid_out_pattern}/).nil?
88
+ @log.debug "output_match: #{output_match.inspect}"
89
+ valid_content = valid_out_pattern.nil? ? true : output_match
90
+ @log.debug "valid_content: #{valid_content}"
91
+
92
+ raise InvalidExitCodeError, cmd_out unless success_exec
93
+ raise InvalidContentError, cmd_out unless valid_content
94
+ @log.debug "run result: #{{ success: success_exec, output: cmd_out }}"
95
+ exit_code
33
96
  end
34
97
  end
35
98
  end
data/lib/yacli/cli.rb CHANGED
@@ -1,31 +1,18 @@
1
1
  require 'thor'
2
2
 
3
3
  module Yacli
4
- class Run < Thor
5
-
4
+ class Cli < Thor
6
5
  def self.common_opts
7
- method_option :cmd, :aliases => "-r", :required => true
8
- method_option :'config-path', :aliases => "-c", :required => false
9
- method_option :'log-path', :aliases => "-l", :required => false
10
- method_option :'dry-run', :aliases => "-d", :type => :boolean, :default => false
6
+ method_option :'dry-run', aliases: '-d', type: :boolean, default: false
11
7
  end
12
-
13
- desc "upload", "sync from local to s3"
14
- common_opts
15
- def upload
16
- require 's3rsync/sync'
17
- sync = Sync.new(options)
18
- exit sync.run(:upload)
19
- end
20
-
21
- desc "download", "sync from s3 to local"
8
+
9
+ desc 'cli', 'run cli'
22
10
  common_opts
23
- def download
24
- require 's3rsync/sync'
25
- sync = Sync.new(options)
26
- exit sync.run(:download)
11
+ method_option :cmd, aliases: '-c', default: 'uname'
12
+ def cli
13
+ require 'yacli/base'
14
+ b = Base.new
15
+ b.cli(options)
27
16
  end
28
-
29
17
  end
30
-
31
18
  end
data/lib/yacli/errors.rb CHANGED
@@ -8,7 +8,7 @@ module Yacli
8
8
  end
9
9
  end
10
10
 
11
- alias_method :message, :to_s
11
+ alias message to_s
12
12
  end
13
13
 
14
14
  class ExecutionError < YacliError; status_code(2); end
data/lib/yacli/run.rb CHANGED
@@ -1,16 +1,15 @@
1
- require "yacli"
2
- require "json"
3
- require "erb"
1
+ require 'yacli'
2
+ require 'json'
3
+ require 'erb'
4
4
 
5
5
  module Yacli
6
6
  class Run < Base
7
-
8
7
  def initialize(opt = {})
9
8
  log_path = !opt['log-path'].nil? ? opt['log-path'] : nil
10
9
  @log = init_logger(log_path)
11
10
  @log.debug "opt: #{opt.inspect}"
12
11
  end
13
-
12
+
14
13
  def go(cmd = 'uname -a')
15
14
  @log.debug "cmd: #{cmd}"
16
15
  output = pass_cli cmd
data/lib/yacli/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yacli
2
- VERSION = "0.1.8"
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/yacli.rb CHANGED
@@ -1,8 +1,7 @@
1
- require "yacli/version"
2
- require "yacli/base"
3
- require "yacli/run"
4
- require "yacli/errors"
1
+ require 'yacli/version'
2
+ require 'yacli/base'
3
+ require 'yacli/run'
4
+ require 'yacli/errors'
5
5
 
6
6
  module Yacli
7
-
8
7
  end
data/spec/cli_spec.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'yacli/run'
3
+
4
+ include Helpers
5
+
6
+ describe Yacli::Run do
7
+ context 'run is successfull' do
8
+ let(:opt) do
9
+ {
10
+ 'cmd' => 'date',
11
+ 'dry-run' => false,
12
+ }
13
+ end
14
+ let(:output) { 'Success' }
15
+
16
+ before do
17
+ allow_any_instance_of(Yacli::Run).to receive(:pass_cli).and_return(nil)
18
+ end
19
+
20
+ it 'print date' do
21
+ cmd = 'date'
22
+ allow_any_instance_of(Yacli::Run).to receive(:pass_cli).with(cmd).and_return(output)
23
+ run = Yacli::Run.new(opt)
24
+ expect(run.go(cmd)).to eq output
25
+ end
26
+
27
+ # before do
28
+ # allow_any_instance_of(clazz).to receive(opts[:method]).and_return(true)
29
+ # Hecate::CLI.start
30
+ # end
31
+
32
+ # it "calls #{opts[:method]}" do
33
+ # cli = Hecate::CLI.new
34
+ # expect(cli.cli_cmd(class: opts[:class], method: opts[:method], opt: {})).to eq 0
35
+ # end
36
+ end
37
+ end
data/spec/run_spec.rb CHANGED
@@ -5,36 +5,23 @@ include Helpers
5
5
 
6
6
  describe Yacli::Run do
7
7
  context 'run is successfull' do
8
- let(:opt) {
8
+ let(:opt) do
9
9
  {
10
- 'cmd' => 'date',
11
- 'dry-run' => false,
10
+ 'cmd' => 'date',
11
+ 'dry-run' => false,
12
12
  }
13
- }
13
+ end
14
14
  let(:output) { 'Success' }
15
-
15
+
16
16
  before do
17
17
  allow_any_instance_of(Yacli::Run).to receive(:pass_cli).and_return(nil)
18
18
  end
19
-
20
- after do
21
- #
22
- end
23
-
24
- before(:each) do
25
- #Helpers::pre_run_helper
26
- end
27
-
28
- after(:each) do
29
- # Nothing
30
- end
31
-
32
- it "print date" do
33
- cmd = "date"
19
+
20
+ it 'print date' do
21
+ cmd = 'date'
34
22
  allow_any_instance_of(Yacli::Run).to receive(:pass_cli).with(cmd).and_return(output)
35
23
  run = Yacli::Run.new(opt)
36
24
  expect(run.go(cmd)).to eq output
37
25
  end
38
-
39
26
  end
40
27
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
- require "simplecov"
2
- require "coveralls"
3
- require "yacli"
4
- require "yacli/base"
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+ require 'yacli'
4
+ require 'yacli/base'
5
5
 
6
6
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
7
7
  SimpleCov::Formatter::HTMLFormatter,
@@ -14,5 +14,4 @@ SimpleCov.start do
14
14
  end
15
15
 
16
16
  module Helpers
17
-
18
17
  end
data/yacli.gemspec CHANGED
@@ -20,13 +20,15 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "thor", "0.19.1"
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.5"
23
+ spec.add_development_dependency "rspec_junit_formatter", '0.2.3'
24
+ spec.add_development_dependency "simplecov", "0.10.0"
25
+ spec.add_development_dependency "bundler", "~> 1.7"
26
+ spec.add_development_dependency "rubocop", "0.40.0"
24
27
  spec.add_development_dependency "rake"
25
28
  spec.add_development_dependency "bump"
26
29
  spec.add_development_dependency "rspec", "~> 3.0"
27
- spec.add_development_dependency "simplecov"
28
30
  spec.add_development_dependency "growl"
29
- spec.add_development_dependency "guard"
30
- spec.add_development_dependency "guard-rspec"
31
+ #spec.add_development_dependency "guard", "2.13.0"
32
+ #spec.add_development_dependency "guard-rspec"
31
33
  spec.add_development_dependency "coveralls"
32
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yacli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - rombob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-26 00:00:00.000000000 Z
11
+ date: 2016-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -25,63 +25,63 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.19.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rspec_junit_formatter
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: '1.5'
33
+ version: 0.2.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: '1.5'
40
+ version: 0.2.3
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: simplecov
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 0.10.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 0.10.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: bump
56
+ name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.7'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.7'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
75
+ version: 0.40.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: '3.0'
82
+ version: 0.40.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: simplecov
84
+ name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ! '>='
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: growl
98
+ name: bump
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ! '>='
@@ -109,21 +109,21 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: guard
112
+ name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '3.0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ~>
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '3.0'
125
125
  - !ruby/object:Gem::Dependency
126
- name: guard-rspec
126
+ name: growl
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - ! '>='
@@ -159,6 +159,7 @@ extensions: []
159
159
  extra_rdoc_files: []
160
160
  files:
161
161
  - .gitignore
162
+ - .rubocop.yml
162
163
  - .ruby-version
163
164
  - .travis.yml
164
165
  - Gemfile
@@ -173,6 +174,7 @@ files:
173
174
  - lib/yacli/errors.rb
174
175
  - lib/yacli/run.rb
175
176
  - lib/yacli/version.rb
177
+ - spec/cli_spec.rb
176
178
  - spec/run_spec.rb
177
179
  - spec/spec_helper.rb
178
180
  - yacli.gemspec
@@ -201,5 +203,6 @@ signing_key:
201
203
  specification_version: 4
202
204
  summary: CLI wrapper library tool
203
205
  test_files:
206
+ - spec/cli_spec.rb
204
207
  - spec/run_spec.rb
205
208
  - spec/spec_helper.rb