wordpress-xmlrpc 0.0.4 → 0.0.5

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 CHANGED
@@ -1 +1 @@
1
- 0.0.4
1
+ 0.0.5
@@ -7,12 +7,12 @@ Feature: Publish post
7
7
  And all posts and comments cleaned out
8
8
 
9
9
  @wip
10
- Scenario: Load wordpress home page
10
+ Scenario: Publish post
11
11
  When I go to wordpress "home" page
12
12
  Then I should see "wordpress"
13
13
  When make following post:
14
- | title | content | creation_date |
15
- | hey ho | this is my first post | 01.08.2010 |
14
+ | title | content | creation_date | image |
15
+ | hey ho | this is my first post <br/> <img src="post_picture.jpg"/> | 01.08.2010 | spec/support/files/post_picture.jpg |
16
16
  And I go to wordpress "home" page
17
17
  Then I should see "hey ho"
18
18
  And I should see "this is my first post"
@@ -22,6 +22,7 @@ end
22
22
  When /^make following post:$/ do |table|
23
23
  table.hashes.each do |hash|
24
24
  hash['creation_date'] = Date.parse(hash.delete('creation_date')) if hash['creation_date']
25
+ hash.merge!({:images => [{:file_path => File.expand_path(hash.delete('image'))}]}) if hash['image']
25
26
  post = Wordpress::Post.new(hash)
26
27
  @blog.publish(post)
27
28
  end
data/lib/blog.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'xmlrpc/client'
2
2
  require 'params_check'
3
- require 'base64'
4
3
  require 'mimemagic'
5
4
  require 'nokogiri'
6
5
 
@@ -34,24 +33,13 @@ module Wordpress
34
33
  end #recent_posts
35
34
 
36
35
  def publish(post)
37
- doc = Nokogiri::HTML::DocumentFragment.parse(post.content)
38
- post.images.each do |image|
39
- image_file = File.open(image[:file_path], "rb")
40
- file_name = File.basename(image_file.path)
41
-
42
- uploaded_image = upload_file(File.open(image[:file_path], "rb"))
43
-
44
- doc.xpath("img[contains(@src, '#{file_name}')]").each do |img|
45
- img['src'] = uploaded_image[:url]
46
- end
47
- end
48
- post.content = doc.to_html
49
-
36
+ process_post_images(post)
50
37
  post.id = blog_api_call("metaWeblog.newPost", post.to_struct, true).to_i
51
38
  post.published = true
52
39
  end #publish
53
40
 
54
41
  def update_post(post)
42
+ process_post_images(post)
55
43
  return api_call("metaWeblog.editPost", post.id, @user, @password, post.to_struct, post.published)
56
44
  end #update_post
57
45
 
@@ -59,13 +47,32 @@ module Wordpress
59
47
  struct = {
60
48
  :name => File.basename(file.path),
61
49
  :type => MimeMagic.by_magic(file).type,
62
- :bits => Base64.encode64(file.read),
50
+ :bits => XMLRPC::Base64.new(File.open(file.path, "r").read),
63
51
  :overwrite => true
64
52
  }
65
53
  return blog_api_call("wp.uploadFile", struct)
66
54
  end
67
55
 
68
56
  private
57
+ def process_post_images(post)
58
+ doc = Nokogiri::HTML::DocumentFragment.parse(post.content)
59
+ post.images.each do |image|
60
+
61
+ raise ArgumentError, "Image not found (path: #{image[:file_path]})" unless File.exist?(image[:file_path])
62
+
63
+ image_file = File.open(image[:file_path], "rb")
64
+ file_name = File.basename(image_file.path)
65
+
66
+ uploaded_image = upload_file(File.open(image[:file_path], "rb"))
67
+ raise "Image upload failed" if uploaded_image.nil?
68
+
69
+ doc.xpath("img[contains(@src, '#{file_name}')]").each do |img|
70
+ img['src'] = uploaded_image['url']
71
+ end
72
+ end
73
+ post.content = doc.to_html
74
+ end #process_post_images
75
+
69
76
  def api_call(method_name, *args)
70
77
  begin
71
78
  return @client.call(method_name, *args)
data/lib/post.rb CHANGED
@@ -19,6 +19,7 @@ module Wordpress
19
19
  )
20
20
 
21
21
  def initialize(attributes = {})
22
+ self.images = []
22
23
  attributes.each do |attribute, value|
23
24
  accessor_name = "#{attribute}="
24
25
  send(accessor_name, value) if respond_to?(accessor_name)
data/spec/blog_spec.rb CHANGED
@@ -58,11 +58,7 @@ describe Wordpress::Blog do
58
58
 
59
59
  describe "publish" do
60
60
  it "should make appropriate call to xmlrpc api" do
61
- images = [
62
- {
63
- :file_path => File.expand_path("./spec/support/files/post_picture.jpg")
64
- }
65
- ]
61
+ images = [{:file_path => File.expand_path("./spec/support/files/post_picture.jpg")}]
66
62
  post = Wordpress::Post.new(
67
63
  :title => "Hey ho",
68
64
  :content => "Content <img src=\"http://otherhost/post_picture.jpg\">",
@@ -76,26 +72,27 @@ describe Wordpress::Blog do
76
72
  :description=>"Content <img src=\"http://localhost/post_picture.jpg\">",
77
73
  :mt_excerpt=>"Excerpt"
78
74
  }
79
- @client_mock.should_receive(:call).with(
80
- "metaWeblog.newPost",
81
- 0, "admin", "wordpress-xmlrpc",
82
- required_post_struct, true).and_return("123")
83
75
 
84
76
  @client_mock.should_receive(:call).with(
85
77
  "wp.uploadFile",
86
78
  0, "admin", "wordpress-xmlrpc",
87
79
  {
80
+ :name => "post_picture.jpg",
88
81
  :type => "image/jpeg",
89
82
  :bits => "encoded file content",
90
- :overwrite => true,
91
- :name => "post_picture.jpg"
83
+ :overwrite => true
92
84
  }).and_return({
93
- :file => "post_picture.jpg",
94
- :url => "http://localhost/post_picture.jpg",
95
- :type => "image/jpeg"
85
+ 'file' => "post_picture.jpg",
86
+ 'url' => "http://localhost/post_picture.jpg",
87
+ 'type' => "image/jpeg"
96
88
  })
97
89
 
98
- Base64.should_receive(:encode64).and_return("encoded file content")
90
+ @client_mock.should_receive(:call).with(
91
+ "metaWeblog.newPost",
92
+ 0, "admin", "wordpress-xmlrpc",
93
+ required_post_struct, true).and_return("123")
94
+
95
+ XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
99
96
 
100
97
  @blog.publish(post).should be_true
101
98
  post.id.should == 123
@@ -133,8 +130,32 @@ describe Wordpress::Blog do
133
130
 
134
131
  describe "update_post" do
135
132
  it "should submit post update" do
136
- post = Wordpress::Post.new(:id => 54, :title => "Updated post", :published => true)
137
- @client_mock.should_receive(:call).with("metaWeblog.editPost", 54, "admin", "wordpress-xmlrpc", post.to_struct, true).and_return(true)
133
+ images = [{:file_path => File.expand_path("./spec/support/files/post_picture.jpg")}]
134
+ post = Wordpress::Post.new(:id => 54, :title => "Updated post", :content => "Content <img src=\"http://otherhost/post_picture.jpg\">", :published => true, :images => images)
135
+
136
+ required_post_struct = {
137
+ :title=>"Updated post",
138
+ :description=>"Content <img src=\"http://localhost/post_picture.jpg\">",
139
+ :postid => 54
140
+ }
141
+ @client_mock.should_receive(:call).with("metaWeblog.editPost",
142
+ 54, "admin", "wordpress-xmlrpc",
143
+ required_post_struct, true).and_return(true)
144
+
145
+ @client_mock.should_receive(:call).with("wp.uploadFile",
146
+ 0, "admin", "wordpress-xmlrpc",
147
+ {
148
+ :name => "post_picture.jpg",
149
+ :type => "image/jpeg",
150
+ :bits => "encoded file content",
151
+ :overwrite => true
152
+ }).and_return({
153
+ 'file' => "post_picture.jpg",
154
+ 'url' => "http://localhost/post_picture.jpg",
155
+ 'type' => "image/jpeg"
156
+ })
157
+ XMLRPC::Base64.should_receive(:new).and_return("encoded file content")
158
+
138
159
  @blog.update_post(post).should be_true
139
160
  end
140
161
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{wordpress-xmlrpc}
8
- s.version = "0.0.4"
8
+ s.version = "0.0.5"
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"]
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: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alexander Naumenko