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 ADDED
@@ -0,0 +1,24 @@
1
+ .rvmrc
2
+ .rspec
3
+ .bundle
4
+ .config
5
+
6
+ coverage
7
+ vendor
8
+ log
9
+ tmp
10
+ coverage
11
+ spec/tmp
12
+ spec/reports
13
+
14
+ Gemfile.lock
15
+
16
+ # YARD artifacts
17
+ .yardoc
18
+ _yardoc
19
+ doc/
20
+
21
+ *.gem
22
+ *.rbc
23
+ **.orig
24
+ **.org
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
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
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,4 @@
1
+ wordpress
2
+ =========
3
+
4
+ Wordpress API Wrapper
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ RSpec::Core::RakeTask.new(:spec)
4
+
5
+ task :default => :spec
@@ -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,5 @@
1
+ module Wordpress
2
+ class Configuration < Hash
3
+
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ module Wordpress
2
+ class ResponseError < StandardError
3
+ end
4
+ 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,9 @@
1
+ require 'wordpress/object'
2
+ require 'wordpress/ostruct'
3
+
4
+ module Wordpress
5
+ class LikeResult < Wordpress::Object
6
+ attr_parameter :success, :i_like, :like_count
7
+ attr_parameter :meta, :as => Wordpress::OpenStruct
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,9 @@
1
+ require 'wordpress/object'
2
+ require 'wordpress/ostruct'
3
+
4
+ module Wordpress
5
+ class Site < Wordpress::Object
6
+ attr_parameter :id, :name, :description, :url, :jetpack, :post_count, :lang
7
+ attr_parameter :meta, :as => Wordpress::OpenStruct
8
+ end
9
+ 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
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'wordpress-client'
5
+
6
+ RSpec.configure do |config|
7
+
8
+ end
9
+
@@ -0,0 +1,7 @@
1
+ require "spec_helper"
2
+
3
+ describe Wordpress do
4
+ it "should return client instance" do
5
+ Wordpress.client.should be_an_instance_of(Wordpress::Client)
6
+ end
7
+ end
@@ -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,4 @@
1
+ require "spec_helper"
2
+
3
+ describe Wordpress::Client do
4
+ 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: