wordmove 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ tmp/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in wordmove.gemspec
4
+ gemspec
@@ -0,0 +1,64 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ wordmove (0.0.1)
5
+ activesupport (~> 3.0.0)
6
+ colored
7
+ escape
8
+ hashie
9
+ i18n
10
+ net-scp
11
+ net-ssh
12
+ rake
13
+ thor
14
+
15
+ GEM
16
+ remote: http://rubygems.org/
17
+ specs:
18
+ activesupport (3.0.11)
19
+ aruba (0.4.7)
20
+ childprocess (>= 0.2.2)
21
+ cucumber (>= 1.1.1)
22
+ ffi (= 1.0.9)
23
+ rspec (>= 2.7.0)
24
+ builder (3.0.0)
25
+ childprocess (0.2.3)
26
+ ffi (~> 1.0.6)
27
+ colored (1.2)
28
+ cucumber (1.1.3)
29
+ builder (>= 2.1.2)
30
+ diff-lcs (>= 1.1.2)
31
+ gherkin (~> 2.6.7)
32
+ json (>= 1.4.6)
33
+ term-ansicolor (>= 1.0.6)
34
+ diff-lcs (1.1.3)
35
+ escape (0.0.4)
36
+ ffi (1.0.9)
37
+ gherkin (2.6.8)
38
+ json (>= 1.4.6)
39
+ hashie (1.2.0)
40
+ i18n (0.6.0)
41
+ json (1.6.2)
42
+ net-scp (1.0.4)
43
+ net-ssh (>= 1.99.1)
44
+ net-ssh (2.2.1)
45
+ rake (0.9.2.2)
46
+ rspec (2.7.0)
47
+ rspec-core (~> 2.7.0)
48
+ rspec-expectations (~> 2.7.0)
49
+ rspec-mocks (~> 2.7.0)
50
+ rspec-core (2.7.1)
51
+ rspec-expectations (2.7.0)
52
+ diff-lcs (~> 1.1.2)
53
+ rspec-mocks (2.7.0)
54
+ term-ansicolor (1.0.7)
55
+ thor (0.14.6)
56
+
57
+ PLATFORMS
58
+ ruby
59
+
60
+ DEPENDENCIES
61
+ aruba
62
+ cucumber
63
+ rspec
64
+ wordmove!
data/README ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'wordmove/cli'
4
+ Wordmove::CLI.start
@@ -0,0 +1,30 @@
1
+ Feature: Generating Movefile
2
+ In order to configure Wordmove
3
+ As a WP developer
4
+ I want Wordmove to generate me a Wordmove skeleton file
5
+
6
+ Scenario: Wordmove creation
7
+ When I run "wordmove init"
8
+ Then the following files should exist:
9
+ | Movefile |
10
+ Then the file "Movefile" should contain:
11
+ """
12
+ local:
13
+ vhost: "http://vhost.local"
14
+ wordpress_path: "~/dev/sites/your_site"
15
+ database:
16
+ username: "username"
17
+ password: "password"
18
+ host: "host"
19
+ remote:
20
+ vhost: "http://remote.com"
21
+ wordpress_path: "/var/www/your_site"
22
+ database:
23
+ username: "username"
24
+ password: "password"
25
+ host: "host"
26
+ ssh:
27
+ username: "username"
28
+ password: "password"
29
+ host: "host"
30
+ """
File without changes
File without changes
@@ -0,0 +1,3 @@
1
+ Then /^the file "([^"]*)" should contain:$/ do |file, content|
2
+ check_file_content(file, content, true)
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'aruba/cucumber'
2
+
@@ -0,0 +1,4 @@
1
+ require "wordmove/version"
2
+
3
+ module Wordmove
4
+ end
@@ -0,0 +1,39 @@
1
+ require 'thor'
2
+ require 'wordmove/generators/movefile'
3
+ require 'wordmove/deployer'
4
+
5
+
6
+ module Wordmove
7
+ class CLI < Thor
8
+
9
+ desc "init", "Generates a brand new Movefile"
10
+ def init
11
+ Wordmove::Generators::Movefile.start
12
+ end
13
+
14
+ desc "pull", "Pulls Wordpress data from remote host to the local machine"
15
+ method_option :skip_db, :aliases => "-d", :type => :boolean
16
+ method_option :skip_uploads, :aliases => "-u", :type => :boolean
17
+ method_option :skip_themes, :aliases => "-t", :type => :boolean
18
+ method_option :skip_plugins, :aliases => "-p", :type => :boolean
19
+ method_option :verbose, :aliases => "-v", :type => :boolean
20
+ method_option :config, :aliases => "-c"
21
+ def pull
22
+ deployer = Wordmove::Deployer.new(options)
23
+ deployer.pull
24
+ end
25
+
26
+ desc "push", "Push Wordpress data to remote host from local machine"
27
+ method_option :skip_db, :aliases => "-d", :type => :boolean
28
+ method_option :skip_uploads, :aliases => "-u", :type => :boolean
29
+ method_option :skip_themes, :aliases => "-t", :type => :boolean
30
+ method_option :skip_plugins, :aliases => "-p", :type => :boolean
31
+ method_option :verbose, :aliases => "-v", :type => :boolean
32
+ method_option :config, :aliases => "-c"
33
+ def push
34
+ deployer = Wordmove::Deployer.new(options)
35
+ deployer.push
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,132 @@
1
+ require 'active_support/core_ext'
2
+ require 'hashie'
3
+ require 'wordmove/hosts/local_host'
4
+ require 'wordmove/hosts/remote_host'
5
+ require 'wordmove/logger'
6
+
7
+ module Wordmove
8
+
9
+ class Deployer
10
+
11
+ attr_reader :options
12
+ attr_reader :logger
13
+
14
+ def initialize(options = {})
15
+ @options = Hashie::Mash.new(options)
16
+ @logger = Logger.new
17
+ @logger.level = options.verbose ? Logger::VERBOSE : Logger::INFO
18
+ end
19
+
20
+ def push
21
+ unless options.skip_db
22
+ logger.info "Pushing the DB..."
23
+ push_db
24
+ end
25
+
26
+ remotely do |host|
27
+ %w(uploads themes plugins).each do |step|
28
+ unless options.send("skip_#{step}")
29
+ logger.info "Pushing wp-content/#{step}..."
30
+ host.download_dir local_wpcontent_path(step), remote_wpcontent_path(step)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ def pull
37
+ unless options.skip_db
38
+ logger.info "Pushing the DB..."
39
+ pull_db
40
+ end
41
+
42
+ remotely do |host|
43
+ %w(uploads themes plugins).each do |step|
44
+ unless options.send("skip_#{step}")
45
+ logger.info "Pushing wp-content/#{step}..."
46
+ host.upload_dir remote_wpcontent_path(step), local_wpcontent_path(step)
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def push_db
55
+ local_mysql_dump_path = local_wpcontent_path("database_dump.sql")
56
+ remote_mysql_dump_path = remote_wpcontent_path("database_dump.sql")
57
+
58
+ locally do |host|
59
+ host.run "mysqldump", "--host=#{config.local.database.host}", "--user=#{config.local.database.username}", "--password=#{config.local.database.password}", config.local.database.name, :stdout => local_mysql_dump_path
60
+ File.open(local_mysql_dump_path, 'a') do |file|
61
+ file.write "UPDATE wp_options SET option_value=\"#{config.remote.vhost}\" WHERE option_name=\"siteurl\" OR option_name=\"home\";\n"
62
+ end
63
+ end
64
+
65
+ remotely do |host|
66
+ host.download_file local_mysql_dump_path, remote_mysql_dump_path
67
+ host.run "mysql", "--user=#{config.remote.database.username}", "--password=#{config.remote.database.password}", "--host=#{config.remote.database.host}", "--database=#{config.remote.database.name}", :stdin => remote_mysql_dump_path
68
+ host.run "rm", remote_mysql_dump_path
69
+ end
70
+
71
+ locally do |host|
72
+ host.run "rm", local_mysql_dump_path
73
+ end
74
+ end
75
+
76
+
77
+ def pull_db
78
+ local_mysql_dump_path = local_wpcontent_path("database_dump.sql")
79
+ remote_mysql_dump_path = remote_wpcontent_path("database_dump.sql")
80
+
81
+ remotely do |host|
82
+ host.run "mysqldump", "--host=#{config.remote.database.host}", "--user=#{config.remote.database.username}", "--password=#{config.remote.database.password}", config.remote.database.name, :stdout => remote_mysql_dump_path
83
+ host.upload_file remote_mysql_dump_path, local_mysql_dump_path
84
+ end
85
+
86
+ locally do |host|
87
+ File.open(local_mysql_dump_path, 'a') do |file|
88
+ file.write "UPDATE wp_options SET option_value=\"#{config.local.vhost}\" WHERE option_name=\"siteurl\" OR option_name=\"home\";\n"
89
+ end
90
+ host.run "mysql", "--user=#{config.local.database.username}", "--password=#{config.local.database.password}", "--host=#{config.local.database.host}", "--database=#{config.local.database.name}", :stdin => local_mysql_dump_path
91
+ host.run "rm", local_mysql_dump_path
92
+ end
93
+
94
+ remotely do |host|
95
+ host.run "rm", remote_mysql_dump_path
96
+ end
97
+
98
+ end
99
+
100
+ def config
101
+ if @config.blank?
102
+ config_path = @options[:config] || "Movefile"
103
+ unless File.exists? config_path
104
+ raise Thor::Error, "Could not find a valid Movefile"
105
+ end
106
+ @config = Hashie::Mash.new(YAML::load(File.open(config_path)))
107
+ end
108
+ @config
109
+ end
110
+
111
+ def local_wpcontent_path(*args)
112
+ File.join(config.local.wordpress_path, "wp-content", *args)
113
+ end
114
+
115
+ def remote_wpcontent_path(*args)
116
+ File.join(config.remote.wordpress_path, "wp-content", *args)
117
+ end
118
+
119
+ def locally
120
+ host = LocalHost.new(config.local.merge(:logger => @logger))
121
+ yield host
122
+ host.close
123
+ end
124
+
125
+ def remotely
126
+ host = RemoteHost.new(config.remote.merge(:logger => @logger))
127
+ yield host
128
+ host.close
129
+ end
130
+
131
+ end
132
+ end
@@ -0,0 +1,26 @@
1
+ local:
2
+ vhost: "http://vhost.local"
3
+ wordpress_path: "~/dev/sites/your_site"
4
+ database:
5
+ name: "database_name"
6
+ username: "username"
7
+ password: "password"
8
+ host: "host"
9
+ remote:
10
+ vhost: "http://remote.com"
11
+ wordpress_path: "/var/www/your_site"
12
+ exclude:
13
+ - .git
14
+ - .DS_Store
15
+ - .sass-cache
16
+ - Movefile
17
+ database:
18
+ name: "database_name"
19
+ username: "username"
20
+ password: "password"
21
+ host: "host"
22
+ ssh:
23
+ username: "username"
24
+ password: "password"
25
+ host: "host"
26
+
@@ -0,0 +1,18 @@
1
+ require 'thor/group'
2
+
3
+ module Wordmove
4
+ module Generators
5
+ class Movefile < Thor::Group
6
+ include Thor::Actions
7
+
8
+ def self.source_root
9
+ File.dirname(__FILE__)
10
+ end
11
+
12
+ def copy_movefile
13
+ template "Movefile"
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ require 'escape'
2
+
3
+ module Wordmove
4
+ class LocalHost
5
+
6
+ attr_reader :options
7
+ attr_reader :logger
8
+
9
+ def initialize(options = {})
10
+ @options = Hashie::Mash.new(options)
11
+ @logger = @options[:logger]
12
+ end
13
+
14
+ def run(*args)
15
+ command = shell_command(*args)
16
+ logger.verbose "Executing locally #{command}"
17
+ unless system(command)
18
+ raise Thor::Error, "Error executing \"#{command}\""
19
+ end
20
+ end
21
+
22
+ def close
23
+ end
24
+
25
+ protected
26
+
27
+ def shell_command(*args)
28
+ options = args.extract_options!
29
+ command = Escape.shell_command(args)
30
+ if options[:stdin]
31
+ command += " < #{options[:stdin]}"
32
+ end
33
+ if options[:stdout]
34
+ command += " > #{options[:stdout]}"
35
+ end
36
+ command
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,66 @@
1
+ require 'net/ssh'
2
+ require 'net/scp'
3
+
4
+ module Wordmove
5
+ class RemoteHost < LocalHost
6
+
7
+ alias :locally_run :run
8
+
9
+ attr_reader :session
10
+
11
+ def initialize(options = {})
12
+ super
13
+ end
14
+
15
+ def session
16
+ logger.verbose "Connecting to #{options.ssh.host}..." unless @session.present?
17
+ @session ||= Net::SSH.start(options.ssh.host, options.ssh.username, :password => options.ssh.password)
18
+ end
19
+
20
+ def close
21
+ session.close
22
+ end
23
+
24
+ def upload_file(source_file, destination_file)
25
+ logger.verbose "Copying remote #{source_file} to #{destination_file}..."
26
+ Net::SCP.download!(options.ssh.host, options.ssh.username, source_file, destination_file, :password => options.ssh.password)
27
+ end
28
+
29
+ def download_file(source_file, destination_file)
30
+ logger.verbose "Copying local #{source_file} to #{destination_file}..."
31
+ Net::SCP.upload!(options.ssh.host, options.ssh.username, source_file, destination_file, :password => options.ssh.password)
32
+ end
33
+
34
+ def download_dir(source_dir, destination_dir)
35
+ rsync "#{source_dir}/", "#{options.ssh.username}@#{options.ssh.host}:#{destination_dir}"
36
+ end
37
+
38
+ def upload_dir(source_dir, destination_dir)
39
+ rsync "#{options.ssh.username}@#{options.ssh.host}:#{source_dir}/", destination_dir
40
+ end
41
+
42
+ def run(*args)
43
+ command = shell_command(*args)
44
+ logger.verbose "Executing remotely #{command}"
45
+ session.exec!(command)
46
+ end
47
+
48
+ private
49
+
50
+ def rsync(source_dir, destination_dir)
51
+ password_file = Tempfile.new('rsync_password')
52
+ password_file.write(options.ssh.password)
53
+ password_file.close
54
+
55
+ exclude_file = Tempfile.new('exclude')
56
+ exclude_file.write(options.exclude.join("\n"))
57
+ exclude_file.close
58
+
59
+ locally_run "rsync", "-az", "--password-file=#{password_file.path}", "--exclude-from=#{exclude_file.path}", "--delete", source_dir, destination_dir
60
+
61
+ password_file.unlink
62
+ exclude_file.unlink
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,27 @@
1
+ require 'colored'
2
+
3
+ module Wordmove
4
+ class Logger
5
+
6
+ INFO = 0
7
+ VERBOSE = 1
8
+
9
+ attr_accessor :level
10
+
11
+ def log(l, message)
12
+ colors = [ :green, :cyan ]
13
+ if l <= level
14
+ puts " " * l + message.send(colors[l])
15
+ end
16
+ end
17
+
18
+ def info(message)
19
+ log INFO, message
20
+ end
21
+
22
+ def verbose(message)
23
+ log VERBOSE, message
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,3 @@
1
+ module Wordmove
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,9 @@
1
+ describe Foodie::Food do
2
+ it "broccoli is gross" do
3
+ Foodie::Food.portray("Broccoli").should eql("Gross!")
4
+ end
5
+
6
+ it "anything else is delicious" do
7
+ Foodie::Food.portray("Not Broccoli").should eql("Delicious!")
8
+ end
9
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/wordmove/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Stefano Verna"]
6
+ gem.email = ["stefano.verna@welaika.com"]
7
+ gem.description = %q{Capistrano for Wordpress}
8
+ gem.summary = %q{Capistrano for Wordpress}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "wordmove"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Wordmove::VERSION
17
+
18
+ gem.add_dependency 'colored'
19
+ gem.add_dependency 'escape'
20
+ gem.add_dependency 'rake'
21
+ gem.add_dependency 'net-ssh'
22
+ gem.add_dependency 'net-scp'
23
+ gem.add_dependency "thor"
24
+ gem.add_dependency "activesupport", "~> 3.0.0"
25
+ gem.add_dependency "i18n"
26
+ gem.add_dependency "hashie"
27
+
28
+ gem.add_development_dependency "rspec"
29
+ gem.add_development_dependency "cucumber"
30
+ gem.add_development_dependency "aruba"
31
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wordmove
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Stefano Verna
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: colored
16
+ requirement: &70236824991780 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70236824991780
25
+ - !ruby/object:Gem::Dependency
26
+ name: escape
27
+ requirement: &70236824991120 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70236824991120
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &70236824990120 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70236824990120
47
+ - !ruby/object:Gem::Dependency
48
+ name: net-ssh
49
+ requirement: &70236824989300 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70236824989300
58
+ - !ruby/object:Gem::Dependency
59
+ name: net-scp
60
+ requirement: &70236824988840 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70236824988840
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: &70236824988300 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70236824988300
80
+ - !ruby/object:Gem::Dependency
81
+ name: activesupport
82
+ requirement: &70236824987660 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 3.0.0
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70236824987660
91
+ - !ruby/object:Gem::Dependency
92
+ name: i18n
93
+ requirement: &70236824986980 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70236824986980
102
+ - !ruby/object:Gem::Dependency
103
+ name: hashie
104
+ requirement: &70236825713180 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70236825713180
113
+ - !ruby/object:Gem::Dependency
114
+ name: rspec
115
+ requirement: &70236825712460 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *70236825712460
124
+ - !ruby/object:Gem::Dependency
125
+ name: cucumber
126
+ requirement: &70236825711560 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: *70236825711560
135
+ - !ruby/object:Gem::Dependency
136
+ name: aruba
137
+ requirement: &70236825710660 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: *70236825710660
146
+ description: Capistrano for Wordpress
147
+ email:
148
+ - stefano.verna@welaika.com
149
+ executables:
150
+ - wordmove
151
+ extensions: []
152
+ extra_rdoc_files: []
153
+ files:
154
+ - .gitignore
155
+ - Gemfile
156
+ - Gemfile.lock
157
+ - README
158
+ - Rakefile
159
+ - bin/wordmove
160
+ - features/generator.feature
161
+ - features/pull.feature
162
+ - features/push.feature
163
+ - features/step_definitions/aruba_ext_steps.rb
164
+ - features/support/setup.rb
165
+ - lib/wordmove.rb
166
+ - lib/wordmove/cli.rb
167
+ - lib/wordmove/deployer.rb
168
+ - lib/wordmove/generators/Movefile
169
+ - lib/wordmove/generators/movefile.rb
170
+ - lib/wordmove/hosts/local_host.rb
171
+ - lib/wordmove/hosts/remote_host.rb
172
+ - lib/wordmove/logger.rb
173
+ - lib/wordmove/version.rb
174
+ - spec/foodie_spec.rb
175
+ - wordmove.gemspec
176
+ homepage: ''
177
+ licenses: []
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ! '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ requirements: []
195
+ rubyforge_project:
196
+ rubygems_version: 1.8.10
197
+ signing_key:
198
+ specification_version: 3
199
+ summary: Capistrano for Wordpress
200
+ test_files:
201
+ - features/generator.feature
202
+ - features/pull.feature
203
+ - features/push.feature
204
+ - features/step_definitions/aruba_ext_steps.rb
205
+ - features/support/setup.rb
206
+ - spec/foodie_spec.rb