wordpress-client 0.0.3
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/.gitignore +24 -0
- data/CONTRIBUTING +16 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +4 -0
- data/Rakefile +5 -0
- data/lib/wordpress-client.rb +18 -0
- data/lib/wordpress/api.rb +17 -0
- data/lib/wordpress/api/comments.rb +39 -0
- data/lib/wordpress/api/me.rb +19 -0
- data/lib/wordpress/api/posts.rb +69 -0
- data/lib/wordpress/api/sites.rb +14 -0
- data/lib/wordpress/api/tests.rb +19 -0
- data/lib/wordpress/api/utils.rb +37 -0
- data/lib/wordpress/array.rb +30 -0
- data/lib/wordpress/base.rb +28 -0
- data/lib/wordpress/client.rb +46 -0
- data/lib/wordpress/comment.rb +14 -0
- data/lib/wordpress/comment_array.rb +10 -0
- data/lib/wordpress/configuration.rb +5 -0
- data/lib/wordpress/errors.rb +4 -0
- data/lib/wordpress/like_array.rb +9 -0
- data/lib/wordpress/like_result.rb +9 -0
- data/lib/wordpress/object.rb +34 -0
- data/lib/wordpress/ostruct.rb +62 -0
- data/lib/wordpress/post.rb +12 -0
- data/lib/wordpress/post_array.rb +10 -0
- data/lib/wordpress/site.rb +9 -0
- data/lib/wordpress/test.rb +7 -0
- data/lib/wordpress/user.rb +9 -0
- data/lib/wordpress/version.rb +14 -0
- data/spec/spec_helper.rb +9 -0
- data/spec/wordpress-client_spec.rb +7 -0
- data/spec/wordpress/base_spec.rb +20 -0
- data/spec/wordpress/client_spec.rb +4 -0
- data/spec/wordpress/object_spec.rb +31 -0
- data/spec/wordpress/ostruct_spec.rb +32 -0
- data/wordpress-client.gemspec +25 -0
- metadata +171 -0
data/.gitignore
ADDED
data/CONTRIBUTING
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
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'wordpress/client'
|
3
|
+
|
4
|
+
module Wordpress
|
5
|
+
class << self
|
6
|
+
def client
|
7
|
+
@client ||= Wordpress::Client.new
|
8
|
+
end
|
9
|
+
|
10
|
+
def client?
|
11
|
+
!!@client
|
12
|
+
end
|
13
|
+
|
14
|
+
def logger
|
15
|
+
@logger ||= Logger.new(STDOUT)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'wordpress/api/me'
|
2
|
+
require 'wordpress/api/sites'
|
3
|
+
require 'wordpress/api/posts'
|
4
|
+
require 'wordpress/api/tests'
|
5
|
+
|
6
|
+
module Wordpress
|
7
|
+
module API
|
8
|
+
def self.included(base)
|
9
|
+
base.class_eval do
|
10
|
+
include Wordpress::API::Me
|
11
|
+
include Wordpress::API::Sites
|
12
|
+
include Wordpress::API::Posts
|
13
|
+
include Wordpress::API::Tests
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'wordpress/api/utils'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
module API
|
5
|
+
module Posts
|
6
|
+
include Wordpress::API::Utils
|
7
|
+
|
8
|
+
def get_comments(site, params = {})
|
9
|
+
validate_params! params, [:context, :type, :status], :type => :search
|
10
|
+
object_from_response Wordpress::CommentArray, "/sites/#{site}/comments", :get, :query => params
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_post_comments(site, post_id, params = {})
|
14
|
+
validate_params! params, [:context]
|
15
|
+
object_from_response Wordpress::CommentArray, "/sites/#{site}/posts/#{post_id}/replies", :get, :query => params
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_comment(site, comment_id, params = {})
|
19
|
+
validate_params! params, [:context]
|
20
|
+
object_from_response Wordpress::Comment, "/sites/#{site}/comments/#{comment_id}", :get, :query => params
|
21
|
+
end
|
22
|
+
|
23
|
+
def update_comment(site, comment_id, data, params = {})
|
24
|
+
validate_params! params, [:context]
|
25
|
+
object_from_response Wordpress::Comment, "/sites/#{site}/comments/#{comment_id}", :post, :request => data, :query => params
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_comment(site, post_id, data, params = {})
|
29
|
+
validate_params! params, [:context]
|
30
|
+
object_from_response Wordpress::Comment, "/sites/#{site}/posts/#{post_id}/replies/new", :post, :request => data, :query => params
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete_comment(site, comment_id, params = {})
|
34
|
+
validate_params! params, [:context]
|
35
|
+
object_from_response Wordpress::Comment, "/sites/#{site}/comments/#{comment_id}/delete", :post, :query => params
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'wordpress/api/utils'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
module API
|
5
|
+
module Me
|
6
|
+
include Wordpress::API::Utils
|
7
|
+
|
8
|
+
def me(params = {})
|
9
|
+
validate_params! params
|
10
|
+
object_from_response Wordpress::User, "/me", :get, :query => params
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_my_likes(params = {})
|
14
|
+
validate_params! params
|
15
|
+
object_from_response Wordpress::LikeArray, "/me/likes", :get, :query => params
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'wordpress/api/utils'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
module API
|
5
|
+
module Posts
|
6
|
+
include Wordpress::API::Utils
|
7
|
+
|
8
|
+
def get_posts(site, params = {})
|
9
|
+
validate_params! params, [:context, :tag, :category, :type, :status, :sticky, :author, :search, :meta_key, :meta_value], :type => :search
|
10
|
+
object_from_response Wordpress::PostArray, "/sites/#{site}/posts", :get, :query => params
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_post(site, post_id, params = {})
|
14
|
+
validate_params! params, [:context]
|
15
|
+
object_from_response Wordpress::Post, "/sites/#{site}/posts/#{post_id}", :get, :query => params
|
16
|
+
end
|
17
|
+
|
18
|
+
def update_post(site, post_id, data, params = {})
|
19
|
+
validate_params! params, [:context]
|
20
|
+
object_from_response Wordpress::Post, "/sites/#{site}/posts/#{post_id}", :post, :request => data, :query => params
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_post_by_slug(site, post_slug, params = {})
|
24
|
+
validate_params! params, [:context]
|
25
|
+
object_from_response Wordpress::Post, "/sites/#{site}/posts/slug:#{post_slug}", :get, :query => params
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_post(site, post_id, data, params = {})
|
29
|
+
validate_params! params, [:context]
|
30
|
+
object_from_response Wordpress::Post, "/sites/#{site}/posts/new", :post, :request => data, :query => params
|
31
|
+
end
|
32
|
+
|
33
|
+
def delete_post(site, post_id, params = {})
|
34
|
+
validate_params! params, [:context]
|
35
|
+
object_from_response Wordpress::Post, "/sites/#{site}/posts/#{post_id}/delete", :post, :query => params
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_likes(site, post_id, params = {})
|
39
|
+
validate_params! params
|
40
|
+
object_from_response Wordpress::LikeArray, "/sites/#{site}/posts/#{post_id}/likes", :get, :query => params
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_like(site, post_id, params = {})
|
44
|
+
validate_params! params
|
45
|
+
object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/likes/new", :post, :query => params
|
46
|
+
end
|
47
|
+
|
48
|
+
def delete_like(site, post_id, params = {})
|
49
|
+
validate_params! params
|
50
|
+
object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/likes/mine/delete", :post, :query => params
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_like_status(site, post_id, params = {})
|
54
|
+
validate_params! params
|
55
|
+
object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/likes/mine", :get, :query => params
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_reblog_status(site, post_id, params = {})
|
59
|
+
validate_params! params
|
60
|
+
object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/reblogs/mine", :get, :query => params
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_reblog(site, post_id, data, params = {})
|
64
|
+
validate_params! params
|
65
|
+
object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/reblogs/new", :post, :request => data, :query => params
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'wordpress/api/utils'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
module API
|
5
|
+
module Sites
|
6
|
+
include Wordpress::API::Utils
|
7
|
+
|
8
|
+
def get_site(site, params = {})
|
9
|
+
validate_params! params
|
10
|
+
object_from_response Wordpress::Site, "/sites/#{site}", :get, :query => params
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'wordpress/api/utils'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
module API
|
5
|
+
module Tests
|
6
|
+
include Wordpress::API::Utils
|
7
|
+
|
8
|
+
def get_test(id, options = {})
|
9
|
+
validate_options! options, [:id, :default_string, :default_int, :boolean_whitelist_defaults_to_false, :boolean_whitelist_defaults_to_true, :string_whitelist_defaults_to_foo, :url, :datetime], :type => :test
|
10
|
+
object_from_response Wordpress::Test, "/test/#{id}", :get, options
|
11
|
+
end
|
12
|
+
|
13
|
+
def post_test(id, options = {})
|
14
|
+
validate_options! options, [:id, :default_string, :default_int, :boolean_whitelist_defaults_to_false, :boolean_whitelist_defaults_to_true, :string_whitelist_defaults_to_foo, :url, :datetime], :type => :test
|
15
|
+
object_from_response Wordpress::Test, "/test/#{id}", :post, options
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'wordpress/errors'
|
3
|
+
require 'wordpress/ostruct'
|
4
|
+
require 'wordpress/user'
|
5
|
+
require 'wordpress/site'
|
6
|
+
require 'wordpress/post'
|
7
|
+
require 'wordpress/post_array'
|
8
|
+
require 'wordpress/like_array'
|
9
|
+
require 'wordpress/comment'
|
10
|
+
require 'wordpress/test'
|
11
|
+
|
12
|
+
module Wordpress
|
13
|
+
module API
|
14
|
+
module Utils
|
15
|
+
private
|
16
|
+
|
17
|
+
def object_from_response(klass, path, method, params = {})
|
18
|
+
res = request(method, "/rest/v1#{path}", params, :bearer_token_request => true)
|
19
|
+
if res
|
20
|
+
json = MultiJson.load(res)
|
21
|
+
if !json['error'].nil?
|
22
|
+
raise Wordpress::ResponseError, json['message']
|
23
|
+
end
|
24
|
+
klass.new(json)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate_params!(params, valid_keys = [], type = nil)
|
29
|
+
valid_keys += [:http_envelope, :pretty, :callback] if type != :test
|
30
|
+
valid_keys += [:number, :offset, :page, :order, :order_by, :after, :before] if type == :search
|
31
|
+
params.keys.each do |key|
|
32
|
+
raise RuntimeError, "#{key} is not valid for this method." unless valid_keys.include?(key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'wordpress/object'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
class Array < Wordpress::Object
|
5
|
+
def_delegators :@posts, :method_missing, :respond_to_missing?
|
6
|
+
class << self
|
7
|
+
def array_delegator(name)
|
8
|
+
class_eval <<-EOS
|
9
|
+
private
|
10
|
+
|
11
|
+
def array_delegator
|
12
|
+
#{name}
|
13
|
+
end
|
14
|
+
EOS
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def respond_to_missing?(method_name, include_private = false)
|
19
|
+
array_delegator.respod_to?(method_name, include_private)
|
20
|
+
end
|
21
|
+
|
22
|
+
def method_missing(method_name, *arguments, &block)
|
23
|
+
if array_delegator.respond_to?(method_name)
|
24
|
+
array_delegator.send(method_name, *arguments, &block)
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Wordpress
|
2
|
+
class Base
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
def_delegators 'Wordpress.logger', :debug, :info, :warn, :error, :fatal
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def attr_accessor(*args)
|
9
|
+
if args.size == 1 && args.first.is_a?(Hash)
|
10
|
+
args.first.each do |key, default|
|
11
|
+
define_method key do
|
12
|
+
instance_variable_defined?("@#{key}") ? instance_variable_get("@#{key}") : default
|
13
|
+
end
|
14
|
+
define_method "#{key}=" do |value|
|
15
|
+
instance_variable_set("@#{key}", value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def metaclass
|
25
|
+
class << self; self; end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'wordpress/base'
|
2
|
+
require 'wordpress/api'
|
3
|
+
require 'curb'
|
4
|
+
|
5
|
+
module Wordpress
|
6
|
+
class Client < Wordpress::Base
|
7
|
+
include Wordpress::API
|
8
|
+
|
9
|
+
attr_accessor :access_token
|
10
|
+
attr_accessor :end_point => "https://public-api.wordpress.com/"
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def request(method, path, params = {}, options = {})
|
15
|
+
query_params = params[:query] || {}
|
16
|
+
request_params = params[:request] || {}
|
17
|
+
uri = end_point + (end_point[-1] == '/' ? '' : '/') + path.sub(/^[\/]+/, '')
|
18
|
+
uri += "?#{query_params.map{ |k, v| "#{k}=#{v}" }.join('&')}" if !query_params.empty?
|
19
|
+
|
20
|
+
debug <<-EOS
|
21
|
+
Request Dump
|
22
|
+
Method : #{method}
|
23
|
+
Path : #{uri}
|
24
|
+
Parameters : #{request_params.inspect}
|
25
|
+
EOS
|
26
|
+
|
27
|
+
http = Curl.send(method, uri, request_params) do |http|
|
28
|
+
if options.delete(:bearer_token_request) && !access_token.nil?
|
29
|
+
http.headers['Authorization'] = bearer_auth_header
|
30
|
+
end
|
31
|
+
end
|
32
|
+
res = http.body_str
|
33
|
+
|
34
|
+
debug <<-EOS
|
35
|
+
Response Dump
|
36
|
+
Content : #{res}
|
37
|
+
EOS
|
38
|
+
|
39
|
+
res
|
40
|
+
end
|
41
|
+
|
42
|
+
def bearer_auth_header
|
43
|
+
"Bearer #{access_token}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'wordpress/object'
|
2
|
+
require 'wordpress/user'
|
3
|
+
require 'wordpress/post'
|
4
|
+
require 'wordpress/ostruct'
|
5
|
+
|
6
|
+
module Wordpress
|
7
|
+
class Comment < Wordpress::Object
|
8
|
+
attr_parameter :id, :url, :short_url, :content, :status, :parent, :string
|
9
|
+
attr_parameter :date, :as => lambda { |t| DateTime.iso8601(t) }
|
10
|
+
attr_parameter :post, :as => Wordpress::Post
|
11
|
+
attr_parameter :author, :as => Wordpress::User
|
12
|
+
attr_parameter :meta, :as => Wordpress::OpenStruct
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'wordpress/array'
|
2
|
+
require 'wordpress/comment'
|
3
|
+
|
4
|
+
module Wordpress
|
5
|
+
class CommentArray < Wordpress::Array
|
6
|
+
attr_parameter :found
|
7
|
+
attr_parameter :comments, :as => lambda { |array| array.nil? ? [] : array.map { |v| Wordpress::Comment.new(v) } }
|
8
|
+
array_delegator :@comments
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'wordpress/array'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
class LikeArray < Wordpress::Array
|
5
|
+
attr_parameter :found, :i_like
|
6
|
+
attr_parameter :likes, :as => lambda { |array| array.nil? ? [] : array.map { |v| Wordpress::User.new(v) } }
|
7
|
+
array_delegator :@likes
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'wordpress/base'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module Wordpress
|
5
|
+
class Object < Wordpress::OpenStruct
|
6
|
+
class << self
|
7
|
+
def attr_parameter(*args)
|
8
|
+
options = args[-1].is_a?(Hash) ? args.pop : {}
|
9
|
+
args.each do |arg|
|
10
|
+
arg = arg.to_s
|
11
|
+
|
12
|
+
define_method arg do
|
13
|
+
send("#{arg}=", @hash[arg])
|
14
|
+
end
|
15
|
+
|
16
|
+
define_method "#{arg}=" do |v|
|
17
|
+
if as = options[:as]
|
18
|
+
@hash[arg] = (as.is_a?(Proc) ? as.call(v) : as.new(v))
|
19
|
+
elsif v.is_a?(Hash)
|
20
|
+
@hash[arg] = Wordpress::OpenStruct.new(v)
|
21
|
+
else
|
22
|
+
@hash[arg] = v
|
23
|
+
end
|
24
|
+
@hash[arg]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize(params = {})
|
31
|
+
params ? super(Hash[params.map { |k, v| [k.to_s.downcase, v] }]) : super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'wordpress/base'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
class OpenStruct < Wordpress::Base
|
5
|
+
def_delegators :@hash, :map, :each
|
6
|
+
|
7
|
+
def initialize(hash = {})
|
8
|
+
@hash = Hash[hash.map do |key, value|
|
9
|
+
key = key.to_s
|
10
|
+
unless respond_to?(key)
|
11
|
+
metaclass.send(:define_method, key, Proc.new do
|
12
|
+
v = @hash[key]
|
13
|
+
@hash[key] = (v.is_a?(Hash) ? Wordpress::OpenStruct.new(v) : v)
|
14
|
+
end)
|
15
|
+
end
|
16
|
+
unless respond_to?("#{key}=")
|
17
|
+
metaclass.send(:define_method, "#{key}=", Proc.new do |v|
|
18
|
+
@hash[key] = (v.is_a?(Hash) ? Wordpress::OpenStruct.new(v) : v)
|
19
|
+
@hash[key]
|
20
|
+
end)
|
21
|
+
end
|
22
|
+
[key, (value.is_a?(Hash) ? Wordpress::OpenStruct.new(value) : value)]
|
23
|
+
end]
|
24
|
+
end
|
25
|
+
|
26
|
+
=begin
|
27
|
+
def respond_to_missing?(method_name, include_private = false)
|
28
|
+
method_name = method_name.to_s
|
29
|
+
@hash.include?(method_name) || super
|
30
|
+
end
|
31
|
+
=end
|
32
|
+
def to_s
|
33
|
+
"#<#{self.class.name} #{map { |k, v| "#{k}=#{v}" }.join(" ")}>"
|
34
|
+
end
|
35
|
+
|
36
|
+
def [](k)
|
37
|
+
send(k)
|
38
|
+
end
|
39
|
+
|
40
|
+
def []=(k, v)
|
41
|
+
send("#{k}=", v)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
=begin
|
46
|
+
def method_missing(method_name, *args, &block)
|
47
|
+
key = method_name.to_s
|
48
|
+
if key[-1] == '='
|
49
|
+
key = key[0..-2]
|
50
|
+
if @hash.include?(key)
|
51
|
+
v = args[0]
|
52
|
+
return @hash[key] = (v.is_a?(Hash) ? Wordpress::OpenStruct.new(v) : v)
|
53
|
+
end
|
54
|
+
else
|
55
|
+
v = @hash[key]
|
56
|
+
return @hash[key] = (v.is_a?(Hash) ? Wordpress::OpenStruct.new(v) : v)
|
57
|
+
end
|
58
|
+
super
|
59
|
+
end
|
60
|
+
=end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'wordpress/object'
|
2
|
+
require 'wordpress/user'
|
3
|
+
require 'wordpress/ostruct'
|
4
|
+
|
5
|
+
module Wordpress
|
6
|
+
class Post < Wordpress::Object
|
7
|
+
attr_parameter :id, :modified, :title, :url, :short_url, :content, :excerpt, :slug, :status, :password, :parent, :type, :comments_open, :pings_open, :comment_count, :like_count, :i_like, :is_reblogged, :is_following, :featured_image, :format, :geo, :publicize_urls, :tags, :categories, :attachments, :metadata
|
8
|
+
attr_parameter :date, :as => lambda { |t| DateTime.iso8601(t) }
|
9
|
+
attr_parameter :author, :as => Wordpress::User
|
10
|
+
attr_parameter :meta, :as => Wordpress::OpenStruct
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'wordpress/array'
|
2
|
+
require 'wordpress/post'
|
3
|
+
|
4
|
+
module Wordpress
|
5
|
+
class PostArray < Wordpress::Array
|
6
|
+
attr_parameter :found
|
7
|
+
attr_parameter :posts, :as => lambda { |array| array.nil? ? [] : array.map { |v| Wordpress::Post.new(v) } }
|
8
|
+
array_delegator :@posts
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'wordpress/object'
|
2
|
+
|
3
|
+
module Wordpress
|
4
|
+
class Test < Wordpress::Object
|
5
|
+
attr_parameter :method_id_matches_query_id, :method_id, :id, :default_string, :default_int, :boolean_whitelist_defaults_to_false, :boolean_whitelist_defaults_to_true, :string_whitelist_defaults_to_foo, :url, :datetime
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require 'wordpress/object'
|
2
|
+
require 'wordpress/ostruct'
|
3
|
+
|
4
|
+
module Wordpress
|
5
|
+
class User < Wordpress::Object
|
6
|
+
attr_parameter :id, :display_name, :username, :email, :primary_blog, :avatar_url, :profile_url, :verified
|
7
|
+
attr_parameter :meta, :as => Wordpress::OpenStruct
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Wordpress
|
2
|
+
class Version
|
3
|
+
MAJOR = 0 unless defined? Wordpress::Version::MAJOR
|
4
|
+
MINOR = 0 unless defined? Wordpress::Version::MINOR
|
5
|
+
PATCH = 3 unless defined? Wordpress::Version::PATCH
|
6
|
+
PRE = nil unless defined? Wordpress::Version::PRE
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def to_s
|
10
|
+
[MAJOR, MINOR, PATCH, PRE].compact.join('.')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "wordpress/base"
|
3
|
+
|
4
|
+
describe Wordpress::Base do
|
5
|
+
it 'should overwrite attr_accessor class method' do
|
6
|
+
klass = Class.new(Wordpress::Base)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should return default value' do
|
10
|
+
klass = Class.new(Wordpress::Base) do
|
11
|
+
attr_accessor :key => :default_value
|
12
|
+
end
|
13
|
+
ins = klass.new
|
14
|
+
ins.key.should == :default_value
|
15
|
+
ins.key = :new_value
|
16
|
+
ins.key.should == :new_value
|
17
|
+
ins.key = nil
|
18
|
+
ins.key.should be_nil
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Wordpress::Object do
|
4
|
+
it 'should respond to attr_parameter method' do
|
5
|
+
klass = Wordpress::Object
|
6
|
+
klass.should respond_to :attr_parameter
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should define methods for initial parameters' do
|
10
|
+
klass = Class.new(Wordpress::Object) do
|
11
|
+
attr_parameter :param
|
12
|
+
end
|
13
|
+
ins = klass.new
|
14
|
+
ins.should respond_to(:param)
|
15
|
+
ins.should respond_to(:param=)
|
16
|
+
ins.should_not respond_to(:unknown)
|
17
|
+
ins.should_not respond_to(:unknown=)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should define methods for initial parameters' do
|
21
|
+
klass = Class.new(Wordpress::Object) do
|
22
|
+
attr_parameter :param
|
23
|
+
attr_parameter :param_as_klass, :as => Array
|
24
|
+
attr_parameter :param_as_proc, :as => lambda { |v| v.to_s }
|
25
|
+
end
|
26
|
+
ins = klass.new(:param => 1, :param_as_klass => 1, :param_as_proc => 1)
|
27
|
+
ins.param.should == 1
|
28
|
+
ins.param_as_klass.should == [nil]
|
29
|
+
ins.param_as_proc.should == '1'
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require 'wordpress/ostruct'
|
3
|
+
|
4
|
+
describe Wordpress::OpenStruct do
|
5
|
+
it 'should generate accessor method at initialization' do
|
6
|
+
o = Wordpress::OpenStruct.new({:a => 1})
|
7
|
+
o.should respond_to :a
|
8
|
+
o.should_not respond_to :b
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'should not respond to unknown keys' do
|
12
|
+
o = Wordpress::OpenStruct.new({})
|
13
|
+
o.should_not respond_to :a
|
14
|
+
proc {
|
15
|
+
o.a = 1
|
16
|
+
}.should raise_error(NoMethodError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should work with accessor' do
|
20
|
+
o = Wordpress::OpenStruct.new({:a => 1})
|
21
|
+
o.a.should == 1
|
22
|
+
o.a = 2
|
23
|
+
o.a.should == 2
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should parse hash recursively' do
|
27
|
+
o = Wordpress::OpenStruct.new({:a => {:b => {:c => :d}}})
|
28
|
+
o.a.should be_an_instance_of(Wordpress::OpenStruct)
|
29
|
+
o.a.b.should be_an_instance_of(Wordpress::OpenStruct)
|
30
|
+
o.a.b.c.should == :d
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "wordpress/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "wordpress-client"
|
6
|
+
s.version = Wordpress::Version
|
7
|
+
s.authors = ["Daisuke Taniwaki"]
|
8
|
+
s.email = ["daisuketaniwaki@gmail.com"]
|
9
|
+
s.homepage = "https://github.com/dtaniwaki/wordpress-client"
|
10
|
+
s.summary = 'Wordpress API Wrapper.'
|
11
|
+
s.description = 'Wordpress API Wrapper.'
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.license = "MIT"
|
18
|
+
|
19
|
+
s.add_runtime_dependency 'curb', '~> 0.8.4'
|
20
|
+
s.add_runtime_dependency 'logger', '~> 1.2'
|
21
|
+
s.add_runtime_dependency 'multi_json', '~> 1.7'
|
22
|
+
|
23
|
+
s.add_development_dependency 'rspec'
|
24
|
+
s.add_development_dependency 'rake'
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,171 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wordpress-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daisuke Taniwaki
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-07-23 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: curb
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.4
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.8.4
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: logger
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '1.2'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.2'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: multi_json
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.7'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.7'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: rake
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: Wordpress API Wrapper.
|
95
|
+
email:
|
96
|
+
- daisuketaniwaki@gmail.com
|
97
|
+
executables: []
|
98
|
+
extensions: []
|
99
|
+
extra_rdoc_files: []
|
100
|
+
files:
|
101
|
+
- .gitignore
|
102
|
+
- CONTRIBUTING
|
103
|
+
- Gemfile
|
104
|
+
- LICENSE
|
105
|
+
- README.md
|
106
|
+
- Rakefile
|
107
|
+
- lib/wordpress-client.rb
|
108
|
+
- lib/wordpress/api.rb
|
109
|
+
- lib/wordpress/api/comments.rb
|
110
|
+
- lib/wordpress/api/me.rb
|
111
|
+
- lib/wordpress/api/posts.rb
|
112
|
+
- lib/wordpress/api/sites.rb
|
113
|
+
- lib/wordpress/api/tests.rb
|
114
|
+
- lib/wordpress/api/utils.rb
|
115
|
+
- lib/wordpress/array.rb
|
116
|
+
- lib/wordpress/base.rb
|
117
|
+
- lib/wordpress/client.rb
|
118
|
+
- lib/wordpress/comment.rb
|
119
|
+
- lib/wordpress/comment_array.rb
|
120
|
+
- lib/wordpress/configuration.rb
|
121
|
+
- lib/wordpress/errors.rb
|
122
|
+
- lib/wordpress/like_array.rb
|
123
|
+
- lib/wordpress/like_result.rb
|
124
|
+
- lib/wordpress/object.rb
|
125
|
+
- lib/wordpress/ostruct.rb
|
126
|
+
- lib/wordpress/post.rb
|
127
|
+
- lib/wordpress/post_array.rb
|
128
|
+
- lib/wordpress/site.rb
|
129
|
+
- lib/wordpress/test.rb
|
130
|
+
- lib/wordpress/user.rb
|
131
|
+
- lib/wordpress/version.rb
|
132
|
+
- spec/spec_helper.rb
|
133
|
+
- spec/wordpress-client_spec.rb
|
134
|
+
- spec/wordpress/base_spec.rb
|
135
|
+
- spec/wordpress/client_spec.rb
|
136
|
+
- spec/wordpress/object_spec.rb
|
137
|
+
- spec/wordpress/ostruct_spec.rb
|
138
|
+
- wordpress-client.gemspec
|
139
|
+
homepage: https://github.com/dtaniwaki/wordpress-client
|
140
|
+
licenses:
|
141
|
+
- MIT
|
142
|
+
post_install_message:
|
143
|
+
rdoc_options: []
|
144
|
+
require_paths:
|
145
|
+
- lib
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
requirements: []
|
159
|
+
rubyforge_project:
|
160
|
+
rubygems_version: 1.8.25
|
161
|
+
signing_key:
|
162
|
+
specification_version: 3
|
163
|
+
summary: Wordpress API Wrapper.
|
164
|
+
test_files:
|
165
|
+
- spec/spec_helper.rb
|
166
|
+
- spec/wordpress-client_spec.rb
|
167
|
+
- spec/wordpress/base_spec.rb
|
168
|
+
- spec/wordpress/client_spec.rb
|
169
|
+
- spec/wordpress/object_spec.rb
|
170
|
+
- spec/wordpress/ostruct_spec.rb
|
171
|
+
has_rdoc:
|