wordless 0.4.0 → 0.4.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: 3da29df733fc405d1627fb449aa30b9fc9caf92b
4
- data.tar.gz: 9c5bfd9561d5738dc776c89fc20e81a6687f4905
3
+ metadata.gz: 1f22b77e330965f615984ee5c3be29046326bf6e
4
+ data.tar.gz: ab9e5f45f3cebe1001c0bea379908643b9c89a00
5
5
  SHA512:
6
- metadata.gz: d649552b3e245354cfd89d4e985929fe055bd457ec10be01091137b0006a0aa65fd8212a0578319dc2e2b7adfa544b57e8b65c0c49e4ad956fcee55d8caf1ce2
7
- data.tar.gz: d3e7a3c362182c41b3ba2d7b7772be481e689daf7cc4627eee79a85e5b93c5304c8a804745433059d525ab10a06983a37106ffe735d50cb7d21454ea2104bfb5
6
+ metadata.gz: 7adeb159e0616070e27504d02f16cc7c3922c437bfa5fb26e84adc2859b07326fc4457d1107f7a500a5c7a220c5ced15fc0ce3d2a0d18a8cd8a812562f8fd758
7
+ data.tar.gz: dcde2ab35695d7766e628ac9b18c366fc37ae6da4ef32aace5e005a4e085c6e2461c989955e518f35c11f1c3235ce81bf6bacdd70b204905891c109e5903ee1d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wordless (0.4.0)
4
+ wordless (0.4.1)
5
5
  activesupport
6
6
  coffee-script
7
7
  compass
data/README.mdown CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  A command line tool to help manage your [Wordless](http://welaika.github.com/wordless/)-based WordPress sites.
4
4
 
5
+ [![Build Status](https://travis-ci.org/welaika/wordless_gem.png?branch=master)](https://travis-ci.org/welaika/wordless_gem)
6
+
5
7
  ## Premise
6
8
 
7
9
  This is a ruby-gem, so we expect you have already installed _ruby_; if it isn't
@@ -95,11 +97,11 @@ deploy_command: 'wordmove push -t'
95
97
  ## Caveats
96
98
 
97
99
  - If you attempt to download a WordPress localization that's outdated, the latest English version will be downloaded instead.
98
- - Only tested on Mac OS X
100
+ - Not tested on Windows
99
101
 
100
102
  ## Running specs
101
103
 
102
- bundle install && ./setup_tests && rspec
104
+ bundle install && ./setup_tests.sh && rspec
103
105
 
104
106
  ## Contributing
105
107
 
@@ -1,3 +1,3 @@
1
1
  module Wordless
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -5,14 +5,56 @@ module Wordless
5
5
  include WordPressTools::CLIHelper
6
6
  attr_reader :options, :thor
7
7
 
8
+ module PATH
9
+ WORDFILE = :wordfile
10
+ WP_CONTENT = :wp_content
11
+ PLUGINS = :plugins
12
+ THEMES = :themes
13
+ end
14
+
15
+ DEFAULT_PATHS = {
16
+ PATH::WORDFILE => 'Wordfile',
17
+ PATH::WP_CONTENT => 'wp-content',
18
+ PATH::PLUGINS => 'wp-content/plugins',
19
+ PATH::THEMES => 'wp-content/themes',
20
+ }
21
+
22
+ DEFAULT_PATHS.each do |type, value|
23
+ define_method "#{type}_path" do
24
+ value
25
+ end
26
+ end
27
+
8
28
  def lib_dir
9
29
  @@lib_dir ||= File.expand_path(File.dirname(__FILE__))
10
30
  end
11
31
 
32
+ def wordpress_dir(current_dir = start_dir)
33
+ @wordpress_dir ||= (
34
+ current_dir = File.expand_path(current_dir)
35
+
36
+ if File.exists? File.join(current_dir, wp_content_path)
37
+ current_dir
38
+ elsif last_dir?(current_dir)
39
+ raise StandardError, "Could not find a valid Wordpress directory"
40
+ else
41
+ wordpress_dir(upper_dir(current_dir))
42
+ end
43
+ )
44
+ end
45
+
46
+ def last_dir?(directory)
47
+ directory == "/"
48
+ end
49
+
50
+ def upper_dir(directory)
51
+ File.join(directory, '..')
52
+ end
53
+
12
54
  def config
13
55
  @@config ||= (
14
- if File.exists?('Wordfile')
15
- YAML::load(File.open('Wordfile')).symbolize_keys
56
+ if File.exists?(wordfile_path)
57
+ YAML::load(File.open(wordfile_path)).symbolize_keys
16
58
  else
17
59
  {}
18
60
  end
@@ -38,35 +80,40 @@ module Wordless
38
80
  end
39
81
 
40
82
  def install
83
+ at_wordpress_root!
84
+
41
85
  unless git_installed?
42
86
  error "Git is not available. Please install git."
43
87
  end
44
88
 
45
- unless File.directory? 'wp-content/plugins'
46
- error "Directory 'wp-content/plugins' not found. Make sure you're at the root level of a WordPress installation."
47
- end
48
-
49
- if run_command "git clone #{wordless_repo} wp-content/plugins/wordless"
50
- success "Installed Wordless plugin."
89
+ if File.directory?(plugins_path)
90
+ if run_command "git clone #{wordless_repo} #{wordless_plugin_path}"
91
+ success "Installed Wordless plugin."
92
+ else
93
+ error "There was an error installing the Wordless plugin."
94
+ end
51
95
  else
52
- error "There was an error installing the Wordless plugin."
96
+ error "Directory '#{plugins_path}' not found."
53
97
  end
54
98
  end
55
99
 
56
100
  def theme(name)
57
- if File.directory? 'wp-content/themes'
58
- # Run PHP helper script
101
+ at_wordpress_root!
102
+
103
+ if File.directory?(themes_path)
59
104
  if system "php #{File.join(lib_dir, 'theme_builder.php')} #{name}"
60
- success "Created a new Wordless theme in 'wp-content/themes/#{name}'."
105
+ success "Created a new Wordless theme in '#{File.join(themes_path, name)}'."
61
106
  else
62
107
  error "Couldn't create Wordless theme."
63
108
  end
64
109
  else
65
- error "Directory 'wp-content/themes' not found. Make sure you're at the root level of a WordPress installation."
110
+ error "Directory '#{themes_path}' not found."
66
111
  end
67
112
  end
68
113
 
69
114
  def compile
115
+ at_wordpress_root!
116
+
70
117
  if system "php #{File.join(lib_dir, 'compile_assets.php')}"
71
118
  success "Compiled static assets."
72
119
  else
@@ -75,7 +122,9 @@ module Wordless
75
122
  end
76
123
 
77
124
  def clean
78
- if File.directory? 'wp-content/themes'
125
+ at_wordpress_root!
126
+
127
+ if File.directory?(themes_path)
79
128
  static_css = Array(config[:static_css] || Dir['wp-content/themes/*/assets/stylesheets/screen.css'])
80
129
  static_js = Array(config[:static_js] || Dir['wp-content/themes/*/assets/javascripts/application.js'])
81
130
 
@@ -85,14 +134,12 @@ module Wordless
85
134
 
86
135
  success "Cleaned static assets."
87
136
  else
88
- error "Directory 'wp-content/themes' not found. Make sure you're at the root level of a WordPress installation."
137
+ error "Directory '#{themes_path}' not found."
89
138
  end
90
139
  end
91
140
 
92
141
  def deploy
93
- unless File.exists? 'wp-config.php'
94
- error "WordPress not found. Make sure you're at the root level of a WordPress installation."
95
- end
142
+ at_wordpress_root!
96
143
 
97
144
  compile if options['refresh']
98
145
 
@@ -109,6 +156,18 @@ module Wordless
109
156
 
110
157
  private
111
158
 
159
+ def start_dir
160
+ "."
161
+ end
162
+
163
+ def at_wordpress_root!
164
+ Dir.chdir(wordpress_dir)
165
+ end
166
+
167
+ def wordless_plugin_path
168
+ File.join(plugins_path, "wordless")
169
+ end
170
+
112
171
  def wordless_repo
113
172
  config[:wordless_repo] || 'git://github.com/welaika/wordless.git'
114
173
  end
data/spec/cli_spec.rb CHANGED
@@ -34,56 +34,57 @@ describe Wordless::CLI do
34
34
  end
35
35
  end
36
36
 
37
+ context "without a valid WordPress install" do
38
+ before do
39
+ FileUtils.mkdir_p('wordpress/wp-content') && Dir.chdir('wordpress')
40
+ end
41
+
42
+ it "fails to install the Wordless plugin" do
43
+ content = capture(:stdout) { Wordless::CLI.start ['install'] }
44
+ content.should =~ %r|Directory 'wp-content/plugins' not found|
45
+ end
46
+
47
+ it "fails to create a Wordless theme" do
48
+ content = capture(:stdout) { Wordless::CLI.start ['theme', 'mytheme'] }
49
+ content.should =~ %r|Directory 'wp-content/themes' not found|
50
+ end
51
+ end
52
+
37
53
  context "#install" do
38
- context "with a valid WordPress installation" do
39
- it "installs the Wordless plugin" do
40
- WordPressTools::CLI.start ['new']
41
- Dir.chdir 'wordpress'
42
- Wordless::CLI.start ['install']
43
- File.directory?('wp-content/plugins/wordless').should be_true
44
- end
54
+ before do
55
+ WordPressTools::CLI.start ['new']
56
+ Dir.chdir 'wordpress'
45
57
  end
46
58
 
47
- context "without a valid WordPress installation" do
48
- it "fails to install the Wordless plugin" do
49
- content = capture(:stdout) { Wordless::CLI.start ['install'] }
50
- content.should =~ %r|Directory 'wp-content/plugins' not found|
51
- end
59
+ it "installs the Wordless plugin" do
60
+ Wordless::CLI.start ['install']
61
+ File.directory?('wp-content/plugins/wordless').should be_true
52
62
  end
53
63
  end
54
64
 
55
65
  context "#theme" do
56
- context "with a valid WordPress installation and the Wordless plugin" do
57
- before :each do
58
- WordPressTools::CLI.start ['new']
59
- Dir.chdir 'wordpress'
60
- Wordless::CLI.start ['install']
61
- end
62
-
63
- it "creates a Wordless theme" do
64
- Wordless::CLI.start ['theme', 'mytheme']
65
- File.directory?('wp-content/themes/mytheme').should be_true
66
- File.exists?('wp-content/themes/mytheme/index.php').should be_true
67
- end
66
+ before do
67
+ WordPressTools::CLI.start ['new']
68
+ Dir.chdir 'wordpress'
69
+ Wordless::CLI.start ['install']
68
70
  end
69
71
 
70
- context "without a valid WordPress installation" do
71
- it "fails to create a Wordless theme" do
72
- content = capture(:stdout) { Wordless::CLI.start ['theme', 'mytheme'] }
73
- content.should =~ %r|Directory 'wp-content/themes' not found|
74
- end
72
+ it "creates a Wordless theme" do
73
+ Wordless::CLI.start ['theme', 'mytheme']
74
+ File.directory?('wp-content/themes/mytheme').should be_true
75
+ File.exists?('wp-content/themes/mytheme/index.php').should be_true
75
76
  end
76
77
  end
77
78
 
78
- context "#compile" do
79
- context "with a valid Wordless installation" do
79
+ context "with a working Wordless install" do
80
+ before do
81
+ Wordless::CLI.start ['new', 'myapp']
82
+ end
83
+
84
+ context "#compile" do
80
85
  let(:compiled_css) { 'wp-content/themes/myapp/assets/stylesheets/screen.css' }
81
86
  let(:compiled_js) { 'wp-content/themes/myapp/assets/javascripts/application.js' }
82
87
 
83
- before :each do
84
- Wordless::CLI.start ['new', 'myapp']
85
- end
86
-
87
88
  it "compiles static assets" do
88
89
  Wordless::CLI.start ['compile']
89
90
 
@@ -94,90 +95,84 @@ describe Wordless::CLI do
94
95
  File.readlines(compiled_js).grep(/return "Yep, it works!";/).should_not be_empty
95
96
  end
96
97
  end
97
- end
98
98
 
99
- context "#clean" do
100
- before do
101
- FileUtils.mkdir_p('myapp/wp-content/themes/myapp/assets/stylesheets')
102
- FileUtils.mkdir_p('myapp/wp-content/themes/myapp/assets/javascripts')
103
- Dir.chdir('myapp')
104
- end
99
+ context "#clean" do
100
+ before do
101
+ FileUtils.mkdir_p('wp-content/themes/myapp/assets/stylesheets')
102
+ FileUtils.mkdir_p('wp-content/themes/myapp/assets/javascripts')
103
+ end
105
104
 
106
- let(:default_css) { 'wp-content/themes/myapp/assets/stylesheets/screen.css' }
107
- let(:default_js) { 'wp-content/themes/myapp/assets/javascripts/application.js' }
105
+ let(:default_css) { 'wp-content/themes/myapp/assets/stylesheets/screen.css' }
106
+ let(:default_js) { 'wp-content/themes/myapp/assets/javascripts/application.js' }
108
107
 
109
- let(:first_css) { 'wp-content/themes/myapp/assets/stylesheets/foo.css' }
110
- let(:second_css) { 'wp-content/themes/myapp/assets/stylesheets/bar.css' }
111
- let(:first_js) { 'wp-content/themes/myapp/assets/javascripts/robin.js' }
112
- let(:second_js) { 'wp-content/themes/myapp/assets/javascripts/galahad.js' }
108
+ let(:first_css) { 'wp-content/themes/myapp/assets/stylesheets/foo.css' }
109
+ let(:second_css) { 'wp-content/themes/myapp/assets/stylesheets/bar.css' }
110
+ let(:first_js) { 'wp-content/themes/myapp/assets/javascripts/robin.js' }
111
+ let(:second_js) { 'wp-content/themes/myapp/assets/javascripts/galahad.js' }
113
112
 
114
- it "should remove default default assets" do
115
- FileUtils.touch(default_css)
116
- FileUtils.touch(default_js)
113
+ it "should remove default default assets" do
114
+ FileUtils.touch(default_css)
115
+ FileUtils.touch(default_js)
117
116
 
118
- Wordless::CLI.start ['clean']
117
+ Wordless::CLI.start ['clean']
119
118
 
120
- File.exists?(default_css).should be_false
121
- File.exists?(default_js).should be_false
122
- end
119
+ File.exists?(default_css).should be_false
120
+ File.exists?(default_js).should be_false
121
+ end
123
122
 
124
- it "should remove assets specified on config" do
125
- Wordless::WordlessCLI.class_variable_set :@@config, {
126
- :static_css => [ first_css, second_css ],
127
- :static_js => [ first_js, second_js ]
128
- }
123
+ it "should remove assets specified on config" do
124
+ Wordless::WordlessCLI.class_variable_set :@@config, {
125
+ :static_css => [ first_css, second_css ],
126
+ :static_js => [ first_js, second_js ]
127
+ }
129
128
 
130
- [ first_css, second_css, first_js, second_js ].each do |file|
131
- FileUtils.touch(file)
132
- end
129
+ [ first_css, second_css, first_js, second_js ].each do |file|
130
+ FileUtils.touch(file)
131
+ end
133
132
 
134
- Wordless::CLI.start ['clean']
133
+ Wordless::CLI.start ['clean']
135
134
 
136
- [ first_css, second_css, first_js, second_js ].each do |file|
137
- File.exists?(file).should be_false
135
+ [ first_css, second_css, first_js, second_js ].each do |file|
136
+ File.exists?(file).should be_false
137
+ end
138
138
  end
139
139
  end
140
- end
141
-
142
- context "#deploy" do
143
-
144
- let(:cli) { Wordless::CLI.new }
145
- let(:file) { 'shrubbery.txt' }
146
- let(:wordless_cli) { Wordless::WordlessCLI.new({}, Thor.new) }
147
140
 
148
- before do
149
- FileUtils.mkdir_p('myapp') and Dir.chdir('myapp')
150
- FileUtils.touch('wp-config.php')
151
- end
141
+ context "#deploy" do
142
+ let(:cli) { Wordless::CLI.new }
143
+ let(:file) { 'shrubbery.txt' }
144
+ let(:wordless_cli) { Wordless::WordlessCLI.new({}, Thor.new) }
152
145
 
153
- before do
154
- cli.stub(:wordless_cli).and_return(wordless_cli)
155
- Wordless::WordlessCLI.class_variable_set :@@config, {
156
- :deploy_command => "touch #{file}"
157
- }
158
- end
146
+ before do
147
+ cli.stub(:wordless_cli).and_return(wordless_cli)
148
+ Wordless::WordlessCLI.class_variable_set :@@config, {
149
+ :deploy_command => "touch #{file}"
150
+ }
151
+ end
159
152
 
160
- it "should deploy via the deploy command" do
161
- cli.deploy
162
- File.exists?(file).should be_true
163
- end
153
+ it "should deploy via the deploy command" do
154
+ cli.deploy
155
+ File.exists?(file).should be_true
156
+ end
164
157
 
165
- it "should compile and clean if refresh option is passed" do
166
- wordless_cli.should_receive(:compile).and_return(true)
167
- wordless_cli.should_receive(:clean).and_return(true)
168
- wordless_cli.stub(:options).and_return({ 'refresh' => true })
158
+ it "should compile and clean if refresh option is passed" do
159
+ wordless_cli.should_receive(:compile).and_return(true)
160
+ wordless_cli.should_receive(:clean).and_return(true)
161
+ wordless_cli.stub(:options).and_return({ 'refresh' => true })
169
162
 
170
- cli.deploy
171
- end
163
+ cli.deploy
164
+ end
172
165
 
173
- context "if a custom deploy is passed" do
174
- let(:file) { 'knights.txt' }
166
+ context "if a custom deploy is passed" do
167
+ let(:file) { 'knights.txt' }
175
168
 
176
- it "should launch the custom deploy command" do
177
- wordless_cli.stub(:options).and_return({ 'command' => "touch #{file}" })
178
- cli.deploy
179
- File.exists?(file).should be_true
169
+ it "should launch the custom deploy command" do
170
+ wordless_cli.stub(:options).and_return({ 'command' => "touch #{file}" })
171
+ cli.deploy
172
+ File.exists?(file).should be_true
173
+ end
180
174
  end
181
175
  end
182
176
  end
177
+
183
178
  end
data/spec/spec_helper.rb CHANGED
@@ -10,35 +10,33 @@ module WordPressTools
10
10
  end
11
11
  end
12
12
 
13
- RSpec.configure do |config|
13
+ module Wordless
14
+ class WordlessCLI
15
+ def error(message)
16
+ puts message
17
+ end
18
+ end
19
+ end
14
20
 
21
+ require 'support/capture'
22
+
23
+ WP_API_RESPONSE = <<-EOF
24
+ upgrade
25
+ http://wordpress.org/download/
26
+ http://wordpress.org/wordpress-3.6.zip
27
+ 3.6
28
+ en_US
29
+ 5.2.4
30
+ 5.0
31
+ EOF
32
+
33
+ RSpec.configure do |config|
15
34
  config.before(:all) do
16
35
  FileUtils.mkdir('tmp') unless File.directory? 'tmp'
17
36
  FakeWeb.allow_net_connect = false
18
- WP_API_RESPONSE = <<-eof
19
- upgrade
20
- http://wordpress.org/download/
21
- http://wordpress.org/wordpress-3.6.zip
22
- 3.6
23
- en_US
24
- 5.2.4
25
- 5.0
26
- eof
37
+
27
38
  FakeWeb.register_uri(:get, %r|http://api.wordpress.org/core/version-check/1.5/.*|, :body => WP_API_RESPONSE)
28
39
  FakeWeb.register_uri(:get, "http://wordpress.org/wordpress-3.6.zip", :body => File.expand_path('spec/fixtures/wordpress_stub.zip'))
29
40
  end
30
-
31
- # utility to log commands output or errors
32
- def capture(stream)
33
- begin
34
- stream = stream.to_s
35
- eval "$#{stream} = StringIO.new"
36
- yield
37
- result = eval("$#{stream}").string
38
- ensure
39
- eval("$#{stream} = #{stream.upcase}")
40
- end
41
-
42
- result
43
- end
44
41
  end
42
+
@@ -0,0 +1,18 @@
1
+ module CaptureHelpers
2
+ def capture(stream)
3
+ begin
4
+ stream = stream.to_s
5
+ eval "$#{stream} = StringIO.new"
6
+ yield
7
+ result = eval("$#{stream}").string
8
+ ensure
9
+ eval("$#{stream} = #{stream.upcase}")
10
+ end
11
+
12
+ result
13
+ end
14
+ end
15
+
16
+ RSpec.configure do |config|
17
+ config.include CaptureHelpers
18
+ end
@@ -0,0 +1,54 @@
1
+ require 'wordless/wordless_cli'
2
+
3
+ describe Wordless::WordlessCLI do
4
+ let(:cli) { Wordless::WordlessCLI.new }
5
+
6
+ context "#wordpress_dir" do
7
+ TMPDIR = "/tmp/wordless"
8
+
9
+ let(:wp_content) { File.join(TMPDIR, "wp-content") }
10
+
11
+ before do
12
+ @original_dir = Dir.pwd
13
+ FileUtils.mkdir(TMPDIR)
14
+ Dir.chdir(TMPDIR)
15
+ end
16
+
17
+ after do
18
+ Dir.chdir(@original_dir)
19
+ FileUtils.rm_rf(TMPDIR)
20
+ end
21
+
22
+ context "if a wordpress directory is found" do
23
+ before do
24
+ FileUtils.mkdir(wp_content)
25
+ end
26
+
27
+ it 'returns the directory' do
28
+ expect(cli.wordpress_dir).to eq(File.expand_path("."))
29
+ end
30
+ end
31
+
32
+ context "if no wordpress directory is found" do
33
+ it 'raises an error' do
34
+ expect { cli.wordpress_dir }.to raise_error(StandardError)
35
+ end
36
+ end
37
+
38
+ context "directory traversal" do
39
+ before do
40
+ FileUtils.mkdir(wp_content)
41
+
42
+ @test_dir = File.join(TMPDIR, "test")
43
+ FileUtils.mkdir(@test_dir)
44
+ Dir.chdir(@test_dir)
45
+ end
46
+
47
+ it 'goes up through the directory tree and finds it' do
48
+ expect(cli.wordpress_dir).to eq(File.expand_path("./.."))
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+
data/wordless.gemspec CHANGED
@@ -6,6 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.description = %q{Command line tool to manage Wordless themes.}
7
7
  gem.summary = %q{Manage Wordless themes.}
8
8
  gem.homepage = "http://github.com/welaika/wordless_gem"
9
+ gem.license = "MIT"
9
10
 
10
11
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
11
12
  gem.files = `git ls-files`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wordless
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
  - Étienne Després
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-31 00:00:00.000000000 Z
12
+ date: 2013-09-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -168,9 +168,12 @@ files:
168
168
  - spec/fixtures/wordpress_stub.zip
169
169
  - spec/fixtures/zipped_file.zip
170
170
  - spec/spec_helper.rb
171
+ - spec/support/capture.rb
172
+ - spec/wordless/wordless_cli_spec.rb
171
173
  - wordless.gemspec
172
174
  homepage: http://github.com/welaika/wordless_gem
173
- licenses: []
175
+ licenses:
176
+ - MIT
174
177
  metadata: {}
175
178
  post_install_message:
176
179
  rdoc_options: []
@@ -198,3 +201,5 @@ test_files:
198
201
  - spec/fixtures/wordpress_stub.zip
199
202
  - spec/fixtures/zipped_file.zip
200
203
  - spec/spec_helper.rb
204
+ - spec/support/capture.rb
205
+ - spec/wordless/wordless_cli_spec.rb