wordmove 0.0.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.
@@ -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