sant0sk1-dreamy 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -38,7 +38,7 @@ Now that you have an array you can have your way with the data:
38
38
  puts d.home
39
39
  end
40
40
 
41
- Same goes with Users, DNS records and announcement list subscribers
41
+ Same goes with Users, DNS records, announcement list subscribers, MySQL databases, MySQL hosts, and MySQL users
42
42
 
43
43
  # fetch an array of Dreamy::User objects
44
44
  account.users
@@ -52,6 +52,9 @@ Same goes with Users, DNS records and announcement list subscribers
52
52
  # fetch an array of Dreamy::Subscribers to an announcement list
53
53
  account.announce_list(listname,domain)
54
54
 
55
+ # fetch an array of Dreamy::MysqlUser objects
56
+ account.mysql_users
57
+
55
58
  You can interact with announcement lists by adding and removing subscribers
56
59
 
57
60
  # add a new subscriber to an announcement list
@@ -124,6 +127,10 @@ Run this from the command line to print the usage:
124
127
  domains:http # list HTTP domain details
125
128
  domains:mysql # list MySQL domains
126
129
  domains:status # check availability of all domains (pingability)
130
+
131
+ mysql:dbs # list MySQL database details
132
+ mysql:hosts # list MySQL database hostnames
133
+ mysql:users # list MySQL user details
127
134
 
128
135
  ps # list private servers
129
136
  ps:add <web|mysql> <yes|no> # adds a private server of type <web|mysql>. Yes = move data
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 1
2
+ :patch: 0
3
3
  :major: 0
4
- :minor: 4
4
+ :minor: 5
data/lib/dreamy.rb CHANGED
@@ -16,6 +16,9 @@ require 'dreamy/announce_list'
16
16
  require 'dreamy/private_server'
17
17
  require 'dreamy/subscriber'
18
18
  require 'dreamy/user'
19
+ require 'dreamy/mysql/db'
20
+ require 'dreamy/mysql/host'
21
+ require 'dreamy/mysql/user'
19
22
 
20
23
  module Dreamy
21
24
  class CantConnect < StandardError; end
data/lib/dreamy/base.rb CHANGED
@@ -11,7 +11,7 @@ module Dreamy
11
11
  # returns an array of domain objects
12
12
  def domains
13
13
  doc = request("domain-list_domains")
14
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
14
+ api_error?(doc)
15
15
  (doc/:data).inject([]) { |domains, domain| domains << Domain.new_from_xml(domain); domains }
16
16
  end
17
17
 
@@ -22,39 +22,39 @@ module Dreamy
22
22
  else
23
23
  doc = request("user-list_users_no_pw")
24
24
  end
25
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
25
+ api_error?(doc)
26
26
  (doc/:data).inject([]) { |users, user| users << User.new_from_xml(user); users }
27
27
  end
28
28
 
29
29
  # returns an array of dns objects
30
30
  def dns
31
31
  doc = request("dns-list_records")
32
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
32
+ api_error?(doc)
33
33
  (doc/:data).inject([]) { |records, dns| records << Dns.new_from_xml(dns); records }
34
34
  end
35
35
 
36
36
  def dns_add(record,type,value)
37
37
  doc = request("dns-add_record", {"record" => record, "type" => type, "value" => value})
38
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
38
+ api_error?(doc)
39
39
  true
40
40
  end
41
41
 
42
42
  def dns_remove(record,type,value)
43
43
  doc = request("dns-remove_record", {"record" => record, "type" => type, "value" => value})
44
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
44
+ api_error?(doc)
45
45
  true
46
46
  end
47
47
 
48
48
  def announce_lists
49
49
  doc = request("announcement_list-list_lists")
50
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
50
+ api_error?(doc)
51
51
  (doc/:data).inject([]) { |lists, list| lists << AnnounceList.new_from_xml(list); lists }
52
52
  end
53
53
 
54
54
  # returns an array of subscriber objects
55
55
  def announce_list(listname,domain)
56
56
  doc = request("announcement_list-list_subscribers",{ "listname" => listname, "domain" => domain})
57
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
57
+ api_error?(doc)
58
58
  (doc/:data).inject([]) { |subs, sub| subs << Subscriber.new_from_xml(sub); subs }
59
59
  end
60
60
 
@@ -62,84 +62,106 @@ module Dreamy
62
62
  def announce_add(listname,domain,email,name="")
63
63
  doc = request("announcement_list-add_subscriber",
64
64
  {"listname" => listname, "domain" => domain, "email" => email, "name" => name})
65
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
65
+ api_error?(doc)
66
66
  true
67
67
  end
68
68
 
69
69
  def announce_remove(listname,domain,email)
70
70
  doc = request("announcement_list-remove_subscriber",
71
71
  {"listname" => listname, "domain" => domain, "email" => email})
72
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
72
+ api_error?(doc)
73
73
  true
74
74
  end
75
75
 
76
+ def mysql_dbs
77
+ doc = request("mysql-list_dbs")
78
+ api_error?(doc)
79
+ (doc/:data).inject([]) { |dbs, db| dbs << MysqlDb.new_from_xml(db); dbs }
80
+ end
81
+
82
+ def mysql_hosts
83
+ doc = request("mysql-list_hostnames")
84
+ api_error?(doc)
85
+ (doc/:data).inject([]) { |hosts, host| hosts << MysqlHost.new_from_xml(host); hosts }
86
+ end
87
+
88
+ def mysql_users
89
+ doc = request("mysql-list_users")
90
+ api_error?(doc)
91
+ (doc/:data).inject([]) { |users, user| users << MysqlUser.new_from_xml(user); users }
92
+ end
93
+
76
94
  def ps
77
95
  doc = request("dreamhost_ps-list_ps")
78
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
96
+ api_error?(doc)
79
97
  (doc/:data).inject([]) { |servers, server| servers << PrivateServer.new_from_xml(server); servers }
80
98
  end
81
99
 
82
100
  def ps_settings(name)
83
101
  doc = request("dreamhost_ps-list_settings", {"ps" => name})
84
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
102
+ api_error?(doc)
85
103
  PrivateServer.settings_from_xml(doc)
86
104
  end
87
105
 
88
106
  def ps_set(name,setting,value)
89
107
  doc = request("dreamhost_ps-set_settings", {"ps" => name, setting => value})
90
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
108
+ api_error?(doc)
91
109
  true
92
110
  end
93
111
 
94
112
  def ps_size_history(name)
95
113
  doc = request("dreamhost_ps-list_size_history", {"ps" => name})
96
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
114
+ api_error?(doc)
97
115
  (doc/:data).inject([]) { |sizes, size| sizes << PrivateServer.size_from_xml(size); sizes }
98
116
  end
99
117
 
100
118
  def ps_size_set(name,size)
101
119
  doc = request("dreamhost_ps-set_size", {"ps" => name, "size" => size})
102
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
120
+ api_error?(doc)
103
121
  true
104
122
  end
105
123
 
106
124
  def ps_reboot_history(name)
107
125
  doc = request("dreamhost_ps-list_reboot_history", {"ps" => name})
108
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
126
+ api_error?(doc)
109
127
  (doc/:data).inject([]) { |reboots,reboot| reboots << reboot.at('stamp').innerHTML; reboots }
110
128
  end
111
129
 
112
130
  def ps_reboot!(name)
113
131
  doc = request("dreamhost_ps-reboot", {"ps" => name})
114
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
132
+ api_error?(doc)
115
133
  true
116
134
  end
117
135
 
118
136
  def ps_usage(name)
119
137
  doc = request("dreamhost_ps-list_usage", {"ps" => name})
120
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
138
+ api_error?(doc)
121
139
  (doc/:data).inject([]) { |usages, usage| usages << PrivateServer.usage_from_xml(usage); usages }
122
140
  end
123
141
 
124
142
  def ps_add(type,movedata="no")
125
143
  doc = request("dreamhost_ps-add_ps", {"type" => type, "movedata" => movedata})
126
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
144
+ api_error?(doc)
127
145
  true
128
146
  end
129
147
 
130
148
  def ps_remove
131
149
  doc = request("dreamhost_ps-remove_pending_ps")
132
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
150
+ api_error?(doc)
133
151
  true
134
152
  end
135
153
 
136
154
  def ps_pending
137
155
  doc = request("dreamhost_ps-list_pending_ps")
138
- raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
156
+ api_error?(doc)
139
157
  (doc/:data).inject([]) { |pends, pend| pends << PrivateServer.pending_from_xml(pend); pends }
140
158
  end
141
159
 
142
160
  private
161
+
162
+ def api_error?(doc)
163
+ raise ApiError, (doc/:data).innerHTML if (doc/:result).innerHTML == "error"
164
+ end
143
165
 
144
166
  def request(cmd,values={})
145
167
  handle_response!(response(cmd,values))
@@ -23,6 +23,10 @@ module Dreamy::Command
23
23
  domains:mysql # list MySQL domains
24
24
  domains:status # check availability of all domains (pingability)
25
25
 
26
+ mysql:dbs # list MySQL database details
27
+ mysql:hosts # list MySQL database hostnames
28
+ mysql:users # list MySQL user details
29
+
26
30
  ps # list private servers
27
31
  ps:add <web|mysql> <yes|no> # adds a private server of type <web|mysql>. Yes = move data
28
32
  ps:pending # list private servers scheduled to be created
@@ -0,0 +1,45 @@
1
+ module Dreamy::Command
2
+ class Mysql < Base
3
+
4
+ def dbs
5
+ dbs = @account.mysql_dbs
6
+ if dbs.empty?
7
+ display "No MySQL databases on this account"
8
+ else
9
+ db_table = table do |t|
10
+ t.headings = 'Name', 'Home', 'Description', 'Disk used (MB)'
11
+ dbs.each { |db| t << [db.name,db.home,db.description,db.disk_usage_mb] }
12
+ end
13
+ display db_table
14
+ end
15
+ end
16
+ alias :index :dbs
17
+
18
+ def hosts
19
+ hosts = @account.mysql_hosts
20
+ if hosts.empty?
21
+ display "No MySQL hosts on this account"
22
+ else
23
+ host_table = table do |t|
24
+ t.headings = 'Domain Name','Home'
25
+ hosts.each { |host| t << [host.domain,host.home] }
26
+ end
27
+ display host_table
28
+ end
29
+ end
30
+
31
+ def users
32
+ users = @account.mysql_users
33
+ if users.empty?
34
+ display "No MySQL users on this account"
35
+ else
36
+ user_table = table do |t|
37
+ t.headings = 'Username', 'Database', 'Sel', 'Ins', 'Upd', 'Del', 'Cre', 'Drop', 'Ind', 'Alt'
38
+ users.each { |u| t << [u.username,u.db,u.select,u.insert,u.update,u.delete,u.create,u.drop,u.index,u.alter] }
39
+ end
40
+ display user_table
41
+ end
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,17 @@
1
+ module Dreamy
2
+ class MysqlDb
3
+ include EasyClassMaker
4
+
5
+ attributes :account_id, :name, :description, :home, :disk_usage_mb
6
+
7
+ def self.new_from_xml(xml)
8
+ db = new
9
+ db.account_id = (xml).at('account_id').innerHTML.to_i
10
+ db.name = (xml).at('db').innerHTML
11
+ db.description = (xml).at('description').innerHTML
12
+ db.home = (xml).at('home').innerHTML
13
+ db.disk_usage_mb = (xml).at('disk_usage_mb').innerHTML.to_f
14
+ db
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ module Dreamy
2
+ class MysqlHost
3
+ include EasyClassMaker
4
+
5
+ attributes :account_id, :domain, :home
6
+
7
+ def self.new_from_xml(xml)
8
+ host = new
9
+ host.account_id = (xml).at('account_id').innerHTML.to_i
10
+ host.domain = (xml).at('domain').innerHTML
11
+ host.home = (xml).at('home').innerHTML
12
+ host
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module Dreamy
2
+ class MysqlUser
3
+ include EasyClassMaker
4
+
5
+ attributes :account_id, :db, :home, :username, :host, :select, :insert,
6
+ :update, :delete, :create, :drop, :index, :alter
7
+
8
+ def self.new_from_xml(xml)
9
+ u = new
10
+ u.account_id = (xml).at('account_id').innerHTML.to_i
11
+ u.db = (xml).at('db').innerHTML
12
+ u.home = (xml).at('home').innerHTML
13
+ u.username = (xml).at('username').innerHTML
14
+ u.host = (xml).at('host').innerHTML
15
+ u.select = (xml).at('select_priv').innerHTML
16
+ u.insert = (xml).at('insert_priv').innerHTML
17
+ u.update = (xml).at('update_priv').innerHTML
18
+ u.delete = (xml).at('delete_priv').innerHTML
19
+ u.create = (xml).at('create_priv').innerHTML
20
+ u.drop = (xml).at('drop_priv').innerHTML
21
+ u.index = (xml).at('index_priv').innerHTML
22
+ u.alter = (xml).at('alter_priv').innerHTML
23
+ u
24
+ end
25
+ end
26
+ end
data/test/base_test.rb CHANGED
@@ -136,6 +136,28 @@ class DreamyBaseTest < Test::Unit::TestCase
136
136
 
137
137
  end # announcement lists
138
138
 
139
+ context "MySQL" do
140
+
141
+ should "return array of MysqlDb records" do
142
+ dbs = @@base.mysql_dbs
143
+ assert_kind_of Array, dbs
144
+ assert_kind_of Dreamy::MysqlDb, dbs.first unless dbs.empty?
145
+ end
146
+
147
+ should "return array of MysqlHost records" do
148
+ hosts = @@base.mysql_hosts
149
+ assert_kind_of Array, hosts
150
+ assert_kind_of Dreamy::MysqlDb, hosts.first unless hosts.empty?
151
+ end
152
+
153
+ should "return array of MysqlUser records" do
154
+ users = @@base.mysql_users
155
+ assert_kind_of Array, users
156
+ assert_kind_of Dreamy::MysqlUser, users.first unless users.empty?
157
+ end
158
+
159
+ end
160
+
139
161
  context "Private Servers" do
140
162
  setup { @ps = CREDS["ps"] }
141
163
 
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ class DreamyMysqlDbTest < Test::Unit::TestCase
4
+
5
+ context "Creation" do
6
+ setup do
7
+ @xml = <<EOF
8
+ <data>
9
+ <account_id>8675309</account_id>
10
+ <db>betterdb2435</db>
11
+ <description>This one's better</description>
12
+ <home>haass.tuna.dreamhost.com</home>
13
+ <disk_usage_mb>0.0078125</disk_usage_mb>
14
+ </data>
15
+ EOF
16
+ end
17
+
18
+ should "create a new user from xml" do
19
+ db = Dreamy::MysqlDb.new_from_xml(Hpricot.XML(@xml))
20
+ assert_equal 8675309, db.account_id
21
+ assert_equal "betterdb2435", db.name
22
+ assert_equal "This one's better", db.description
23
+ assert_equal "haass.tuna.dreamhost.com", db.home
24
+ assert_equal 0.0078125, db.disk_usage_mb
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ class DreamyMysqlHostTest < Test::Unit::TestCase
4
+
5
+ context "Creation" do
6
+ setup do
7
+ @xml = <<EOF
8
+ <data>
9
+ <account_id>8675309</account_id>
10
+ <domain>mysql.site.dreamhosters.com</domain>
11
+ <home>haass.tuna.dreamhost.com</home>
12
+ </data>
13
+ EOF
14
+ end
15
+
16
+ should "create a new user from xml" do
17
+ host = Dreamy::MysqlHost.new_from_xml(Hpricot.XML(@xml))
18
+ assert_equal 8675309, host.account_id
19
+ assert_equal "mysql.site.dreamhosters.com", host.domain
20
+ assert_equal "haass.tuna.dreamhost.com", host.home
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,44 @@
1
+ require File.dirname(__FILE__) + "/test_helper.rb"
2
+
3
+ class DreamyMysqlUserTest < Test::Unit::TestCase
4
+
5
+ context "Creation" do
6
+ setup do
7
+ @xml = <<EOF
8
+ <data>
9
+ <account_id>8675309</account_id>
10
+ <db>betterdb2435</db>
11
+ <home>haass.tuna.dreamhost.com</home>
12
+ <username>user_fu</username>
13
+ <host>haass.tuna.dreamhost.com</host>
14
+ <select_priv>Y</select_priv>
15
+ <insert_priv>Y</insert_priv>
16
+ <update_priv>N</update_priv>
17
+ <delete_priv>Y</delete_priv>
18
+ <create_priv>N</create_priv>
19
+ <drop_priv>Y</drop_priv>
20
+ <index_priv>Y</index_priv>
21
+ <alter_priv>N</alter_priv>
22
+ </data>
23
+ EOF
24
+ end
25
+
26
+ should "create a new user from xml" do
27
+ u = Dreamy::MysqlUser.new_from_xml(Hpricot.XML(@xml))
28
+ assert_equal 8675309, u.account_id
29
+ assert_equal "betterdb2435", u.db
30
+ assert_equal "haass.tuna.dreamhost.com", u.home
31
+ assert_equal "user_fu", u.username
32
+ assert_equal "haass.tuna.dreamhost.com", u.host
33
+ assert_equal "Y", u.select
34
+ assert_equal "Y", u.insert
35
+ assert_equal "N", u.update
36
+ assert_equal "Y", u.delete
37
+ assert_equal "N", u.create
38
+ assert_equal "Y", u.drop
39
+ assert_equal "Y", u.index
40
+ assert_equal "N", u.alter
41
+ end
42
+ end
43
+
44
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sant0sk1-dreamy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jerod Santo
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-02 00:00:00 -07:00
12
+ date: 2009-05-30 00:00:00 -07:00
13
13
  default_executable: dh
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -64,12 +64,16 @@ files:
64
64
  - lib/dreamy/commands/dns.rb
65
65
  - lib/dreamy/commands/domains.rb
66
66
  - lib/dreamy/commands/help.rb
67
+ - lib/dreamy/commands/mysql.rb
67
68
  - lib/dreamy/commands/ps.rb
68
69
  - lib/dreamy/commands/users.rb
69
70
  - lib/dreamy/core_extensions.rb
70
71
  - lib/dreamy/dns.rb
71
72
  - lib/dreamy/domain.rb
72
73
  - lib/dreamy/easy_class_maker.rb
74
+ - lib/dreamy/mysql/db.rb
75
+ - lib/dreamy/mysql/host.rb
76
+ - lib/dreamy/mysql/user.rb
73
77
  - lib/dreamy/private_server.rb
74
78
  - lib/dreamy/subscriber.rb
75
79
  - lib/dreamy/user.rb
@@ -77,6 +81,9 @@ files:
77
81
  - test/base_test.rb
78
82
  - test/dns_test.rb
79
83
  - test/domain_test.rb
84
+ - test/mysql_db_test.rb
85
+ - test/mysql_host_test.rb
86
+ - test/mysql_user_test.rb
80
87
  - test/private_server_test.rb
81
88
  - test/subscriber_test.rb
82
89
  - test/test_helper.rb
@@ -112,6 +119,9 @@ test_files:
112
119
  - test/base_test.rb
113
120
  - test/dns_test.rb
114
121
  - test/domain_test.rb
122
+ - test/mysql_db_test.rb
123
+ - test/mysql_host_test.rb
124
+ - test/mysql_user_test.rb
115
125
  - test/private_server_test.rb
116
126
  - test/subscriber_test.rb
117
127
  - test/test_helper.rb