vendorificator 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/tmp
17
17
  test/version_tmp
18
18
  tmp
19
19
  /.rbx
20
+ /log
data/.travis.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  language: ruby
2
+ bundler_args: --without development_workstation
2
3
  rvm:
3
4
  - 1.8.7
4
5
  - 1.9.2
data/Gemfile CHANGED
@@ -4,7 +4,15 @@ source 'https://rubygems.org'
4
4
  gemspec
5
5
 
6
6
  group :development do
7
- gem "rake"
7
+ gem "ZenTest", "4.8.3"
8
+ git "git://github.com/mpasternacki/wrong.git",
9
+ :ref => 'ad025241e5772373264d1bf62168e2bf3780ccf9' do
10
+ gem 'wrong'
11
+ end
12
+ gem 'minitest-ansi'
13
+ end
14
+
15
+ group :development_workstation do
8
16
  gem "pry"
9
17
  gem "awesome_print"
10
18
  gem "relish"
data/README.md CHANGED
@@ -40,6 +40,9 @@ subcommands.
40
40
  Run `vendor` to see list of subcommands. Run `vendor help _command_`
41
41
  to get detailed description of a command.
42
42
 
43
+ There is a lightning talk presentation/demo slide deck online at
44
+ https://speakerdeck.com/mpasternacki/vendorificator
45
+
43
46
  ### Commands
44
47
 
45
48
  Most important commands are listed here; use `vendor help` for more
data/Rakefile CHANGED
@@ -4,6 +4,7 @@ require "bundler"
4
4
  Bundler.setup
5
5
 
6
6
  require "bundler/gem_tasks"
7
+ require 'rake/testtask'
7
8
 
8
9
  namespace :relish do
9
10
  desc "Publish documentation to Relish"
@@ -16,9 +17,8 @@ begin
16
17
  require 'cucumber'
17
18
  require 'cucumber/rake/task'
18
19
 
19
- Cucumber::Rake::Task.new(:features) do |t|
20
- t.cucumber_opts = "--format pretty --verbose"
21
- end
20
+ desc 'Run Cucumber features'
21
+ Cucumber::Rake::Task.new(:features)
22
22
  rescue LoadError
23
23
  desc 'Cucumber rake task not available'
24
24
  task :features do
@@ -26,4 +26,10 @@ rescue LoadError
26
26
  end
27
27
  end
28
28
 
29
- task :default => :features
29
+ desc "Run Minitest specs"
30
+ Rake::TestTask.new :spec do |task|
31
+ task.libs << 'spec'
32
+ task.test_files = FileList['spec/**/*_spec.rb']
33
+ end
34
+
35
+ task :default => [:spec, :features]
data/cucumber.yml ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ default: --format progress
@@ -39,11 +39,14 @@ module Vendorificator
39
39
  end
40
40
 
41
41
  def command_succeeded(print_failed=true)
42
- command.error!
43
- true
44
- rescue Mixlib::ShellOut::ShellCommandFailed
45
- print_command_result if print_failed
46
- false
42
+ begin
43
+ command.error!
44
+ rescue Mixlib::ShellOut::ShellCommandFailed
45
+ print_command_result if print_failed
46
+ false
47
+ else
48
+ true
49
+ end
47
50
  end
48
51
 
49
52
  def command_stdout
@@ -33,8 +33,10 @@ module Vendorificator
33
33
  end
34
34
 
35
35
  desc :sync, "Download new or updated vendor files"
36
+ method_option :update, :type => :boolean, :default => false
36
37
  def sync
37
38
  ensure_clean_repo!
39
+ conf[:use_upstream_version] = options[:update]
38
40
  Vendorificator::Config.each_module(*modules) do |mod|
39
41
  say_status :module, mod.name
40
42
  begin
@@ -47,8 +49,10 @@ module Vendorificator
47
49
  end
48
50
 
49
51
  desc "status", "List known vendor modules and their status"
52
+ method_option :update, :type => :boolean, :default => false
50
53
  def status
51
54
  say_status 'WARNING', 'Git repository is not clean', :red unless repo.clean?
55
+ conf[:use_upstream_version] = options[:update]
52
56
  Vendorificator::Config.each_module(*modules) do |mod|
53
57
  status_line = mod.to_s
54
58
 
@@ -136,7 +140,7 @@ EOF
136
140
  binding.pry
137
141
  end
138
142
 
139
- def self.start
143
+ def self.start(*args)
140
144
  # Make --git-options always quoted
141
145
  if i = ARGV.index('--git-options')
142
146
  ARGV[i+1,0] = '--'
@@ -145,15 +149,15 @@ EOF
145
149
  if ENV['FIXTURES_DIR']
146
150
  require 'vcr'
147
151
  VCR.configure do |c|
148
- c.cassette_library_dir = File.join(ENV['FIXTURES_DIR'], 'vcr_cassettes')
152
+ c.cassette_library_dir = File.join(ENV['FIXTURES_DIR'], 'vcr')
149
153
  c.default_cassette_options = { :record => :new_episodes }
150
- c.hook_into :fakeweb
154
+ c.hook_into :webmock
151
155
  end
152
156
  VCR.use_cassette(ENV['VCR_CASSETTE'] || 'vendorificator') do
153
- super
157
+ super(*args)
154
158
  end
155
159
  else
156
- super
160
+ super(*args)
157
161
  end
158
162
  end
159
163
 
@@ -40,7 +40,7 @@ module Vendorificator
40
40
  end
41
41
 
42
42
  def initialize(name, args={}, &block)
43
- @category = args.delete(:category)
43
+ @category = args.delete(:category) if args.key?(:category)
44
44
 
45
45
  @name = name
46
46
  @args = args
@@ -53,7 +53,11 @@ module Vendorificator
53
53
  end
54
54
 
55
55
  def category
56
- @category || self.class.category
56
+ if instance_variable_defined?(:@category)
57
+ @category
58
+ else
59
+ self.class.category
60
+ end
57
61
  end
58
62
 
59
63
  def branch_name
@@ -115,7 +119,7 @@ module Vendorificator
115
119
  end
116
120
 
117
121
  def version
118
- @args[:version] || merged_version || upstream_version
122
+ @args[:version] || (!conf[:use_upstream_version] && merged_version) || upstream_version
119
123
  end
120
124
 
121
125
  def upstream_version
@@ -1,3 +1,3 @@
1
1
  module Vendorificator
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ module Vendorificator
4
+ describe VERSION do
5
+ it 'is equal to itself' do
6
+ assert { VERSION == Vendorificator::VERSION }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ Bundler.setup
4
+
5
+ require 'minitest/spec'
6
+ require 'minitest/autorun'
7
+ require 'vcr'
8
+ require 'wrong'
9
+ require 'wrong/adapters/minitest'
10
+
11
+ begin
12
+ require 'minitest/ansi'
13
+ rescue LoadError # that's fine, we'll live without it
14
+ else
15
+ MiniTest::ANSI.use! if STDOUT.tty?
16
+ end
17
+
18
+ require 'vendorificator'
19
+
20
+ VCR.configure do |config|
21
+ config.cassette_library_dir = 'features/fixtures/vcr'
22
+ config.default_cassette_options = { :record => :new_episodes }
23
+ config.hook_into :webmock
24
+ end
25
+
26
+ Vendorificator::Config[:root_dir] = Pathname.new(__FILE__).dirname
27
+
28
+ class MiniTest::Spec
29
+ def conf
30
+ Vendorificator::Config
31
+ end
32
+
33
+ before :each do
34
+ @saved_configuration = Marshal.load(Marshal.dump(conf.configuration))
35
+ @saved_methods = conf.methods
36
+ end
37
+
38
+ after :each do
39
+ # Remove all new methods defined on Configuration over the run
40
+ conf[:methods_to_remove!] = conf.methods - @saved_methods
41
+
42
+ class << conf
43
+ Vendorificator::Config[:methods_to_remove!].each do |method_to_remove|
44
+ remove_method method_to_remove
45
+ end
46
+ end
47
+ assert { conf.methods.sort == @saved_methods.sort }
48
+
49
+ # Restore saved configuration
50
+ conf.configuration = @saved_configuration
51
+ end
52
+
53
+ def vendorfile(&block)
54
+ Vendorificator::Config.instance_eval &block
55
+ end
56
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ module Vendorificator
4
+ class Vendor::Categorized < Vendor
5
+ @category = :test
6
+ end
7
+
8
+ class Vendor::Custom < Vendor
9
+ @method_name = :whatever
10
+ end
11
+
12
+ describe Vendor do
13
+ describe '.category' do
14
+ it 'defaults to nil' do
15
+ assert { Vendor.category == nil }
16
+ end
17
+
18
+ it 'can be overridden in a subclass' do
19
+ assert { Vendor::Categorized.category == :test }
20
+ end
21
+ end
22
+
23
+ describe '.install!' do
24
+ it "creates a method inside Vendorificator::Config" do
25
+ deny { conf.respond_to?(:categorized) }
26
+
27
+ Vendor::Categorized.install!
28
+ assert { conf.respond_to?(:categorized) }
29
+ end
30
+
31
+ it "uses @method_name for method's name if set" do
32
+ deny { conf.respond_to?(:custom) }
33
+ deny { conf.respond_to?(:whatever) }
34
+
35
+ Vendor::Custom.install!
36
+ deny { conf.respond_to?(:custom) }
37
+ assert { conf.respond_to?(:whatever) }
38
+ end
39
+ end
40
+
41
+ describe '#category' do
42
+ it 'defaults to class attribute' do
43
+ assert { Vendor.new('test').category == nil }
44
+ assert { Vendor::Categorized.new('test').category == :test }
45
+ end
46
+
47
+ it 'can be overriden by option' do
48
+ assert { Vendor.new('test', :category => :foo).category == :foo }
49
+ assert { Vendor::Categorized.new('test', :category => :foo).category == :foo }
50
+ end
51
+
52
+ it 'can be reset to nil by option' do
53
+ assert { Vendor::Categorized.new('test', :category => nil).category == nil }
54
+ end
55
+
56
+ it 'is inserted into paths and other names' do
57
+ uncategorized = Vendor.new('test')
58
+ categorized = Vendor.new('test', :category => :cat)
59
+
60
+ deny { uncategorized.branch_name.include? 'cat' }
61
+ assert { categorized.branch_name.include? 'cat' }
62
+
63
+ deny { uncategorized.path.include? 'cat' }
64
+ assert { categorized.path.include? 'cat' }
65
+
66
+ deny { uncategorized.tag_name.include? 'cat' }
67
+ assert { categorized.tag_name.include? 'cat' }
68
+ end
69
+ end
70
+ end
71
+ end
@@ -25,6 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.add_development_dependency 'mixlib-shellout'
26
26
  gem.add_development_dependency 'chef', '>= 10.16.0'
27
27
  gem.add_development_dependency 'vcr'
28
- gem.add_development_dependency 'fakeweb'
29
- gem.add_development_dependency 'wrong'
28
+ gem.add_development_dependency 'webmock'
29
+ gem.add_development_dependency 'wrong', '>= 0.7.0'
30
+ gem.add_development_dependency 'rake'
30
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vendorificator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-03 00:00:00.000000000 Z
12
+ date: 2013-02-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: escape
@@ -156,7 +156,7 @@ dependencies:
156
156
  - !ruby/object:Gem::Version
157
157
  version: '0'
158
158
  - !ruby/object:Gem::Dependency
159
- name: fakeweb
159
+ name: webmock
160
160
  requirement: !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
@@ -173,6 +173,22 @@ dependencies:
173
173
  version: '0'
174
174
  - !ruby/object:Gem::Dependency
175
175
  name: wrong
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: 0.7.0
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: 0.7.0
190
+ - !ruby/object:Gem::Dependency
191
+ name: rake
176
192
  requirement: !ruby/object:Gem::Requirement
177
193
  none: false
178
194
  requirements:
@@ -204,6 +220,7 @@ files:
204
220
  - Rakefile
205
221
  - bin/vendor
206
222
  - bin/vendorify
223
+ - cucumber.yml
207
224
  - examples/Vendorfile
208
225
  - features/chef_cookbook.feature
209
226
  - features/deprecated.feature
@@ -226,7 +243,7 @@ files:
226
243
  - features/fixtures/git/testrepo/packed-refs
227
244
  - features/fixtures/git/testrepo/refs/heads/.sentinel
228
245
  - features/fixtures/git/testrepo/refs/tags/.sentinel
229
- - features/fixtures/vcr_cassettes/vendorificator.yml
246
+ - features/fixtures/vcr/vendorificator.yml
230
247
  - features/git.feature
231
248
  - features/needed.feature
232
249
  - features/smoke.feature
@@ -251,6 +268,9 @@ files:
251
268
  - lib/vendorificator/vendor/chef_cookbook.rb
252
269
  - lib/vendorificator/vendor/git.rb
253
270
  - lib/vendorificator/version.rb
271
+ - spec/smoke_spec.rb
272
+ - spec/spec_helper.rb
273
+ - spec/vendorificator/vendor_spec.rb
254
274
  - vendorificator.gemspec
255
275
  homepage: https://github.com/3ofcoins/vendorificator/
256
276
  licenses: []
@@ -266,7 +286,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
266
286
  version: '0'
267
287
  segments:
268
288
  - 0
269
- hash: 4082258902042132214
289
+ hash: 1910323854215610577
270
290
  required_rubygems_version: !ruby/object:Gem::Requirement
271
291
  none: false
272
292
  requirements:
@@ -275,10 +295,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
275
295
  version: '0'
276
296
  segments:
277
297
  - 0
278
- hash: 4082258902042132214
298
+ hash: 1910323854215610577
279
299
  requirements: []
280
300
  rubyforge_project:
281
- rubygems_version: 1.8.24
301
+ rubygems_version: 1.8.25
282
302
  signing_key:
283
303
  specification_version: 3
284
304
  summary: Integrate third-party vendor modules into your git repository
@@ -304,7 +324,7 @@ test_files:
304
324
  - features/fixtures/git/testrepo/packed-refs
305
325
  - features/fixtures/git/testrepo/refs/heads/.sentinel
306
326
  - features/fixtures/git/testrepo/refs/tags/.sentinel
307
- - features/fixtures/vcr_cassettes/vendorificator.yml
327
+ - features/fixtures/vcr/vendorificator.yml
308
328
  - features/git.feature
309
329
  - features/needed.feature
310
330
  - features/smoke.feature
@@ -319,3 +339,6 @@ test_files:
319
339
  - features/tarball.feature
320
340
  - features/tarball_edit.feature
321
341
  - features/vendor.feature
342
+ - spec/smoke_spec.rb
343
+ - spec/spec_helper.rb
344
+ - spec/vendorificator/vendor_spec.rb