yacli 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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