ct_wordpress-client 0.2.8 → 0.2.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.
- checksums.yaml +15 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +24 -0
- data/.travis.yml +8 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +80 -0
- data/Rakefile +5 -0
- data/lib/faraday_middleware/gzip.rb +22 -0
- data/lib/wordpress-client.rb +43 -0
- data/lib/wordpress/api.rb +62 -0
- data/lib/wordpress/api/comments.rb +48 -0
- data/lib/wordpress/api/follow.rb +20 -0
- data/lib/wordpress/api/freshly_pressed.rb +10 -0
- data/lib/wordpress/api/me.rb +18 -0
- data/lib/wordpress/api/media.rb +15 -0
- data/lib/wordpress/api/notifications.rb +25 -0
- data/lib/wordpress/api/oauth.rb +22 -0
- data/lib/wordpress/api/posts.rb +79 -0
- data/lib/wordpress/api/sites.rb +12 -0
- data/lib/wordpress/api/taxonomy.rb +45 -0
- data/lib/wordpress/api/tests.rb +25 -0
- data/lib/wordpress/base.rb +51 -0
- data/lib/wordpress/client.rb +68 -0
- data/lib/wordpress/configuration.rb +6 -0
- data/lib/wordpress/errors.rb +25 -0
- data/lib/wordpress/object/array.rb +30 -0
- data/lib/wordpress/object/base.rb +94 -0
- data/lib/wordpress/object/comment.rb +11 -0
- data/lib/wordpress/object/comments.rb +8 -0
- data/lib/wordpress/object/media.rb +7 -0
- data/lib/wordpress/object/meta_object.rb +65 -0
- data/lib/wordpress/object/oauth.rb +7 -0
- data/lib/wordpress/object/post.rb +10 -0
- data/lib/wordpress/object/posts.rb +8 -0
- data/lib/wordpress/object/site.rb +8 -0
- data/lib/wordpress/object/test.rb +7 -0
- data/lib/wordpress/object/user.rb +8 -0
- data/lib/wordpress/ostruct.rb +64 -0
- data/lib/wordpress/request.rb +29 -0
- data/lib/wordpress/version.rb +14 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/wordpress-client_spec.rb +25 -0
- data/spec/wordpress/api_spec.rb +90 -0
- data/spec/wordpress/base_spec.rb +63 -0
- data/spec/wordpress/client_spec.rb +91 -0
- data/spec/wordpress/object/base_spec.rb +56 -0
- data/spec/wordpress/object/meta_object_spec.rb +20 -0
- data/spec/wordpress/ostruct_spec.rb +58 -0
- data/spec/wordpress/request_spec.rb +15 -0
- data/wordpress-client.gemspec +26 -0
- metadata +158 -90
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MTliZDY3OWVjNmJhMTQzOWZmYzA2MGM2ZTFjNWViZTc5YTM1MDcxOA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZjYyZWEzMmI4YjNhMDBlY2U1NTdkMjM3ZGJhMGQzOTk1YmE1YzAzZg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZTBhNDk4MzRjOWFkM2NiNDI0OTM4ZWRmZGM2ZmFmYjQwMDIyNjU2OTA1NmQ2
|
10
|
+
MmZkOGE1YTA5YmUzZDJkMGY3ODg0ODgzNThlM2UyZmU0NWE3NWU5OTNlZWVh
|
11
|
+
OTJjNWY2NWZhM2Q4OGYzMGFjNDdkMjlmOTlmMGI1MDk1NWI1Zjg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZDRhM2VjY2JmZDczMDVlZTM4MjNhYWNhMzFhNjIzNjIxODA5ZmUzNmYzMTA1
|
14
|
+
M2Y3OTZmZTI2ZWNjYmFhYTRmMDFlYTQ3ODE4MmFhYmEwNDE4OTYxYTE1NGQ2
|
15
|
+
ZGFiYWExOWY0YjNkNDAwN2UwNGUwMjMyN2QxYjBhZDNhNjA5MTU=
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Contributor Policy
|
2
|
+
=================
|
3
|
+
|
4
|
+
Commit bit. If you have a commit accepted into the project then you get full git access to the repo. If I don't give you this in a timely manner just send me a message.
|
5
|
+
|
6
|
+
Testing
|
7
|
+
======
|
8
|
+
|
9
|
+
Please don't commit code without tests. You can bootstrap the development environment by running `bundle install`. After that, running `rake` should just work. If it doesn't then file a bug.
|
10
|
+
|
11
|
+
Versioning
|
12
|
+
=========
|
13
|
+
|
14
|
+
Don't bump the version in any changes you make or pull in to the project. I'll maintain rights to push the gem to rubygems.org and make releases when appropriate.
|
15
|
+
|
16
|
+
And please keep the README up to date. Thank you!
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 dtaniwaki
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# wordpress-client
|
2
|
+
|
3
|
+
[](https://rubygems.org/gems/wordpress-client) [](https://travis-ci.org/dtaniwaki/wordpress-client) [](https://coveralls.io/r/dtaniwaki/wordpress-client)
|
4
|
+
|
5
|
+
wordpress-client is a [Wordpress Rest API Wrapper](http://developer.wordpress.com/docs/api/).
|
6
|
+
|
7
|
+
## Requirements
|
8
|
+
|
9
|
+
I test with ruby 1.9.3 and 2.1.0. Other versions/VMs are untested but might work fine.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
To your system
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem install wordpress-client
|
17
|
+
```
|
18
|
+
|
19
|
+
Or add wordpress-client to your `Gemfile` and `bundle install`:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
gem 'wordpress-client'
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
Create new client
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
require 'wordpress-client'
|
31
|
+
|
32
|
+
# Shared client
|
33
|
+
client = Wordpress.client
|
34
|
+
|
35
|
+
# New client
|
36
|
+
client = Wordpress::Client.new
|
37
|
+
```
|
38
|
+
|
39
|
+
Call API without access token
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
# Get posts of a specific domain without access token
|
43
|
+
posts = client.get_posts('wordpress-site-domain')
|
44
|
+
posts.each do |post|
|
45
|
+
# Do something
|
46
|
+
end
|
47
|
+
|
48
|
+
# Get all the posts of a specific domain without access token
|
49
|
+
page = 1
|
50
|
+
loop do
|
51
|
+
posts = client.get_posts('wordpress-site-domain', :page => page)
|
52
|
+
posts.each do |post|
|
53
|
+
# Do something
|
54
|
+
end
|
55
|
+
break if posts.size == 0
|
56
|
+
page += 1
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
60
|
+
Call API with access token
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
# Get user by access token
|
64
|
+
client.access_token = 'YOUR_ACCESS_TOKEN' # if you have any
|
65
|
+
user = client.me
|
66
|
+
site = user.site
|
67
|
+
posts = site.posts
|
68
|
+
```
|
69
|
+
|
70
|
+
## TODO
|
71
|
+
- Support create/update/delete from Wordpress::Object
|
72
|
+
- Add oauth method
|
73
|
+
|
74
|
+
## Contributing
|
75
|
+
|
76
|
+
See the [contributing guide](https://github.com/dtaniwaki/wordpress-client/blob/master/CONTRIBUTING.md).
|
77
|
+
|
78
|
+
## Copyright
|
79
|
+
|
80
|
+
Copyright (c) 2013-2013 Daisuke Taniwaki. See [LICENSE](https://github.com/dtaniwaki/wordpress-client/blob/master/LICENSE) for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'zlib'
|
3
|
+
|
4
|
+
module FaradayMiddleware
|
5
|
+
class Gzip < Faraday::Response::Middleware
|
6
|
+
|
7
|
+
def on_complete(env)
|
8
|
+
encoding = env[:response_headers]['content-encoding'].to_s.downcase
|
9
|
+
case encoding
|
10
|
+
when 'gzip'
|
11
|
+
env[:body] = Zlib::GzipReader.new(StringIO.new(env[:body]), :encoding => 'ASCII-8BIT').read
|
12
|
+
env[:response_headers].delete('content-encoding')
|
13
|
+
when 'deflate'
|
14
|
+
env[:body] = Zlib::Inflate.inflate(env[:body])
|
15
|
+
env[:response_headers].delete('content-encoding')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Faraday::Response.register_middleware :gzip => FaradayMiddleware::Gzip
|
@@ -0,0 +1,43 @@
|
|
1
|
+
unless Kernel.respond_to?(:require_relative)
|
2
|
+
module Kernel
|
3
|
+
def require_relative(relative_path)
|
4
|
+
desired_path = File.expand_path('../' + relative_path.to_str, caller[0])
|
5
|
+
shortest = desired_path
|
6
|
+
$:.each do |path|
|
7
|
+
path += '/'
|
8
|
+
if desired_path.index(path) == 0
|
9
|
+
candidate = desired_path.sub(path, '')
|
10
|
+
shortest = candidate if candidate.size < shortest.size
|
11
|
+
end
|
12
|
+
end
|
13
|
+
require shortest
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'logger'
|
19
|
+
require 'wordpress/version'
|
20
|
+
require 'wordpress/client'
|
21
|
+
|
22
|
+
module Wordpress
|
23
|
+
class << self
|
24
|
+
attr_writer :logger
|
25
|
+
|
26
|
+
def client
|
27
|
+
@client ||= Wordpress::Client.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def logger
|
31
|
+
@logger ||= Logger.new(STDOUT)
|
32
|
+
end
|
33
|
+
|
34
|
+
def configure(&block)
|
35
|
+
block.call(configuration)
|
36
|
+
configuration
|
37
|
+
end
|
38
|
+
|
39
|
+
def configuration
|
40
|
+
@configuration ||= Configuration.new
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'wordpress/errors'
|
2
|
+
require 'wordpress/request'
|
3
|
+
Dir.glob(File.expand_path('../api/*.rb', __FILE__)) do |path|
|
4
|
+
require path
|
5
|
+
end
|
6
|
+
|
7
|
+
module Wordpress
|
8
|
+
module API
|
9
|
+
def self.included(base)
|
10
|
+
base.send(:include, InstanceMethods)
|
11
|
+
base.extend(ClassMethods)
|
12
|
+
base.class_eval do
|
13
|
+
include Posts
|
14
|
+
include Comments
|
15
|
+
include Sites
|
16
|
+
include Me
|
17
|
+
include Tests
|
18
|
+
include Follow
|
19
|
+
include Taxonomy
|
20
|
+
include Notifications
|
21
|
+
include FreshlyPressed
|
22
|
+
include Oauth
|
23
|
+
include Media
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module ClassMethods
|
28
|
+
end
|
29
|
+
|
30
|
+
module InstanceMethods
|
31
|
+
def exec_api(request, &response)
|
32
|
+
json = call(request, :bearer_token_request => true)
|
33
|
+
|
34
|
+
if !json['error'].nil?
|
35
|
+
raise Wordpress::ResponseError, json
|
36
|
+
end
|
37
|
+
|
38
|
+
if response.nil?
|
39
|
+
Wordpress::OpenStruct.new(json)
|
40
|
+
else
|
41
|
+
instance_exec(json, &response)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def validate_keys!(params, valid_keys)
|
48
|
+
params.keys.each do |key|
|
49
|
+
raise Wordpress::ArgumentError, "#{key} is not valid for this method." unless valid_keys.include?(key)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def default_keys
|
54
|
+
[:http_envelope, :pretty, :meta, :callback].freeze
|
55
|
+
end
|
56
|
+
|
57
|
+
def search_keys
|
58
|
+
[:number, :offset, :page, :order, :order_by, :after, :before].freeze
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require "wordpress/object/comments"
|
2
|
+
require "wordpress/object/comment"
|
3
|
+
|
4
|
+
module Wordpress::API
|
5
|
+
module Comments
|
6
|
+
def get_comments(site, params = {})
|
7
|
+
validate_keys! params, [:context, :type, :status] + default_keys + search_keys
|
8
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/sites/#{site}/comments", params)) do |json|
|
9
|
+
Wordpress::Object::Comments.new(self, json)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_post_comments(site, post_id, params = {})
|
14
|
+
validate_keys! params, [:context] + default_keys
|
15
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/sites/#{site}/posts/#{post_id}/replies", params)) do |json|
|
16
|
+
Wordpress::Object::Comments.new(self, json)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_comment(site, comment_id, params = {})
|
21
|
+
validate_keys! params, [:context] + default_keys
|
22
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/sites/#{site}/comments/#{comment_id}", params)) do |json|
|
23
|
+
Wordpress::Object::Comment.new(self, json)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def update_comment(site, comment_id, data, params = {})
|
28
|
+
validate_keys! params, [:context] + default_keys
|
29
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/sites/#{site}/comments/#{comment_id}", params, data)) do |json|
|
30
|
+
Wordpress::Object::Comment.new(self, json)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def create_comment(site, post_id, data, params = {})
|
35
|
+
validate_keys! params, [:context] + default_keys
|
36
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/sites/#{site}/posts/#{post_id}/replies/new", params, data)) do |json|
|
37
|
+
Wordpress::Object::Comment.new(self, json)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def delete_comment(site, comment_id, data, params = {})
|
42
|
+
validate_keys! params, [:context] + default_keys
|
43
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/sites/#{site}/comments/#{comment_id}/delete", params, data)) do |json|
|
44
|
+
Wordpress::Object::Comment.new(self, json)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "wordpress/ostruct"
|
2
|
+
|
3
|
+
module Wordpress::API
|
4
|
+
module Follow
|
5
|
+
def create_follow(site, data, params = {})
|
6
|
+
validate_keys! params, [:context] + default_keys
|
7
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/sites/#{site}/follows/new", params, data))
|
8
|
+
end
|
9
|
+
|
10
|
+
def delete_follow(site, data, params = {})
|
11
|
+
validate_keys! params, [:context] + default_keys
|
12
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/sites/#{site}/follows/mine/delete", params, data))
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_follow(site, params = {})
|
16
|
+
validate_keys! params, [:context] + default_keys
|
17
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/sites/#{site}/follows/mine", params))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require "wordpress/ostruct"
|
2
|
+
|
3
|
+
module Wordpress::API
|
4
|
+
module FreshlyPressed
|
5
|
+
def freshly_pressed(params = {})
|
6
|
+
validate_keys! params, [:number, :after, :before, :content_width, :thumb_width, :thumb_height] + default_keys
|
7
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/freshly-pressed", params))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "wordpress/ostruct"
|
2
|
+
require "wordpress/object/user"
|
3
|
+
|
4
|
+
module Wordpress::API
|
5
|
+
module Me
|
6
|
+
def me(params = {})
|
7
|
+
validate_keys! params, default_keys
|
8
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/me", params)) do |json|
|
9
|
+
Wordpress::Object::User.new(self, json)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_my_likes(params = {})
|
14
|
+
validate_keys! params, default_keys
|
15
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/me/likes", params))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "wordpress/ostruct"
|
2
|
+
require "wordpress/object/media"
|
3
|
+
module Wordpress::API
|
4
|
+
module Media
|
5
|
+
|
6
|
+
def add_media(site, params = {})
|
7
|
+
validate_keys! params, [:context, :media, :media_urls,:attrs] + default_keys
|
8
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/sites/#{site}/media/new",nil, params)) do |json|
|
9
|
+
Wordpress::Object::Media.new( self, json )
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "wordpress/ostruct"
|
2
|
+
|
3
|
+
module Wordpress::API
|
4
|
+
module Notifications
|
5
|
+
def get_notifications(params = {})
|
6
|
+
validate_keys! params, [:ids, :fields, :type, :unread, :read, :number, :since, :before, :num_note_items, :trap] + default_keys
|
7
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/notifications", params))
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_notification(note_id, params = {})
|
11
|
+
validate_keys! params, [:context, :fields, :num_note_items] + default_keys
|
12
|
+
exec_api(Wordpress::Request.new(:get, "/rest/v1.1/notifications/#{note_id}", params))
|
13
|
+
end
|
14
|
+
|
15
|
+
def see_notifications(data, params = {})
|
16
|
+
validate_keys! params, [:context] + default_keys
|
17
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/notifications/seen", params, data))
|
18
|
+
end
|
19
|
+
|
20
|
+
def read_notifications(data, params = {})
|
21
|
+
validate_keys! params, [:context] + default_keys
|
22
|
+
exec_api(Wordpress::Request.new(:post, "/rest/v1.1/notifications/read", params, data))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|