cocina 0.1.0 → 0.1.1

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,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