wordpress_config_parser 0.9.0 → 0.11.0
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 +7 -0
- data/README.md +40 -17
- data/{sample_scripts/backup-wordpress-db.rb → bin/backup-wordpress-db} +7 -7
- data/lib/wordpress_config_parser.rb +1 -6
- data/lib/wordpress_config_parser/parser.rb +82 -0
- data/lib/wordpress_config_parser/version.rb +1 -1
- data/spec/wordpress_config_parser/parser_spec.rb +86 -0
- data/wordpress_config_parser.gemspec +6 -2
- metadata +31 -17
- data/lib/wordpress_config_parser/wc_parser.rb +0 -95
- data/spec/wordpress_config_reader/wc_reader_spec.rb +0 -82
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 38f90fe48a8714b268601c33bced5f5c6e9b00a4
|
4
|
+
data.tar.gz: 06061cd7e28fad3c370c54b878a790fadeddf822
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a79084d5859d13b9ad4ae2d6692e981ae78e2624da37d3462406071c3a3e73c7d625055eeaf659569e72cec95cf5fa02fc614567f7caafa743ed8b00e2be32f0
|
7
|
+
data.tar.gz: 7c6a9f9e79f98d727954aba1b442dcd40ca23c91eac408f95c87fc4c81086aa8b7fbe3836930aaa018e67c125c04aef4f880245f8a1e953cf528c6c8fe5b93b4
|
data/README.md
CHANGED
@@ -40,10 +40,37 @@ entire shell account), and pushes them to the origin repo:
|
|
40
40
|
|
41
41
|
```ruby
|
42
42
|
#!/usr/bin/env ruby
|
43
|
-
|
44
|
-
|
43
|
+
#
|
44
|
+
# backup-wordpress-db.rb
|
45
|
+
#
|
46
|
+
# Calls mysqldump to create a backup of a MySQL data base
|
47
|
+
# in the form of a .sql file containing the SQL commands
|
48
|
+
# required to reconstruct it.
|
49
|
+
#
|
50
|
+
# Assumptions:
|
51
|
+
#
|
52
|
+
# 1) The directory containing the output (backup) files is in a git repo.
|
53
|
+
#
|
54
|
+
# 2) Either you have .ssh keys set up, or you're willing to
|
55
|
+
# type in your password for the git push.
|
56
|
+
#
|
57
|
+
# 3) You're storing your SQL backup files in ~/sql-backups, and
|
58
|
+
# that directory already exists.
|
59
|
+
#
|
60
|
+
# 4) The blogs are all under the $HOME/public_html directory.
|
61
|
+
#
|
62
|
+
# 5) There are no changes git added when you run this script.
|
63
|
+
# Otherwise, those changes will be included in the commit,
|
64
|
+
# without any commit message to describe them.
|
65
|
+
|
66
|
+
require 'wordpress_config_reader'
|
45
67
|
require 'shellwords'
|
46
68
|
|
69
|
+
if ARGV.empty?
|
70
|
+
puts "Syntax is backup-wordpress.rb blog_dir_name_1 [...blog_dir_name_n]."
|
71
|
+
exit -1
|
72
|
+
end
|
73
|
+
|
47
74
|
|
48
75
|
def run_command(command)
|
49
76
|
puts(command)
|
@@ -53,29 +80,28 @@ end
|
|
53
80
|
|
54
81
|
home = ENV['HOME']
|
55
82
|
output_dir = File.join(home, 'sql-backups')
|
56
|
-
blognames =
|
57
|
-
|
83
|
+
blognames = ARGV
|
58
84
|
|
59
85
|
blognames.each do |blogname|
|
60
86
|
|
61
87
|
blog_dir = File.join(home, 'public_html', blogname)
|
62
|
-
|
63
|
-
|
64
|
-
outfilespec = File.join(output_dir, "#{blogname}-db-backup-#{time_str}.sql")
|
88
|
+
reader = WCReader.new(blog_dir)
|
89
|
+
outfilespec = File.join(output_dir, "#{blogname}-db-backup.sql")
|
65
90
|
|
66
|
-
user = Shellwords.escape(
|
67
|
-
password = Shellwords.escape(
|
68
|
-
host = Shellwords.escape(
|
69
|
-
name = Shellwords.escape(
|
91
|
+
user = Shellwords.escape(reader.db_user)
|
92
|
+
password = Shellwords.escape(reader.db_password)
|
93
|
+
host = Shellwords.escape(reader.db_host)
|
94
|
+
name = Shellwords.escape(reader.db_name)
|
70
95
|
|
71
96
|
|
72
|
-
Dir.chdir(
|
97
|
+
Dir.chdir(output_dir) do # make sure we're in the right repo
|
73
98
|
run_command("mysqldump -u#{user} -p#{password} -h#{host} #{name} 2>&1 | tee #{outfilespec}")
|
74
99
|
run_command("git add #{outfilespec} 2>&1")
|
75
|
-
run_command("git commit -m \"Added #{outfilespec}.\"")
|
76
100
|
end
|
77
101
|
end
|
78
102
|
|
103
|
+
|
104
|
+
run_command("git commit -m \"Updated SQL backups for blogs: #{blognames.join(', ')}.\"")
|
79
105
|
run_command("git push -u origin master")
|
80
106
|
```
|
81
107
|
|
@@ -97,7 +123,7 @@ value = parser.db_xyz
|
|
97
123
|
```
|
98
124
|
|
99
125
|
You can also call has_key? (with either string or symbol) to see if it's there
|
100
|
-
before trying to get it. This function
|
126
|
+
before trying to get it. This function pulls the value into
|
101
127
|
the cache if it wasn't already there, so the subsequent access to get the
|
102
128
|
actual value is very fast.
|
103
129
|
|
@@ -123,9 +149,6 @@ Or install it yourself as:
|
|
123
149
|
|
124
150
|
$ gem install wordpress_config_parser
|
125
151
|
|
126
|
-
## Usage
|
127
|
-
|
128
|
-
TODO: Write usage instructions here
|
129
152
|
|
130
153
|
## Contributing
|
131
154
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# backup-wordpress-db
|
3
|
+
# backup-wordpress-db
|
4
4
|
#
|
5
5
|
# Calls mysqldump to create a backup of a MySQL data base
|
6
6
|
# in the form of a .sql file containing the SQL commands
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# Otherwise, those changes will be included in the commit,
|
23
23
|
# without any commit message to describe them.
|
24
24
|
|
25
|
-
require '
|
25
|
+
require 'wordpress_config_parser'
|
26
26
|
require 'shellwords'
|
27
27
|
|
28
28
|
if ARGV.empty?
|
@@ -44,13 +44,13 @@ blognames = ARGV
|
|
44
44
|
blognames.each do |blogname|
|
45
45
|
|
46
46
|
blog_dir = File.join(home, 'public_html', blogname)
|
47
|
-
|
47
|
+
parser = WordpressConfigParser::Parser.new(blog_dir)
|
48
48
|
outfilespec = File.join(output_dir, "#{blogname}-db-backup.sql")
|
49
49
|
|
50
|
-
user = Shellwords.escape(
|
51
|
-
password = Shellwords.escape(
|
52
|
-
host = Shellwords.escape(
|
53
|
-
name = Shellwords.escape(
|
50
|
+
user = Shellwords.escape(parser.db_user)
|
51
|
+
password = Shellwords.escape(parser.db_password)
|
52
|
+
host = Shellwords.escape(parser.db_host)
|
53
|
+
name = Shellwords.escape(parser.db_name)
|
54
54
|
|
55
55
|
|
56
56
|
Dir.chdir(output_dir) do # make sure we're in the right repo
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module WordpressConfigParser
|
2
|
+
class Parser
|
3
|
+
|
4
|
+
attr_accessor :lines
|
5
|
+
|
6
|
+
|
7
|
+
def initialize(filespec_or_array)
|
8
|
+
|
9
|
+
@cache = {}
|
10
|
+
|
11
|
+
error_message = "WCParser constructor must be passed an array of lines, " +
|
12
|
+
"a config filespec, or a directory name that contains a wp-config.php file."
|
13
|
+
|
14
|
+
@lines = case filespec_or_array
|
15
|
+
|
16
|
+
when Array
|
17
|
+
filespec_or_array
|
18
|
+
|
19
|
+
when String # can be the config filespec or its directory
|
20
|
+
filespec = filespec_or_array
|
21
|
+
|
22
|
+
if File.directory?(filespec)
|
23
|
+
filespec = File.join(filespec, 'wp-config.php')
|
24
|
+
end
|
25
|
+
|
26
|
+
unless File.file?(filespec)
|
27
|
+
raise ArgumentError.new("File '#{filespec}' does not exist. #{error_message}")
|
28
|
+
end
|
29
|
+
|
30
|
+
File.readlines(filespec).map(&:chomp)
|
31
|
+
|
32
|
+
else # error: neither array nor string
|
33
|
+
raise ArgumentError.new(error_message)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def get(token)
|
39
|
+
|
40
|
+
hash_key = token.to_s.downcase.to_sym
|
41
|
+
|
42
|
+
@cache[hash_key] ||= begin
|
43
|
+
config_file_key = token.to_s.upcase
|
44
|
+
line = find_def_line(config_file_key)
|
45
|
+
line.nil? ? nil : extract_value_from_line(line) # Note: cache will contain any invalid keys requested
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
def has_key?(key)
|
51
|
+
!! get(key)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
alias [] get
|
56
|
+
|
57
|
+
# For missing methods, assume the method_name is the name or symbol
|
58
|
+
# of a defined value's key. The key is looked up, and if it exists,
|
59
|
+
# its corresponding value is returned; otherwise, super's
|
60
|
+
# method_missing is called.
|
61
|
+
def method_missing(method_name, *method_args)
|
62
|
+
get(method_name) || super.method_missing(method_name, *method_args)
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
# Gets *last* matching def line's value, or nil if not found.
|
67
|
+
def find_def_line(token)
|
68
|
+
search_string = "define('#{token}'"
|
69
|
+
lines.reverse.detect { |line| line.start_with?(search_string) }
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
def extract_value_from_line(line)
|
74
|
+
# Ex: define('DB_NAME', 'abcdefgh_0001');
|
75
|
+
# Splitting by ' will leave value as array[3]
|
76
|
+
line.split("'")[3]
|
77
|
+
end
|
78
|
+
|
79
|
+
private :find_def_line, :extract_value_from_line
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'wordpress_config_parser'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
module WordpressConfigParser
|
6
|
+
|
7
|
+
describe Parser do
|
8
|
+
|
9
|
+
|
10
|
+
let(:sample_lines) { %w(abc 789) }
|
11
|
+
let(:sample_dirspec) { File.expand_path(File.join(File.dirname(__FILE__), '..', 'resources')) }
|
12
|
+
let(:sample_filespec) { File.join(sample_dirspec, 'wp-config.php') }
|
13
|
+
let(:sample_parser) { Parser.new(sample_filespec) }
|
14
|
+
|
15
|
+
it "should initialize correctly when creating with an array of lines" do
|
16
|
+
parser = Parser.new(sample_lines)
|
17
|
+
expect(parser.lines).to eq(sample_lines)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "parser.lines should be an array when instantiating with a filespec" do
|
21
|
+
expect(sample_parser.lines).to be_an(Array)
|
22
|
+
end
|
23
|
+
|
24
|
+
specify "parser.lines should equal the initial array when instantiating with a filespec" do
|
25
|
+
parser = Parser.new(sample_filespec)
|
26
|
+
expect(parser.lines).to eq(File.readlines(sample_filespec).map(&:chomp))
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should correctly extract the value from a config line" do
|
30
|
+
config_line = "define('DB_NAME', 'abcdefgh_0001');"
|
31
|
+
expect(sample_parser.send(:extract_value_from_line, config_line)).to eq('abcdefgh_0001')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should extract the correct (i.e., the last) matching line when > 1 matches are present" do
|
35
|
+
line = sample_parser.send(:find_def_line, 'DB_NAME')
|
36
|
+
value = sample_parser.send(:extract_value_from_line, line)
|
37
|
+
expect(value).to eq('mysite_wrd2')
|
38
|
+
end
|
39
|
+
|
40
|
+
specify "get should get the correct value" do
|
41
|
+
expect(sample_parser.get('DB_NAME')).to eq('mysite_wrd2')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "[] operator should get the correct value" do
|
45
|
+
expect(sample_parser['DB_NAME']).to eq('mysite_wrd2')
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should correctly generate a new method when receiving a property in lower case" do
|
49
|
+
expect(sample_parser.db_name).to eq('mysite_wrd2')
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should correctly create a mysqladmin dump command with parameters from the file" do
|
53
|
+
db_name = sample_parser.db_name
|
54
|
+
db_password = sample_parser.db_password
|
55
|
+
db_hostname = sample_parser.db_host
|
56
|
+
db_user = sample_parser.db_user
|
57
|
+
|
58
|
+
# mysqldump -u#{userid} -p#{password} -h#{hostname} #{database_name} 2>&1 > #{outfilespec}`
|
59
|
+
command = "mysqldump -u#{db_user} -p#{db_password} -h#{db_hostname} #{db_name}"
|
60
|
+
expected = "mysqldump -umysite_user -pgobbledygook -hlocalhost mysite_wrd2"
|
61
|
+
expect(command).to eq(expected)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should correctly return true for has_key?(:db_name) and has_key?('DB_NAME')" do
|
65
|
+
expect(sample_parser.has_key?(:db_name) && sample_parser.has_key?('DB_NAME')).to eq(true)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should correctly return false for has_key?(:zyx) and has_key?('ZYX')" do
|
69
|
+
expect(sample_parser.has_key?(:zyx) || sample_parser.has_key?('ZYX')).to eq(false)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should throw an ArgumentError if a bad file is provided" do
|
73
|
+
expect{ Parser.new('/:!@#$%^&') }.to raise_error(ArgumentError)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should throw an ArgumentError if a something other than a string or array is provided" do
|
77
|
+
expect { Parser.new(123) }.to raise_error(ArgumentError)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should throw a NoMethodError if a method is called for which there is no key" do
|
81
|
+
expect { sample_parser.foo }.to raise_error(NoMethodError)
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
@@ -1,12 +1,13 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
require_relative 'lib/wordpress_config_parser/version'
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Keith Bennett"]
|
6
6
|
gem.email = ["keithrbennett@gmail.com"]
|
7
7
|
gem.description = %q{Gets values defined in Wordpress wp-config.php file.}
|
8
|
-
gem.summary =
|
8
|
+
gem.summary = gem.description
|
9
9
|
gem.homepage = "https://github.com/keithrbennett/wordpress_config_parser"
|
10
|
+
gem.license = "MIT"
|
10
11
|
|
11
12
|
gem.files = `git ls-files`.split($\)
|
12
13
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
@@ -14,4 +15,7 @@ Gem::Specification.new do |gem|
|
|
14
15
|
gem.name = "wordpress_config_parser"
|
15
16
|
gem.require_paths = ["lib"]
|
16
17
|
gem.version = WordpressConfigParser::VERSION
|
18
|
+
|
19
|
+
gem.add_development_dependency "rspec", '~> 3.0'
|
20
|
+
|
17
21
|
end
|
metadata
CHANGED
@@ -1,62 +1,76 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wordpress_config_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.11.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Keith Bennett
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
11
|
+
date: 2016-04-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
14
27
|
description: Gets values defined in Wordpress wp-config.php file.
|
15
28
|
email:
|
16
29
|
- keithrbennett@gmail.com
|
17
|
-
executables:
|
30
|
+
executables:
|
31
|
+
- backup-wordpress-db
|
18
32
|
extensions: []
|
19
33
|
extra_rdoc_files: []
|
20
34
|
files:
|
21
|
-
- .gitignore
|
35
|
+
- ".gitignore"
|
22
36
|
- Gemfile
|
23
37
|
- LICENSE
|
24
38
|
- README.md
|
25
39
|
- Rakefile
|
40
|
+
- bin/backup-wordpress-db
|
26
41
|
- lib/wordpress_config_parser.rb
|
42
|
+
- lib/wordpress_config_parser/parser.rb
|
27
43
|
- lib/wordpress_config_parser/version.rb
|
28
|
-
- lib/wordpress_config_parser/wc_parser.rb
|
29
44
|
- make-gem.sh
|
30
|
-
- sample_scripts/backup-wordpress-db.rb
|
31
45
|
- spec/resources/wp-config.php
|
32
46
|
- spec/spec_helper.rb
|
33
|
-
- spec/
|
47
|
+
- spec/wordpress_config_parser/parser_spec.rb
|
34
48
|
- wordpress_config_parser.gemspec
|
35
49
|
homepage: https://github.com/keithrbennett/wordpress_config_parser
|
36
|
-
licenses:
|
50
|
+
licenses:
|
51
|
+
- MIT
|
52
|
+
metadata: {}
|
37
53
|
post_install_message:
|
38
54
|
rdoc_options: []
|
39
55
|
require_paths:
|
40
56
|
- lib
|
41
57
|
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
58
|
requirements:
|
44
|
-
- -
|
59
|
+
- - ">="
|
45
60
|
- !ruby/object:Gem::Version
|
46
61
|
version: '0'
|
47
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
-
none: false
|
49
63
|
requirements:
|
50
|
-
- -
|
64
|
+
- - ">="
|
51
65
|
- !ruby/object:Gem::Version
|
52
66
|
version: '0'
|
53
67
|
requirements: []
|
54
68
|
rubyforge_project:
|
55
|
-
rubygems_version:
|
69
|
+
rubygems_version: 2.5.1
|
56
70
|
signing_key:
|
57
|
-
specification_version:
|
71
|
+
specification_version: 4
|
58
72
|
summary: Gets values defined in Wordpress wp-config.php file.
|
59
73
|
test_files:
|
60
74
|
- spec/resources/wp-config.php
|
61
75
|
- spec/spec_helper.rb
|
62
|
-
- spec/
|
76
|
+
- spec/wordpress_config_parser/parser_spec.rb
|
@@ -1,95 +0,0 @@
|
|
1
|
-
class WCParser
|
2
|
-
|
3
|
-
attr_accessor :lines
|
4
|
-
|
5
|
-
def initialize(filespec_or_array)
|
6
|
-
|
7
|
-
error_message = "WCParser constructor must be passed an array of lines, " +
|
8
|
-
"a config filespec, or a directory name that contains a wp-config.php file."
|
9
|
-
|
10
|
-
case filespec_or_array
|
11
|
-
|
12
|
-
when Array
|
13
|
-
@lines = filespec_or_array
|
14
|
-
|
15
|
-
when String
|
16
|
-
filespec = filespec_or_array
|
17
|
-
unless File.exists?(filespec)
|
18
|
-
raise ArgumentError.new("File/directory '#{filespec}' does not exist. #{error_message}")
|
19
|
-
end
|
20
|
-
|
21
|
-
if File.directory?(filespec)
|
22
|
-
filespec = File.join(filespec, 'wp-config.php')
|
23
|
-
unless File.exists?(filespec)
|
24
|
-
raise ArgumentError.new("File '#{filespec}' does not exist. #{error_message}")
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
@lines = File.readlines(filespec).map(&:chomp)
|
29
|
-
|
30
|
-
else
|
31
|
-
raise ArgumentError.new(error_message)
|
32
|
-
end
|
33
|
-
|
34
|
-
@cache = {}
|
35
|
-
end
|
36
|
-
|
37
|
-
# Ex: define('DB_NAME', 'abcdefgh_0001');
|
38
|
-
def find_def_line(token)
|
39
|
-
search_string = "define('#{token}'"
|
40
|
-
matches = lines.select { |line| line[0...search_string.size] == search_string }
|
41
|
-
matches.empty? ? nil : matches.last # last one wins
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
|
-
def extract_value_from_line(line)
|
46
|
-
# Ex: define('DB_NAME', 'abcdefgh_0001');
|
47
|
-
# Splitting by ' will leave value as array[3]
|
48
|
-
line.split("'")[3]
|
49
|
-
end
|
50
|
-
|
51
|
-
def get(token)
|
52
|
-
|
53
|
-
hash_key = token.to_s.downcase.to_sym
|
54
|
-
|
55
|
-
if @cache.has_key?(hash_key)
|
56
|
-
value = @cache[hash_key]
|
57
|
-
else
|
58
|
-
config_file_key = token.to_s.upcase
|
59
|
-
line = find_def_line(config_file_key)
|
60
|
-
value = (line.nil? ? nil : extract_value_from_line(line))
|
61
|
-
@cache[hash_key] = value # Note: cache will contain any invalid keys requested
|
62
|
-
end
|
63
|
-
value
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
|
-
def has_key?(key)
|
68
|
-
!! get(key)
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
alias [] get
|
73
|
-
|
74
|
-
# For missing methods, assume the method_name is the name or symbol
|
75
|
-
# of a defined value's key. If the key exists in the config file,
|
76
|
-
# a method is created and that value returned. Otherwise, super's
|
77
|
-
# method_missing will be called.
|
78
|
-
def method_missing(method_name, *method_args)
|
79
|
-
|
80
|
-
value = get(method_name)
|
81
|
-
|
82
|
-
if value.nil?
|
83
|
-
super.method_missing(method_name, *method_args)
|
84
|
-
else
|
85
|
-
instance_eval("""
|
86
|
-
def #{method_name.to_s.downcase}
|
87
|
-
get('#{method_name.to_s.upcase}')
|
88
|
-
end
|
89
|
-
""")
|
90
|
-
end
|
91
|
-
|
92
|
-
value
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
require 'wc_parser'
|
3
|
-
require 'tempfile'
|
4
|
-
|
5
|
-
describe WCParser do
|
6
|
-
|
7
|
-
|
8
|
-
let(:sample_lines) { %w(abc 789) }
|
9
|
-
let(:sample_dirspec) { File.expand_path(File.join(File.dirname(__FILE__), '..', 'resources')) }
|
10
|
-
let(:sample_filespec) { File.join(sample_dirspec, 'wp-config.php') }
|
11
|
-
let(:sample_parser) { WCParser.new(sample_filespec) }
|
12
|
-
|
13
|
-
it "should initialize correctly when calling create_with_lines" do
|
14
|
-
parser = WCParser.new(sample_lines)
|
15
|
-
parser.lines.should == sample_lines
|
16
|
-
end
|
17
|
-
|
18
|
-
it "parser.lines should be an array when instantiating with a filespec" do
|
19
|
-
sample_parser.lines.should be_a Array
|
20
|
-
end
|
21
|
-
|
22
|
-
it "parser.lines should equal the initial array when calling create_with_filespec" do
|
23
|
-
parser = WCParser.new(sample_filespec)
|
24
|
-
parser.lines.should == File.readlines(sample_filespec).map(&:chomp)
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should correctly extract the value from a config line" do
|
28
|
-
config_line = "define('DB_NAME', 'abcdefgh_0001');"
|
29
|
-
sample_parser.extract_value_from_line(config_line).should == 'abcdefgh_0001'
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should extract the correct line when > 1 matches are present" do
|
33
|
-
line = sample_parser.find_def_line('DB_NAME')
|
34
|
-
value = sample_parser.extract_value_from_line(line)
|
35
|
-
value.should == 'mysite_wrd2'
|
36
|
-
end
|
37
|
-
|
38
|
-
it "(get) should get the correct value" do
|
39
|
-
sample_parser.get('DB_NAME').should == 'mysite_wrd2'
|
40
|
-
end
|
41
|
-
|
42
|
-
it "[] operator should get the correct value" do
|
43
|
-
sample_parser['DB_NAME'].should == 'mysite_wrd2'
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should correctly generate a new method when receiving a property in lower case" do
|
47
|
-
sample_parser.db_name.should == 'mysite_wrd2'
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should correctly create a mysqladmin dump command with parameters from the file" do
|
51
|
-
db_name = sample_parser.db_name
|
52
|
-
db_password = sample_parser.db_password
|
53
|
-
db_hostname = sample_parser.db_host
|
54
|
-
db_user = sample_parser.db_user
|
55
|
-
|
56
|
-
# mysqldump -u#{userid} -p#{password} -h#{hostname} #{database_name} 2>&1 > #{outfilespec}`
|
57
|
-
command = "mysqldump -u#{db_user} -p#{db_password} -h#{db_hostname} #{db_name}"
|
58
|
-
expected = "mysqldump -umysite_user -pgobbledygook -hlocalhost mysite_wrd2"
|
59
|
-
command.should == expected
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should correctly return true for has_key?(:db_name) and has_key?('DB_NAME')" do
|
63
|
-
(sample_parser.has_key?(:db_name) && sample_parser.has_key?('DB_NAME')).should be_true
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should correctly return false for has_key?(:zyx) and has_key?('ZYX')" do
|
67
|
-
(sample_parser.has_key?(:zyx) || sample_parser.has_key?('ZYX')).should be_false
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should throw an ArgumentError if a bad file is provided" do
|
71
|
-
lambda { WCParser.new('/:!@#$%^&') }.should raise_error(ArgumentError)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should throw an ArgumentError if a something other than a string or array is provided" do
|
75
|
-
lambda { WCParser.new(123) }.should raise_error(ArgumentError)
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should throw a NoMethodError if a method is called for which there is no key" do
|
79
|
-
lambda { sample_parser.foo }.should raise_error(NoMethodError)
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|