Class: Quickpress::Wordpress
- Inherits:
- 
      Object
      
        - Object
- Quickpress::Wordpress
 
- Defined in:
- lib/quickpress/wordpress.rb
Overview
Represents an instance of a Wordpress connection. Handles direct calls to the Wordpress API.
Constant Summary collapse
- VERY_LARGE_NUMBER =
          Yes it is 
- 2**31 - 1 
Instance Attribute Summary collapse
- 
  
    
      #categories  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    All categories on blog. 
- 
  
    
      #options  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Blog’s options in a Hash. 
- 
  
    
      #tagline  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Blog subtitle. 
- 
  
    
      #title  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Blog title. 
- 
  
    
      #url  ⇒ Object 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    Blog address. 
Instance Method Summary collapse
- 
  
    
      #delete_page(id)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Deletes page with numerical ‘id`. 
- 
  
    
      #delete_post(id)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Deletes post with numerical ‘id`. 
- 
  
    
      #edit_post(options)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Edits post/page on the Wordpress site with ‘options`. 
- 
  
    
      #get_all_media  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns all media items on the blog. 
- 
  
    
      #get_category_status  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns categories and how many posts they have. 
- 
  
    
      #get_comment_status  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns comment counts according to their status. 
- #get_media(id) ⇒ Object
- 
  
    
      #get_options  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Retrieves as much metadata about the blog as it can. 
- 
  
    
      #get_page(id)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns page with numerical ‘id`. 
- 
  
    
      #get_pages(ammount = 0)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns ‘ammount` pages. 
- 
  
    
      #get_post(id)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns post with numerical ‘id`. 
- 
  
    
      #get_posts(ammount = 0)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns ‘ammount` posts. 
- 
  
    
      #get_users  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Returns all users currently registered on the blog. 
- 
  
    
      #initialize(url, user, pass)  ⇒ Wordpress 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Creates a new connection to ‘url` with `user`/`pass`. 
- 
  
    
      #new_media(filename)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Uploads ‘filename` to Wordpress, returning it’s ID, URL and unique filename inside Wordpress. 
- 
  
    
      #new_post(options)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sends a post/page to the Wordpress site with ‘options`. 
- 
  
    
      #set_options(new_options)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Sets the blog’s options according to ‘new_options` hash. 
Constructor Details
#initialize(url, user, pass) ⇒ Wordpress
Creates a new connection to ‘url` with `user`/`pass`.
| 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # File 'lib/quickpress/wordpress.rb', line 23 def initialize(url, user, pass) # Sanitizing url: # # If provided with something like "mysite.com/blog" # * host will be "mysite.com" # * path will be "/blog/xmlrpc.php" host = url path = "/xmlrpc.php" paths = url.split '/' if paths.size > 1 host = paths[0] path = '/' + paths[1..-1].join('/') + "/xmlrpc.php" end @client = Rubypress::Client.new(:host => host, :path => path, :username => user, :password => pass) # Actually connecting, takes a while = @client.getOptions(:options => ["blog_title", "blog_tagline", "blog_url"]) @title = ["blog_title"]["value"] @tagline = ["blog_tagline"]["value"] @url = ["blog_url"]["value"] @categories = [] terms = @client.getTerms(:taxonomy => "category") terms.each do |term| @categories << term["name"] end end | 
Instance Attribute Details
#categories ⇒ Object (readonly)
All categories on blog
| 14 15 16 | # File 'lib/quickpress/wordpress.rb', line 14 def categories @categories end | 
#options ⇒ Object (readonly)
Blog’s options in a Hash. Need to call ‘get_options` first.
| 17 18 19 | # File 'lib/quickpress/wordpress.rb', line 17 def @options end | 
#tagline ⇒ Object (readonly)
Blog subtitle.
| 12 13 14 | # File 'lib/quickpress/wordpress.rb', line 12 def tagline @tagline end | 
#title ⇒ Object (readonly)
Blog title.
| 11 12 13 | # File 'lib/quickpress/wordpress.rb', line 11 def title @title end | 
#url ⇒ Object (readonly)
Blog address
| 13 14 15 | # File 'lib/quickpress/wordpress.rb', line 13 def url @url end | 
Instance Method Details
#delete_page(id) ⇒ Object
Deletes page with numerical ‘id`.
| 146 147 148 149 150 151 | # File 'lib/quickpress/wordpress.rb', line 146 def delete_page id @client.deletePost(:post_id => id, :filter => { :post_type => 'page' }) end | 
#delete_post(id) ⇒ Object
Deletes post with numerical ‘id`.
| 141 142 143 | # File 'lib/quickpress/wordpress.rb', line 141 def delete_post id @client.delnetePost(:post_id => id) end | 
#edit_post(options) ⇒ Object
Edits post/page on the Wordpress site with ‘options`.
Format is the same as Wordpress#new_post. Check it out.
| 93 94 95 96 97 98 99 100 | # File 'lib/quickpress/wordpress.rb', line 93 def edit_post @client.editPost() info = @client.getPost(:post_id => [:post_id], :fields => [:link]) info["link"] end | 
#get_all_media ⇒ Object
Returns all media items on the blog
| 256 257 258 259 260 261 262 263 264 | # File 'lib/quickpress/wordpress.rb', line 256 def get_all_media lib = @client.getMediaLibrary return [] if lib.empty? # Getting only the fields we're interested on lib.map do |m| [m["attachment_id"], m["title"], m["link"]] end end | 
#get_category_status ⇒ Object
Returns categories and how many posts they have. It’s an Array of two elements:
- 
Category name 
- 
Post count 
| 225 226 227 228 229 | # File 'lib/quickpress/wordpress.rb', line 225 def get_category_status status = @client.getTerms(:taxonomy => 'category') status.map { |s| [s["name"], s["count"]] } # all we need end | 
#get_comment_status ⇒ Object
Returns comment counts according to their status. It’s an Array of two elements:
- 
Wordpress’ internal status name 
- 
Comment counts on that status 
| 213 214 215 216 217 | # File 'lib/quickpress/wordpress.rb', line 213 def get_comment_status status = @client.getCommentCount status.to_a end | 
#get_media(id) ⇒ Object
| 266 267 268 | # File 'lib/quickpress/wordpress.rb', line 266 def get_media id @client.getMediaItem(:attachment_id => id) end | 
#get_options ⇒ Object
Retrieves as much metadata about the blog as it can.
Returns an array of 3-element arrays:
- 
Wordpress’ internal option name. You must use it to set options. See ‘set_options`. 
- 
Human-readable description of the option. 
- 
Current value. 
The values are detailed here: codex.wordpress.org/Option_Reference
| 165 166 167 168 169 | # File 'lib/quickpress/wordpress.rb', line 165 def = @client.getOptions .map { |o| [o[0], o[1]["desc"], o[1]["value"]] } end | 
#get_page(id) ⇒ Object
Returns page with numerical ‘id`. It’s a Hash with attributes/values.
| 121 122 123 124 125 126 | # File 'lib/quickpress/wordpress.rb', line 121 def get_page id @client.getPost(:post_id => id, :filter => { :post_type => 'page' }) end | 
#get_pages(ammount = 0) ⇒ Object
Returns ‘ammount` pages. If `ammount` is zero, will return all posts. FIXME when getting by `ammount` it is ordered by the opposite
| 131 132 133 134 135 136 137 138 | # File 'lib/quickpress/wordpress.rb', line 131 def get_pages(ammount=0) ammount = VERY_LARGE_NUMBER if ammount.zero? @client.getPosts(:filter => { :number => ammount, :post_type => 'page' }) end | 
#get_post(id) ⇒ Object
Returns post with numerical ‘id`. It’s a Hash with attributes/values.
| 105 106 107 | # File 'lib/quickpress/wordpress.rb', line 105 def get_post id @client.getPost(:post_id => id) end | 
#get_posts(ammount = 0) ⇒ Object
Returns ‘ammount` posts. If `ammount` is zero, will return all posts. FIXME when getting by `ammount` it is ordered by the opposite
| 112 113 114 115 116 | # File 'lib/quickpress/wordpress.rb', line 112 def get_posts(ammount=0) ammount = VERY_LARGE_NUMBER if ammount.zero? @client.getPosts(:filter => { :number => ammount }) end | 
#get_users ⇒ Object
Returns all users currently registered on the blog.
It’s an Array of two-element Arrays:
- 
Wordpress’ internal info name 
- 
It’s value 
| 195 196 197 198 199 200 201 202 203 204 205 | # File 'lib/quickpress/wordpress.rb', line 195 def get_users users = @client.getUsers # Replacing XML-RPC's ugly DateTime class # with Ruby's Time users.each do |u| u["registered"] = u["registered"].to_time end users.map { |u| u.to_a } end | 
#new_media(filename) ⇒ Object
Uploads ‘filename` to Wordpress, returning it’s ID, URL and unique filename inside Wordpress.
| 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | # File 'lib/quickpress/wordpress.rb', line 234 def new_media filename content = XMLRPC::Base64.new(File.read(filename)) if content.encoded.empty? fail "File '#{filename}' is empty" end mime = MimeMagic.by_path filename if mime.nil? fail "Unknown MIME type for '#{filename}'" end file = @client.uploadFile(:data => { :name => File.basename(filename), :bits => content, :type => mime.type }) return file['id'], file['url'], file['file'] end | 
#new_post(options) ⇒ Object
Sends a post/page to the Wordpress site with ‘options`.
‘options` is a Hash with the following fields:
- 
:post_date => Ruby Time Object (or ‘[]` for Time.now) 
- 
:post_title => String 
- 
:post_content => String 
- 
:post_status => ‘publish’/‘draft’/‘private’ 
- 
:post_type => ‘post’(default) / ‘page’ 
To Wordpress, Posts and Pages are the same thing. The only thing that makes them different is the option ‘:post_type`.
| 76 77 78 79 80 81 82 83 84 85 86 | # File 'lib/quickpress/wordpress.rb', line 76 def new_post # Sending post id = @client.newPost(:content => ) # Getting link for it info = @client.getPost(:post_id => id, :fields => [:link]) link = info["link"] return id, link end | 
#set_options(new_options) ⇒ Object
Sets the blog’s options according to ‘new_options` hash. It points to an array with two elements:
- 
Wordpress’ internal option name. See ‘get_options`. 
- 
It’s new value. See link on ‘get_options` for possible values. 
Returns the new options, the same way as ‘get_options`.
| 182 183 184 185 186 187 | # File 'lib/quickpress/wordpress.rb', line 182 def = @client.setOptions .map { |o| [o[0], o[1]["desc"], o[1]["value"]] } end |