config_curator 0.2.4 → 0.3.0

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: 5e2b559882994bb8018bbe48134184ae10ff7f77
4
- data.tar.gz: 2f9dc98e7e92abed3919cd1254ec1ead0d92a136
3
+ metadata.gz: 60147ff36c757ecf906de200cfee1119dc440f33
4
+ data.tar.gz: fee2526348a940b0c24868f3cbb70c0a5ff52179
5
5
  SHA512:
6
- metadata.gz: 743e75e64d381dad366fcd0edbab0c3e9ffa2540492883a6ccf4ada91ab24a5b3519652f0ea0d061aafc63b0d6bdb73ef3af2eeb13c36c081a0c876d75ee711c
7
- data.tar.gz: 42344300ff9789b36ac74860167ba3338910a7aabffa8a38b9c3974b23425498302306109c2cd27ac86b9d43e55a32ed41d7e0d59de76df2173c86c924f6ead8
6
+ metadata.gz: e38e6a073ea040e258bddcd6d768e1c874dc13487cbc0f8fef0d1d0c46c32e6eacc3fe8c4d55900ff2aca8a1ce74b7f9bf14f749a6461bd6218dfcc8f9af0ad2
7
+ data.tar.gz: d7b8d47e299d248d4d9e29e6e693a9ee04920ae9482036eb614f6811ec7791d5a8b1b5a542a7c4d650a4fafa176d8b76b1e4cf0fdeb545ff559a915b2f972dc6
@@ -1,9 +1,8 @@
1
1
  language: ruby
2
- cache: bundler
3
2
  rvm:
4
3
  - 2.0.0
5
- - 2.1.5
6
- - 2.2.0
4
+ - 2.1.6
5
+ - 2.2.2
7
6
  cache: bundler
8
7
  sudo: false
9
8
 
@@ -1,5 +1,11 @@
1
1
  # ChangeLog
2
2
 
3
+ ## 0.3.0
4
+
5
+ - Force rsync to use checksums when installing components.
6
+ - Units have a new `uninstall` action.
7
+ See the README for details.
8
+
3
9
  ## 0.2.4
4
10
 
5
11
  - Fix issue where wrong host-specific file would be installed.
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Config Curator
2
2
 
3
3
  [![Gem Version](https://img.shields.io/gem/v/config_curator.svg)](https://rubygems.org/gems/config_curator)
4
- [![MIT License](https://img.shields.io/badge/license-MIT-red.svg)](./LICENSE.txt)
4
+ [![MIT License](https://img.shields.io/github/license/razor-x/config_curator.svg)](./LICENSE.txt)
5
5
  [![Dependency Status](https://img.shields.io/gemnasium/razor-x/config_curator.svg)](https://gemnasium.com/razor-x/config_curator)
6
6
  [![Build Status](https://img.shields.io/travis/razor-x/config_curator.svg)](https://travis-ci.org/razor-x/config_curator)
7
- [![Coverage Status](https://img.shields.io/coveralls/razor-x/config_curator.svg)](https://coveralls.io/r/razor-x/config_curator)
7
+ [![Coverage Status](https://img.shields.io/codecov/c/github/razor-x/config_curator.svg)](https://codecov.io/github/razor-x/config_curator)
8
8
  [![Code Climate](https://img.shields.io/codeclimate/github/razor-x/config_curator.svg)](https://codeclimate.com/github/razor-x/config_curator)
9
9
 
10
10
  by Evan Boyd Sosenko.
@@ -30,6 +30,24 @@ e.g., file, directory, symbolic link, etc.,
30
30
  is actually a subclass of the more generic `Unit` type.
31
31
  Other types can be added simply by adding more subclasses.
32
32
 
33
+ ## Quick start
34
+
35
+ 1. Install the `config_curator` gem
36
+ (make sure installed gem binaries are in your PATH).
37
+
38
+ 2. Create a `manifest.yml` file, e.g.,
39
+
40
+ ```yaml
41
+ config_files:
42
+ - src: .config/git/config
43
+ ```
44
+
45
+ 3. Add `.config/git/config` to your project and run
46
+
47
+ ```bash
48
+ $ curate -v
49
+ ```
50
+
33
51
  ## Usage
34
52
 
35
53
  ### The `manifest.yml` file
@@ -45,7 +63,7 @@ or a unit type: `components`, `config_files`, or `symlinks`.
45
63
  Optional global Config Curator settings.
46
64
  Defaults listed below.
47
65
 
48
- ````yaml
66
+ ```yaml
49
67
  # All units installed relative to the root.
50
68
  root: "~/"
51
69
 
@@ -53,7 +71,7 @@ root: "~/"
53
71
  # Will automatically detect if not explicitly set.
54
72
  # Available tools: pacman, dpkg, pkgng.
55
73
  package_tool:
56
- ````
74
+ ```
57
75
 
58
76
  #### `defaults`
59
77
 
@@ -64,7 +82,7 @@ Any per-unit attribute will override the value here.
64
82
  Any attribute not set here will use
65
83
  the Config Curator defined defaults below.
66
84
 
67
- ````yaml
85
+ ```yaml
68
86
  defaults:
69
87
  # File and directory permissions.
70
88
  # Empty values will not change permissions.
@@ -83,7 +101,7 @@ defaults:
83
101
  # Only install this unit if packages are present.
84
102
  # Empty array will not check for any packages.
85
103
  packages: []
86
- ````
104
+ ```
87
105
 
88
106
  #### Units
89
107
 
@@ -109,7 +127,7 @@ Components are installed before other units.
109
127
  The source will be mirrored to the destination.
110
128
  **Any existing files in the destination will be lost.**
111
129
 
112
- ````yaml
130
+ ```yaml
113
131
  components:
114
132
  - src: .config/terminator
115
133
 
@@ -118,7 +136,7 @@ components:
118
136
  fmode: 640
119
137
  dmode: 0750
120
138
  packages: [ tmux ]
121
- ````
139
+ ```
122
140
 
123
141
  ##### Config files are copied individually
124
142
 
@@ -130,7 +148,7 @@ In this example, the files `.tmux.conf` and `.tmux.baz.conf` both exist:
130
148
  the first will be installed on hosts `foo` and `bar`,
131
149
  while the second will be installed on host `baz`.
132
150
 
133
- ````yaml
151
+ ```yaml
134
152
  config_files:
135
153
  - src: .gitconfig
136
154
  - src: .bundle/config
@@ -142,7 +160,7 @@ config_files:
142
160
 
143
161
  - src: .tmux.conf
144
162
  hosts: [ foo, bar, baz ]
145
- ````
163
+ ```
146
164
 
147
165
  ##### Symlinks
148
166
 
@@ -150,26 +168,26 @@ Symlinks create a symbolic link to the `src` at the `dst`.
150
168
 
151
169
  They are installed last.
152
170
 
153
- ````yaml
171
+ ```yaml
154
172
  symlinks:
155
173
  - src: ~/Wallpaper/tux.png
156
174
  dst: .config/awesome/wall.png
157
175
  packages: [ awesome ]
158
- ````
176
+ ```
159
177
 
160
178
  ### The `curate` command
161
179
 
162
180
  Once you have prepared your manifest, simply run
163
181
 
164
- ````bash
182
+ ```bash
165
183
  $ curate
166
- ````
184
+ ```
167
185
 
168
186
  Or if you prefer more verbose feedback
169
187
 
170
- ````bash
188
+ ```bash
171
189
  $ curate -v
172
- ````
190
+ ```
173
191
 
174
192
  You can always get help with
175
193
 
@@ -186,12 +204,25 @@ Options:
186
204
  [--debug], [--no-debug]
187
205
  ```
188
206
 
207
+ #### Uninstalling units
208
+
209
+ Currently all units have an uninstall method.
210
+ Smart uninstall via `curate uninstall` is planned for an
211
+ [upcoming release](https://github.com/razor-x/config_curator/issues/7).
212
+
189
213
  ### Scripting
190
214
 
191
215
  Config Curator is fully scriptable for easy inclusion into other Ruby programs.
192
216
  The API is well documented for this purpose
193
217
  (see [Documentation](#documentation) above).
194
218
 
219
+ ### Plugins
220
+
221
+ Plugin support is
222
+ [planned for an upcoming release](https://github.com/razor-x/config_curator/issues/8).
223
+ If you like Config Curator and want to write a plugin,
224
+ please let me know!
225
+
195
226
  ## Installation
196
227
 
197
228
  You can install the gem either with Bundler or directly.
@@ -203,21 +234,21 @@ along with `manifest.yml` into version control.
203
234
 
204
235
  Add this line to your application's Gemfile:
205
236
 
206
- ````ruby
237
+ ```ruby
207
238
  gem 'config_curator'
208
- ````
239
+ ```
209
240
 
210
241
  And then execute:
211
242
 
212
- ````bash
243
+ ```bash
213
244
  $ bundle
214
- ````
245
+ ```
215
246
 
216
247
  Or install it yourself as:
217
248
 
218
- ````bash
249
+ ```bash
219
250
  $ gem install config_curator
220
- ````
251
+ ```
221
252
 
222
253
  ## Documentation
223
254
 
@@ -225,8 +256,8 @@ The primary documentation for Config Curator is this README and the YARD source
225
256
 
226
257
  YARD documentation for all gem versions is hosted on the
227
258
  [Config Curator gem page](https://rubygems.org/gems/config_curator).
228
- Documentation for the latest commits is hosted on
229
- [the RubyDoc.info project page](http://rubydoc.info/github/razor-x/config_curator/frames).
259
+ Also checkout
260
+ [Omniref's interactive documentation](https://www.omniref.com/ruby/gems/config_curator).
230
261
 
231
262
  ## Development and Testing
232
263
 
@@ -236,30 +267,31 @@ The [Config Curator source](https://github.com/razor-x/config_curator)
236
267
  is hosted on GitHub.
237
268
  To clone the project run
238
269
 
239
- ````bash
270
+ ```bash
240
271
  $ git clone https://github.com/razor-x/config_curator.git
241
- ````
272
+ ```
242
273
 
243
274
  ### Rake
244
275
 
245
276
  Run `rake -T` to see all Rake tasks.
246
277
 
247
- ````
278
+ ```
248
279
  rake all # Run all tasks
249
- rake build # Build config_curator-0.0.0.gem into the pkg directory
250
- rake bump:current # Show current gem version
251
- rake bump:major # Bump major part of gem version
252
- rake bump:minor # Bump minor part of gem version
253
- rake bump:patch # Bump patch part of gem version
254
- rake bump:pre # Bump pre part of gem version
280
+ rake build # Build config_curator-0.3.0.gem into the pkg directory
281
+ rake bump:current[tag] # Show current gem version
282
+ rake bump:major[tag] # Bump major part of gem version
283
+ rake bump:minor[tag] # Bump minor part of gem version
284
+ rake bump:patch[tag] # Bump patch part of gem version
285
+ rake bump:pre[tag] # Bump pre part of gem version
255
286
  rake bump:set # Sets the version number using the VERSION environment variable
256
- rake install # Build and install config_curator-0.0.0.gem into system gems
257
- rake release # Create tag v0.0.0 and build and push config_curator-0.0.0.gem to Rubygems
287
+ rake install # Build and install config_curator-0.3.0.gem into system gems
288
+ rake install:local # Build and install config_curator-0.3.0.gem into system gems without network access
289
+ rake release # Create tag v0.3.0 and build and push config_curator-0.3.0.gem to Rubygems
258
290
  rake rubocop # Run RuboCop
259
291
  rake rubocop:auto_correct # Auto-correct RuboCop offenses
260
292
  rake spec # Run RSpec code examples
261
293
  rake yard # Generate YARD Documentation
262
- ````
294
+ ```
263
295
 
264
296
  ### Guard
265
297
 
@@ -41,6 +41,6 @@ Gem::Specification.new do |spec|
41
41
 
42
42
  spec.add_development_dependency 'rspec', '~> 3.1'
43
43
  spec.add_development_dependency 'simplecov', '~> 0.9'
44
- spec.add_development_dependency 'coveralls', '~> 0.7'
44
+ spec.add_development_dependency 'codecov', '~> 0.1'
45
45
  spec.add_development_dependency 'fuubar', '~> 2.0'
46
46
  end
@@ -143,9 +143,9 @@ module ConfigCurator
143
143
  end unless quiet || !success
144
144
  return true
145
145
 
146
- rescue Unit::InstallFailed => e
147
- logger.fatal { "Halting install! Install attempt failed for #{type_name(type)}: #{e}" }
148
- return false
146
+ rescue Unit::InstallFailed => e
147
+ logger.fatal { "Halting install! Install attempt failed for #{type_name(type)}: #{e}" }
148
+ return false
149
149
  end
150
150
 
151
151
  # Checks if a unit can be installed.
@@ -161,9 +161,9 @@ module ConfigCurator
161
161
  end unless quiet
162
162
  return true
163
163
 
164
- rescue Unit::InstallFailed => e
165
- logger.error { "Cannot install #{type_name(type)}: #{e}" }
166
- return false
164
+ rescue Unit::InstallFailed => e
165
+ logger.error { "Cannot install #{type_name(type)}: #{e}" }
166
+ return false
167
167
  end
168
168
  end
169
169
  end
@@ -18,6 +18,9 @@ module ConfigCurator
18
18
  # Unit installed relative to this path.
19
19
  root: Dir.home,
20
20
 
21
+ # Automatically uninstall units that would not be installed.
22
+ uninstall: false,
23
+
21
24
  # Package tool to use. See #package_lookup.
22
25
  package_tool: nil
23
26
  }
@@ -73,7 +76,22 @@ module ConfigCurator
73
76
  @package_lookup ||= PackageLookup.new tool: options[:package_tool]
74
77
  end
75
78
 
79
+ # Uninstalls the unit.
80
+ # @return [Boolean] if the unit was uninstalled
81
+ def uninstall(force: false)
82
+ return true if uninstall? || force
83
+ false
84
+ end
85
+
86
+ # Checks if the unit should be uninstalled.
87
+ # @return [Boolean] if the unit should be uninstalled
88
+ def uninstall?
89
+ return true if !install? && options[:uninstall]
90
+ false
91
+ end
92
+
76
93
  # Installs the unit.
94
+ # @return [Boolean] if the unit was installed
77
95
  def install
78
96
  return false unless install?
79
97
  true
@@ -8,6 +8,14 @@ module ConfigCurator
8
8
  class Component < Unit
9
9
  attr_accessor :fmode, :dmode, :owner, :group
10
10
 
11
+ # (see Unit#uninstall)
12
+ def uninstall(*args)
13
+ s = super(*args)
14
+ return s unless s
15
+ uninstall_component
16
+ true
17
+ end
18
+
11
19
  # (see Unit#install)
12
20
  def install
13
21
  s = super
@@ -30,13 +38,18 @@ module ConfigCurator
30
38
 
31
39
  private
32
40
 
41
+ # Uninstalls the component by removing the directory.
42
+ def uninstall_component
43
+ FileUtils.remove_entry_secure destination_path if Dir.exist? destination_path
44
+ end
45
+
33
46
  # Recursively creates the necessary directories and installs the component.
34
47
  # Any files in the install directory not in the source directory are removed.
35
48
  # Use rsync if available.
36
49
  def install_component
37
50
  if command? 'rsync'
38
51
  FileUtils.mkdir_p destination_path
39
- cmd = [command?('rsync'), '-rt', '--del', '--links', "#{source_path}/", destination_path]
52
+ cmd = [command?('rsync'), '-rtc', '--del', '--links', "#{source_path}/", destination_path]
40
53
  logger.debug { "Running command: #{cmd.join ' '}" }
41
54
  system(*cmd)
42
55
  else
@@ -56,7 +69,7 @@ module ConfigCurator
56
69
 
57
70
  {fmode: 'f', dmode: 'd'}.each do |k, v|
58
71
  next if send(k).nil?
59
- cmd = [find, destination_path, '-type', v, '-exec']
72
+ cmd = [find, destination_path, '-type', v, '-exec']
60
73
  cmd.concat [chmod, send(k).to_s(8), '{}', '+']
61
74
  logger.debug { "Running command: #{cmd.join ' '}" }
62
75
  system(*cmd)
@@ -23,6 +23,14 @@ module ConfigCurator
23
23
  @destination ||= @source
24
24
  end
25
25
 
26
+ # (see Unit#uninstall)
27
+ def uninstall(*args)
28
+ s = super(*args)
29
+ return s unless s
30
+ uninstall_file
31
+ true
32
+ end
33
+
26
34
  # (see Unit#install)
27
35
  def install
28
36
  s = super
@@ -44,6 +52,11 @@ module ConfigCurator
44
52
 
45
53
  private
46
54
 
55
+ # Uninstalls the file by removing it.
56
+ def uninstall_file
57
+ FileUtils.remove_entry_secure destination_path if File.exist? destination_path
58
+ end
59
+
47
60
  # Recursively creates the necessary directories and install the file.
48
61
  def install_file
49
62
  FileUtils.mkdir_p File.dirname(destination_path)
@@ -3,6 +3,14 @@ module ConfigCurator
3
3
  # The {#destination_path} will be a link
4
4
  # that points to the {#source_path}.
5
5
  class Symlink < Unit
6
+ # (see Unit#uninstall)
7
+ def uninstall(*args)
8
+ s = super(*args)
9
+ return s unless s
10
+ uninstall_symlink
11
+ true
12
+ end
13
+
6
14
  # (see Unit#install)
7
15
  def install
8
16
  s = super
@@ -22,6 +30,11 @@ module ConfigCurator
22
30
 
23
31
  private
24
32
 
33
+ # Uninstalls the symlink by removing it.
34
+ def uninstall_symlink
35
+ FileUtils.remove_entry_secure destination_path if File.exist? destination_path
36
+ end
37
+
25
38
  # Recursively creates the necessary directories and make the symlink.
26
39
  def install_symlink
27
40
  FileUtils.mkdir_p File.dirname(destination_path)
@@ -1,5 +1,5 @@
1
1
  # Simple and intelligent configuration file management.
2
2
  module ConfigCurator
3
3
  # Config Curator version.
4
- VERSION = '0.2.4'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -1,13 +1,14 @@
1
- require 'coveralls'
2
1
  require 'simplecov'
3
2
 
4
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
- SimpleCov::Formatter::HTMLFormatter,
6
- Coveralls::SimpleCov::Formatter
7
- ]
8
-
9
3
  SimpleCov.start
10
4
 
5
+ if ENV['CI'] == 'true'
6
+ require 'codecov'
7
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
8
+ else
9
+ SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
10
+ end
11
+
11
12
  require 'config_curator'
12
13
 
13
14
  RSpec.configure do |c|
@@ -91,6 +91,55 @@ describe ConfigCurator::Unit do
91
91
  end
92
92
  end
93
93
 
94
+ describe "#uninstall" do
95
+ context "when unit should be uninstalled" do
96
+ it "returns true" do
97
+ expect(unit).to receive(:uninstall?).and_return(true)
98
+ expect(unit.uninstall).to be true
99
+ end
100
+
101
+ it "returns true when uninstall is forced" do
102
+ expect(unit).to receive(:uninstall?).and_return(false)
103
+ expect(unit.uninstall force: true).to be true
104
+ end
105
+ end
106
+
107
+ context "when unit should not be uninstalled" do
108
+ it "returns false" do
109
+ expect(unit).to receive(:uninstall?).and_return(false)
110
+ expect(unit.uninstall).to be false
111
+ end
112
+ end
113
+ end
114
+
115
+ describe "#uninstall?" do
116
+ context "unit should not be installed" do
117
+ it "returns false by default" do
118
+ expect(unit).to receive(:install?).and_return(false)
119
+ expect(unit.uninstall?).to be false
120
+ end
121
+
122
+ it "returns true when uninstall option is set" do
123
+ unit.options[:uninstall] = true
124
+ expect(unit).to receive(:install?).and_return(false)
125
+ expect(unit.uninstall?).to be true
126
+ end
127
+ end
128
+
129
+ context "unit should be installed" do
130
+ it "returns false" do
131
+ expect(unit).to receive(:install?).and_return(true)
132
+ expect(unit.uninstall?).to be false
133
+ end
134
+
135
+ it "returns false when uninstall option is set" do
136
+ unit.options[:uninstall] = true
137
+ expect(unit).to receive(:install?).and_return(true)
138
+ expect(unit.uninstall?).to be false
139
+ end
140
+ end
141
+ end
142
+
94
143
  describe "#install" do
95
144
  context "when unit should be installed" do
96
145
  it "returns true" do
@@ -117,6 +166,28 @@ describe ConfigCurator::Unit do
117
166
  expect(unit).to receive(:packages_installed?)
118
167
  unit.install?
119
168
  end
169
+
170
+ context "when requirements are met" do
171
+ it "returns true" do
172
+ expect(unit).to receive(:allowed_host?).and_return(true)
173
+ expect(unit).to receive(:packages_installed?).and_return(true)
174
+ expect(unit.install?).to be true
175
+ end
176
+ end
177
+
178
+ context "when not on an allowed host" do
179
+ it "returns false" do
180
+ expect(unit).to receive(:allowed_host?).and_return(false)
181
+ expect(unit.install?).to be false
182
+ end
183
+ end
184
+
185
+ context "when required packages are not installed" do
186
+ it "returns false" do
187
+ expect(unit).to receive(:packages_installed?).and_return(false)
188
+ expect(unit.install?).to be false
189
+ end
190
+ end
120
191
  end
121
192
 
122
193
  describe "#allowed_host?" do
@@ -3,6 +3,24 @@ require 'spec_helper'
3
3
  describe ConfigCurator::Component do
4
4
  subject(:component) { ConfigCurator::Component.new }
5
5
 
6
+ describe "#uninstall" do
7
+ context "when component should be uninstalled" do
8
+ it "uninstalls the component and returns true" do
9
+ expect(component).to receive(:uninstall?).and_return(true)
10
+ expect(component).to receive(:uninstall_component)
11
+ expect(component.uninstall).to be true
12
+ end
13
+ end
14
+
15
+ context "when component should not be uninstalled" do
16
+ it "does not uninstall the component and returns false" do
17
+ expect(component).to receive(:uninstall?).and_return(false)
18
+ expect(component).to_not receive(:uninstall_component)
19
+ expect(component.uninstall).to be false
20
+ end
21
+ end
22
+ end
23
+
6
24
  describe "#install" do
7
25
  context "when component should be installed" do
8
26
  it "installs the component and returns true" do
@@ -45,6 +45,24 @@ describe ConfigCurator::ConfigFile do
45
45
  end
46
46
  end
47
47
 
48
+ describe "#uninstall" do
49
+ context "when config file should be uninstalled" do
50
+ it "uninstalls the config file and returns true" do
51
+ expect(config_file).to receive(:uninstall?).and_return(true)
52
+ expect(config_file).to receive(:uninstall_file)
53
+ expect(config_file.uninstall).to be true
54
+ end
55
+ end
56
+
57
+ context "when config file should not be uninstalled" do
58
+ it "does not uninstall the config file and returns false" do
59
+ expect(config_file).to receive(:uninstall?).and_return(false)
60
+ expect(config_file).to_not receive(:uninstall_file)
61
+ expect(config_file.uninstall).to be false
62
+ end
63
+ end
64
+ end
65
+
48
66
  describe "#install" do
49
67
  context "when config file should be installed" do
50
68
  it "installs the config file and returns true" do
@@ -3,6 +3,24 @@ require 'spec_helper'
3
3
  describe ConfigCurator::Symlink do
4
4
  subject(:symlink) { ConfigCurator::Symlink.new }
5
5
 
6
+ describe "#uninstall" do
7
+ context "when symlink should be uninstalled" do
8
+ it "uninstalls the symlink and returns true" do
9
+ expect(symlink).to receive(:uninstall?).and_return(true)
10
+ expect(symlink).to receive(:uninstall_symlink)
11
+ expect(symlink.uninstall).to be true
12
+ end
13
+ end
14
+
15
+ context "when symlink should not be uninstalled" do
16
+ it "does not uninstall the symlink and returns false" do
17
+ expect(symlink).to receive(:uninstall?).and_return(false)
18
+ expect(symlink).to_not receive(:uninstall_symlink)
19
+ expect(symlink.uninstall).to be false
20
+ end
21
+ end
22
+ end
23
+
6
24
  describe "#install" do
7
25
  context "when symbolic link should be installed" do
8
26
  it "installs the symbolic link and returns true" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: config_curator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Boyd Sosenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-17 00:00:00.000000000 Z
11
+ date: 2015-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -235,19 +235,19 @@ dependencies:
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0.9'
237
237
  - !ruby/object:Gem::Dependency
238
- name: coveralls
238
+ name: codecov
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
241
  - - "~>"
242
242
  - !ruby/object:Gem::Version
243
- version: '0.7'
243
+ version: '0.1'
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
248
  - - "~>"
249
249
  - !ruby/object:Gem::Version
250
- version: '0.7'
250
+ version: '0.1'
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: fuubar
253
253
  requirement: !ruby/object:Gem::Requirement