wordpress-client 0.0.6 → 0.1.0

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.
Files changed (46) hide show
  1. checksums.yaml +15 -0
  2. data/Rakefile +8 -0
  3. data/lib/faraday_middleware/gzip.rb +22 -0
  4. data/lib/wordpress-client.rb +2 -4
  5. data/lib/wordpress/api/comments.rb +6 -6
  6. data/lib/wordpress/api/me.rb +2 -2
  7. data/lib/wordpress/api/posts.rb +12 -12
  8. data/lib/wordpress/api/sites.rb +1 -1
  9. data/lib/wordpress/api/tests.rb +6 -6
  10. data/lib/wordpress/api/utils.rb +12 -14
  11. data/lib/wordpress/base.rb +24 -1
  12. data/lib/wordpress/client.rb +29 -31
  13. data/lib/wordpress/configuration.rb +1 -2
  14. data/lib/wordpress/errors.rb +10 -0
  15. data/lib/wordpress/object/array.rb +29 -0
  16. data/lib/wordpress/object/base.rb +94 -0
  17. data/lib/wordpress/object/comment.rb +11 -0
  18. data/lib/wordpress/object/comments.rb +8 -0
  19. data/lib/wordpress/object/meta_object.rb +62 -0
  20. data/lib/wordpress/{post.rb → object/post.rb} +6 -8
  21. data/lib/wordpress/object/posts.rb +8 -0
  22. data/lib/wordpress/object/site.rb +8 -0
  23. data/lib/wordpress/{test.rb → object/test.rb} +3 -3
  24. data/lib/wordpress/object/user.rb +8 -0
  25. data/lib/wordpress/ostruct.rb +28 -36
  26. data/lib/wordpress/request.rb +24 -0
  27. data/lib/wordpress/version.rb +2 -2
  28. data/spec/spec_helper.rb +13 -0
  29. data/spec/wordpress-client_spec.rb +20 -2
  30. data/spec/wordpress/base_spec.rb +54 -11
  31. data/spec/wordpress/client_spec.rb +50 -0
  32. data/spec/wordpress/object/base_spec.rb +56 -0
  33. data/spec/wordpress/ostruct_spec.rb +15 -9
  34. data/spec/wordpress/request_spec.rb +5 -0
  35. data/wordpress-client.gemspec +4 -3
  36. metadata +42 -38
  37. data/lib/wordpress/array.rb +0 -30
  38. data/lib/wordpress/comment.rb +0 -14
  39. data/lib/wordpress/comment_array.rb +0 -10
  40. data/lib/wordpress/like_array.rb +0 -9
  41. data/lib/wordpress/like_result.rb +0 -9
  42. data/lib/wordpress/object.rb +0 -34
  43. data/lib/wordpress/post_array.rb +0 -10
  44. data/lib/wordpress/site.rb +0 -9
  45. data/lib/wordpress/user.rb +0 -9
  46. data/spec/wordpress/object_spec.rb +0 -31
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MjczN2E1ZjNkODBlN2NjYjBiYWMyZmI0OWY0MmU3N2IxZWY1OGUzNQ==
5
+ data.tar.gz: !binary |-
6
+ YWI2YzI2YzBhZTJmNDNhZjc1MTQ1YzU4OTE5NGNhZmUyODE2ZmFiNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NDQ5Y2YzYjAzMWZlMDNlYzJiZDgwMWJjODcyM2VmZjdmMGMxZmI1OTdmOWZk
10
+ YmNmZjBlMzEwODM3ZmMxNjJiYTZjZDcyOGJmMTkwMjEyYjgxM2E5YmQxNzU0
11
+ YTk0ODc5NjY2MzAyOGI4ZDQ0NTI4MmMyNzc5ZTUxMDM3NmVmMTQ=
12
+ data.tar.gz: !binary |-
13
+ MWYzNmQ4YTI4OTZiYmRiNTE2NTc5Y2ExNGY0ZDBhZTZkNzUzYjZkNTllMmRk
14
+ M2IzYmFhZGMxMGIwOGY4MDc0OTlkMDFlMjRiNDM0YzNkOTQyOTljNzM0NDU5
15
+ YTk0ODZkNDc2YzlkYzdkNDdmZmExY2VjNTc5ZDIxODEwZTllNDU=
data/Rakefile CHANGED
@@ -3,3 +3,11 @@ require 'rspec/core/rake_task'
3
3
  RSpec::Core::RakeTask.new(:spec)
4
4
 
5
5
  task :default => :spec
6
+
7
+ namespace :spec do
8
+ desc "Execute rspec coverage"
9
+ task :coverage do
10
+ ENV['COVERAGE'] = 'true'
11
+ Rake::Task["spec"].execute
12
+ end
13
+ end
@@ -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
@@ -3,14 +3,12 @@ require 'wordpress/client'
3
3
 
4
4
  module Wordpress
5
5
  class << self
6
+ attr_writer :logger
7
+
6
8
  def client
7
9
  @client ||= Wordpress::Client.new
8
10
  end
9
11
 
10
- def client?
11
- !!@client
12
- end
13
-
14
12
  def logger
15
13
  @logger ||= Logger.new(STDOUT)
16
14
  end
@@ -7,32 +7,32 @@ module Wordpress
7
7
 
8
8
  def get_comments(site, params = {})
9
9
  validate_params! params, [:context, :type, :status], :search
10
- object_from_response Wordpress::CommentArray, "/sites/#{site}/comments", :get, :query => params
10
+ object_from_response Wordpress::Object::Comments.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/comments", params)
11
11
  end
12
12
 
13
13
  def get_post_comments(site, post_id, params = {})
14
14
  validate_params! params, [:context]
15
- object_from_response Wordpress::CommentArray, "/sites/#{site}/posts/#{post_id}/replies", :get, :query => params
15
+ object_from_response Wordpress::Object::Comments.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts/#{post_id}/replies", params)
16
16
  end
17
17
 
18
18
  def get_comment(site, comment_id, params = {})
19
19
  validate_params! params, [:context]
20
- object_from_response Wordpress::Comment, "/sites/#{site}/comments/#{comment_id}", :get, :query => params
20
+ object_from_response Wordpress::Object::Comment.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/comments/#{comment_id}", params)
21
21
  end
22
22
 
23
23
  def update_comment(site, comment_id, data, params = {})
24
24
  validate_params! params, [:context]
25
- object_from_response Wordpress::Comment, "/sites/#{site}/comments/#{comment_id}", :post, :request => data, :query => params
25
+ object_from_response Wordpress::Object::Comment.new(self), Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/comments/#{comment_id}", params, data)
26
26
  end
27
27
 
28
28
  def create_comment(site, post_id, data, params = {})
29
29
  validate_params! params, [:context]
30
- object_from_response Wordpress::Comment, "/sites/#{site}/posts/#{post_id}/replies/new", :post, :request => data, :query => params
30
+ object_from_response Wordpress::Object::Comment.new(self), Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/#{post_id}/replies/new", params, data)
31
31
  end
32
32
 
33
33
  def delete_comment(site, comment_id, params = {})
34
34
  validate_params! params, [:context]
35
- object_from_response Wordpress::Comment, "/sites/#{site}/comments/#{comment_id}/delete", :post, :query => params
35
+ object_from_response Wordpress::Object::Comment.new(self), Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/comments/#{comment_id}/delete", params)
36
36
  end
37
37
  end
38
38
  end
@@ -7,12 +7,12 @@ module Wordpress
7
7
 
8
8
  def me(params = {})
9
9
  validate_params! params
10
- object_from_response Wordpress::User, "/me", :get, :query => params
10
+ object_from_response Wordpress::Object::User.new(self), Wordpress::Request.new(:get, "/rest/v1/me", params)
11
11
  end
12
12
 
13
13
  def get_my_likes(params = {})
14
14
  validate_params! params
15
- object_from_response Wordpress::LikeArray, "/me/likes", :get, :query => params
15
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:get, "/rest/v1/me/likes", params)
16
16
  end
17
17
  end
18
18
  end
@@ -7,62 +7,62 @@ module Wordpress
7
7
 
8
8
  def get_posts(site, params = {})
9
9
  validate_params! params, [:context, :tag, :category, :type, :status, :sticky, :author, :search, :meta_key, :meta_value], :search
10
- object_from_response Wordpress::PostArray, "/sites/#{site}/posts", :get, :query => params
10
+ object_from_response Wordpress::Object::Posts.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts", params)
11
11
  end
12
12
 
13
13
  def get_post(site, post_id, params = {})
14
14
  validate_params! params, [:context]
15
- object_from_response Wordpress::Post, "/sites/#{site}/posts/#{post_id}", :get, :query => params
15
+ object_from_response Wordpress::Object::Post.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts/#{post_id}", params)
16
16
  end
17
17
 
18
18
  def update_post(site, post_id, data, params = {})
19
19
  validate_params! params, [:context]
20
- object_from_response Wordpress::Post, "/sites/#{site}/posts/#{post_id}", :post, :request => data, :query => params
20
+ object_from_response Wordpress::Object::Post.new(self), Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/#{post_id}", params, data)
21
21
  end
22
22
 
23
23
  def get_post_by_slug(site, post_slug, params = {})
24
24
  validate_params! params, [:context]
25
- object_from_response Wordpress::Post, "/sites/#{site}/posts/slug:#{post_slug}", :get, :query => params
25
+ object_from_response Wordpress::Object::Post.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts/slug:#{post_slug}", params)
26
26
  end
27
27
 
28
28
  def create_post(site, post_id, data, params = {})
29
29
  validate_params! params, [:context]
30
- object_from_response Wordpress::Post, "/sites/#{site}/posts/new", :post, :request => data, :query => params
30
+ object_from_response Wordpress::Object::Post.new(self), Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/new", params, data)
31
31
  end
32
32
 
33
33
  def delete_post(site, post_id, params = {})
34
34
  validate_params! params, [:context]
35
- object_from_response Wordpress::Post, "/sites/#{site}/posts/#{post_id}/delete", :post, :query => params
35
+ object_from_response Wordpress::Object::Post.new(self), Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/#{post_id}/delete", params)
36
36
  end
37
37
 
38
38
  def get_likes(site, post_id, params = {})
39
39
  validate_params! params
40
- object_from_response Wordpress::LikeArray, "/sites/#{site}/posts/#{post_id}/likes", :get, :query => params
40
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts/#{post_id}/likes", params)
41
41
  end
42
42
 
43
43
  def create_like(site, post_id, params = {})
44
44
  validate_params! params
45
- object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/likes/new", :post, :query => params
45
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/#{post_id}/likes/new", params)
46
46
  end
47
47
 
48
48
  def delete_like(site, post_id, params = {})
49
49
  validate_params! params
50
- object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/likes/mine/delete", :post, :query => params
50
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/#{post_id}/likes/mine/delete", params)
51
51
  end
52
52
 
53
53
  def get_like_status(site, post_id, params = {})
54
54
  validate_params! params
55
- object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/likes/mine", :get, :query => params
55
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts/#{post_id}/likes/mine", params)
56
56
  end
57
57
 
58
58
  def get_reblog_status(site, post_id, params = {})
59
59
  validate_params! params
60
- object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/reblogs/mine", :get, :query => params
60
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:get, "/rest/v1/sites/#{site}/posts/#{post_id}/reblogs/mine", params)
61
61
  end
62
62
 
63
63
  def create_reblog(site, post_id, data, params = {})
64
64
  validate_params! params
65
- object_from_response Wordpress::OpenStruct, "/sites/#{site}/posts/#{post_id}/reblogs/new", :post, :request => data, :query => params
65
+ object_from_response Wordpress::Ostruct.new, Wordpress::Request.new(:post, "/rest/v1/sites/#{site}/posts/#{post_id}/reblogs/new", params, data)
66
66
  end
67
67
  end
68
68
  end
@@ -7,7 +7,7 @@ module Wordpress
7
7
 
8
8
  def get_site(site, params = {})
9
9
  validate_params! params
10
- object_from_response Wordpress::Site, "/sites/#{site}", :get, :query => params
10
+ object_from_response Wordpress::Object::Site.new(self), Wordpress::Request.new(:get, "/rest/v1/sites/#{site}", params)
11
11
  end
12
12
  end
13
13
  end
@@ -5,14 +5,14 @@ module Wordpress
5
5
  module Tests
6
6
  include Wordpress::API::Utils
7
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], :test
10
- object_from_response Wordpress::Test, "/test/#{id}", :get, options
8
+ def get_test(id, params = {})
9
+ validate_params! params, [:id, :default_string, :default_int, :boolean_whitelist_defaults_to_false, :boolean_whitelist_defaults_to_true, :string_whitelist_defaults_to_foo, :url, :datetime], :test
10
+ object_from_response Wordpress::Object::Test.new(self), Wordpress::Request.new(:get, "/rest/v1/test/#{id}", params)
11
11
  end
12
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], :test
15
- object_from_response Wordpress::Test, "/test/#{id}", :post, options
13
+ def post_test(id, params = {})
14
+ validate_params! params, [:id, :default_string, :default_int, :boolean_whitelist_defaults_to_false, :boolean_whitelist_defaults_to_true, :string_whitelist_defaults_to_foo, :url, :datetime], :test
15
+ object_from_response Wordpress::Object::Test.new(self), Wordpress::Request.new(:post, "/rest/v1/test/#{id}", params)
16
16
  end
17
17
  end
18
18
  end
@@ -1,33 +1,31 @@
1
1
  require 'json'
2
2
  require 'wordpress/errors'
3
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'
4
+ Dir.glob(File.expand_path('../../object/*.rb', __FILE__)) do |path|
5
+ require path
6
+ end
11
7
 
12
8
  module Wordpress
13
9
  module API
14
10
  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
11
+ def object_from_response(obj, request)
12
+ res = call(request, :bearer_token_request => true)
13
+ begin
20
14
  json = MultiJson.load(res)
21
15
  if json.nil? || json == ''
22
16
  raise Wordpress::ResponseError
23
17
  end
24
18
  if !json['error'].nil?
25
- raise Wordpress::ResponseError, json['message']
19
+ raise Wordpress::ResponseError, json
26
20
  end
27
- klass.new(json)
21
+ obj.assign(json)
22
+ rescue MultiJson::LoadError => e
23
+ raise Wordpress::ResponseError, {'error' => e, 'message' => "Can not parse the response: #{res.inspect}"}
28
24
  end
29
25
  end
30
26
 
27
+ private
28
+
31
29
  def validate_params!(params, valid_keys = [], type = nil)
32
30
  valid_keys += [:http_envelope, :pretty, :callback] if type != :test
33
31
  valid_keys += [:number, :offset, :page, :order, :order_by, :after, :before] if type == :search
@@ -2,9 +2,12 @@ module Wordpress
2
2
  class Base
3
3
  extend Forwardable
4
4
 
5
- def_delegators 'Wordpress.logger', :debug, :info, :warn, :error, :fatal
5
+ def_delegators 'Wordpress', :logger
6
+ def_delegators 'logger', :debug, :info, :warn, :error, :fatal
6
7
 
7
8
  class << self
9
+ private
10
+
8
11
  def attr_accessor(*args)
9
12
  if args.size == 1 && args.first.is_a?(Hash)
10
13
  args.first.each do |key, default|
@@ -19,6 +22,26 @@ module Wordpress
19
22
  super
20
23
  end
21
24
  end
25
+
26
+ def class_attribute(*args)
27
+ args.each do |arg|
28
+ class_eval <<-EOS
29
+ class << self
30
+ def #{arg}
31
+ @#{arg}
32
+ end
33
+
34
+ def #{arg}=(v)
35
+ @#{arg} = v
36
+ end
37
+ end
38
+
39
+ def #{arg}
40
+ self.class.#{arg}
41
+ end
42
+ EOS
43
+ end
44
+ end
22
45
  end
23
46
 
24
47
  def metaclass
@@ -1,50 +1,48 @@
1
1
  require 'wordpress/base'
2
+ require 'wordpress/request'
2
3
  require 'wordpress/api'
3
- require 'curb'
4
+ require 'faraday'
5
+ require 'faraday_middleware/gzip'
6
+ require 'multi_json'
4
7
 
5
8
  module Wordpress
6
- class Client < Wordpress::Base
9
+ class Client < Base
7
10
  include Wordpress::API
8
11
 
9
12
  attr_accessor :access_token
10
- attr_accessor :end_point => "https://public-api.wordpress.com/"
11
13
 
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?
14
+ def initialize
15
+ @conn = Faraday.new do |faraday|
16
+ faraday.use Faraday::Response::Logger, logger
17
+ faraday.request :url_encoded
18
+ faraday.response :gzip
19
+ faraday.adapter Faraday.default_adapter
20
+ end
21
+ end
19
22
 
20
- debug <<-EOS
21
- Request Dump
22
- Method : #{method}
23
- Path : #{uri}
24
- Parameters : #{request_params.inspect}
25
- EOS
23
+ def call(request, options = {})
24
+ debug "Request: #{request}"
26
25
 
27
- http = Curl.send(method, uri, request_params) do |http|
26
+ response = @conn.send(request.method) do |req|
27
+ req.url request.url
28
+ req.params = request.params
29
+ req.body = request.body.to_s
28
30
  if options.delete(:bearer_token_request) && !access_token.nil?
29
- http.headers['Authorization'] = bearer_auth_header
31
+ req.headers['Authorization'] = bearer_auth_header
30
32
  end
31
- http.headers['Accept-Encoding'] = 'gzip,deflate'
32
- http.timeout = 10
33
+ req.headers['Accept-Encoding'] = 'gzip,deflate'
34
+ req.headers['Content-Type'] = 'application/json'
35
+ req.options[:timeout] = 10
36
+ req.options[:open_timeout] = 5
33
37
  end
34
- begin
35
- res = Zlib::GzipReader.new(StringIO.new(http.body_str)).read
36
- rescue Zlib::GzipFile::Error
37
- res = http.body_str
38
- end
39
-
40
- debug <<-EOS
41
- Response Dump
42
- Content : #{res}
43
- EOS
44
38
 
45
- res
39
+ debug "Response: #{response.body}"
40
+
41
+ response.body
46
42
  end
47
43
 
44
+ private
45
+
48
46
  def bearer_auth_header
49
47
  "Bearer #{access_token}"
50
48
  end
@@ -1,5 +1,4 @@
1
1
  module Wordpress
2
- class Configuration < Hash
3
-
2
+ class Configuration
4
3
  end
5
4
  end
@@ -1,4 +1,14 @@
1
1
  module Wordpress
2
2
  class ResponseError < StandardError
3
+ attr_reader :error, :message
4
+
5
+ def initialize(json = {})
6
+ @error = json['error'] || 'unknown'
7
+ @message = json['message']
8
+ end
9
+
10
+ def to_s
11
+ @message
12
+ end
3
13
  end
4
14
  end
@@ -0,0 +1,29 @@
1
+ require_relative 'base'
2
+
3
+ module Wordpress::Object
4
+ class Array < Base
5
+ class_attribute :array_name
6
+
7
+ class << self
8
+ private
9
+
10
+ def attr_array(name, klass)
11
+ name = name.to_s
12
+ @array_name = name
13
+ attr_parameter name, :as => lambda{ |client, array|
14
+ (array || []).map{ |v|
15
+ Wordpress::Object.const_get(klass).new(client, v)
16
+ }
17
+ }
18
+ end
19
+ end
20
+
21
+ def [](k)
22
+ if k.is_a?(Fixnum) && array_name.to_s != ''
23
+ send(array_name)[k]
24
+ else
25
+ send(k)
26
+ end
27
+ end
28
+ end
29
+ end