cocina 0.1.0 → 0.1.1

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: 1d34176d91ada403ab2e2c934f9ac61432b329ec
4
- data.tar.gz: 9c16d0e49045dd6e64789374e294c713ac4db3cb
3
+ metadata.gz: 6a0f9130b1edb3b23ca847e284d23cb2d433a3b5
4
+ data.tar.gz: ec98ebd5aa9ed228afb891c6fe59f1429572d7b6
5
5
  SHA512:
6
- metadata.gz: 761c31d77e0598ee78489e4534c523820510299229e6bc75a2541d0bac67ad2a42dc1fe826c769d03c750d305cf7c43b202d3996616d588787f7e83d15a999a2
7
- data.tar.gz: 9fc621c4200547d6c008d7f5024a819a4786e5821c15b9f3eedd23c5d8e2de7cee25803753c1fcdc40962ba1a33f431bac06c55ef7a4fbdc2e981e785e7b6642
6
+ metadata.gz: f9bfbb44896e6a40d5c8c02f1ab4354b06cf2a310bf6049022761ec3a7b5fe579ca06f0458845932f80bdcd34303e95b362d66b032a615b96c3343aec2a50e72
7
+ data.tar.gz: 96d82a1955877efaa81acf79d774cac755c2dad12446fa84e5546513207b4407123aee4dce7258cc55500edb446265f882c21a4a25098e085363ad18c8ecc461
data/.travis.yml CHANGED
@@ -1,4 +1,9 @@
1
+ addons:
2
+ code_climate:
3
+ repo_token: f1a36edc54b97cf8db5a139d555d98232c8ad834bd34d44701bc975a9acd29ee
4
+
1
5
  language: ruby
2
6
  rvm:
3
7
  - 2.1.6
8
+
4
9
  before_install: gem install bundler -v 1.10.6
data/Gemfile CHANGED
@@ -3,4 +3,6 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in cocina.gemspec
4
4
  gemspec
5
5
 
6
+ gem 'codeclimate-test-reporter', group: :test, require: nil
6
7
  gem 'simplecov', require: false, group: :test
8
+ gem 'rubycritic', require: false
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Cocina [![Build Status](https://travis-ci.org/brandocorp/cocina.svg?branch=master)](https://travis-ci.org/brandocorp/cocina)
1
+ # Cocina [![Build Status](https://travis-ci.org/brandocorp/cocina.svg?branch=master)](https://travis-ci.org/brandocorp/cocina) [![Test Coverage](https://codeclimate.com/github/brandocorp/cocina/badges/coverage.svg)](https://codeclimate.com/github/brandocorp/cocina/coverage)
2
2
 
3
3
  A thin wrapper around Test Kitchen allowing you to define dependencies for your
4
4
  suites
@@ -14,6 +14,10 @@ suites:
14
14
  run_list:
15
15
  attributes:
16
16
 
17
+ - name: db
18
+ run_list:
19
+ attributes:
20
+
17
21
  - name: web
18
22
  run_list:
19
23
  attributes:
data/example/Cocinafile CHANGED
@@ -1,3 +1,7 @@
1
1
  instance 'web-ubuntu-1404' do
2
- depends_on 'app-ubuntu-1404'
2
+ depends 'app-ubuntu-1404'
3
+ end
4
+
5
+ instance 'app-ubuntu-1404' do
6
+ depends 'db-ubuntu-1404'
3
7
  end
data/lib/cocina/cli.rb CHANGED
@@ -6,72 +6,62 @@ module Cocina
6
6
  class CLI
7
7
  include Logify
8
8
 
9
- attr_reader :config, :instances, :dependencies, :primary_instance
9
+ attr_reader :config, :instances, :collection, :dependencies
10
+ attr_reader :primary_instance, :primary_dependencies
10
11
 
11
- # essentially startup a Kitchen::CLI
12
12
  def initialize(target)
13
13
  super()
14
14
 
15
- $stdout.sync = true
16
15
  Logify.level = :debug
17
16
 
18
17
  @dependencies = []
19
18
  @config = Cocina::Config.new('Cocinafile')
20
-
21
- @kitchen_loader = Kitchen::Loader::YAML.new(
22
- project_config: ENV["KITCHEN_YAML"],
23
- local_config: ENV["KITCHEN_LOCAL_YAML"],
24
- global_config: ENV["KITCHEN_GLOBAL_YAML"]
25
- )
26
- @kitchen_config = Kitchen::Config.new(
27
- loader: @kitchen_loader
28
- )
29
- @kitchen_config.log_level =
30
- Kitchen.env_log unless Kitchen.env_log.nil?
31
- @kitchen_config.log_overwrite =
32
- Kitchen.env_log_overwrite unless Kitchen.env_log_overwrite.nil?
33
-
34
- prepare_instances_for target
19
+ @primary_instance = instance(target)
20
+ @primary_dependencies = primary_instance.dependencies
35
21
  end
36
22
 
37
23
  def run
38
24
  log.info "Running for Target: #{primary_instance.name}"
39
- dependencies.each do |machine|
40
- log.info "Converging #{machine.name}"
41
- machine.converge
42
- end
25
+
26
+ prepare_dependencies
27
+ converge_dependencies
28
+
43
29
  primary_instance.verify
44
30
  cleanup
45
31
  end
46
32
 
47
- def instance_by_name(target)
48
- @config[target]
33
+ def instance(id)
34
+ @config[id]
49
35
  end
50
36
 
51
- def kitchen_instance_for(target)
52
- @kitchen_config.instances.get(target)
37
+ def prepare_dependencies
38
+ primary_dependencies.each do |dep|
39
+ @dependencies.concat instance(dep).dependencies
40
+ @dependencies << dep
41
+ end
53
42
  end
54
43
 
55
- def prepare_instances_for(target)
56
- log.info "Preparing all dependencies"
57
- instance = instance_by_name(target)
58
- @primary_instance = kitchen_instance_for(target)
59
- instance.dependencies.each do |dependency|
60
- log.info "#{target} depends on #{dependency}"
61
- @dependencies << kitchen_instance_for(dependency)
62
- end
44
+ def converge_dependencies
45
+ log.info "Converging all dependencies: #{dependencies}"
46
+ dependencies.each {|dep| converge_dependency dep }
47
+ end
48
+
49
+ def converge_dependency(dep)
50
+ log.info "Converging: #{dep}"
51
+ instance(dep).converge
63
52
  end
64
53
 
65
54
  def cleanup
66
55
  log.info "Cleaning up all dependencies"
67
56
  destroy_dependencies
68
57
  primary_instance.destroy
58
+ nil
69
59
  end
70
60
 
71
61
  def destroy_dependencies
72
- dependencies.each do |machine|
73
- log.info "Destroying #{machine.name}"
74
- machine.destroy
62
+ dependencies.each do |dep|
63
+ log.info "Destroying #{dep}"
64
+ instance(dep).destroy
75
65
  end
76
66
  end
77
67
  end
data/lib/cocina/config.rb CHANGED
@@ -2,23 +2,66 @@ require 'cocina/instance'
2
2
 
3
3
  module Cocina
4
4
  class Config
5
+ include Logify
6
+
5
7
  attr_reader :cocinafile
6
8
  attr_reader :instances
7
9
 
8
10
  def initialize(file)
9
11
  @cocinafile = file
10
12
  @instances = []
13
+
14
+ $stdout.sync = true
15
+
16
+ @loader = Kitchen::Loader::YAML.new(
17
+ project_config: ENV["KITCHEN_YAML"],
18
+ local_config: ENV["KITCHEN_LOCAL_YAML"],
19
+ global_config: ENV["KITCHEN_GLOBAL_YAML"]
20
+ )
21
+ @config = Kitchen::Config.new(
22
+ loader: @loader
23
+ )
24
+ @config.log_level =
25
+ Kitchen.env_log unless Kitchen.env_log.nil?
26
+ @config.log_overwrite =
27
+ Kitchen.env_log_overwrite unless Kitchen.env_log_overwrite.nil?
28
+
11
29
  load_cocinafile
30
+
31
+ build_dependencies
12
32
  end
13
33
 
14
34
  def load_cocinafile
15
35
  self.instance_eval(IO.read(cocinafile), cocinafile, 1)
16
36
  end
17
37
 
18
- def instance(name, &block)
19
- i = Cocina::Instance.new(name)
20
- i.instance_eval(&block)
21
- @instances << i
38
+ def kitchen_instance(target)
39
+ @config.instances.get(target)
40
+ end
41
+
42
+ def instance(id, &block)
43
+ return true if instance?(id)
44
+ log.info "Building Instance for #{id}"
45
+ cocina_instance = Cocina::Instance.new(id)
46
+ cocina_instance.instance_eval(&block)
47
+ cocina_instance.runner = kitchen_instance(id)
48
+ @instances << cocina_instance
49
+ nil
50
+ end
51
+
52
+ def build_dependencies
53
+ instances.each do |machine|
54
+ machine.dependencies.each do |id|
55
+ next if instance?(id)
56
+ dep = Cocina::Instance.new(id)
57
+ dep.runner = kitchen_instance(id)
58
+ @instances << dep
59
+ end
60
+ end
61
+ end
62
+
63
+ def instance?(id)
64
+ instances.map(&:name).include?(id)
22
65
  end
23
66
 
24
67
  def [](target)
@@ -1,6 +1,11 @@
1
1
  module Cocina
2
2
  class Instance
3
3
  attr_reader :name, :dependencies
4
+ attr_accessor :runner
5
+
6
+ extend Forwardable
7
+
8
+ def_delegators :@runner, :destroy, :create, :converge, :verify
4
9
 
5
10
  def initialize(name)
6
11
  @name = name
@@ -10,5 +15,9 @@ module Cocina
10
15
  def depends(dep)
11
16
  @dependencies << dep
12
17
  end
18
+
19
+ def has_dependency?
20
+ dependencies.empty? ? false : true
21
+ end
13
22
  end
14
23
  end
@@ -1,3 +1,3 @@
1
1
  module Cocina
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocina
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Raabe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-25 00:00:00.000000000 Z
11
+ date: 2015-12-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,7 +117,6 @@ extensions: []
117
117
  extra_rdoc_files: []
118
118
  files:
119
119
  - ".gitignore"
120
- - ".kitchen.yml"
121
120
  - ".rspec"
122
121
  - ".ruby-version"
123
122
  - ".travis.yml"
@@ -127,6 +126,7 @@ files:
127
126
  - Rakefile
128
127
  - bin/cocina
129
128
  - cocina.gemspec
129
+ - example/.kitchen.yml
130
130
  - example/Cocinafile
131
131
  - lib/cocina.rb
132
132
  - lib/cocina/cli.rb