shout-mouth-communicator 1.0.2 → 1.1.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.
@@ -1,12 +1,12 @@
1
- require 'xmlrpc/client'
1
+ require 'rapuncel'
2
2
 
3
3
  class XmlParseError < StandardError; end
4
4
  class NotAuthenticatedError < StandardError; end
5
5
 
6
6
  class ShoutMouthCommunicator
7
7
 
8
- def initialize(server, blogid, username, password)
9
- @client = XMLRPC::Client.new2(server)
8
+ def initialize(url, path, port, blogid, username, password)
9
+ @client = Rapuncel::Client.new :host => url, :port => port, :path => path
10
10
  @blogid = blogid
11
11
  @username = username
12
12
  @password = password
@@ -30,10 +30,10 @@ class ShoutMouthCommunicator
30
30
  end
31
31
 
32
32
  def response=(value)
33
- if value.is_a?(Hash) && value.has_key?("fault")
34
- case value["fault"]["faultCode"]
33
+ if value.is_a?(Hash) && value.has_key?(:fault)
34
+ case value[:fault][:faultCode]
35
35
  when 4003
36
- @errors = error_parser(value["fault"]["faultString"])
36
+ @errors = error_parser(value[:fault][:faultString])
37
37
  when 403
38
38
  raise NotAuthenticatedError
39
39
  when -32700
@@ -49,7 +49,7 @@ class ShoutMouthCommunicator
49
49
 
50
50
  def authorized?
51
51
  begin
52
- self.response = @client.call('blogger.getUserInfo', "1", @username, @password)
52
+ self.response = @client.call('blogger.getUserInfo', @blogid, @username, @password).result
53
53
  true
54
54
  rescue NotAuthenticatedError
55
55
  return false
@@ -57,7 +57,7 @@ class ShoutMouthCommunicator
57
57
  end
58
58
 
59
59
  def tags
60
- self.response = @client.call('wp.getTags', "1", @username, @password)
60
+ self.response = @client.call('wp.getTags', @blogid, @username, @password).result
61
61
  self.response
62
62
  end
63
63
 
@@ -66,34 +66,34 @@ class ShoutMouthCommunicator
66
66
  :tag_id => tag_id,
67
67
  :name => name
68
68
  }
69
- self.response = @client.call('shoutmouth.editTag', "1", @username, @password, tag)
69
+ self.response = @client.call('shoutmouth.editTag', @blogid, @username, @password, tag).result
70
70
  self.response
71
71
  end
72
72
 
73
73
  def categories
74
- self.response = @client.call('wp.getCategories', "1", @username, @password)
74
+ self.response = @client.call('wp.getCategories', @blogid, @username, @password).result
75
75
  self.response
76
76
  end
77
77
 
78
78
  def new_category name, description
79
79
  category = {:name => name, :slug => "not relevant", :parent_id => "0", :description => description}
80
- self.response = @client.call('wp.newCategory', "1", @username, @password, category)
80
+ self.response = @client.call('wp.newCategory', @blogid, @username, @password, category).result
81
81
  self.response
82
82
  end
83
83
 
84
84
  def edit_category category_id, name
85
85
  category = {:category_id => category_id, :category => name}
86
- self.response = @client.call('shoutmouth.editCategory', "1", @username, @password, category)
86
+ self.response = @client.call('shoutmouth.editCategory', @blogid, @username, @password, category).result
87
87
  self.response
88
88
  end
89
89
 
90
90
  def posts limit = 0
91
- self.response = @client.call('metaweblog.getRecentPosts', "1", @username, @password, limit)
91
+ self.response = @client.call('metaweblog.getRecentPosts', @blogid, @username, @password, limit).result
92
92
  self.response
93
93
  end
94
94
 
95
95
  def post post_id
96
- self.response = @client.call('metaweblog.getPost', post_id, @username, @password, 2)
96
+ self.response = @client.call('metaweblog.getPost', post_id, @username, @password, 2).result
97
97
  self.response
98
98
  end
99
99
 
@@ -107,7 +107,7 @@ class ShoutMouthCommunicator
107
107
  :mt_keywords => tags
108
108
  }
109
109
 
110
- self.response = @client.call('metaweblog.newPost', "1", @username, @password, post)
110
+ self.response = @client.call('metaweblog.newPost', @blogid, @username, @password, post).result
111
111
  self.response
112
112
  end
113
113
 
@@ -122,22 +122,22 @@ class ShoutMouthCommunicator
122
122
  :mt_keywords => tags
123
123
  }
124
124
 
125
- self.response = @client.call('metaweblog.editPost', post_id, @username, @password, post)
125
+ self.response = @client.call('metaweblog.editPost', post_id, @username, @password, post).result
126
126
  self.response
127
127
  end
128
128
 
129
129
  def delete_post post_id
130
- self.response = @client.call('blogger.deletePost', "1", post_id, @username, @password, true)
130
+ self.response = @client.call('blogger.deletePost', @blogid, post_id, @username, @password, true).result
131
131
  self.response
132
132
  end
133
133
 
134
134
  def pages limit = 10000000
135
- self.response = @client.call('wp.getPages', "1", @username, @password, limit)
135
+ self.response = @client.call('wp.getPages', @blogid, @username, @password, limit).result
136
136
  self.response
137
137
  end
138
138
 
139
139
  def page page_id
140
- self.response = @client.call('wp.getPage', "1", page_id, @username, @password)
140
+ self.response = @client.call('wp.getPage', @blogid, page_id, @username, @password).result
141
141
  self.response
142
142
  end
143
143
 
@@ -149,7 +149,7 @@ class ShoutMouthCommunicator
149
149
  :wp_page_order => order,
150
150
  :wp_page_parent_id => parent_id
151
151
  }
152
- self.response = @client.call('wp.newPage', "1", @username, @password, page).to_i
152
+ self.response = @client.call('wp.newPage', @blogid, @username, @password, page).result.to_i
153
153
  self.response
154
154
  end
155
155
 
@@ -162,24 +162,24 @@ class ShoutMouthCommunicator
162
162
  :wp_page_order => order,
163
163
  :wp_page_parent_id => parent_id
164
164
  }
165
- self.response = @client.call('wp.newPage', "1", @username, @password, page).to_i
165
+ self.response = @client.call('wp.newPage', @blogid, @username, @password, page).result.to_i
166
166
  self.response
167
167
  end
168
168
 
169
169
  def delete_page page_id
170
- self.response = @client.call('wp.deletePage', "1", @username, @password, page_id)
170
+ self.response = @client.call('wp.deletePage', @blogid, @username, @password, page_id).result
171
171
  self.response
172
172
  end
173
173
 
174
174
  #status list = active, spam or hold
175
175
  def comments status = "active"
176
- self.response = @client.call('wp.getComments', "1", @username, @password, { :status => status })
176
+ self.response = @client.call('wp.getComments', @blogid, @username, @password, { :status => status }).result
177
177
  self.response
178
178
  end
179
179
 
180
180
  #status list = active, spam or hold
181
181
  def comments_for_post post_id, status = "active"
182
- self.response = @client.call('wp.getComments', "1", @username, @password, { :post_id => post_id, :status => status })
182
+ self.response = @client.call('wp.getComments', @blogid, @username, @password, { :post_id => post_id, :status => status }).result
183
183
  self.response
184
184
  end
185
185
 
@@ -192,28 +192,28 @@ class ShoutMouthCommunicator
192
192
  :author_email => author_email,
193
193
  :status => status
194
194
  }
195
- self.response = @client.call('wp.editComment', "1", @username, @password, comment_id, comment)
195
+ self.response = @client.call('wp.editComment', @blogid, @username, @password, comment_id, comment).result
196
196
  self.response
197
197
  end
198
198
 
199
199
  def settings
200
- self.response = @client.call('wp.getOptions', "1", @username, @password)
200
+ self.response = @client.call('wp.getOptions', @blogid, @username, @password).result
201
201
  self.response
202
202
  end
203
203
 
204
204
  #{"blog_title" => "Hello World!", "blog_tagline" => "tagg!"}
205
205
  def edit_settings settings
206
- self.response = @client.call('wp.setOptions', "1", @username, @password, settings)
206
+ self.response = @client.call('wp.setOptions', @blogid, @username, @password, settings).result
207
207
  self.response
208
208
  end
209
209
 
210
210
  def users
211
- self.response = @client.call('wp.getAuthors',"1", @username, @password)
211
+ self.response = @client.call('wp.getAuthors', @blogid, @username, @password).result
212
212
  self.response
213
213
  end
214
214
 
215
215
  def current_user
216
- self.response = @client.call('blogger.getUserInfo', "1", @username, @password)
216
+ self.response = @client.call('blogger.getUserInfo', @blogid, @username, @password).result
217
217
  self.response
218
218
  end
219
219
 
@@ -224,7 +224,7 @@ class ShoutMouthCommunicator
224
224
  :firstname => firstname,
225
225
  :lastname => lastname
226
226
  }
227
- self.response = @client.call('shoutmouth.addUser', "1", @username, @password, user)
227
+ self.response = @client.call('shoutmouth.addUser', @blogid, @username, @password, user).result
228
228
  self.response
229
229
  end
230
230
 
@@ -236,12 +236,12 @@ class ShoutMouthCommunicator
236
236
  :firstname => firstname,
237
237
  :lastname => lastname
238
238
  }
239
- self.response = @client.call('shoutmouth.editUser', "1", @username, @password, user)
239
+ self.response = @client.call('shoutmouth.editUser', @blogid, @username, @password, user).result
240
240
  self.response
241
241
  end
242
242
 
243
243
  def delete_user user_id
244
- self.response = @client.call('shoutmouth.deleteUser', "1", @username, @password, user_id)
244
+ self.response = @client.call('shoutmouth.deleteUser', @blogid, @username, @password, user_id).result
245
245
  self.response
246
246
  end
247
247
 
@@ -250,7 +250,7 @@ class ShoutMouthCommunicator
250
250
  :bits => bits,
251
251
  :name => name
252
252
  }
253
- self.response = @client.call('metaweblog.newMediaObject', "1", @username, @password, file)
253
+ self.response = @client.call('metaweblog.newMediaObject', @blogid, @username, @password, file).result
254
254
  self.response
255
255
  end
256
256
 
@@ -1,7 +1,7 @@
1
1
  module Shout
2
2
  module Mouth
3
3
  module Communicator
4
- VERSION = "1.0.2"
4
+ VERSION = "1.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -18,7 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,specs,features}/*`.split("\n")
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
-
21
+
22
+ s.add_dependency('rapuncel')
23
+
22
24
  s.add_development_dependency('thin')
23
25
  s.add_development_dependency('rspec')
24
26
  end
@@ -20,7 +20,7 @@ class XMLrpcServer
20
20
  method = call[0].gsub(/(.*)\.(.*)/, '\2').gsub(/([A-Z])/, '_\1').downcase
21
21
  # fake authentocation
22
22
  does_not_need_authentication?(method) ? authenticated = true : authenticated = authenticated?(call)
23
- # if the fake reponse header has been set overide the response file that will be sent back to the client
23
+ # if the fake reponse header has been set overide the response file that will be sent back to the client
24
24
  method = env["HTTP_RESPONSE_FILE"] unless env["HTTP_RESPONSE_FILE"].nil?
25
25
  #raise xmlrpc error response or get the xml response from the correct file
26
26
  authenticated ? response = get_response_for(method) : response = get_response_for('bad_authentication')
@@ -3,16 +3,24 @@ require File.expand_path('../../lib/shout-mouth-communicator', __FILE__)
3
3
 
4
4
  describe "Shout Mouth RPC API" do
5
5
 
6
+ HOST = "0.0.0.0"
7
+ PORT = "4000"
8
+ PATH = "/xmlrpc.php"
9
+ BLOGID = "1"
10
+ USERNAME = "correct"
11
+ PASSWORD = "password"
12
+
13
+
6
14
  before(:all) do
7
- @shout_mouth_client = ShoutMouthCommunicator.new("http://0.0.0.0:4000/xmlrpc.php", "1", "correct", "password")
15
+ @shout_mouth_client = ShoutMouthCommunicator.new(HOST, PATH, PORT, BLOGID, USERNAME, PASSWORD)
8
16
  end
9
17
 
10
18
  after(:each) do
11
- @shout_mouth_client.client.http_header_extra = nil
19
+ @shout_mouth_client.client.connection.headers = {}
12
20
  end
13
21
 
14
22
  it "should disallow authorization to the system when credentials are incorrect" do
15
- shout_mouth_client = ShoutMouthCommunicator.new("http://0.0.0.0:4000/xmlrpc.php", "1", "wrong", "password")
23
+ shout_mouth_client = ShoutMouthCommunicator.new(HOST, PATH, PORT, BLOGID, "wrong", PASSWORD)
16
24
  shout_mouth_client.authorized?.should be_false
17
25
  end
18
26
 
@@ -22,10 +30,10 @@ describe "Shout Mouth RPC API" do
22
30
 
23
31
  it "should return a list of correct tags" do
24
32
  tags = @shout_mouth_client.tags
25
- tags[0].should include "tag_id"=>"1"
26
- tags[1].should include "tag_id"=>"2"
27
- tags[2].should include "tag_id"=>"3"
28
- tags[3].should include "tag_id"=>"4"
33
+ tags[0].should include :tag_id => "1"
34
+ tags[1].should include :tag_id => "2"
35
+ tags[2].should include :tag_id => "3"
36
+ tags[3].should include :tag_id => "4"
29
37
  end
30
38
 
31
39
  it "should return the correct response when a tag is edited" do
@@ -35,10 +43,10 @@ describe "Shout Mouth RPC API" do
35
43
 
36
44
  it "should return a list of correct categories" do
37
45
  categories = @shout_mouth_client.categories
38
- categories[0].should include "categoryId"=> "1"
39
- categories[1].should include "categoryId"=> "2"
40
- categories[2].should include "categoryId"=> "3"
41
- categories[3].should include "categoryId"=> "4"
46
+ categories[0].should include :categoryId => "1"
47
+ categories[1].should include :categoryId => "2"
48
+ categories[2].should include :categoryId => "3"
49
+ categories[3].should include :categoryId => "4"
42
50
  end
43
51
 
44
52
  it "should return the correct response when a category has been created" do
@@ -54,13 +62,13 @@ describe "Shout Mouth RPC API" do
54
62
  it "should return a correct list of posts" do
55
63
  posts = @shout_mouth_client.posts
56
64
  posts.count.should == 2
57
- posts[0]["title"].should == "This is how we roll"
58
- posts[1]["title"].should == "New Post 1"
65
+ posts[0][:title].should == "This is how we roll"
66
+ posts[1][:title].should == "New Post 1"
59
67
  end
60
68
 
61
69
  it "should return a post when the get_post method is called" do
62
70
  post = @shout_mouth_client.post 1
63
- post["title"].should == "This is how we roll"
71
+ post[:title].should == "This is how we roll"
64
72
  end
65
73
 
66
74
  it "should return a correct response when a new post is added" do
@@ -80,12 +88,12 @@ describe "Shout Mouth RPC API" do
80
88
 
81
89
  it "should return a correct list of pages when the pages method is called" do
82
90
  pages = @shout_mouth_client.pages
83
- pages.first["title"].should == "bang"
91
+ pages.first[:title].should == "bang"
84
92
  end
85
93
 
86
94
  it "should return a correct page when the page method is called" do
87
95
  page = @shout_mouth_client.page 8
88
- page["title"].should == "bang"
96
+ page[:title].should == "bang"
89
97
  end
90
98
 
91
99
  it "should return a correct response when the new post method is called" do
@@ -94,7 +102,7 @@ describe "Shout Mouth RPC API" do
94
102
  end
95
103
 
96
104
  it "should return a correct response when the edit page method is called" do
97
- @shout_mouth_client.client.http_header_extra = {"response_file" => "edit_page"}
105
+ @shout_mouth_client.client.connection.headers = {"response_file" => "edit_page"}
98
106
  response = @shout_mouth_client.edit_page 10, "new page 123", "body", "publish", 1, 0
99
107
  response.should == 10
100
108
  end
@@ -106,16 +114,16 @@ describe "Shout Mouth RPC API" do
106
114
 
107
115
  it "should return comments for a post when the get post comments methods is called" do
108
116
  comments = @shout_mouth_client.comments_for_post 4
109
- comments.first["user_id"].should == "ham@ok.com"
117
+ comments.first[:user_id].should == "ham@ok.com"
110
118
  end
111
119
 
112
120
  it "should return no comments for a post when the get comments method is called with the spam flag" do
113
- @shout_mouth_client.client.http_header_extra = {"response_file" => "get_comments_spam"}
121
+ @shout_mouth_client.client.connection.headers = {"response_file" => "get_comments_spam"}
114
122
  @shout_mouth_client.comments_for_post(4, "spam").should be_empty
115
123
  end
116
124
 
117
125
  it "should return all active comments when the comments method is called" do
118
- @shout_mouth_client.client.http_header_extra = {"response_file" => "get_comments_all"}
126
+ @shout_mouth_client.client.connection.headers = {"response_file" => "get_comments_all"}
119
127
  comments = @shout_mouth_client.comments
120
128
  comments.count.should == 2
121
129
  end
@@ -127,24 +135,24 @@ describe "Shout Mouth RPC API" do
127
135
 
128
136
  it "should return a list of avaliable settings for the shout mouth instance when the settings method is called" do
129
137
  settings = @shout_mouth_client.settings
130
- settings["software_name"]["value"].should == "Shout Mouth Blog Engine"
131
- settings["administrator_email"]["value"].should == "admin@yourserver.com"
138
+ settings[:software_name][:value].should == "Shout Mouth Blog Engine"
139
+ settings[:administrator_email][:value].should == "admin@yourserver.com"
132
140
  end
133
141
 
134
142
  it "should return a setting when a settings is edited" do
135
143
  setting = @shout_mouth_client.edit_settings({"blog_title" => "ttle"})
136
- setting["blog_title"]["value"].should == "ttle"
144
+ setting[:blog_title][:value].should == "ttle"
137
145
  end
138
146
 
139
147
  it "should return all users when the user method is called" do
140
148
  users = @shout_mouth_client.users
141
- users.first["user_email"].should == "dan@shout_mouth.com"
149
+ users.first[:user_email].should == "dan@shout_mouth.com"
142
150
  end
143
151
 
144
152
  it "should return information about the current user when the current user method is called" do
145
153
  user = @shout_mouth_client.current_user
146
- user["firstname"].should == "Daniel"
147
- user["lastname"].should == "Watson"
154
+ user[:firstname].should == "Daniel"
155
+ user[:lastname].should == "Watson"
148
156
  end
149
157
 
150
158
  it "should return true when the add use method is called" do
@@ -160,23 +168,23 @@ describe "Shout Mouth RPC API" do
160
168
  end
161
169
 
162
170
  it "should return the correct url when a file is uploaded" do
163
- @shout_mouth_client.upload_file("Austria.gif", [])["url"].should == "http://0.0.0.0:4000/uploads/Austria.gif"
171
+ @shout_mouth_client.upload_file("Austria.gif", [])[:url].should == "http://0.0.0.0:4000/uploads/Austria.gif"
164
172
  end
165
173
 
166
174
  it "should have errors if the response contains validation errors" do
167
- @shout_mouth_client.client.http_header_extra = {"response_file" => "validation_error"}
175
+ @shout_mouth_client.client.connection.headers = {"response_file" => "validation_error"}
168
176
  @shout_mouth_client.edit_user("1", "email@addess.com", "password", "", "")
169
177
  @shout_mouth_client.has_errors?.should be_true
170
178
  @shout_mouth_client.errors.count.should == 3
171
179
  end
172
180
 
173
181
  it "should raise an XmlParseError if the xml passed is blank" do
174
- @shout_mouth_client.client.http_header_extra = {"response_file" => "xml_parse_error"}
182
+ @shout_mouth_client.client.connection.headers = {"response_file" => "xml_parse_error"}
175
183
  lambda{ @shout_mouth_client.upload_file("",[]) }.should raise_error(XmlParseError)
176
184
  end
177
185
 
178
186
  it "should raise an NoMethodError if there is a method called with no endpoint" do
179
- @shout_mouth_client.client.http_header_extra = {"response_file" => "nomethod_error"}
187
+ @shout_mouth_client.client.connection.headers = {"response_file" => "nomethod_error"}
180
188
  lambda{ @shout_mouth_client.upload_file("",[])}.should raise_error(NoMethodError)
181
189
  end
182
190
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: shout-mouth-communicator
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.2
5
+ version: 1.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dan Watson
@@ -10,11 +10,11 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-24 00:00:00 +01:00
13
+ date: 2011-05-26 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
- name: thin
17
+ name: rapuncel
18
18
  prerelease: false
19
19
  requirement: &id001 !ruby/object:Gem::Requirement
20
20
  none: false
@@ -22,10 +22,10 @@ dependencies:
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
24
  version: "0"
25
- type: :development
25
+ type: :runtime
26
26
  version_requirements: *id001
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: thin
29
29
  prerelease: false
30
30
  requirement: &id002 !ruby/object:Gem::Requirement
31
31
  none: false
@@ -35,6 +35,17 @@ dependencies:
35
35
  version: "0"
36
36
  type: :development
37
37
  version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id003
38
49
  description: An xmlrpc client that allows administration of the Shout Mouth blog engine"
39
50
  email:
40
51
  - dan@dotnetguy.co.uk