natives 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjhlODM3ZWJiNzkwMTY3ZDEwN2Y4YzY2NjJhN2Q0NmQ0NTFmOTk2Zg==
4
+ MWQ1ZWNjOWFlNTg3YThlOGZhZjE3ZmEzMWU2MmJlYWY5MzhhMzdiZA==
5
5
  data.tar.gz: !binary |-
6
- MWNjYTc2Njg3MmJmYzg4OTUxNDQwMjhkNDZlYjk3OWZlNDRhNGZiOA==
6
+ YjE2ZWY5Y2IwMzI0NjljNGJkNzE1MmY0YTYzYTgyMWU3Y2FkOWE2OQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OTFlNjI1MjU0YzY2NjU1YTNhZTIyYzJmODhlZGJkY2M3YTMxMzdlOGQ5Mjky
10
- YThhNTJlZjBjYzVhNzEwZDBlYjZiOTEzNGZmMWY2OWZiMzE1YmRmNTM2YjU0
11
- YjA5YTQ3Zjc1OTQwODg2MzRiZDlkMTMwMmI5NTA1N2VmMmQzNjQ=
9
+ ZTZmYmE1YzRjNDNmMGJhM2Y3NWEzM2RhZGZjY2U0ZDNkZTM1M2U4ZDE2YmYz
10
+ ZTEzNzJlYTNjM2RhY2JiYjM3MzMwNjRmMGMzMWMyMDcyMWU2Zjg3NGVkY2Ux
11
+ MjE5YjBhODk4MWJkMmMyNWRiYzQyZmNhNjMyZmY1YjZjN2JjM2M=
12
12
  data.tar.gz: !binary |-
13
- NDk5ZjNmNjdlMmI0OWE0ZDc5Y2Q5MjcxYjEyYjU2ZWMwMzBjMDNhOGY0YzE2
14
- ZDRmODk2MWRhYTkyMDJmMTU3OTlmMTQ4ZjJiZDliZDdiNmU5ZWU3NmY0M2Ni
15
- OTIxMGM0MmQ2ODQwNTc3YWMxOGRiMWE5YjcyMjZhZjRlMTQ2OWQ=
13
+ NmQwNzMxZjUxYmVhNjVkNjhjMjIyMzBiMDkzOWQwMWYwYzQxZTE4ZWUyM2Jh
14
+ YTY3ZDZmMWFhYWIyMTdkNDM4YmNhMmYwNWIzOGM3MGQxNjIwMjM1NTczZjU2
15
+ ODg1YWZkYTJlMjEyZTg5NmU5Zjg0MjkxZjI4MmQ0OWRhZWFhMmQ=
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # natives
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/natives.png)](http://badge.fury.io/rb/natives)
4
+ [![Code Climate](https://codeclimate.com/github/teohm/natives.png)](https://codeclimate.com/github/teohm/natives)
5
+
3
6
  Installs native library packages required by gems on your machine.
4
7
 
5
8
  It lookups native packages from a [multi-platform catalog](https://github.com/teohm/natives-catalog/blob/master/catalogs/rubygems.yaml) maintained by [natives-catalog](https://github.com/teohm/natives-catalog) project.
@@ -18,10 +21,13 @@ It will lookup and install native packages (e.g. curl, qt, sqlite) required by t
18
21
 
19
22
 
20
23
  ### Have a Gemfile?
21
- If current working directory has a Gemfile, `natives install` will automatically use the gems specified in the Gemfile.
24
+ If your working directory has a Gemfile, `natives install` will automatically use gems specified in the Gemfile.
22
25
 
23
26
  ```
24
27
  natives install
28
+ natives # run 'install' task by default
29
+
30
+ natives install --gemfile=Gemfile.special
25
31
  natives install --gemfile=path/to/Gemfile.special
26
32
  ```
27
33
 
@@ -32,6 +38,14 @@ natives install --catalog npm sqlite3
32
38
  ```
33
39
  By default, it uses `rubygems` catalog, but it's easy to tell `natives` to use another catalog.
34
40
 
41
+ ### Misc
42
+
43
+ ```
44
+ natives install --test-run # run without installing native packages
45
+ natives install --update-provider # update homebrew/apt-get repo first
46
+ natives help
47
+ ```
48
+
35
49
  ## Catalogs
36
50
 
37
51
  ### System-wide
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
data/lib/natives/app.rb CHANGED
@@ -5,17 +5,17 @@ require 'chef/application/solo'
5
5
  module Natives
6
6
  class App
7
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 || {})
8
+ configs = default_configs.merge(configs || {})
9
+ why_run = configs.delete(:test_run){ false }
12
10
 
11
+ create_solo_json_tempfile(
12
+ catalog_name.to_s, Array(packages), configs
13
13
  ) do |attrs_file|
14
- run_chef_solo(attrs_file)
14
+ run_chef_solo(attrs_file, why_run)
15
15
  end
16
16
  end
17
17
 
18
- def run_chef_solo(json_attrs_file)
18
+ def run_chef_solo(json_attrs_file, why_run=false)
19
19
  ARGV.clear
20
20
  [
21
21
  '-c', File.join(gem_base_path, 'chef', 'solo.rb'),
@@ -24,6 +24,9 @@ module Natives
24
24
  ].each do |token|
25
25
  ARGV << token
26
26
  end
27
+
28
+ ARGV << '-W' if why_run
29
+
27
30
  Chef::Application::Solo.new.run
28
31
  end
29
32
 
data/lib/natives/cli.rb CHANGED
@@ -6,6 +6,11 @@ module Natives
6
6
  class Cli < Thor
7
7
  default_task :install
8
8
 
9
+ desc 'version', 'print the version number'
10
+ def version
11
+ puts IO.read('VERSION')
12
+ end
13
+
9
14
  desc 'install [ENTRY1 ENTRY2 ..]',
10
15
  'install native packages required by the catalog entries'
11
16
 
@@ -19,10 +24,16 @@ module Natives
19
24
  aliases: '-u',
20
25
  desc: "update package provider's repo (eg. apt-get update)"
21
26
 
27
+ method_option :"test-run", type: 'boolean',
28
+ default: false,
29
+ aliases: %w(-t --dry-run),
30
+ desc: "run without actually installing native packages"
31
+
22
32
  def install(*packages)
23
33
  catalog = options[:catalog]
24
34
  configs = {
25
- update_provider: options['update-provider']
35
+ update_provider: options['update-provider'],
36
+ test_run: options['test-run']
26
37
  }
27
38
  if catalog == 'rubygems' && packages.empty?
28
39
  packages = packages_in_gemfile(options[:gemfile])
data/natives.gemspec CHANGED
@@ -2,15 +2,15 @@
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.4.0 ruby lib
5
+ # stub: natives 0.4.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "natives"
9
- s.version = "0.4.0"
9
+ s.version = "0.4.1"
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"]
13
- s.date = "2013-11-05"
13
+ s.date = "2013-11-06"
14
14
  s.description = "Installs native library packages required by Ruby gems on different platforms, based on the catalog maintained by natives-catalog project."
15
15
  s.email = "teohuiming@gmail.com"
16
16
  s.executables = ["natives"]
@@ -40,6 +40,16 @@ describe Natives::App do
40
40
 
41
41
  app.install('foobar', ['foo', 'bar'], nil)
42
42
  end
43
+
44
+ it "removes test_run flag from configs and use it when run Chef Solo" do
45
+ app.should_receive(:run_chef_solo).
46
+ with(anything, true)
47
+ app.should_receive(:create_solo_json_tempfile).
48
+ with("foobar", ['foo', 'bar'], app.default_configs).
49
+ and_call_original
50
+
51
+ app.install('foobar', ['foo', 'bar'], {test_run: true})
52
+ end
43
53
  end
44
54
 
45
55
  describe "#create_solo_json_tempfile" do
@@ -108,7 +118,6 @@ describe Natives::App do
108
118
  it "rewrites ARGV with Chef Solo options and run Chef Solo Application" do
109
119
  attrs_file = double()
110
120
  attrs_file.stub(:to_path) { '/path/to/attrs_file' }
111
-
112
121
  Chef::Application::Solo.any_instance.should_receive(:run)
113
122
 
114
123
  app.run_chef_solo(attrs_file)
@@ -121,5 +130,24 @@ describe Natives::App do
121
130
  '-j', '/path/to/attrs_file'
122
131
  ])
123
132
  end
133
+
134
+ it "can turn on Chef's --why-run flag" do
135
+ attrs_file = double()
136
+ attrs_file.stub(:to_path) { '/path/to/attrs_file' }
137
+ Chef::Application::Solo.any_instance.should_receive(:run)
138
+
139
+ test_run = true
140
+ app.run_chef_solo(attrs_file, test_run)
141
+
142
+ expect(ARGV).to eq([
143
+ '-c',
144
+ File.absolute_path(File.join(
145
+ File.dirname(__FILE__), '..', '..', 'chef', 'solo.rb')),
146
+ '-o', 'natives',
147
+ '-j', '/path/to/attrs_file',
148
+ '-W'
149
+ ])
150
+
151
+ end
124
152
  end
125
153
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: natives
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Huiming Teo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-05 00:00:00.000000000 Z
11
+ date: 2013-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef