chekku 0.1.0 → 0.5.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.
- data/README.md +4 -0
- data/lib/chekku/definition.rb +1 -1
- data/lib/chekku/definitions.rb +1 -1
- data/lib/chekku/definitions_service.rb +1 -1
- data/lib/chekku/fetcher.rb +59 -4
- data/lib/chekku/version.rb +1 -1
- data/spec/lib/fetcher_spec.rb +16 -4
- metadata +24 -25
data/README.md
CHANGED
@@ -59,8 +59,12 @@ imagemagick:
|
|
59
59
|
Example on how to check a software dependency
|
60
60
|
|
61
61
|
```
|
62
|
+
require 'chekku/definition'
|
62
63
|
definition = Chekku::Definition.new(name: 'mysql', executable: 'mysqld')
|
64
|
+
# return true or false
|
63
65
|
definition.chekku('>= 5.0')
|
66
|
+
#return true or raise an error
|
67
|
+
definition.chekku!('> 5.0')
|
64
68
|
```
|
65
69
|
|
66
70
|
## Future
|
data/lib/chekku/definition.rb
CHANGED
@@ -51,7 +51,7 @@ module Chekku
|
|
51
51
|
|
52
52
|
# Check if version and other params are valid for current Definition instance and return false if errors
|
53
53
|
# @param (see #chekku!)
|
54
|
-
# @return [Boolean] version and args
|
54
|
+
# @return [Boolean] valid version and args ?
|
55
55
|
def chekku(version = nil, args = {})
|
56
56
|
chekku!(version, args)
|
57
57
|
rescue
|
data/lib/chekku/definitions.rb
CHANGED
@@ -42,7 +42,7 @@ class Chekku::Definitions
|
|
42
42
|
version = nil
|
43
43
|
end
|
44
44
|
definition = get_definition! name
|
45
|
-
puts "[\033[32m✓\033[0m] #{name}" if definition.chekku(version, args)
|
45
|
+
puts "[\033[32m✓\033[0m] #{name}" if definition.chekku!(version, args)
|
46
46
|
rescue DefinitionsError => e
|
47
47
|
puts "[\033[31m✗\033[0m] #{name}: #{e.message}\n"
|
48
48
|
rescue ChekkuError => e
|
@@ -16,6 +16,6 @@ class Chekku::DefinitionsService
|
|
16
16
|
# @param [String] definition_name The needed Definition name
|
17
17
|
# @return [Definition] The needed Definition
|
18
18
|
def definition_for(definition_name)
|
19
|
-
@definitions.
|
19
|
+
@definitions.detect{ |definition| definition.name == definition_name } if @definitions
|
20
20
|
end
|
21
21
|
end
|
data/lib/chekku/fetcher.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
#encoding: utf-8
|
2
2
|
require 'yaml'
|
3
3
|
require_relative 'definition'
|
4
|
+
require 'net/http'
|
4
5
|
|
5
6
|
class Chekku::Fetcher
|
6
7
|
|
7
|
-
CHEKKU_PATH = "#{
|
8
|
+
CHEKKU_PATH = "#{Dir.home}/.chekku"
|
9
|
+
CHEKKU_EXPORT_URL = "http://chekku.co/definitions/export"
|
10
|
+
CHEKKU_DEFINITION_FILE = "#{CHEKKU_PATH}/def.yml"
|
11
|
+
MAX_DAYS = 7
|
8
12
|
|
9
13
|
attr_accessor :dependencies
|
10
14
|
|
@@ -13,13 +17,64 @@ class Chekku::Fetcher
|
|
13
17
|
# @param [String] file_path Path to Chekkufile
|
14
18
|
# @return [Array] a list of Definition instances
|
15
19
|
def self.fetch_for_chekkufile(file_path)
|
16
|
-
# TODO: Implements server side of the file checker
|
17
|
-
# STUB: Load local file
|
18
20
|
fetcher = new
|
19
21
|
fetcher.dependencies_from_file
|
20
22
|
end
|
21
23
|
|
22
24
|
def dependencies_from_file
|
23
|
-
@dependencies = Chekku::Definition.load(
|
25
|
+
@dependencies = Chekku::Definition.load(definitions_hash)
|
26
|
+
end
|
27
|
+
|
28
|
+
def definitions_hash
|
29
|
+
begin
|
30
|
+
definitions_yaml = load_definitions_file
|
31
|
+
rescue
|
32
|
+
ensure
|
33
|
+
definitions_yaml ||= {}
|
34
|
+
end
|
35
|
+
ensure_definitions_are_up_to_date(definitions_yaml)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def load_definitions_file
|
41
|
+
YAML.load_file(CHEKKU_DEFINITION_FILE)
|
42
|
+
end
|
43
|
+
|
44
|
+
def ensure_definitions_are_up_to_date(definitions_yaml)
|
45
|
+
last_updated = definitions_yaml.delete('updated_at')
|
46
|
+
definitions_yaml.tap do |definitions_yaml|
|
47
|
+
if too_long_ago?(last_updated)
|
48
|
+
defintions_yaml = fetch_new_distant_definitions
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def fetch_new_distant_definitions
|
54
|
+
ensure_presence_of_chekku_dir
|
55
|
+
renew_chekku_definitions_file
|
56
|
+
load_definitions_file.tap { |definitions_yaml| definitions_yaml.delete('updated_at') }
|
57
|
+
end
|
58
|
+
|
59
|
+
def ensure_presence_of_chekku_dir
|
60
|
+
Dir.mkdir(CHEKKU_PATH) unless File.directory?(CHEKKU_PATH)
|
61
|
+
end
|
62
|
+
|
63
|
+
def renew_chekku_definitions_file
|
64
|
+
File.open(CHEKKU_DEFINITION_FILE, "wb") do |chekku_file|
|
65
|
+
chekku_file.write(distant_definitions_file)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def distant_definitions_file
|
70
|
+
uri = URI.parse(CHEKKU_EXPORT_URL)
|
71
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
72
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
73
|
+
request["accept"] = "text/yaml"
|
74
|
+
http.request(request).body
|
75
|
+
end
|
76
|
+
|
77
|
+
def too_long_ago?(date)
|
78
|
+
date.nil? || date > (Date.today - MAX_DAYS)
|
24
79
|
end
|
25
80
|
end
|
data/lib/chekku/version.rb
CHANGED
data/spec/lib/fetcher_spec.rb
CHANGED
@@ -2,17 +2,17 @@ require 'spec_helper'
|
|
2
2
|
require 'chekku/fetcher'
|
3
3
|
|
4
4
|
describe Chekku::Fetcher do
|
5
|
+
let(:fetcher) { Chekku::Fetcher.new() }
|
5
6
|
|
6
7
|
describe ".dependencies_for_file" do
|
7
|
-
|
8
|
-
|
9
|
-
YAML.should_receive(:load_file).with("#{ENV['HOME']}/.chekku/def.yml")
|
8
|
+
it 'returns a hash of definitions' do
|
9
|
+
fetcher.should_receive(:ensure_definitions_are_up_to_date).and_return({})
|
10
10
|
fetcher.dependencies_from_file
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'should return an array of definitions of dependencies' do
|
14
14
|
dependencies_hash = { 'mysql' => { 'executable' => 'mysqld' }}
|
15
|
-
|
15
|
+
fetcher.stub(:ensure_definitions_are_up_to_date).and_return(dependencies_hash)
|
16
16
|
fetcher.dependencies_from_file.first.name.should == 'mysql'
|
17
17
|
end
|
18
18
|
end
|
@@ -22,6 +22,18 @@ describe Chekku::Fetcher do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
describe '#fetch_new_distant_definitions' do
|
26
|
+
it 'creates chekku directory if not present' do
|
27
|
+
Chekku::Fetcher.const_set 'CHEKKU_PATH', '/tmp/chekku'
|
28
|
+
fetcher.should_receive(:renew_chekku_definitions_file)
|
29
|
+
fetcher.should_receive(:load_definitions_file).and_return({})
|
30
|
+
Dir.should_receive(:mkdir).with('/tmp/chekku')
|
31
|
+
File.should_receive(:directory?).and_return(false)
|
32
|
+
fetcher.send(:fetch_new_distant_definitions)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
25
37
|
end
|
26
38
|
|
27
39
|
|
metadata
CHANGED
@@ -1,80 +1,80 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chekku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
5
4
|
prerelease:
|
5
|
+
version: 0.5.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Yannick Schutz
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '2.0'
|
20
|
+
none: false
|
21
|
+
name: rspec
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ! '>='
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: '2.0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: simplecov
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
29
|
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
32
|
requirements:
|
35
33
|
- - ! '>='
|
36
34
|
- !ruby/object:Gem::Version
|
37
35
|
version: '0'
|
36
|
+
none: false
|
37
|
+
name: simplecov
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
|
-
|
41
|
-
none: false
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
42
41
|
requirements:
|
43
42
|
- - ! '>='
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: thor
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
45
|
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
48
|
requirements:
|
51
49
|
- - ! '>='
|
52
50
|
- !ruby/object:Gem::Version
|
53
51
|
version: '0'
|
52
|
+
none: false
|
53
|
+
name: thor
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
|
-
|
57
|
-
none: false
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
58
|
- - ! '>='
|
60
59
|
- !ruby/object:Gem::Version
|
61
60
|
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: rake
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
61
|
none: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
64
|
requirements:
|
67
65
|
- - ! '>='
|
68
66
|
- !ruby/object:Gem::Version
|
69
67
|
version: '0'
|
68
|
+
none: false
|
69
|
+
name: rake
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
|
-
|
73
|
-
none: false
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
74
73
|
requirements:
|
75
74
|
- - ! '>='
|
76
75
|
- !ruby/object:Gem::Version
|
77
76
|
version: '0'
|
77
|
+
none: false
|
78
78
|
description: Chekku checks all your software dependencies from development to production.
|
79
79
|
email:
|
80
80
|
- yannick.schutz@gmail.com
|
@@ -114,17 +114,17 @@ rdoc_options: []
|
|
114
114
|
require_paths:
|
115
115
|
- lib
|
116
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
117
|
requirements:
|
119
118
|
- - ! '>='
|
120
119
|
- !ruby/object:Gem::Version
|
121
120
|
version: '1.9'
|
122
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
121
|
none: false
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
123
|
requirements:
|
125
124
|
- - ! '>='
|
126
125
|
- !ruby/object:Gem::Version
|
127
126
|
version: 1.3.6
|
127
|
+
none: false
|
128
128
|
requirements: []
|
129
129
|
rubyforge_project:
|
130
130
|
rubygems_version: 1.8.23
|
@@ -137,4 +137,3 @@ test_files:
|
|
137
137
|
- spec/lib/definitions_spec.rb
|
138
138
|
- spec/lib/fetcher_spec.rb
|
139
139
|
- spec/spec_helper.rb
|
140
|
-
has_rdoc:
|