wordpress-xmlrpc 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ gem "mysql", "2.8.1"
4
4
  gem "rspec", "1.3.0"
5
5
  gem "cucumber", "0.8.3"
6
6
  gem "capybara", "0.3.9"
7
- gem "selenium-webdriver", "0.0.27"
8
7
  gem "jeweler", "1.4.0"
9
8
  gem "log4r", "1.1.8"
9
+ gem "mimemagic", "0.1.5"
10
+ gem "nokogiri", "1.4.3.1"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -6,12 +6,13 @@ Feature: Publish post
6
6
  Given I have a blog control
7
7
  And all posts and comments cleaned out
8
8
 
9
+ @wip
9
10
  Scenario: Load wordpress home page
10
11
  When I go to wordpress "home" page
11
12
  Then I should see "wordpress"
12
13
  When make following post:
13
- | title | content | publish_date |
14
- | hey ho | this is my first post | 01.08.2010 |
14
+ | title | content | creation_date |
15
+ | hey ho | this is my first post | 01.08.2010 |
15
16
  And I go to wordpress "home" page
16
17
  Then I should see "hey ho"
17
18
  And I should see "this is my first post"
@@ -16,12 +16,12 @@ Then /^I should see "([^\"]*)"$/ do |expected_content|
16
16
  end
17
17
 
18
18
  Given /^I have a blog control$/ do
19
- @blog = Wordpress::Blog.new(:host => "http://localhost", :user => "admin", :password => "wordpress-xmlrpc")
19
+ @blog = Wordpress::Blog.new(:blog_uri => "http://localhost", :user => "admin", :password => "wordpress-xmlrpc")
20
20
  end
21
21
 
22
22
  When /^make following post:$/ do |table|
23
23
  table.hashes.each do |hash|
24
- hash['publish_date'] = Date.parse(hash.delete('publish_date')) if hash['publish_date']
24
+ hash['creation_date'] = Date.parse(hash.delete('creation_date')) if hash['creation_date']
25
25
  post = Wordpress::Post.new(hash)
26
26
  @blog.publish(post)
27
27
  end
data/lib/blog.rb CHANGED
@@ -1,5 +1,8 @@
1
1
  require 'xmlrpc/client'
2
2
  require 'params_check'
3
+ require 'base64'
4
+ require 'mimemagic'
5
+ require 'nokogiri'
3
6
 
4
7
  module Wordpress
5
8
  class Blog
@@ -31,6 +34,19 @@ module Wordpress
31
34
  end #recent_posts
32
35
 
33
36
  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
+
34
50
  post.id = blog_api_call("metaWeblog.newPost", post.to_struct, true).to_i
35
51
  post.published = true
36
52
  end #publish
@@ -39,6 +55,16 @@ module Wordpress
39
55
  return api_call("metaWeblog.editPost", post.id, @user, @password, post.to_struct, post.published)
40
56
  end #update_post
41
57
 
58
+ def upload_file(file)
59
+ struct = {
60
+ :name => File.basename(file.path),
61
+ :type => MimeMagic.by_magic(file).type,
62
+ :bits => Base64.encode64(file.read),
63
+ :overwrite => true
64
+ }
65
+ return blog_api_call("wp.uploadFile", struct)
66
+ end
67
+
42
68
  private
43
69
  def api_call(method_name, *args)
44
70
  begin
data/lib/post.rb CHANGED
@@ -14,7 +14,8 @@ module Wordpress
14
14
  :content,
15
15
  :excerpt,
16
16
  :creation_date,
17
- :published
17
+ :published,
18
+ :images
18
19
  )
19
20
 
20
21
  def initialize(attributes = {})
data/spec/blog_spec.rb CHANGED
@@ -58,14 +58,44 @@ describe Wordpress::Blog do
58
58
 
59
59
  describe "publish" do
60
60
  it "should make appropriate call to xmlrpc api" do
61
-
61
+ images = [
62
+ {
63
+ :file_path => File.expand_path("./spec/support/files/post_picture.jpg")
64
+ }
65
+ ]
62
66
  post = Wordpress::Post.new(
63
67
  :title => "Hey ho",
64
- :content => "Content",
68
+ :content => "Content <img src=\"http://otherhost/post_picture.jpg\">",
65
69
  :excerpt => "Excerpt",
70
+ :images => images,
66
71
  :publish_date => Date.parse("01.08.2010"))
67
72
 
68
- @client_mock.should_receive(:call).with("metaWeblog.newPost", 0, "admin", "wordpress-xmlrpc", post.to_struct, true).and_return("123")
73
+
74
+ required_post_struct = {
75
+ :title=>"Hey ho",
76
+ :description=>"Content <img src=\"http://localhost/post_picture.jpg\">",
77
+ :mt_excerpt=>"Excerpt"
78
+ }
79
+ @client_mock.should_receive(:call).with(
80
+ "metaWeblog.newPost",
81
+ 0, "admin", "wordpress-xmlrpc",
82
+ required_post_struct, true).and_return("123")
83
+
84
+ @client_mock.should_receive(:call).with(
85
+ "wp.uploadFile",
86
+ 0, "admin", "wordpress-xmlrpc",
87
+ {
88
+ :type => "image/jpeg",
89
+ :bits => "encoded file content",
90
+ :overwrite => true,
91
+ :name => "post_picture.jpg"
92
+ }).and_return({
93
+ :file => "post_picture.jpg",
94
+ :url => "http://localhost/post_picture.jpg",
95
+ :type => "image/jpeg"
96
+ })
97
+
98
+ Base64.should_receive(:encode64).and_return("encoded file content")
69
99
 
70
100
  @blog.publish(post).should be_true
71
101
  post.id.should == 123
@@ -108,6 +138,7 @@ describe Wordpress::Blog do
108
138
  @blog.update_post(post).should be_true
109
139
  end
110
140
  end
141
+
111
142
  end
112
143
  end
113
144
 
Binary file
@@ -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.2"
8
+ s.version = "0.0.3"
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-09-15}
12
+ s.date = %q{2010-09-20}
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 = [
@@ -38,6 +38,7 @@ Gem::Specification.new do |s|
38
38
  "spec/post_spec.rb",
39
39
  "spec/spec.opts",
40
40
  "spec/spec_helper.rb",
41
+ "spec/support/files/post_picture.jpg",
41
42
  "wordpress-xmlrpc.gemspec"
42
43
  ]
43
44
  s.homepage = %q{http://github.com/alecnmk/wordpress-xmlrpc}
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: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
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-09-15 00:00:00 +03:00
18
+ date: 2010-09-20 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -81,6 +81,7 @@ files:
81
81
  - spec/post_spec.rb
82
82
  - spec/spec.opts
83
83
  - spec/spec_helper.rb
84
+ - spec/support/files/post_picture.jpg
84
85
  - wordpress-xmlrpc.gemspec
85
86
  has_rdoc: true
86
87
  homepage: http://github.com/alecnmk/wordpress-xmlrpc