chekku 0.0.4 → 0.0.5

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.
data/README.md CHANGED
@@ -3,7 +3,7 @@ The gem that checks your software dependencies
3
3
 
4
4
  ## WARNING
5
5
 
6
- **This gem is in alpha mode! Please use it carefully.**
6
+ **This gem is in early version! Please use it carefully.**
7
7
 
8
8
  ## Installation
9
9
 
@@ -28,14 +28,15 @@ Or install it yourself as:
28
28
 
29
29
  ## Chekkufile
30
30
 
31
- This is the file that contains the dependencies we need to check
31
+ This is the file that contains the dependencies we need to checks.
32
32
 
33
33
  Chekkufile :
34
34
 
35
35
  ```ruby
36
- check 'mysql', '>= 5.0', env: :production
37
- check 'redis'
38
- check 'mongod', '~> 1.0', env: :development, must_run: true
36
+ check 'mysql', must_run: true
37
+ check 'redis'
38
+ check 'postgres', "~> 9.2", must_run: true
39
+ check 'imagemagick', "<= 4"
39
40
  ```
40
41
 
41
42
  ## def.yml
@@ -53,12 +54,11 @@ imagemagick:
53
54
  executable: 'convert'
54
55
  ```
55
56
 
56
- ** I'm currently working on a webapp to define online all the values for this file. So it will be community based. **
57
57
 
58
58
  ## Future
59
59
 
60
- I'll try to have a version that works for checking the version of the dependecy in the near future.
61
- And will add tests to check if the service is running or not.
60
+ **I'm currently working on a webapp to define online all the values for this file. So it will be community based.**
61
+
62
62
 
63
63
  ## Contributing
64
64
 
@@ -1,6 +1,5 @@
1
1
  require 'pathname'
2
- require_relative 'dsl'
3
- require_relative 'definitions_service'
2
+ require_relative 'definitions'
4
3
 
5
4
  class Chekku::Checker < Thor
6
5
  include Thor::Actions
@@ -20,7 +19,7 @@ class Chekku::Checker < Thor
20
19
  private
21
20
 
22
21
  def check_dependencies
23
- Chekku::Dsl.evaluate(@chekkufile)
22
+ Chekku::Definitions.evaluate(@chekkufile)
24
23
  end
25
24
 
26
25
  def verify_chekku_file_existence
@@ -0,0 +1,85 @@
1
+ #encoding: utf-8
2
+ class Chekku::Definition
3
+
4
+ attr_accessor :name, :executable, :version_checker, :errors
5
+
6
+ def self.load(definitions_hash = {})
7
+ [].tap do |definitions|
8
+ definitions_hash.each_pair do |name, hash_definition|
9
+ definitions << self.new(hash_definition.merge(name: name))
10
+ end
11
+ end
12
+ end
13
+
14
+ def initialize(attributes = {})
15
+ attributes.each do |name, value|
16
+ send("#{name}=", value)
17
+ end
18
+ @errors = {}
19
+ end
20
+
21
+ def chekku(version = nil, args = {})
22
+ raise(DefinitionValidationError, "not installed") unless exists?
23
+ validates version, args
24
+ "[\033[32m✓\033[0m] #{name}"
25
+ end
26
+
27
+ def exists?
28
+ verify_executable! && found?
29
+ end
30
+
31
+ def verify_executable!
32
+ raise(AppNameNotStringError, 'You need to use strings for app names') unless executable.is_a?(String)
33
+ raise(AppNameNotSaneError, "Sorry the app name '#{name}' is not sane") unless sane_executable?
34
+ true
35
+ end
36
+
37
+ def found?
38
+ system "which #{executable} > /dev/null 2>&1"
39
+ end
40
+
41
+ def sane_executable?
42
+ executable == sanitized_executable
43
+ end
44
+
45
+ def sanitized_executable
46
+ executable.gsub /&|"|'|;|\s/, ""
47
+ end
48
+
49
+ def validates(version = nil, args = {})
50
+ raise(DefinitionValidationError, "wrong version: wanted #{version}, got #{installed_version}") unless ( !version || check_version(version))
51
+ raise(DefinitionValidationError, "installed but not running (must_run: true)") unless (!args[:must_run] || is_running?)
52
+ true
53
+ end
54
+
55
+ def is_running?
56
+ ps_result = `ps aux | grep #{executable}`
57
+ ps_result_array = ps_result.split("\n")
58
+ ps_result_array.any? do |ps_line|
59
+ ps_line.include?(executable) && (executable == 'grep' || !ps_line.include?('grep'))
60
+ end
61
+ end
62
+
63
+ def check_version(version)
64
+ operator, version = version.split(' ')
65
+ if version.nil?
66
+ version = operator
67
+ operator = '=='
68
+ end
69
+ if operator == '~>'
70
+ installed_version >= Gem::Version.new(version) && installed_version <= Gem::Version.new(version).bump
71
+ else
72
+ installed_version.send(operator, Gem::Version.new(version))
73
+ end
74
+ end
75
+
76
+ def installed_version
77
+ version_matches = `#{executable} --version`.scan(/(\d+[\.\d+]*)/).flatten
78
+ max_dot_number_version = ''
79
+ version_matches.each do |version|
80
+ max_dot_number_version = version if version.count('.') > max_dot_number_version.count('.')
81
+ end
82
+ Gem::Version.new(max_dot_number_version)
83
+ end
84
+
85
+ end
@@ -0,0 +1,46 @@
1
+ #encoding: utf-8
2
+ require_relative 'definition'
3
+ require_relative 'definitions_service'
4
+
5
+ class Chekku::Definitions
6
+
7
+ attr_accessor :definitions_service, :dependency_checker
8
+
9
+ def self.evaluate(file)
10
+ new.eval_chekkufile(file)
11
+ end
12
+
13
+ def initialize
14
+ @definitions_service = Chekku::DefinitionsService.new
15
+ @definitions_service.load_definitions_for @chekkufile
16
+ end
17
+
18
+ def eval_chekkufile(file)
19
+ instance_eval(read_file(file))
20
+ rescue NoMethodError => e
21
+ puts "\033[31mERROR: Please verify the syntax of your Chekkufile"
22
+ end
23
+
24
+ def check(name, version = nil, args = {})
25
+ unless version.is_a?(String)
26
+ args = version || {}
27
+ version = nil
28
+ end
29
+ definition = get_definition! name
30
+ puts definition.chekku(version, args)
31
+ rescue DefinitionsError => e
32
+ puts "[\033[31m✗\033[0m] #{name}: #{e.message}\n"
33
+ rescue ChekkuError => e
34
+ puts "\033[31mERROR: #{e.message}\033[0m\n"
35
+ end
36
+
37
+ def get_definition!(name)
38
+ @definitions_service.definition_for(name) ||
39
+ raise(DefinitionNotFoundError, "#{name} definition not found. Check ~/.chekku/def.yml")
40
+ end
41
+
42
+ def read_file(file)
43
+ File.open(file, "r") { |f| f.read }
44
+ end
45
+
46
+ end
@@ -2,14 +2,13 @@ require_relative 'fetcher'
2
2
 
3
3
  class Chekku::DefinitionsService
4
4
 
5
- attr_accessor :definitions, :chekkufile
5
+ attr_accessor :definitions
6
6
 
7
7
  def load_definitions_for(file)
8
- @chekkufile = file
9
8
  @definitions = Chekku::Fetcher.fetch_for_chekkufile file
10
9
  end
11
10
 
12
11
  def definition_for(dependency)
13
- @definitions[dependency] if @definitions
12
+ @definitions.select{ |definition| definition.name == dependency }.first if @definitions
14
13
  end
15
14
  end
@@ -1,4 +1,6 @@
1
1
  class DefinitionsError < StandardError; end
2
- class AppNameNotSaneError < DefinitionsError; end
3
- class AppNameNotStringError < DefinitionsError; end
4
- class DefinitionNotFoundError < DefinitionsError; end
2
+ class ChekkuError < StandardError; end
3
+ class AppNameNotSaneError < ChekkuError; end
4
+ class AppNameNotStringError < ChekkuError; end
5
+ class DefinitionNotFoundError < ChekkuError; end
6
+ class DefinitionValidationError < DefinitionsError; end
@@ -1,5 +1,6 @@
1
1
  #encoding: utf-8
2
2
  require 'yaml'
3
+ require_relative 'definition'
3
4
 
4
5
  class Chekku::Fetcher
5
6
 
@@ -15,6 +16,6 @@ class Chekku::Fetcher
15
16
  end
16
17
 
17
18
  def dependencies_from_file
18
- @dependencies = YAML.load_file("#{CHEKKU_PATH}/def.yml")
19
+ @dependencies = Chekku::Definition.load(YAML.load_file("#{CHEKKU_PATH}/def.yml") || {})
19
20
  end
20
21
  end
@@ -1,3 +1,3 @@
1
1
  module Chekku
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -0,0 +1,148 @@
1
+ #encoding: utf-8
2
+ require 'chekku/definition'
3
+ require 'chekku/errors'
4
+
5
+ describe Chekku::Definition do
6
+ let(:definition) { Chekku::Definition.new(name: 'mysql', executable: 'mysqld') }
7
+ describe ".sanitized_executable" do
8
+ it "should not change a sane command" do
9
+ definition.sanitized_executable.should == "mysqld"
10
+ end
11
+
12
+ context "not sane commands" do
13
+ "&\"';\s".each_char do |char|
14
+ it "should remove #{char}" do
15
+ definition.executable = "my#{char}sql"
16
+ definition.sanitized_executable.should == "mysql"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ describe '.sane_executable?' do
22
+ it "should be true with sane command" do
23
+ definition.sane_executable?.should be_true
24
+ end
25
+
26
+ it "should be false with not sane command" do
27
+ definition.executable = "my& sql"
28
+ definition.sane_executable?.should be_false
29
+ end
30
+ end
31
+ describe '.verify_executable!' do
32
+ it 'should be ok with a sane string' do
33
+ definition.verify_executable!.should be_true
34
+ end
35
+
36
+ it 'should raise an error with symbol' do
37
+ definition.executable = :mysql
38
+ expect { definition.verify_executable! }.to raise_error(AppNameNotStringError)
39
+ end
40
+
41
+ it 'should raise an error with not sane command' do
42
+ definition.executable = 'my&sql'
43
+ expect { definition.verify_executable! }.to raise_error(AppNameNotSaneError)
44
+ end
45
+ end
46
+
47
+ describe '.found?' do
48
+ it 'should be true for existing executable' do
49
+ definition.stub(:system).with('which mysqld > /dev/null 2>&1').and_return(true)
50
+ definition.found?.should be_true
51
+ end
52
+
53
+ it 'should be false for non existing executable' do
54
+ definition.stub(:system).with('which mysqld > /dev/null 2>&1').and_return(false)
55
+ definition.found?.should be_false
56
+ end
57
+ end
58
+
59
+ describe '.exists?' do
60
+ it 'should be true if executable is valid and found' do
61
+ definition.stub(:verify_executable!).and_return(true)
62
+ definition.stub(:found?).and_return(true)
63
+ definition.exists?.should be_true
64
+ end
65
+
66
+ it 'should be false if executable is invalid' do
67
+ definition.stub(:verify_executable!).and_return(false)
68
+ definition.stub(:found?).and_return(true)
69
+ definition.exists?.should be_false
70
+ end
71
+
72
+ it 'should be false if executable is not found' do
73
+ definition.stub(:verify_executable!).and_return(true)
74
+ definition.stub(:found?).and_return(false)
75
+ definition.exists?.should be_false
76
+ end
77
+ end
78
+
79
+ describe '.chekku' do
80
+ it 'should says ✓ if soft exists' do
81
+ definition.stub(:exists?).and_return(true)
82
+ definition.chekku.should == "[\033[32m✓\033[0m] mysql"
83
+ end
84
+ it 'should says x if soft does not exist' do
85
+ definition.stub(:exists?).and_return(false)
86
+ expect { definition.chekku }.to raise_error(DefinitionValidationError)
87
+ end
88
+ end
89
+
90
+ let(:version) { Gem::Version.new('5.5.27') }
91
+
92
+ describe '.installed_version' do
93
+ it 'should match 5.5.27 for mysql' do
94
+ definition.stub(:`).and_return '5.5.27'
95
+ definition.installed_version.should == version
96
+ end
97
+ end
98
+
99
+ describe '.check_version' do
100
+ it 'should be ~> 5.5 for mysql' do
101
+ definition.stub(:installed_version).and_return version
102
+ definition.check_version('~> 5.5').should be_true
103
+ end
104
+ it 'should be >= 5.3 for mysql' do
105
+ definition.stub(:installed_version).and_return version
106
+ definition.check_version('>= 5.3').should be_true
107
+ end
108
+ it 'should be <= 5.6 for mysql' do
109
+ definition.stub(:installed_version).and_return version
110
+ definition.check_version('<= 5.6').should be_true
111
+ end
112
+ end
113
+
114
+ describe '.is_running?' do
115
+ let(:running_return) do %q{yannick 65754 0.0 0.0 2432768 492 s000 R+ 9:37PM 0:00.00 grep mysql
116
+ yannick 65717 0.0 1.0 2666308 43300 s000 S 9:37PM 0:00.11 /usr/local/Cellar/mysql/5.5.27/bin/mysqld --basedir=/usr/local/Cellar/mysql/5.5.27 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/5.5.27/lib/plugin --log-error=/usr/local/var/mysql/foobar.local.err --pid-file=/usr/local/var/mysql/foobar.local.pid
117
+ yannick 65646 0.0 0.0 2433432 1072 s000 S 9:37PM 0:00.02 /bin/sh /usr/local/Cellar/mysql/5.5.27/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/foobar.local.pid}
118
+ end
119
+ let(:not_running_return) { %q{yannick 65754 0.0 0.0 2432768 492 s000 R+ 9:37PM 0:00.00 grep mysql} }
120
+ it 'should be true if running' do
121
+ definition.stub(:`).and_return running_return
122
+ definition.is_running?.should be_true
123
+ end
124
+ it 'should be false if not running' do
125
+ definition.stub(:`).and_return not_running_return
126
+ definition.is_running?.should be_false
127
+ end
128
+ end
129
+
130
+ describe '.validates' do
131
+ it 'should raise an error if the version is wrong' do
132
+ definition.stub(:check_version).and_return false
133
+ definition.stub(:is_running?).and_return true
134
+ expect{ definition.validates("3.0") }.to raise_error(DefinitionValidationError)
135
+ end
136
+ it 'should raise an error if not running but must run arg' do
137
+ definition.stub(:check_version).and_return true
138
+ definition.stub(:is_running?).and_return false
139
+ expect{ definition.validates(nil, must_run: true) }.to raise_error(DefinitionValidationError)
140
+ end
141
+ it 'should be tru if everything is ok' do
142
+ definition.stub(:check_version).and_return true
143
+ definition.stub(:is_running?).and_return true
144
+ definition.validates("3.0", must_run: true).should be_true
145
+ end
146
+ end
147
+ end
148
+
@@ -3,10 +3,11 @@ require 'chekku/errors'
3
3
 
4
4
  describe Chekku::DefinitionsService do
5
5
 
6
- describe '#load_definitions_for' do
7
- let(:definitions_service) { Chekku::DefinitionsService.new }
8
- let(:definitions) { { 'mysql' => { 'existance' => 'which mysqld' }} }
6
+ let(:definition) { Chekku::Definition.new(name: 'mysql', executable: 'mysqld')}
7
+ let(:definitions) { [definition] }
8
+ let(:definitions_service) { Chekku::DefinitionsService.new }
9
9
 
10
+ describe '#load_definitions_for' do
10
11
  it 'should set definitions' do
11
12
  Chekku::Fetcher.stub(:fetch_for_chekkufile).with('blabla').and_return(definitions)
12
13
  expect { definitions_service.load_definitions_for('blabla') }
@@ -15,17 +16,14 @@ describe Chekku::DefinitionsService do
15
16
  end
16
17
 
17
18
  describe '#definition_for' do
18
- let(:definitions) { { 'mysql' => { 'existance' => 'which mysqld' }} }
19
-
20
19
  context 'definitions are set' do
21
- let(:definitions_service) { Chekku::DefinitionsService.new }
22
20
  before(:each) do
23
21
  definitions_service.definitions = definitions
24
22
  end
25
23
 
26
24
  context 'existing definition' do
27
25
  it 'should return the definition of the asked element' do
28
- definitions_service.definition_for('mysql').should == definitions['mysql']
26
+ definitions_service.definition_for('mysql').should == definitions.first
29
27
  end
30
28
  end
31
29
 
@@ -37,7 +35,6 @@ describe Chekku::DefinitionsService do
37
35
  end
38
36
 
39
37
  context 'definitions are not set' do
40
- let(:definitions_service) { Chekku::DefinitionsService.new }
41
38
  it 'should return nil' do
42
39
  definitions_service.definition_for('not-existing').should == nil
43
40
  end
@@ -0,0 +1,27 @@
1
+ #encoding: utf-8
2
+ require 'chekku/definitions'
3
+ require 'chekku/definitions_service'
4
+ require 'chekku/errors'
5
+
6
+ describe Chekku::Definitions do
7
+
8
+ let(:definitions_service) { double(Chekku::DefinitionsService) }
9
+ let(:definitions) { Chekku::Definitions.new }
10
+ let(:definition) { Chekku::Definition.new(name: 'mysql', executable: 'mysqld') }
11
+
12
+ describe 'instance methods' do
13
+
14
+ describe '.get_definition' do
15
+ it 'should return the definition' do
16
+ definitions.definitions_service.stub(:definition_for).with('mysql').and_return(definition)
17
+ definitions.get_definition!('mysql').should == definition
18
+ end
19
+
20
+ it 'should raise an error if not found' do
21
+ definitions.definitions_service.stub(:definition_for).with('mysql').and_return(nil)
22
+ expect{ definitions.get_definition!('mysql') }.to raise_error(DefinitionNotFoundError)
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -9,10 +9,10 @@ describe Chekku::Fetcher do
9
9
  fetcher.dependencies_from_file
10
10
  end
11
11
 
12
- it 'should return an object with methods corresponding to dependencies' do
13
- dependencies_hash = { 'mysql' => { 'existance' => 'which mysqld' }}
12
+ it 'should return an array of definitions of dependencies' do
13
+ dependencies_hash = { 'mysql' => { 'executable' => 'mysqld' }}
14
14
  YAML.stub(:load_file).and_return(dependencies_hash)
15
- fetcher.dependencies_from_file['mysql'].should == { 'existance' =>'which mysqld'}
15
+ fetcher.dependencies_from_file.first.name.should == 'mysql'
16
16
  end
17
17
  end
18
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chekku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-01 00:00:00.000000000 Z
12
+ date: 2012-10-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -80,15 +80,15 @@ files:
80
80
  - examples/def.yml
81
81
  - lib/chekku.rb
82
82
  - lib/chekku/checker.rb
83
+ - lib/chekku/definition.rb
84
+ - lib/chekku/definitions.rb
83
85
  - lib/chekku/definitions_service.rb
84
- - lib/chekku/dependency_checker.rb
85
- - lib/chekku/dsl.rb
86
86
  - lib/chekku/errors.rb
87
87
  - lib/chekku/fetcher.rb
88
88
  - lib/chekku/version.rb
89
+ - spec/lib/definition_spec.rb
89
90
  - spec/lib/definitions_service_spec.rb
90
- - spec/lib/dependency_checker_spec.rb
91
- - spec/lib/dsl_spec.rb
91
+ - spec/lib/definitions_spec.rb
92
92
  - spec/lib/fetcher_spec.rb
93
93
  - spec/spec_helper.rb
94
94
  homepage: http://ys.github.com/chekku
@@ -116,8 +116,8 @@ signing_key:
116
116
  specification_version: 3
117
117
  summary: ! 'Chekku: software dependencies checker'
118
118
  test_files:
119
+ - spec/lib/definition_spec.rb
119
120
  - spec/lib/definitions_service_spec.rb
120
- - spec/lib/dependency_checker_spec.rb
121
- - spec/lib/dsl_spec.rb
121
+ - spec/lib/definitions_spec.rb
122
122
  - spec/lib/fetcher_spec.rb
123
123
  - spec/spec_helper.rb
@@ -1,51 +0,0 @@
1
- #encoding: utf-8
2
- class Chekku::DependencyChecker
3
-
4
- attr_accessor :definitions_service
5
- attr_accessor :definition
6
-
7
- def self.with(definitions_service)
8
- new definitions_service
9
- end
10
-
11
- def initialize(definitions_service)
12
- @definitions_service = definitions_service
13
- end
14
-
15
- def chekku(name, version, args)
16
- definition = get_and_check_definition! name
17
- if exists? definition
18
- "Checked #{name} [\033[32m✓\033[0m]"
19
- else
20
- "Checked #{name} [\033[31m✗\033[0m] I think you must install it!"
21
- end
22
- end
23
-
24
- def get_and_check_definition!(name)
25
- @definitions_service.definition_for(name) ||
26
- raise(DefinitionNotFoundError, "#{name} definition not be found. Check ~/.chekku/def.yml")
27
- end
28
-
29
- def exists?(definition)
30
- command = definition['executable']
31
- verify_command!(command) && found?(command)
32
- end
33
-
34
- def verify_command!(command)
35
- raise AppNameNotStringError, 'You need to use strings for app names' unless command.is_a?(String)
36
- raise AppNameNotSaneError, "Sorry the app name '#{@current_app}' is not sane" unless sane?(command)
37
- true
38
- end
39
-
40
- def found?(command)
41
- system("which #{command} > /dev/null")
42
- end
43
-
44
- def sane?(command)
45
- command == sanitize(command)
46
- end
47
-
48
- def sanitize(command)
49
- command.gsub(/&|"|'|;|\s/, "")
50
- end
51
- end
@@ -1,32 +0,0 @@
1
- require_relative 'dependency_checker'
2
-
3
- class Chekku::Dsl
4
-
5
- attr_accessor :definitions_service
6
-
7
- def self.evaluate(file)
8
- new.eval_chekkufile(file)
9
- end
10
-
11
- def initialize
12
- @definitions_service = Chekku::DefinitionsService.new
13
- @definitions_service.load_definitions_for @chekkufile
14
- end
15
-
16
- def eval_chekkufile(file)
17
- instance_eval(read_file(file))
18
- rescue NoMethodError => e
19
- puts "\033[31mERROR: Please verify the syntax of your Chekkufile"
20
- end
21
-
22
- def check(name, version = nil, args ={})
23
- puts Chekku::DependencyChecker.with(@definitions_service).chekku(name, version, args)
24
- rescue DefinitionsError => e
25
- puts "\033[31mERROR: #{e.message}\033[0m\n"
26
- end
27
-
28
- def read_file(file)
29
- File.open(file, "r") { |f| f.read }
30
- end
31
-
32
- end
@@ -1,129 +0,0 @@
1
- #encoding: utf-8
2
- require 'chekku/dependency_checker'
3
- require 'chekku/definitions_service'
4
- require 'chekku/errors'
5
-
6
- describe Chekku::DependencyChecker do
7
-
8
-
9
- describe "#with" do
10
- let(:definitions_service) { double(Chekku::DefinitionsService) }
11
- let(:subject) { Chekku::DependencyChecker.with(definitions_service) }
12
- it { should be_instance_of(Chekku::DependencyChecker) }
13
- its(:definitions_service) { should == definitions_service }
14
- end
15
-
16
- describe 'instance methods' do
17
- let(:checker) { Chekku::DependencyChecker.with(Chekku::DefinitionsService.new) }
18
-
19
- describe ".sanitize" do
20
- it "should not change a sane command" do
21
- checker.sanitize("hello_you").should == "hello_you"
22
- end
23
-
24
- context "not sane commands" do
25
- it "should remove &" do
26
- checker.sanitize("hello&world").should == "helloworld"
27
- end
28
-
29
- it "should remove \"" do
30
- checker.sanitize("hello\"world").should == "helloworld"
31
- end
32
-
33
- it "should remove '" do
34
- checker.sanitize("hello'world").should == "helloworld"
35
- end
36
-
37
- it "should remove ;" do
38
- checker.sanitize("hello;world").should == "helloworld"
39
- end
40
- it "should remove \s" do
41
- checker.sanitize("hello world").should == "helloworld"
42
- end
43
- end
44
- end
45
-
46
- describe '.sane?' do
47
- it "should be true with sane command" do
48
- checker.sane?('ls').should be_true
49
- end
50
-
51
- it "should be false with not sane command" do
52
- checker.sane?('ls & rm ').should be_false
53
- end
54
- end
55
-
56
- describe '.verify_command!' do
57
- it 'should be ok with a sane string' do
58
- checker.verify_command!('ls').should be_true
59
- end
60
-
61
- it 'should raise an error with symbol' do
62
- expect { checker.verify_command!(:ls) }.to raise_error(AppNameNotStringError)
63
- end
64
-
65
- it 'should raise an error with not sane command' do
66
- expect { checker.verify_command!('rm&') }.to raise_error(AppNameNotSaneError)
67
- end
68
- end
69
-
70
- describe '.found?' do
71
- it 'should be true for an existing command' do
72
- checker.found?('ls').should be_true
73
- end
74
-
75
- it 'should be false for an existing command' do
76
- checker.found?('lsrm').should be_false
77
- end
78
- end
79
-
80
- describe '.exists?' do
81
- let(:definition) { { 'executable' => 'mysql' } }
82
- it 'should be true if command is valid and found' do
83
- checker.stub(:verify_command!).with('mysql').and_return(true)
84
- checker.stub(:found?).with('mysql').and_return(true)
85
- checker.exists?(definition).should be_true
86
- end
87
-
88
- it 'should be false if command is invalid' do
89
- checker.stub(:verify_command!).with('mysql').and_return(false)
90
- checker.stub(:found?).with('mysql').and_return(true)
91
- checker.exists?(definition).should be_false
92
- end
93
-
94
- it 'should be false if command is not found' do
95
- checker.stub(:verify_command!).with('mysql').and_return(true)
96
- checker.stub(:found?).with('mysql').and_return(false)
97
- checker.exists?(definition).should be_false
98
- end
99
- end
100
-
101
- describe '.get_and_check_definition' do
102
- let(:definition) { { 'executable' => 'mysql' } }
103
- it 'should return a hash with the definition' do
104
- checker.definitions_service.stub(:definition_for).with('mysql').and_return(definition)
105
- checker.get_and_check_definition!('mysql').should == definition
106
- end
107
-
108
- it 'should raise an error if not found' do
109
- checker.definitions_service.stub(:definition_for).with('mysql').and_return(nil)
110
- expect{ checker.get_and_check_definition!('mysql') }.to raise_error(DefinitionNotFoundError)
111
- end
112
- end
113
-
114
- describe '.chekku' do
115
- let(:definition) { { 'executable' => 'mysql' } }
116
- it 'should if definition exists says ✓' do
117
- checker.stub(:get_and_check_definition!).with('mysql').and_return(definition)
118
- checker.stub(:exists?).with(definition).and_return(true)
119
- checker.chekku('mysql', nil, nil).should == "Checked mysql [\033[32m✓\033[0m]"
120
- end
121
- it 'should if definition exists says x' do
122
- checker.stub(:get_and_check_definition!).with('mysql').and_return(definition)
123
- checker.stub(:exists?).with(definition).and_return(false)
124
- checker.chekku('mysql', nil, nil).should == "Checked mysql [\033[31m✗\033[0m] I think you must install it!"
125
- end
126
- end
127
-
128
- end
129
- end
@@ -1,6 +0,0 @@
1
- require 'chekku/dsl'
2
-
3
- describe Chekku::Dsl do
4
- it 'should works' do
5
- end
6
- end