wordpress-xmlrpc 0.0.9 → 0.0.10
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.
- data/VERSION +1 -1
- data/lib/blog.rb +50 -18
- data/lib/content_item.rb +74 -0
- data/lib/page.rb +34 -0
- data/lib/post.rb +21 -50
- data/lib/wordpress-xmlrpc.rb +2 -0
- data/spec/blog_spec.rb +230 -71
- data/spec/page_spec.rb +36 -0
- data/spec/post_spec.rb +13 -80
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/models/blog_item_shared.rb +86 -0
- data/wordpress-xmlrpc.gemspec +9 -3
- metadata +10 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.10
|
data/lib/blog.rb
CHANGED
@@ -28,26 +28,58 @@ module Wordpress
|
|
28
28
|
|
29
29
|
def recent_posts(number_of_posts)
|
30
30
|
blog_api_call("metaWeblog.getRecentPosts", number_of_posts).collect do |struct|
|
31
|
-
Post.from_struct(struct)
|
31
|
+
Post.from_struct(:metaWeblog, struct)
|
32
32
|
end
|
33
33
|
end #recent_posts
|
34
34
|
|
35
|
-
def publish(
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
def publish(item)
|
36
|
+
process_images(item) unless item.images.nil?
|
37
|
+
case item
|
38
|
+
when Wordpress::Post
|
39
|
+
item.id = blog_api_call("metaWeblog.newPost", item.to_struct(:metaWeblog), true).to_i
|
40
|
+
item.published = true
|
41
|
+
when Wordpress::Page
|
42
|
+
item.id = blog_api_call("wp.newPage", item.to_struct(:wp), true).to_i
|
43
|
+
else
|
44
|
+
raise "Unknown item type: #{item}"
|
45
|
+
end
|
39
46
|
end #publish
|
40
47
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
48
|
+
def update(item)
|
49
|
+
process_images(item) unless item.images.nil?
|
50
|
+
case item
|
51
|
+
when Post
|
52
|
+
return api_call("metaWeblog.editPost", item.id, @user, @password, item.to_struct(:metaWeblog), item.published)
|
53
|
+
when Page
|
54
|
+
return api_call("wp.editPage", @id, item.id, @user, @password, item.to_struct(:wp), item.published)
|
55
|
+
else
|
56
|
+
raise "Unknown item type: #{item}"
|
57
|
+
end
|
58
|
+
end #update
|
59
|
+
|
60
|
+
def delete(item)
|
61
|
+
case item
|
62
|
+
when Wordpress::Post
|
63
|
+
return api_call("blogger.deletePost", "", item.id, @user, @password, true)
|
64
|
+
when Wordpress::Page
|
65
|
+
return blog_api_call("wp.deletePage", item.id)
|
66
|
+
else
|
67
|
+
raise "Unknown item type: #{item}"
|
68
|
+
end
|
49
69
|
end
|
50
70
|
|
71
|
+
def get_page_list
|
72
|
+
page_list = blog_api_call("wp.getPageList").collect do |struct|
|
73
|
+
Wordpress::Page.from_struct(:wp, struct)
|
74
|
+
end
|
75
|
+
# link pages list with each other
|
76
|
+
page_list.each do |page|
|
77
|
+
page.parent = page_list.find{|p| p.id == page.parent_id} if page.parent_id
|
78
|
+
end
|
79
|
+
|
80
|
+
page_list
|
81
|
+
end #get_page_list
|
82
|
+
|
51
83
|
def upload_file(file)
|
52
84
|
struct = {
|
53
85
|
:name => File.basename(file.path),
|
@@ -59,9 +91,9 @@ module Wordpress
|
|
59
91
|
end
|
60
92
|
|
61
93
|
private
|
62
|
-
def
|
63
|
-
doc = Nokogiri::HTML::DocumentFragment.parse(
|
64
|
-
|
94
|
+
def process_images(item)
|
95
|
+
doc = Nokogiri::HTML::DocumentFragment.parse(item.content)
|
96
|
+
item.images.each do |image|
|
65
97
|
|
66
98
|
raise ArgumentError, "Image not found (path: #{image[:file_path]})" unless File.exist?(image[:file_path])
|
67
99
|
|
@@ -72,8 +104,8 @@ module Wordpress
|
|
72
104
|
img['src'] = uploaded_image['url'] if img['src'].include?(basename)
|
73
105
|
end
|
74
106
|
end
|
75
|
-
|
76
|
-
end #
|
107
|
+
item.content = doc.to_html
|
108
|
+
end #process_images
|
77
109
|
|
78
110
|
def api_call(method_name, *args)
|
79
111
|
begin
|
data/lib/content_item.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
module Wordpress
|
2
|
+
module ContentItem
|
3
|
+
module ClassMethods
|
4
|
+
def from_struct(api, struct)
|
5
|
+
content_item = self.new
|
6
|
+
|
7
|
+
self::ATTRIBUTE_MATCHES[api].each do |struct_attribute, item_attribute|
|
8
|
+
value = struct[struct_attribute.to_s]
|
9
|
+
value = value.to_date if value.kind_of?XMLRPC::DateTime
|
10
|
+
content_item.send("#{item_attribute}=", value) unless value.nil?
|
11
|
+
end
|
12
|
+
|
13
|
+
content_item
|
14
|
+
end #self.from_struct
|
15
|
+
end
|
16
|
+
|
17
|
+
module InstanceMethods
|
18
|
+
def initialize(attributes = {})
|
19
|
+
super()
|
20
|
+
self.images = []
|
21
|
+
apply_attributes(attributes)
|
22
|
+
end #initialize
|
23
|
+
|
24
|
+
def to_struct(api)
|
25
|
+
struct = {}
|
26
|
+
self.class::ATTRIBUTE_MATCHES[api].each do |struct_attribute, item_attribute|
|
27
|
+
value = self.send(item_attribute)
|
28
|
+
struct[struct_attribute] = value if value
|
29
|
+
end
|
30
|
+
struct
|
31
|
+
end #to_struct
|
32
|
+
|
33
|
+
def creation_date=(value)
|
34
|
+
case value
|
35
|
+
when String
|
36
|
+
@creation_date = Date.parse(value)
|
37
|
+
when Date
|
38
|
+
@creation_date = value
|
39
|
+
when nil
|
40
|
+
@creation_date = value
|
41
|
+
else
|
42
|
+
raise ArgumentError, "Date or String expected instead of #{value.class.name}"
|
43
|
+
end
|
44
|
+
end #creation_date=
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
def apply_attributes(attributes)
|
49
|
+
attributes.each do |attribute, value|
|
50
|
+
accessor_name = "#{attribute}="
|
51
|
+
send(accessor_name, value) if respond_to?(accessor_name)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.included(host)
|
57
|
+
host.send :include, InstanceMethods
|
58
|
+
|
59
|
+
host.class_eval do
|
60
|
+
attr_accessor(
|
61
|
+
:id,
|
62
|
+
:title,
|
63
|
+
:content,
|
64
|
+
:excerpt,
|
65
|
+
:images
|
66
|
+
)
|
67
|
+
attr_reader(:creation_date)
|
68
|
+
end
|
69
|
+
|
70
|
+
host.extend ClassMethods
|
71
|
+
end #included
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
data/lib/page.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Wordpress
|
2
|
+
class Page
|
3
|
+
include ContentItem
|
4
|
+
|
5
|
+
ATTRIBUTE_MATCHES = {
|
6
|
+
:metaWeblog => {
|
7
|
+
},
|
8
|
+
:wp => {
|
9
|
+
:page_id => :id,
|
10
|
+
:title => :title,
|
11
|
+
:page_title => :title,
|
12
|
+
:description => :content,
|
13
|
+
:mt_excerpt => :excerpt,
|
14
|
+
:dateCreated => :creation_date,
|
15
|
+
:page_parent_id => :parent_id,
|
16
|
+
:wp_page_parent_id => :parent_id
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
attr_accessor(:parent_id, :published)
|
21
|
+
attr_reader(:parent)
|
22
|
+
|
23
|
+
def parent=(page)
|
24
|
+
if page.nil?
|
25
|
+
@parent_id = @parent = nil
|
26
|
+
else
|
27
|
+
raise "Page expected instead of #{page}" unless page.kind_of? Wordpress::Page
|
28
|
+
@parent = page
|
29
|
+
@parent_id = page.id
|
30
|
+
end
|
31
|
+
end #parent=
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
data/lib/post.rb
CHANGED
@@ -1,60 +1,31 @@
|
|
1
1
|
module Wordpress
|
2
2
|
class Post
|
3
|
+
include ContentItem
|
4
|
+
|
3
5
|
ATTRIBUTE_MATCHES = {
|
4
|
-
:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
:metaWeblog => {
|
7
|
+
:postid => :id,
|
8
|
+
:title => :title,
|
9
|
+
:description => :content,
|
10
|
+
:mt_excerpt => :excerpt,
|
11
|
+
:dateCreated => :creation_date,
|
12
|
+
:post_state => :struct_published
|
13
|
+
},
|
14
|
+
:wp => {
|
15
|
+
}
|
9
16
|
}
|
10
17
|
|
11
|
-
attr_accessor(
|
12
|
-
:id,
|
13
|
-
:title,
|
14
|
-
:content,
|
15
|
-
:excerpt,
|
16
|
-
:creation_date,
|
17
|
-
:published,
|
18
|
-
:images
|
19
|
-
)
|
20
|
-
|
21
|
-
def initialize(attributes = {})
|
22
|
-
self.images = []
|
23
|
-
attributes.each do |attribute, value|
|
24
|
-
accessor_name = "#{attribute}="
|
25
|
-
send(accessor_name, value) if respond_to?(accessor_name)
|
26
|
-
end
|
27
|
-
end #initialize
|
18
|
+
attr_accessor(:published)
|
28
19
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
post.published = struct[:post_state] == "publish"
|
35
|
-
post
|
36
|
-
end #self.from_struct
|
20
|
+
def struct_published=(value)
|
21
|
+
@published = value if [true, false].include? value
|
22
|
+
@published = value == "publish" if value.kind_of? String
|
23
|
+
end
|
37
24
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
struct[struct_attribute] = value if value
|
43
|
-
end
|
44
|
-
struct
|
45
|
-
end #to_struct
|
25
|
+
def struct_published()
|
26
|
+
return "publish" if @published == true
|
27
|
+
return nil
|
28
|
+
end #struct_published
|
46
29
|
|
47
|
-
def creation_date=(value)
|
48
|
-
case value
|
49
|
-
when String
|
50
|
-
@creation_date = Date.parse(value)
|
51
|
-
when Date
|
52
|
-
@creation_date = value
|
53
|
-
when nil
|
54
|
-
@creation_date = value
|
55
|
-
else
|
56
|
-
raise ArgumentError, "Date or String expected instead of #{value.class.name}"
|
57
|
-
end
|
58
|
-
end #publish_date=
|
59
30
|
end
|
60
31
|
end
|
data/lib/wordpress-xmlrpc.rb
CHANGED
data/spec/blog_spec.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Wordpress::Blog do
|
4
|
+
|
4
5
|
describe "initialize" do
|
5
6
|
before(:each) do
|
6
7
|
@valid_params = {
|
@@ -56,56 +57,166 @@ describe Wordpress::Blog do
|
|
56
57
|
)
|
57
58
|
end
|
58
59
|
|
59
|
-
describe "
|
60
|
-
|
61
|
-
|
60
|
+
describe "delete" do
|
61
|
+
context "when post passed as param" do
|
62
|
+
it "should make appropriate call to XMLRPC API" do
|
63
|
+
@client_mock.should_receive(:call).with("blogger.deletePost", "", 123, "admin", "wordpress-xmlrpc", true).and_return(true)
|
64
|
+
|
65
|
+
post = Wordpress::Post.new(:id => 123)
|
66
|
+
@blog.delete(post).should be_true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when page passed as param" do
|
71
|
+
it "should make appropriate call to XMLRPC API" do
|
72
|
+
@client_mock.should_receive(:call).with("wp.deletePage", 0, "admin", "wordpress-xmlrpc", 123).and_return(true)
|
73
|
+
|
74
|
+
page = Wordpress::Page.new(:id => 123)
|
75
|
+
@blog.delete(page).should be_true
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "get_page_list" do
|
82
|
+
it "should return list of pages" do
|
83
|
+
page_structs = [
|
84
|
+
{
|
85
|
+
"page_id" => 1,
|
86
|
+
"page_title" => "Page one",
|
87
|
+
"page_parent_id" => 2,
|
88
|
+
"dateCreated" => Date.parse("01.08.2010")
|
89
|
+
},
|
90
|
+
{
|
91
|
+
"page_id" => 2,
|
92
|
+
"page_title" => "Page two",
|
93
|
+
"page_parent_id" => nil,
|
94
|
+
"dateCreated" => Date.parse("01.08.2010")
|
95
|
+
}
|
96
|
+
]
|
97
|
+
@client_mock.should_receive(:call).with("wp.getPageList", 0, "admin", "wordpress-xmlrpc").and_return(page_structs)
|
98
|
+
|
99
|
+
page_two = Wordpress::Page.new(
|
100
|
+
:id => 2,
|
101
|
+
:title => "Page two",
|
102
|
+
:creation_date => Date.parse("01.08.2010"),
|
103
|
+
:parent => nil
|
104
|
+
)
|
105
|
+
page_one = Wordpress::Page.new(
|
106
|
+
:id => 1,
|
107
|
+
:title => "Page one",
|
108
|
+
:creation_date => Date.parse("01.08.2010"),
|
109
|
+
:parent_id => 2
|
110
|
+
)
|
111
|
+
page_list = [page_one, page_two]
|
112
|
+
|
113
|
+
result_page_list = @blog.get_page_list
|
114
|
+
result_page_list.size.should == 2
|
115
|
+
|
116
|
+
result_page_list[0].id.should == 1
|
117
|
+
result_page_list[0].title.should == "Page one"
|
118
|
+
result_page_list[0].parent_id == 2
|
119
|
+
result_page_list[0].parent.should == result_page_list[1]
|
120
|
+
result_page_list[0].creation_date.should == Date.parse("01.08.2010")
|
121
|
+
|
122
|
+
result_page_list[1].id.should == 2
|
123
|
+
result_page_list[1].title.should == "Page two"
|
124
|
+
result_page_list[1].parent_id.should be_nil
|
125
|
+
result_page_list[1].creation_date.should == Date.parse("01.08.2010")
|
62
126
|
|
63
|
-
post = Wordpress::Post.new(:id => 123)
|
64
|
-
@blog.delete(post).should be_true
|
65
127
|
end
|
66
128
|
end
|
67
129
|
|
68
130
|
describe "publish" do
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
:title => "Hey ho",
|
73
|
-
:content => "Content <img src=\"http://otherhost/post_picture.jpg?1231231123\">",
|
74
|
-
:excerpt => "Excerpt",
|
75
|
-
:images => images,
|
76
|
-
:publish_date => Date.parse("01.08.2010"))
|
77
|
-
|
78
|
-
|
79
|
-
required_post_struct = {
|
80
|
-
:title=>"Hey ho",
|
81
|
-
:description=>"Content <img src=\"http://localhost/post_picture.jpg\">",
|
82
|
-
:mt_excerpt=>"Excerpt"
|
83
|
-
}
|
131
|
+
context "when Page passed as param" do
|
132
|
+
it "should make appropriate calls to XMLRPC API" do
|
133
|
+
images = [{:file_path => File.expand_path("./spec/support/files/post_picture.jpg")}]
|
84
134
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
135
|
+
page = Wordpress::Page.new(
|
136
|
+
:title => "new Page",
|
137
|
+
:content => "Page content",
|
138
|
+
:excerpt => "Page excerpt",
|
139
|
+
:creation_date => Date.parse("01.08.2010"),
|
140
|
+
:images => images
|
141
|
+
)
|
142
|
+
@client_mock.should_receive(:call).with("wp.newPage",
|
143
|
+
0, "admin", "wordpress-xmlrpc",
|
144
|
+
{
|
145
|
+
:title => "new Page",
|
146
|
+
:page_title => "new Page",
|
147
|
+
:description => "Page content",
|
148
|
+
:mt_excerpt => "Page excerpt",
|
149
|
+
:dateCreated => Date.parse("01.08.2010")
|
150
|
+
}, true).and_return(123)
|
98
151
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
152
|
+
file_struct = {
|
153
|
+
:name => "post_picture.jpg",
|
154
|
+
:type => "image/jpeg",
|
155
|
+
:bits => "encoded file content",
|
156
|
+
:overwrite => true
|
157
|
+
}
|
158
|
+
@client_mock.should_receive(:call).with(
|
159
|
+
"wp.uploadFile",
|
160
|
+
0, "admin", "wordpress-xmlrpc",
|
161
|
+
file_struct).and_return({
|
162
|
+
'file' => "post_picture.jpg",
|
163
|
+
'url' => "http://localhost/post_picture.jpg",
|
164
|
+
'type' => "image/jpeg"
|
165
|
+
})
|
166
|
+
|
167
|
+
XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
|
103
168
|
|
104
|
-
XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
|
105
169
|
|
106
|
-
|
107
|
-
|
108
|
-
|
170
|
+
@blog.publish(page).should be_true
|
171
|
+
page.id.should == 123
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "when Post passed as param" do
|
176
|
+
it "should make appropriate call to XMLRPC API" do
|
177
|
+
images = [{:file_path => File.expand_path("./spec/support/files/post_picture.jpg")}]
|
178
|
+
post = Wordpress::Post.new(
|
179
|
+
:title => "Hey ho",
|
180
|
+
:content => "Content <img src=\"http://otherhost/post_picture.jpg?1231231123\">",
|
181
|
+
:excerpt => "Excerpt",
|
182
|
+
:images => images,
|
183
|
+
:creation_date => Date.parse("01.08.2010"))
|
184
|
+
|
185
|
+
|
186
|
+
required_post_struct = {
|
187
|
+
:title => "Hey ho",
|
188
|
+
:description => "Content <img src=\"http://localhost/post_picture.jpg\">",
|
189
|
+
:mt_excerpt => "Excerpt",
|
190
|
+
:dateCreated => Date.parse("01.08.2010")
|
191
|
+
}
|
192
|
+
|
193
|
+
|
194
|
+
file_struct = {
|
195
|
+
:name => "post_picture.jpg",
|
196
|
+
:type => "image/jpeg",
|
197
|
+
:bits => "encoded file content",
|
198
|
+
:overwrite => true
|
199
|
+
}
|
200
|
+
@client_mock.should_receive(:call).with(
|
201
|
+
"wp.uploadFile",
|
202
|
+
0, "admin", "wordpress-xmlrpc",
|
203
|
+
file_struct).and_return({
|
204
|
+
'file' => "post_picture.jpg",
|
205
|
+
'url' => "http://localhost/post_picture.jpg",
|
206
|
+
'type' => "image/jpeg"
|
207
|
+
})
|
208
|
+
|
209
|
+
@client_mock.should_receive(:call).with(
|
210
|
+
"metaWeblog.newPost",
|
211
|
+
0, "admin", "wordpress-xmlrpc",
|
212
|
+
required_post_struct, true).and_return("123")
|
213
|
+
|
214
|
+
XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
|
215
|
+
|
216
|
+
@blog.publish(post).should be_true
|
217
|
+
post.id.should == 123
|
218
|
+
post.published.should be_true
|
219
|
+
end
|
109
220
|
end
|
110
221
|
end
|
111
222
|
|
@@ -113,11 +224,14 @@ describe Wordpress::Blog do
|
|
113
224
|
it "should make appropriate call to xmlrpc api and return list of posts" do
|
114
225
|
post_structs = (1..10).collect do |index|
|
115
226
|
{
|
116
|
-
|
227
|
+
"title" => "Post #{index}"
|
117
228
|
}
|
118
229
|
end
|
119
230
|
|
120
|
-
@client_mock.should_receive(:call).with(
|
231
|
+
@client_mock.should_receive(:call).with(
|
232
|
+
"metaWeblog.getRecentPosts",
|
233
|
+
0, "admin", "wordpress-xmlrpc",
|
234
|
+
10).and_return(post_structs)
|
121
235
|
|
122
236
|
recent_posts = @blog.recent_posts(10)
|
123
237
|
recent_posts.size.should == 10
|
@@ -137,38 +251,83 @@ describe Wordpress::Blog do
|
|
137
251
|
end
|
138
252
|
end
|
139
253
|
|
140
|
-
describe "
|
141
|
-
|
142
|
-
images = [{:file_path => File.expand_path("./spec/support/files/post_picture.jpg")}]
|
143
|
-
post = Wordpress::Post.new(:id => 54, :title => "Updated post", :content => "Content <img src=\"http://otherhost/post_picture.jpg\">", :published => true, :images => images)
|
254
|
+
describe "update" do
|
255
|
+
before(:each) do
|
256
|
+
@images = [{:file_path => File.expand_path("./spec/support/files/post_picture.jpg")}]
|
144
257
|
|
145
|
-
|
146
|
-
:title=>"Updated post",
|
147
|
-
:description=>"Content <img src=\"http://localhost/post_picture.jpg\">",
|
148
|
-
:postid => 54
|
149
|
-
}
|
150
|
-
@client_mock.should_receive(:call).with("metaWeblog.editPost",
|
151
|
-
54, "admin", "wordpress-xmlrpc",
|
152
|
-
required_post_struct, true).and_return(true)
|
258
|
+
end
|
153
259
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
260
|
+
context "when page passed as param" do
|
261
|
+
it "should submit page update" do
|
262
|
+
page = Wordpress::Page.new(
|
263
|
+
:id => 123,
|
264
|
+
:title => "Updated page",
|
265
|
+
:content => "Content <img src=\"http://otherhost/post_picture.jpg\">",
|
266
|
+
:published => true,
|
267
|
+
:images => @images
|
268
|
+
)
|
269
|
+
required_page_struct = {
|
270
|
+
:title => "Updated page",
|
271
|
+
:page_title => "Updated page",
|
272
|
+
:description => "Content <img src=\"http://localhost/post_picture.jpg\">",
|
273
|
+
:page_id => 123
|
274
|
+
}
|
275
|
+
@client_mock.should_receive(:call).with("wp.editPage", 0, 123, "admin", "wordpress-xmlrpc", required_page_struct, true).and_return true
|
276
|
+
@client_mock.should_receive(:call).with("wp.uploadFile",
|
277
|
+
0, "admin", "wordpress-xmlrpc",
|
278
|
+
{
|
279
|
+
:name => "post_picture.jpg",
|
280
|
+
:type => "image/jpeg",
|
281
|
+
:bits => "encoded file content",
|
282
|
+
:overwrite => true
|
283
|
+
}).and_return({
|
284
|
+
'file' => "post_picture.jpg",
|
285
|
+
'url' => "http://localhost/post_picture.jpg",
|
286
|
+
'type' => "image/jpeg"
|
287
|
+
})
|
288
|
+
XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
|
289
|
+
|
290
|
+
@blog.update(page).should be_true
|
291
|
+
end
|
169
292
|
end
|
170
|
-
end
|
171
293
|
|
294
|
+
context "when post passed as param" do
|
295
|
+
it "should submit post update" do
|
296
|
+
post = Wordpress::Post.new(
|
297
|
+
:id => 54,
|
298
|
+
:title => "Updated post",
|
299
|
+
:content => "Content <img src=\"http://otherhost/post_picture.jpg\">",
|
300
|
+
:published => true,
|
301
|
+
:images => @images)
|
302
|
+
|
303
|
+
required_post_struct = {
|
304
|
+
:title => "Updated post",
|
305
|
+
:description => "Content <img src=\"http://localhost/post_picture.jpg\">",
|
306
|
+
:postid => 54,
|
307
|
+
:post_state => "publish"
|
308
|
+
}
|
309
|
+
@client_mock.should_receive(:call).with("metaWeblog.editPost",
|
310
|
+
54, "admin", "wordpress-xmlrpc",
|
311
|
+
required_post_struct, true).and_return(true)
|
312
|
+
|
313
|
+
@client_mock.should_receive(:call).with("wp.uploadFile",
|
314
|
+
0, "admin", "wordpress-xmlrpc",
|
315
|
+
{
|
316
|
+
:name => "post_picture.jpg",
|
317
|
+
:type => "image/jpeg",
|
318
|
+
:bits => "encoded file content",
|
319
|
+
:overwrite => true
|
320
|
+
}).and_return({
|
321
|
+
'file' => "post_picture.jpg",
|
322
|
+
'url' => "http://localhost/post_picture.jpg",
|
323
|
+
'type' => "image/jpeg"
|
324
|
+
})
|
325
|
+
XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
|
326
|
+
|
327
|
+
@blog.update(post).should be_true
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
172
331
|
end
|
173
332
|
end
|
174
333
|
|
data/spec/page_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Wordpress::Page do
|
4
|
+
subject {Wordpress::Page}
|
5
|
+
|
6
|
+
it_should_behave_like "Blog item"
|
7
|
+
|
8
|
+
describe "matching attributes" do
|
9
|
+
it "should match attributes as defined in wp API" do
|
10
|
+
matches = Wordpress::Page::ATTRIBUTE_MATCHES[:wp]
|
11
|
+
matches[:page_id].should == :id
|
12
|
+
matches[:title].should == :title
|
13
|
+
matches[:page_title].should == :title
|
14
|
+
matches[:description].should == :content
|
15
|
+
matches[:mt_excerpt].should == :excerpt
|
16
|
+
matches[:dateCreated].should == :creation_date
|
17
|
+
matches[:page_parent_id].should == :parent_id
|
18
|
+
matches[:wp_page_parent_id].should == :parent_id
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should not match for metaWeblog API at all" do
|
22
|
+
matches = Wordpress::Page::ATTRIBUTE_MATCHES[:metaWeblog]
|
23
|
+
matches.should be_empty
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "parent=" do
|
28
|
+
it "should assign parent_id when parent page assigned" do
|
29
|
+
parent_page = Wordpress::Page.new(:title => "parent page", :id => 123)
|
30
|
+
child_page = Wordpress::Page.new(:title => "child page")
|
31
|
+
child_page.parent = parent_page
|
32
|
+
child_page.parent_id.should == 123
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/spec/post_spec.rb
CHANGED
@@ -1,91 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Wordpress::Post do
|
4
|
-
|
5
|
-
it "should populate title from params" do
|
6
|
-
post = Wordpress::Post.new(:title => "Hey ho")
|
7
|
-
post.title.should == "Hey ho"
|
8
|
-
end
|
9
|
-
it "should populate content from params" do
|
10
|
-
post = Wordpress::Post.new(:content => "This is a content")
|
11
|
-
post.content.should == "This is a content"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "to_struct" do
|
16
|
-
it "should return struct hash reflecting all post params" do
|
17
|
-
post = Wordpress::Post.new(
|
18
|
-
:id => 99,
|
19
|
-
:title => "Post title",
|
20
|
-
:content => "Post content",
|
21
|
-
:excerpt => "Post excerpt",
|
22
|
-
:creation_date => Date.parse("01.08.2010")
|
23
|
-
)
|
24
|
-
post.to_struct.should == {
|
25
|
-
:postid => 99,
|
26
|
-
:title => "Post title",
|
27
|
-
:description => "Post content",
|
28
|
-
:mt_excerpt => "Post excerpt",
|
29
|
-
:dateCreated => Date.parse("01.08.2010")
|
30
|
-
}
|
31
|
-
end
|
32
|
-
it "should return incomplete struct for params without params that are nil" do
|
33
|
-
post = Wordpress::Post.new(:title => "Post title")
|
34
|
-
post.to_struct.should == {
|
35
|
-
:title => "Post title"
|
36
|
-
}
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "from_struct" do
|
41
|
-
it "should create post from RPC struct" do
|
42
|
-
post = Wordpress::Post.from_struct({
|
43
|
-
:postid => 99,
|
44
|
-
:title => "Post title",
|
45
|
-
:description => "Post content",
|
46
|
-
:mt_excerpt => "Post excerpt",
|
47
|
-
:dateCreated => "01.08.2010",
|
48
|
-
:post_state => "publish"
|
49
|
-
})
|
50
|
-
post.id.should == 99
|
51
|
-
post.title.should == "Post title"
|
52
|
-
post.content.should == "Post content"
|
53
|
-
post.excerpt.should == "Post excerpt"
|
54
|
-
post.creation_date.should == Date.parse("01.08.2010")
|
55
|
-
post.published.should be_true
|
56
|
-
end
|
57
|
-
end
|
4
|
+
subject {Wordpress::Post}
|
58
5
|
|
59
|
-
|
60
|
-
before(:each) do
|
61
|
-
@post = Wordpress::Post.new
|
62
|
-
end
|
6
|
+
it_should_behave_like "Blog item"
|
63
7
|
|
64
|
-
|
65
|
-
|
66
|
-
|
8
|
+
describe "matching attributes" do
|
9
|
+
it "should match attributes as defined in metaWeblog API" do
|
10
|
+
matches = Wordpress::Post::ATTRIBUTE_MATCHES[:metaWeblog]
|
11
|
+
matches[:postid].should == :id
|
12
|
+
matches[:title].should == :title
|
13
|
+
matches[:description].should == :content
|
14
|
+
matches[:mt_excerpt].should == :excerpt
|
15
|
+
matches[:post_state].should == :struct_published
|
67
16
|
end
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
@post.creation_date = date
|
72
|
-
@post.creation_date.should == date
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should raise error if string could not be parsed to date" do
|
76
|
-
lambda{
|
77
|
-
@post.creation_date = "abracadabra"
|
78
|
-
}.should raise_error ArgumentError, "invalid date"
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should raise exception if object is not a string and not a date" do
|
82
|
-
lambda{
|
83
|
-
@post.creation_date = Integer(10)
|
84
|
-
}.should raise_error ArgumentError, "Date or String expected instead of Fixnum"
|
17
|
+
it "should not match for wp API at all" do
|
18
|
+
matches = Wordpress::Post::ATTRIBUTE_MATCHES[:wp]
|
19
|
+
matches.should be_empty
|
85
20
|
end
|
86
21
|
end
|
87
22
|
|
88
|
-
|
89
|
-
|
90
23
|
end
|
91
24
|
|
data/spec/spec.opts
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -13,6 +13,10 @@ require 'spec/autorun'
|
|
13
13
|
|
14
14
|
require 'wordpress-xmlrpc'
|
15
15
|
|
16
|
+
# Requires supporting files with custom matchers and macros, etc,
|
17
|
+
# in ./support/ and its subdirectories.
|
18
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f}
|
19
|
+
|
16
20
|
Spec::Runner.configure do |config|
|
17
21
|
|
18
22
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
shared_examples_for "Blog item" do
|
2
|
+
before(:each) do
|
3
|
+
@api_standard = subject == Wordpress::Post ? :metaWeblog : :wp
|
4
|
+
end
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
describe "initialize" do
|
9
|
+
it "should populate title from params" do
|
10
|
+
item = subject.new(:title => "Hey ho")
|
11
|
+
item.title.should == "Hey ho"
|
12
|
+
end
|
13
|
+
it "should populate content from params" do
|
14
|
+
item = subject.new(:content => "This is a content")
|
15
|
+
item.content.should == "This is a content"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "to_struct" do
|
20
|
+
it "should return struct hash reflecting matching item params" do
|
21
|
+
item = subject.new(
|
22
|
+
:content => "item content",
|
23
|
+
:excerpt => "item excerpt",
|
24
|
+
:creation_date => Date.parse("01.08.2010")
|
25
|
+
)
|
26
|
+
item.to_struct(@api_standard).should == {
|
27
|
+
:description => "item content",
|
28
|
+
:mt_excerpt => "item excerpt",
|
29
|
+
:dateCreated => Date.parse("01.08.2010")
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return incomplete struct for params without params that are nil" do
|
34
|
+
item = subject.new(:content => "item content")
|
35
|
+
item.to_struct(@api_standard).should == {
|
36
|
+
:description => "item content"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "from_struct" do
|
42
|
+
it "should create item from RPC struct" do
|
43
|
+
item = subject.from_struct(@api_standard,
|
44
|
+
{
|
45
|
+
"description" => "item content",
|
46
|
+
"mt_excerpt" => "item excerpt",
|
47
|
+
"dateCreated" => "01.08.2010"
|
48
|
+
})
|
49
|
+
item.content.should == "item content"
|
50
|
+
item.excerpt.should == "item excerpt"
|
51
|
+
item.creation_date.should == Date.parse("01.08.2010")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "creation_date=" do
|
56
|
+
before(:each) do
|
57
|
+
@item = subject.new
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should convert string to date" do
|
61
|
+
@item.creation_date = "01.08.2010"
|
62
|
+
@item.creation_date.should == Date.parse("01.08.2010")
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should assign date as is if kind_of? Date provided" do
|
66
|
+
date = Date.parse("01.08.2010")
|
67
|
+
@item.creation_date = date
|
68
|
+
@item.creation_date.should == date
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should raise error if string could not be parsed to date" do
|
72
|
+
lambda{
|
73
|
+
@item.creation_date = "abracadabra"
|
74
|
+
}.should raise_error ArgumentError, "invalid date"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should raise exception if object is not a string and not a date" do
|
78
|
+
lambda{
|
79
|
+
@item.creation_date = Integer(10)
|
80
|
+
}.should raise_error ArgumentError, "Date or String expected instead of Fixnum"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
end
|
data/wordpress-xmlrpc.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{wordpress-xmlrpc}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.10"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Alexander Naumenko"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-05}
|
13
13
|
s.description = %q{Please do not fork it before directly contacint}
|
14
14
|
s.email = %q{alecnmk@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -29,16 +29,20 @@ Gem::Specification.new do |s|
|
|
29
29
|
"features/step_definitions/mysql_steps.rb",
|
30
30
|
"features/support/env.rb",
|
31
31
|
"lib/blog.rb",
|
32
|
+
"lib/content_item.rb",
|
32
33
|
"lib/exceptions.rb",
|
33
34
|
"lib/loggable.rb",
|
35
|
+
"lib/page.rb",
|
34
36
|
"lib/params_check.rb",
|
35
37
|
"lib/post.rb",
|
36
38
|
"lib/wordpress-xmlrpc.rb",
|
37
39
|
"spec/blog_spec.rb",
|
40
|
+
"spec/page_spec.rb",
|
38
41
|
"spec/post_spec.rb",
|
39
42
|
"spec/spec.opts",
|
40
43
|
"spec/spec_helper.rb",
|
41
44
|
"spec/support/files/post_picture.jpg",
|
45
|
+
"spec/support/models/blog_item_shared.rb",
|
42
46
|
"wordpress-xmlrpc.gemspec"
|
43
47
|
]
|
44
48
|
s.homepage = %q{http://github.com/alecnmk/wordpress-xmlrpc}
|
@@ -47,8 +51,10 @@ Gem::Specification.new do |s|
|
|
47
51
|
s.rubygems_version = %q{1.3.7}
|
48
52
|
s.summary = %q{This gem is supposed to simplify wordpress xmlrpc interaction}
|
49
53
|
s.test_files = [
|
50
|
-
"spec/
|
54
|
+
"spec/page_spec.rb",
|
55
|
+
"spec/spec_helper.rb",
|
51
56
|
"spec/blog_spec.rb",
|
57
|
+
"spec/support/models/blog_item_shared.rb",
|
52
58
|
"spec/post_spec.rb"
|
53
59
|
]
|
54
60
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wordpress-xmlrpc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 10
|
10
|
+
version: 0.0.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alexander Naumenko
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-05 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -105,16 +105,20 @@ files:
|
|
105
105
|
- features/step_definitions/mysql_steps.rb
|
106
106
|
- features/support/env.rb
|
107
107
|
- lib/blog.rb
|
108
|
+
- lib/content_item.rb
|
108
109
|
- lib/exceptions.rb
|
109
110
|
- lib/loggable.rb
|
111
|
+
- lib/page.rb
|
110
112
|
- lib/params_check.rb
|
111
113
|
- lib/post.rb
|
112
114
|
- lib/wordpress-xmlrpc.rb
|
113
115
|
- spec/blog_spec.rb
|
116
|
+
- spec/page_spec.rb
|
114
117
|
- spec/post_spec.rb
|
115
118
|
- spec/spec.opts
|
116
119
|
- spec/spec_helper.rb
|
117
120
|
- spec/support/files/post_picture.jpg
|
121
|
+
- spec/support/models/blog_item_shared.rb
|
118
122
|
- wordpress-xmlrpc.gemspec
|
119
123
|
has_rdoc: true
|
120
124
|
homepage: http://github.com/alecnmk/wordpress-xmlrpc
|
@@ -151,6 +155,8 @@ signing_key:
|
|
151
155
|
specification_version: 3
|
152
156
|
summary: This gem is supposed to simplify wordpress xmlrpc interaction
|
153
157
|
test_files:
|
158
|
+
- spec/page_spec.rb
|
154
159
|
- spec/spec_helper.rb
|
155
160
|
- spec/blog_spec.rb
|
161
|
+
- spec/support/models/blog_item_shared.rb
|
156
162
|
- spec/post_spec.rb
|