natives 0.3.0 → 0.4.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.
- checksums.yaml +8 -8
- data/VERSION +1 -1
- data/chef/cookbooks/natives/recipes/default.rb +6 -4
- data/chef/solo.rb +1 -1
- data/lib/natives/app.rb +16 -9
- data/lib/natives/cli.rb +25 -7
- data/natives.gemspec +2 -2
- data/spec/natives/app_spec.rb +35 -12
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjhlODM3ZWJiNzkwMTY3ZDEwN2Y4YzY2NjJhN2Q0NmQ0NTFmOTk2Zg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWNjYTc2Njg3MmJmYzg4OTUxNDQwMjhkNDZlYjk3OWZlNDRhNGZiOA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTFlNjI1MjU0YzY2NjU1YTNhZTIyYzJmODhlZGJkY2M3YTMxMzdlOGQ5Mjky
|
10
|
+
YThhNTJlZjBjYzVhNzEwZDBlYjZiOTEzNGZmMWY2OWZiMzE1YmRmNTM2YjU0
|
11
|
+
YjA5YTQ3Zjc1OTQwODg2MzRiZDlkMTMwMmI5NTA1N2VmMmQzNjQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDk5ZjNmNjdlMmI0OWE0ZDc5Y2Q5MjcxYjEyYjU2ZWMwMzBjMDNhOGY0YzE2
|
14
|
+
ZDRmODk2MWRhYTkyMDJmMTU3OTlmMTQ4ZjJiZDliZDdiNmU5ZWU3NmY0M2Ni
|
15
|
+
OTIxMGM0MmQ2ODQwNTc3YWMxOGRiMWE5YjcyMjZhZjRlMTQ2OWQ=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
@@ -9,18 +9,20 @@
|
|
9
9
|
|
10
10
|
require 'natives/catalog'
|
11
11
|
|
12
|
-
|
13
|
-
include_recipe
|
12
|
+
if node['natives']['configs']['update_provider']
|
13
|
+
include_recipe('homebrew') if use_homebrew?
|
14
|
+
include_recipe('apt') if use_apt?
|
15
|
+
end
|
14
16
|
|
15
17
|
natives_install_list.each do |catalog_name, entries|
|
16
18
|
catalog = Natives::Catalog.new(
|
17
19
|
catalog_name,
|
18
20
|
node[:platform], node[:platform_version],
|
19
21
|
current_package_provider,
|
20
|
-
working_dir: node['natives']['
|
22
|
+
working_dir: node['natives']['configs']['working_dir']
|
21
23
|
)
|
22
|
-
|
23
24
|
packages = catalog.native_packages_for(entries)
|
25
|
+
|
24
26
|
packages.each do |package_name|
|
25
27
|
package package_name do
|
26
28
|
action :install
|
data/chef/solo.rb
CHANGED
data/lib/natives/app.rb
CHANGED
@@ -4,9 +4,13 @@ require 'chef/application/solo'
|
|
4
4
|
|
5
5
|
module Natives
|
6
6
|
class App
|
7
|
-
def install(catalog_name, packages)
|
8
|
-
create_solo_json_tempfile(
|
9
|
-
|
7
|
+
def install(catalog_name, packages, configs={})
|
8
|
+
create_solo_json_tempfile(
|
9
|
+
catalog_name.to_s,
|
10
|
+
Array(packages),
|
11
|
+
default_configs.merge(configs || {})
|
12
|
+
|
13
|
+
) do |attrs_file|
|
10
14
|
run_chef_solo(attrs_file)
|
11
15
|
end
|
12
16
|
end
|
@@ -23,9 +27,9 @@ module Natives
|
|
23
27
|
Chef::Application::Solo.new.run
|
24
28
|
end
|
25
29
|
|
26
|
-
def create_solo_json_tempfile(catalog_name, packages, &block)
|
30
|
+
def create_solo_json_tempfile(catalog_name, packages, configs, &block)
|
27
31
|
file = Tempfile.new('natives.temp_attrs_file')
|
28
|
-
file.write(json_attrs(catalog_name, packages))
|
32
|
+
file.write(json_attrs(catalog_name, packages, configs))
|
29
33
|
file.flush
|
30
34
|
file.rewind
|
31
35
|
begin
|
@@ -35,6 +39,11 @@ module Natives
|
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
42
|
+
def default_configs
|
43
|
+
{
|
44
|
+
working_dir: current_working_dir
|
45
|
+
}
|
46
|
+
end
|
38
47
|
protected
|
39
48
|
|
40
49
|
def current_working_dir
|
@@ -45,15 +54,13 @@ module Natives
|
|
45
54
|
File.absolute_path(File.join(File.dirname(__FILE__), '..', '..'))
|
46
55
|
end
|
47
56
|
|
48
|
-
def json_attrs(catalog_name, packages)
|
57
|
+
def json_attrs(catalog_name, packages, configs)
|
49
58
|
{
|
50
59
|
"natives" => {
|
51
60
|
"install_list" => {
|
52
61
|
catalog_name => packages
|
53
62
|
},
|
54
|
-
"
|
55
|
-
"working_dir" => current_working_dir
|
56
|
-
}
|
63
|
+
"configs" => configs
|
57
64
|
}
|
58
65
|
}.to_json
|
59
66
|
end
|
data/lib/natives/cli.rb
CHANGED
@@ -4,21 +4,39 @@ require 'natives/gemfile_viewer'
|
|
4
4
|
|
5
5
|
module Natives
|
6
6
|
class Cli < Thor
|
7
|
-
|
7
|
+
default_task :install
|
8
|
+
|
9
|
+
desc 'install [ENTRY1 ENTRY2 ..]',
|
10
|
+
'install native packages required by the catalog entries'
|
11
|
+
|
8
12
|
method_option :catalog, default: 'rubygems',
|
9
|
-
|
10
|
-
|
11
|
-
method_option :gemfile, default: 'Gemfile'
|
13
|
+
aliases: '-c',
|
14
|
+
desc: 'use this catalog'
|
15
|
+
method_option :gemfile, default: 'Gemfile',
|
16
|
+
desc: 'use gems in the gemfile as the catalog entries'
|
17
|
+
method_option :"update-provider", type: 'boolean',
|
18
|
+
default: false,
|
19
|
+
aliases: '-u',
|
20
|
+
desc: "update package provider's repo (eg. apt-get update)"
|
21
|
+
|
12
22
|
def install(*packages)
|
13
23
|
catalog = options[:catalog]
|
14
|
-
|
24
|
+
configs = {
|
25
|
+
update_provider: options['update-provider']
|
26
|
+
}
|
15
27
|
if catalog == 'rubygems' && packages.empty?
|
16
28
|
packages = packages_in_gemfile(options[:gemfile])
|
17
29
|
end
|
18
30
|
|
19
|
-
puts "
|
31
|
+
puts "catalog: #{catalog.inspect}"
|
32
|
+
puts "entries: #{packages.inspect}"
|
33
|
+
puts "configs: #{configs}"
|
34
|
+
puts ""
|
35
|
+
|
36
|
+
Natives::App.new.install(catalog, packages, configs)
|
20
37
|
|
21
|
-
|
38
|
+
rescue => ex
|
39
|
+
$stderr.puts ex.message
|
22
40
|
end
|
23
41
|
|
24
42
|
protected
|
data/natives.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: natives 0.
|
5
|
+
# stub: natives 0.4.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "natives"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.4.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.authors = ["Huiming Teo"]
|
data/spec/natives/app_spec.rb
CHANGED
@@ -7,7 +7,8 @@ describe Natives::App do
|
|
7
7
|
|
8
8
|
it "forces packages argument to be an Array" do
|
9
9
|
app.should_receive(:run_chef_solo)
|
10
|
-
app.should_receive(:create_solo_json_tempfile).
|
10
|
+
app.should_receive(:create_solo_json_tempfile).
|
11
|
+
with("foo", [], app.default_configs).
|
11
12
|
and_call_original
|
12
13
|
|
13
14
|
app.install("foo", nil)
|
@@ -15,11 +16,29 @@ describe Natives::App do
|
|
15
16
|
|
16
17
|
it "forces catalog_name to be a String" do
|
17
18
|
app.should_receive(:run_chef_solo)
|
18
|
-
app.should_receive(:create_solo_json_tempfile).
|
19
|
+
app.should_receive(:create_solo_json_tempfile).
|
20
|
+
with("", ['foo', 'bar'], app.default_configs).
|
19
21
|
and_call_original
|
20
22
|
|
21
|
-
app.install(nil,
|
23
|
+
app.install(nil, ['foo', 'bar'])
|
24
|
+
end
|
25
|
+
|
26
|
+
it "merges configs with default configs" do
|
27
|
+
app.should_receive(:run_chef_solo)
|
28
|
+
app.should_receive(:create_solo_json_tempfile).
|
29
|
+
with("foobar", ['foo', 'bar'], app.default_configs.merge({foo: false})).
|
30
|
+
and_call_original
|
31
|
+
|
32
|
+
app.install('foobar', ['foo', 'bar'], {foo: false})
|
33
|
+
end
|
34
|
+
|
35
|
+
it "treats nil configs as empty hash" do
|
36
|
+
app.should_receive(:run_chef_solo)
|
37
|
+
app.should_receive(:create_solo_json_tempfile).
|
38
|
+
with("foobar", ['foo', 'bar'], app.default_configs).
|
39
|
+
and_call_original
|
22
40
|
|
41
|
+
app.install('foobar', ['foo', 'bar'], nil)
|
23
42
|
end
|
24
43
|
end
|
25
44
|
|
@@ -28,7 +47,10 @@ describe Natives::App do
|
|
28
47
|
|
29
48
|
it "generates a valid solo.json file" do
|
30
49
|
json = nil
|
31
|
-
app.create_solo_json_tempfile(
|
50
|
+
app.create_solo_json_tempfile(
|
51
|
+
'rubygems',
|
52
|
+
['foo', 'bar'],
|
53
|
+
{working_dir: '/path/to/working_dir'}) do |file|
|
32
54
|
json = JSON.parse(file.read)
|
33
55
|
end
|
34
56
|
expect(json).to eq({
|
@@ -36,8 +58,8 @@ describe Natives::App do
|
|
36
58
|
"install_list" => {
|
37
59
|
"rubygems" => ["foo", "bar"]
|
38
60
|
},
|
39
|
-
"
|
40
|
-
"working_dir" =>
|
61
|
+
"configs" => {
|
62
|
+
"working_dir" => '/path/to/working_dir'
|
41
63
|
}
|
42
64
|
}
|
43
65
|
})
|
@@ -45,7 +67,9 @@ describe Natives::App do
|
|
45
67
|
|
46
68
|
it "generates solo.json file based on the given catalog name" do
|
47
69
|
json = nil
|
48
|
-
app.create_solo_json_tempfile(
|
70
|
+
app.create_solo_json_tempfile(
|
71
|
+
'npm', ['foo', 'bar'],
|
72
|
+
{working_dir: '/path/to/foo'}) do |file|
|
49
73
|
json = JSON.parse(file.read)
|
50
74
|
end
|
51
75
|
expect(json).to eq({
|
@@ -53,8 +77,8 @@ describe Natives::App do
|
|
53
77
|
"install_list" => {
|
54
78
|
"npm" => ["foo", "bar"]
|
55
79
|
},
|
56
|
-
"
|
57
|
-
"working_dir" =>
|
80
|
+
"configs" => {
|
81
|
+
"working_dir" => '/path/to/foo'
|
58
82
|
}
|
59
83
|
}
|
60
84
|
})
|
@@ -62,7 +86,7 @@ describe Natives::App do
|
|
62
86
|
|
63
87
|
it "handles empty package list" do
|
64
88
|
json = nil
|
65
|
-
app.create_solo_json_tempfile('rubygems', []) do |file|
|
89
|
+
app.create_solo_json_tempfile('rubygems', [], {}) do |file|
|
66
90
|
json = JSON.parse(file.read)
|
67
91
|
end
|
68
92
|
expect(json).to eq({
|
@@ -70,8 +94,7 @@ describe Natives::App do
|
|
70
94
|
"install_list" => {
|
71
95
|
"rubygems" => []
|
72
96
|
},
|
73
|
-
"
|
74
|
-
"working_dir" => Dir.pwd
|
97
|
+
"configs" => {
|
75
98
|
}
|
76
99
|
|
77
100
|
}
|