wordpress-deploy 1.0.0.alpha2 → 1.0.0.rc1

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.
Files changed (40) hide show
  1. data/.gitignore +7 -1
  2. data/Guardfile +1 -16
  3. data/README.md +56 -0
  4. data/lib/wordpress_deploy.rb +43 -9
  5. data/lib/wordpress_deploy/cli/helpers.rb +6 -3
  6. data/lib/wordpress_deploy/cli/utility.rb +56 -33
  7. data/lib/wordpress_deploy/config.rb +77 -0
  8. data/lib/wordpress_deploy/database/mysql.rb +281 -20
  9. data/lib/wordpress_deploy/environment.rb +85 -43
  10. data/lib/wordpress_deploy/environments.rb +89 -0
  11. data/lib/wordpress_deploy/logger.rb +3 -3
  12. data/lib/wordpress_deploy/{transfer_protocols → storage}/ftp.rb +52 -116
  13. data/lib/wordpress_deploy/storage/local.rb +12 -0
  14. data/lib/wordpress_deploy/version.rb +1 -1
  15. data/lib/wordpress_deploy/wordpress/salts.rb +68 -0
  16. data/spec/data/blue.rb +52 -0
  17. data/spec/data/development.rb +49 -0
  18. data/spec/data/green.rb +52 -0
  19. data/spec/data/production.rb +52 -0
  20. data/spec/data/red.rb +52 -0
  21. data/spec/data/wp-config.php +90 -0
  22. data/spec/spec_helper.rb +16 -5
  23. data/spec/wordpress_deploy/cli/utility_spec.rb +48 -0
  24. data/spec/{environment_spec.rb → wordpress_deploy/config_spec.rb} +9 -7
  25. data/spec/wordpress_deploy/database/mysql_spec.rb +147 -0
  26. data/spec/wordpress_deploy/environment_spec.rb +96 -0
  27. data/spec/wordpress_deploy/environments_spec.rb +65 -0
  28. data/spec/wordpress_deploy/storage/ftp_spec.rb +58 -0
  29. data/spec/wordpress_deploy/storage/local_spec.rb +0 -0
  30. data/spec/wordpress_deploy/wordpress/salts_spec.rb +70 -0
  31. data/{spec/data/wp-config-sample.php → templates/wp-config.erb} +17 -17
  32. data/wordpress_deploy.gemspec +7 -6
  33. metadata +64 -30
  34. data/Gemfile.lock +0 -83
  35. data/lib/wordpress_deploy/wordpress/configuration.rb +0 -196
  36. data/spec/data/ftp.yml +0 -4
  37. data/spec/data/wp-config.yml +0 -128
  38. data/spec/database/mysql_spec.rb +0 -93
  39. data/spec/transfer_protocols/ftp_spec.rb +0 -193
  40. data/spec/wordpress/configuration_spec.rb +0 -202
@@ -1,196 +0,0 @@
1
- module WordpressDeploy
2
- module Wordpress
3
-
4
- class Configuration
5
-
6
- attr_accessor :available_names
7
- alias :names :available_names
8
-
9
- def initialize(config_name=nil)
10
- @template = File.join(Environment.wp_dir, "wp-config-sample.php")
11
- @output = File.join(Environment.wp_dir, "wp-config.php")
12
-
13
- @yaml = YAML.load_file(File.join(Environment.config_dir, "wp-config.yml"))
14
- @available_names = @yaml.map { |key, val| key }
15
-
16
- self.name = config_name unless config_name.nil?
17
- end
18
-
19
- ##
20
- # Return the configuration's name.
21
- #
22
- # Defaults to the first configuration name.
23
- def name
24
- @name ||= available_names.first
25
- @name
26
- end
27
-
28
- ##
29
- # Set the configuration's name.
30
- #
31
- # Only performs the assignment if the proposed name is
32
- # an available name.
33
- #
34
- # Returns the Configuration's name.
35
- def name=(new_name)
36
- @name = new_name if name? new_name
37
- @name
38
- end
39
-
40
- ##
41
- # Test if the name passed in is an available configuration
42
- # name.
43
- def name?(name_to_check)
44
- available_names.include? name_to_check
45
- end
46
-
47
- ##
48
- # Returns 64 psuedo-random characters as a string
49
- # Characters can be a-zA-z or !@#$%^&*()-~+=|/{}:;,.?<>[]
50
- def self.salt
51
- salt_array.sample(64).join("")
52
- end
53
-
54
- ##
55
- # The file that contains the template for the output file
56
- def template
57
- @template
58
- end
59
-
60
- ##
61
- # The file that will be output
62
- def output
63
- @output
64
- end
65
-
66
- ##
67
- # Extract just the port number from the DB_HOST
68
- # configuration file. Or return the default port of 3306.
69
- def port
70
- port = 3306
71
- match = /:(?<port>\d+)$/.match(send(:DB_HOST))
72
- port = match[:port].to_i unless match.nil?
73
- port
74
- end
75
-
76
- ##
77
- # Does DB_HOST contain a port number?
78
- def port?
79
- !(send(:DB_HOST) =~ /:(?<port>\d+)$/).nil?
80
- end
81
-
82
- ##
83
- # Get just the hostname from DB_HOST. Only different from
84
- # DB_HOST if DB_HOST has a socket or a port number in it.
85
- def host
86
- host = "localhost"
87
- match = /(?<host>.*?)(?=:|$)/.match(send(:DB_HOST))
88
- host = match[:host].to_s unless match.nil?
89
- host
90
- end
91
-
92
- ##
93
- # Extract just the socket part from the DB_HOST
94
- # configuration file. Or return an empty string if none.
95
- def socket
96
- socket = ""
97
- match = /:(?<socket>\/.*)$/.match(send(:DB_HOST))
98
- socket = match[:socket].to_s unless match.nil?
99
- socket
100
- end
101
-
102
- ##
103
- # Does DB_HOST contain a socket path?
104
- def socket?
105
- !(send(:DB_HOST) =~ /:(?<socket>\/.*)$/).nil?
106
- end
107
-
108
- ##
109
- # Write the file the filesystem
110
- def save!
111
- # Remove the output file if is already there
112
- FileUtils.rm @output if File.exists? @output
113
-
114
- # Open the output file
115
- output = File.open(@output, 'w')
116
-
117
- # Start parsing the template file
118
- File.open(@template, 'r') do |template|
119
- template.each_line do |line|
120
- match = /^define\(['"](?<parameter>\w*)['"]/.match(line)
121
- unless match.nil?
122
- # Get named capture group from Regular Expression
123
- param = match[:parameter]
124
-
125
- # Get the value for the specified parameter
126
- value = send(param)
127
-
128
- # Set the definition of the line
129
- line = define(param, value)
130
- end
131
- output.puts(line)
132
- end
133
- end
134
-
135
- ensure
136
- # Close the output file if it is open
137
- # even if an exception occurs
138
- output.close if output
139
- end
140
-
141
- WP_CONFIGURATION_ATTRIBUTES = [:DB_NAME, :DB_USER, :DB_PASSWORD, :DB_HOST,
142
- :DB_CHARSET, :DB_COLLATE, :WPLANG,
143
- :WP_DEBUG]
144
-
145
- WP_CONFIGURATION_SALTS = [:AUTH_KEY, :SECURE_AUTH_KEY,
146
- :LOGGED_IN_KEY, :NONCE_KEY, :AUTH_SALT,
147
- :SECURE_AUTH_SALT, :LOGGED_IN_SALT,
148
- :NONCE_SALT]
149
-
150
- WP_CONFIGURATION_ALL = WP_CONFIGURATION_ATTRIBUTES +
151
- WP_CONFIGURATION_SALTS
152
-
153
- ##
154
- # Define the behaviours of the default parameters quickly
155
- def method_missing(meth, *args, &block)
156
- # Convert the method to a symbol
157
- method_symbol = meth.to_sym
158
-
159
- if WP_CONFIGURATION_ATTRIBUTES.include? method_symbol
160
- config = @yaml[name]
161
- return config[meth.to_s] if config.include? meth.to_s
162
- ""
163
- elsif WP_CONFIGURATION_SALTS.include? method_symbol
164
- # Return salt if the method is a salting method
165
- Configuration.salt
166
- else
167
- # You *must* call super if you don't handle the method, otherwise
168
- # you will mess up Ruby's method lookup.
169
- super
170
- end
171
- end
172
-
173
- ##
174
- # Define respond_to?
175
- def respond_to?(method)
176
- return true if WP_CONFIGURATION_ALL.include? method.to_sym
177
- super
178
- end
179
-
180
- private
181
-
182
- ##
183
- # The Salting array
184
- # Provides the array of available characters that can bet used as salt
185
- def self.salt_array
186
- @salt_array ||= %w{0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ! @ # $ % ^ & * ( ) - ~ + = | / { } : ; , . ? < > [ ]}
187
- end
188
-
189
- def define(key, value)
190
- "define('#{key}', '#{value}');"
191
- end
192
-
193
- end
194
-
195
- end
196
- end
data/spec/data/ftp.yml DELETED
@@ -1,4 +0,0 @@
1
- hostname: ftp.lovelett.me
2
- username: real_user
3
- password: their_pa$$w0rd
4
- remote_dir: /ryan
@@ -1,128 +0,0 @@
1
- development:
2
- DB_NAME: developer_database_name
3
- DB_USER: root
4
- DB_PASSWORD: q9&hu6Re_*dReWr_GAba_2wr89#2Ra8$
5
- DB_HOST: localhost
6
- DB_CHARSET: utf8
7
- DB_COLLATE: ''
8
-
9
- # FTP Transfer settings
10
- FTP_HOST: localhost
11
- FTP_USER: root
12
- FTP_PASSWORD: q9&hu6Re_*dReWr_GAba_2wr89#2Ra8$
13
- FTP_DIR: /wordpress
14
-
15
- # Authentication Unique Keys and Salts
16
- # https://api.wordpress.org/secret-key/1.1/salt/
17
- # If no salts are supplied they will be generated automatically
18
- #AUTH_KEY: '*oH{(q=`tIzdNJKUk$XfHNNjKd$W=f$S`CtD.,;x0R}$/A,}]!+q0>>QfB#.Bsw]'
19
- #SECURE_AUTH_KEY: '{yg|7Q*j-?$%`b|Z!+5U,pvM,eA0+$/ruprp.mO[;|fExU:n0,-!at0+3UY@;h`X'
20
- #LOGGED_IN_KEY: 'k]N 9I<-rZq#k Xg)IPhv$E*ktbD7Z_AtI){U;(P;0r#LJlYncEr%8v9tG`>BHU+'
21
- #NONCE_KEY: ' /w9->::-YB Xa#lf%TPH+cIf?]Ru4OfKGF2h8PHsa)2,n-~kRJ<[slUg<GZ Asx'
22
- #AUTH_SALT: 'VYwGGP,#|9P[5RCUTdv2c8)`^{dotU0fWrU`JE9qq^n=F4//e)fCs<HF6sd>~yjW'
23
- #SECURE_AUTH_SALT: 'ok}@vSs=n6%_%UCO|&[?Jc;,-,.#Q3}zR4ej%IoAL7RavTN/Xe,UrQ4)p}onRie0'
24
- #LOGGED_IN_SALT: 'Z!,C*:Q_I9A`[pJm-b0Z/(Gm2qvK8>0~| T&)lM+sxG.OdEmgHbAGF&(^>2.rDGW'
25
- #NONCE_SALT: 'ay)${bFV=F1KH[`NZ+W+Zk?Hc:@}jN}Ec)+Zn[F1fyP,mwi|@tk/(1hdp[G2F%os'
26
-
27
- production:
28
- DB_NAME: production_database_name
29
- DB_USER: some_user
30
- DB_PASSWORD: trecuwawraJaZe6P@kucraDrachustUq
31
- DB_HOST: abbott.biz:6654
32
- DB_CHARSET: utf8
33
- DB_COLLATE: ''
34
-
35
- # FTP Transfer settings
36
- FTP_HOST: ftp.abbott.biz:6654
37
- FTP_USER: some_user
38
- FTP_PASSWORD: trecuwawraJaZe6P@kucraDrachustUq
39
-
40
- # Authentication Unique Keys and Salts
41
- # https://api.wordpress.org/secret-key/1.1/salt/
42
- # If no salts are supplied they will be generated automatically
43
- #AUTH_KEY: '*oH{(q=`tIzdNJKUk$XfHNNjKd$W=f$S`CtD.,;x0R}$/A,}]!+q0>>QfB#.Bsw]'
44
- #SECURE_AUTH_KEY: '{yg|7Q*j-?$%`b|Z!+5U,pvM,eA0+$/ruprp.mO[;|fExU:n0,-!at0+3UY@;h`X'
45
- #LOGGED_IN_KEY: 'k]N 9I<-rZq#k Xg)IPhv$E*ktbD7Z_AtI){U;(P;0r#LJlYncEr%8v9tG`>BHU+'
46
- #NONCE_KEY: ' /w9->::-YB Xa#lf%TPH+cIf?]Ru4OfKGF2h8PHsa)2,n-~kRJ<[slUg<GZ Asx'
47
- #AUTH_SALT: 'VYwGGP,#|9P[5RCUTdv2c8)`^{dotU0fWrU`JE9qq^n=F4//e)fCs<HF6sd>~yjW'
48
- #SECURE_AUTH_SALT: 'ok}@vSs=n6%_%UCO|&[?Jc;,-,.#Q3}zR4ej%IoAL7RavTN/Xe,UrQ4)p}onRie0'
49
- #LOGGED_IN_SALT: 'Z!,C*:Q_I9A`[pJm-b0Z/(Gm2qvK8>0~| T&)lM+sxG.OdEmgHbAGF&(^>2.rDGW'
50
- #NONCE_SALT: 'ay)${bFV=F1KH[`NZ+W+Zk?Hc:@}jN}Ec)+Zn[F1fyP,mwi|@tk/(1hdp[G2F%os'
51
-
52
- red:
53
- DB_NAME: red
54
- DB_USER: red_user
55
- DB_PASSWORD: Bun__huPEMeBreM6tebRAp@eguzuQExe
56
- DB_HOST: hanerutherford.biz
57
- DB_CHARSET: utf8
58
- DB_COLLATE: ''
59
-
60
- # FTP Transfer settings
61
- FTP_HOST: ftp.hanerutherford.biz
62
- FTP_USER: red_user
63
- FTP_PASSWORD: Bun__huPEMeBreM6tebRAp@eguzuQExe
64
- FTP_DIR: /html
65
-
66
- # Authentication Unique Keys and Salts
67
- # https://api.wordpress.org/secret-key/1.1/salt/
68
- # If no salts are supplied they will be generated automatically
69
- AUTH_KEY: '*oH{(q=`tIzdNJKUk$XfHNNjKd$W=f$S`CtD.,;x0R}$/A,}]!+q0>>QfB#.Bsw]'
70
- SECURE_AUTH_KEY: '{yg|7Q*j-?$%`b|Z!+5U,pvM,eA0+$/ruprp.mO[;|fExU:n0,-!at0+3UY@;h`X'
71
- LOGGED_IN_KEY: 'k]N 9I<-rZq#k Xg)IPhv$E*ktbD7Z_AtI){U;(P;0r#LJlYncEr%8v9tG`>BHU+'
72
- NONCE_KEY: ' /w9->::-YB Xa#lf%TPH+cIf?]Ru4OfKGF2h8PHsa)2,n-~kRJ<[slUg<GZ Asx'
73
- AUTH_SALT: 'VYwGGP,#|9P[5RCUTdv2c8)`^{dotU0fWrU`JE9qq^n=F4//e)fCs<HF6sd>~yjW'
74
- SECURE_AUTH_SALT: 'ok}@vSs=n6%_%UCO|&[?Jc;,-,.#Q3}zR4ej%IoAL7RavTN/Xe,UrQ4)p}onRie0'
75
- LOGGED_IN_SALT: 'Z!,C*:Q_I9A`[pJm-b0Z/(Gm2qvK8>0~| T&)lM+sxG.OdEmgHbAGF&(^>2.rDGW'
76
- NONCE_SALT: 'ay)${bFV=F1KH[`NZ+W+Zk?Hc:@}jN}Ec)+Zn[F1fyP,mwi|@tk/(1hdp[G2F%os'
77
-
78
- green:
79
- DB_NAME: green
80
- DB_USER: domenick.dare
81
- DB_PASSWORD: Daw&HEWuzaz6sa&epHech_spAKucHaTH
82
- DB_HOST: yundt.org
83
- DB_CHARSET: utf8
84
- DB_COLLATE: ''
85
-
86
- # FTP Transfer settings
87
- FTP_HOST: ftp.yundt.org
88
- FTP_USER: domenick.dare
89
- FTP_PASSWORD: Daw&HEWuzaz6sa&epHech_spAKucHaTH
90
- FTP_DIR: /wordpress
91
-
92
- # Authentication Unique Keys and Salts
93
- # https://api.wordpress.org/secret-key/1.1/salt/
94
- # If no salts are supplied they will be generated automatically
95
- #AUTH_KEY: '*oH{(q=`tIzdNJKUk$XfHNNjKd$W=f$S`CtD.,;x0R}$/A,}]!+q0>>QfB#.Bsw]'
96
- #SECURE_AUTH_KEY: '{yg|7Q*j-?$%`b|Z!+5U,pvM,eA0+$/ruprp.mO[;|fExU:n0,-!at0+3UY@;h`X'
97
- #LOGGED_IN_KEY: 'k]N 9I<-rZq#k Xg)IPhv$E*ktbD7Z_AtI){U;(P;0r#LJlYncEr%8v9tG`>BHU+'
98
- #NONCE_KEY: ' /w9->::-YB Xa#lf%TPH+cIf?]Ru4OfKGF2h8PHsa)2,n-~kRJ<[slUg<GZ Asx'
99
- #AUTH_SALT: 'VYwGGP,#|9P[5RCUTdv2c8)`^{dotU0fWrU`JE9qq^n=F4//e)fCs<HF6sd>~yjW'
100
- #SECURE_AUTH_SALT: 'ok}@vSs=n6%_%UCO|&[?Jc;,-,.#Q3}zR4ej%IoAL7RavTN/Xe,UrQ4)p}onRie0'
101
- #LOGGED_IN_SALT: 'Z!,C*:Q_I9A`[pJm-b0Z/(Gm2qvK8>0~| T&)lM+sxG.OdEmgHbAGF&(^>2.rDGW'
102
- #NONCE_SALT: 'ay)${bFV=F1KH[`NZ+W+Zk?Hc:@}jN}Ec)+Zn[F1fyP,mwi|@tk/(1hdp[G2F%os'
103
-
104
- blue:
105
- DB_NAME: blue
106
- DB_USER: harrison
107
- DB_PASSWORD: w5@reba?9?pepuk7w9a#H86ustaGawE!
108
- DB_HOST: torphagenes.com:/tmp/mysql5.sock
109
- DB_CHARSET: utf8
110
- DB_COLLATE: ''
111
-
112
- # FTP Transfer settings
113
- FTP_HOST: ftp.torphagenes.com
114
- FTP_USER: harrison
115
- FTP_PASSWORD: w5@reba?9?pepuk7w9a#H86ustaGawE!
116
- FTP_DIR: /wordpress
117
-
118
- # Authentication Unique Keys and Salts
119
- # https://api.wordpress.org/secret-key/1.1/salt/
120
- # If no salts are supplied they will be generated automatically
121
- #AUTH_KEY: '*oH{(q=`tIzdNJKUk$XfHNNjKd$W=f$S`CtD.,;x0R}$/A,}]!+q0>>QfB#.Bsw]'
122
- #SECURE_AUTH_KEY: '{yg|7Q*j-?$%`b|Z!+5U,pvM,eA0+$/ruprp.mO[;|fExU:n0,-!at0+3UY@;h`X'
123
- #LOGGED_IN_KEY: 'k]N 9I<-rZq#k Xg)IPhv$E*ktbD7Z_AtI){U;(P;0r#LJlYncEr%8v9tG`>BHU+'
124
- #NONCE_KEY: ' /w9->::-YB Xa#lf%TPH+cIf?]Ru4OfKGF2h8PHsa)2,n-~kRJ<[slUg<GZ Asx'
125
- #AUTH_SALT: 'VYwGGP,#|9P[5RCUTdv2c8)`^{dotU0fWrU`JE9qq^n=F4//e)fCs<HF6sd>~yjW'
126
- #SECURE_AUTH_SALT: 'ok}@vSs=n6%_%UCO|&[?Jc;,-,.#Q3}zR4ej%IoAL7RavTN/Xe,UrQ4)p}onRie0'
127
- #LOGGED_IN_SALT: 'Z!,C*:Q_I9A`[pJm-b0Z/(Gm2qvK8>0~| T&)lM+sxG.OdEmgHbAGF&(^>2.rDGW'
128
- #NONCE_SALT: 'ay)${bFV=F1KH[`NZ+W+Zk?Hc:@}jN}Ec)+Zn[F1fyP,mwi|@tk/(1hdp[G2F%os'
@@ -1,93 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include WordpressDeploy::Database
4
- include WordpressDeploy::Wordpress
5
-
6
- describe MySql do
7
-
8
- let(:mysql) { "/path/to/mysql" }
9
- let(:mysqldump) { "/path/to/mysqldump" }
10
-
11
- it { should respond_to :run }
12
- it { should respond_to :utility }
13
- it { should respond_to :command_name }
14
- it { should respond_to :mysqldump }
15
- it { should respond_to :configuration }
16
- it { should respond_to :configuration= }
17
-
18
- shared_examples "command based on configuration" do
19
- before(:each) do
20
- subject.configuration = WordpressDeploy::Wordpress::Configuration.new name
21
- subject.stub(:utility).with("mysqldump").and_return(mysqldump)
22
- end
23
- its(:arguments) { should eq expected_args }
24
- its(:mysqldump) { should eq "#{mysqldump} #{expected_args}" }
25
- end
26
-
27
- context "when configuration is 'development'" do
28
- it_should_behave_like "command based on configuration" do
29
- let(:name) { "development" }
30
- let(:expected_args) { "-P \"3306\" -h \"localhost\" -u \"root\" -pq9&hu6Re_*dReWr_GAba_2wr89#2Ra8$ -B \"developer_database_name\"" }
31
- end
32
- end
33
-
34
- context "when configuration is 'production'" do
35
- it_should_behave_like "command based on configuration" do
36
- let(:name) { "production" }
37
- let(:expected_args) { "-P \"6654\" -h \"abbott.biz\" -u \"some_user\" -ptrecuwawraJaZe6P@kucraDrachustUq -B \"production_database_name\"" }
38
- end
39
- end
40
-
41
- context "when configuration is 'red'" do
42
- it_should_behave_like "command based on configuration" do
43
- let(:name) { "red" }
44
- let(:expected_args) { "-P \"3306\" -h \"hanerutherford.biz\" -u \"red_user\" -pBun__huPEMeBreM6tebRAp@eguzuQExe -B \"red\"" }
45
- end
46
- end
47
-
48
- context "when configuration is 'green'" do
49
- it_should_behave_like "command based on configuration" do
50
- let(:name) { "green" }
51
- let(:expected_args) { "-P \"3306\" -h \"yundt.org\" -u \"domenick.dare\" -pDaw&HEWuzaz6sa&epHech_spAKucHaTH -B \"green\"" }
52
- end
53
- end
54
-
55
- context "when configuration is 'blue'" do
56
- it_should_behave_like "command based on configuration" do
57
- let(:name) { "blue" }
58
- let(:expected_args) { "-P \"3306\" -h \"torphagenes.com\" -u \"harrison\" -pw5@reba?9?pepuk7w9a#H86ustaGawE! -B \"blue\"" }
59
- end
60
- end
61
-
62
- context "find commands" do
63
- it "should raise Errors::Cli::UtilityNotFoundError if no command given" do
64
- expect{subject.utility ""}.to raise_error(WordpressDeploy::Errors::Cli::UtilityNotFoundError)
65
- end
66
- it "should raise Errors::Cli::UtilityNotFoundError if command not found" do
67
- expect{subject.utility "missing_system_command"}.to raise_error(WordpressDeploy::Errors::Cli::UtilityNotFoundError)
68
- end
69
- it "mysql" do
70
- stdin = Object.new
71
- stdin.stub(:close)
72
-
73
- stdout = Object.new.stub(:read).and_return("")
74
- stdout.stub(:read).and_return(mysql)
75
-
76
- stderr = Object.new.stub(:read).and_return("")
77
- stderr.stub(:read).and_return("")
78
-
79
- wait_thr = Object.new
80
- wait_thr.stub(:value).and_return($?)
81
-
82
- Open3.should_receive(:popen3).exactly(1).times.and_yield(stdin, stdout, stderr, wait_thr)
83
-
84
- subject.utility("mysql").should eq mysql
85
- WordpressDeploy::Database::MySql::UTILITY["mysql"].should eq mysql
86
- end
87
- end
88
-
89
- it "should parse out the command name" do
90
- subject.command_name("#{mysqldump} -P \"3306\" -h \"NOT_localhost\" -u \"root\" -ptemp -B \"developer_database_name\"").should eq "mysqldump"
91
- end
92
-
93
- end
@@ -1,193 +0,0 @@
1
- require 'spec_helper'
2
-
3
- include WordpressDeploy
4
-
5
- describe WordpressDeploy::TransferProtocols::Ftp do
6
- before(:each) do
7
- # None of the methods that follow are testing
8
- # the Net::FTP object actions; therefore they
9
- # can be stubbed out
10
- @ftp = double("ftp")
11
- [:connect, :login, :passive=].each do |methods|
12
- @ftp.stub(methods).with(any_args)
13
- end
14
- Net::FTP.stub(:new).and_return(@ftp)
15
- end
16
-
17
- it { should respond_to :name }
18
- it { should respond_to :name= }
19
- it { should respond_to :available_names }
20
- it { should respond_to :names }
21
- it { should respond_to :port }
22
- it { should respond_to :port? }
23
- it { should respond_to :host }
24
- it { should respond_to :configuration }
25
- it { should respond_to :configuration= }
26
-
27
- it { should respond_to :FTP_USER }
28
- it { should respond_to :FTP_PASSWORD }
29
- it { should respond_to :FTP_HOST }
30
- it { should respond_to :FTP_DIR }
31
-
32
- its(:names) { should have(5).strings }
33
- its(:names) { should include "development" }
34
- its(:names) { should include "production" }
35
- its(:names) { should include "red" }
36
- its(:names) { should include "green" }
37
- its(:names) { should include "blue" }
38
- its(:available_names) { should have(5).strings }
39
- its(:available_names) { should include "development" }
40
- its(:available_names) { should include "production" }
41
- its(:available_names) { should include "red" }
42
- its(:available_names) { should include "green" }
43
- its(:available_names) { should include "blue" }
44
-
45
- it "should allow creation of new configuration by name" do
46
- ftp = WordpressDeploy::TransferProtocols::Ftp.new "red"
47
- ftp.name.should eq "red"
48
- end
49
-
50
- it "should only allow configuration names found in the yaml file" do
51
- ["production", "development", "red", "green", "blue"].each do |name|
52
- subject.name = name
53
- subject.name.should eq name
54
- end
55
- [:production, nil].each do |name|
56
- subject.name = name
57
- subject.name.should_not eq name
58
- end
59
- end
60
-
61
- shared_examples "ftp named configuration" do
62
- before(:each) { subject.name = name }
63
- its(:name) { should eq name }
64
- its(:FTP_USER) { should eq ftp_user }
65
- its(:FTP_PASSWORD) { should eq ftp_password }
66
- its(:FTP_HOST) { should eq ftp_host }
67
- its(:FTP_DIR) { should eq ftp_dir_raw }
68
- its(:local_path) { should eq Environment.wp_dir }
69
- its(:remote_path) { should eq ftp_dir }
70
- its(:username) { should eq ftp_user }
71
- its(:password) { should eq ftp_password }
72
- its(:host) { should eq host }
73
- its(:port) { should eq port }
74
- its(:port?) { should eq has_port }
75
- end
76
-
77
- context "development" do
78
- it_should_behave_like "ftp named configuration" do
79
- let(:name) { "development" }
80
- let(:ftp_user) { "root" }
81
- let(:ftp_password) { "q9&hu6Re_*dReWr_GAba_2wr89#2Ra8$" }
82
- let(:ftp_host) { "localhost" }
83
- let(:ftp_dir_raw) { "/wordpress" }
84
- let(:ftp_dir) { "/wordpress" }
85
- let(:host) { "localhost" }
86
- let(:port) { 21 }
87
- let(:has_port) { false }
88
- end
89
- end
90
-
91
- context "production" do
92
- it_should_behave_like "ftp named configuration" do
93
- let(:name) { "production" }
94
- let(:ftp_user) { "some_user" }
95
- let(:ftp_password) { "trecuwawraJaZe6P@kucraDrachustUq" }
96
- let(:ftp_host) { "ftp.abbott.biz:6654" }
97
- let(:ftp_dir_raw) { nil }
98
- let(:ftp_dir) { "/" }
99
- let(:host) { "ftp.abbott.biz" }
100
- let(:port) { 6654 }
101
- let(:has_port) { true }
102
- end
103
- end
104
-
105
- context "red" do
106
- it_should_behave_like "ftp named configuration" do
107
- let(:name) { "red" }
108
- let(:ftp_user) { "red_user" }
109
- let(:ftp_password) { "Bun__huPEMeBreM6tebRAp@eguzuQExe" }
110
- let(:ftp_host) { "ftp.hanerutherford.biz" }
111
- let(:ftp_dir_raw) { "/html" }
112
- let(:ftp_dir) { "/html" }
113
- let(:host) { "ftp.hanerutherford.biz" }
114
- let(:port) { 21 }
115
- let(:has_port) { false }
116
- end
117
- end
118
-
119
- context "green" do
120
- it_should_behave_like "ftp named configuration" do
121
- let(:name) { "green" }
122
- let(:ftp_user) { "domenick.dare" }
123
- let(:ftp_password) { "Daw&HEWuzaz6sa&epHech_spAKucHaTH" }
124
- let(:ftp_host) { "ftp.yundt.org" }
125
- let(:ftp_dir_raw) { "/wordpress" }
126
- let(:ftp_dir) { "/wordpress" }
127
- let(:host) { "ftp.yundt.org" }
128
- let(:port) { 21 }
129
- let(:has_port) { false }
130
- end
131
- end
132
-
133
- context "blue" do
134
- it_should_behave_like "ftp named configuration" do
135
- let(:name) { "blue" }
136
- let(:ftp_user) { "harrison" }
137
- let(:ftp_password) { "w5@reba?9?pepuk7w9a#H86ustaGawE!" }
138
- let(:ftp_host) { "ftp.torphagenes.com" }
139
- let(:ftp_dir_raw) { "/wordpress" }
140
- let(:ftp_dir) { "/wordpress" }
141
- let(:host) { "ftp.torphagenes.com" }
142
- let(:port) { 21 }
143
- let(:has_port) { false }
144
- end
145
- end
146
-
147
- it "has methods that allow for interactive overwrite" do
148
- expect { subject.transmit }.to raise_error(NotImplementedError)
149
- expect { subject.receive }.to raise_error(NotImplementedError)
150
- end
151
-
152
- it { should respond_to :transmit! }
153
- it { should respond_to :receive! }
154
-
155
- context "FTP connection" do
156
- before(:each) do
157
- @ftp = double("ftp")
158
- @ftp.should_receive(:connect).with("localhost", 21)
159
- @ftp.should_receive(:login).with("root", "q9&hu6Re_*dReWr_GAba_2wr89#2Ra8$")
160
- @ftp.should_receive(:passive=).with(true)
161
- @ftp.stub(:pwd)
162
- @ftp.stub(:closed?).and_return(false)
163
- @ftp.stub(:close)
164
- @ftp.stub(:chdir)
165
- @ftp.stub(:putbinaryfile)
166
- Net::FTP.stub(:new).and_return(@ftp)
167
- WordpressDeploy::TransferProtocols::Ftp.any_instance.stub(:ftp).and_return(@ftp)
168
- end
169
-
170
- it "with valid credentials" do
171
- ftp = WordpressDeploy::TransferProtocols::Ftp.new("developer")
172
- end
173
-
174
- it "close an open connection" do
175
- ftp = WordpressDeploy::TransferProtocols::Ftp.new("developer")
176
- ftp.close.should be_true
177
- #ftp.close.should be_false
178
- end
179
-
180
- it "should send files" do
181
- files = Dir.glob(File.join(data_dir, "**/*"))
182
-
183
- Dir.should_receive(:glob).with("/Users/ryan/Source/wordpress-deploy/spec/data/**/*").and_return(files)
184
-
185
- ftp = WordpressDeploy::TransferProtocols::Ftp.new("developer")
186
-
187
- ftp.should_receive(:put_file).exactly(files.count).times
188
-
189
- ftp.transmit!
190
- end
191
- end
192
-
193
- end