diff options
Diffstat (limited to 'actionwebservice/examples/metaWeblog/apis')
4 files changed, 209 insertions, 0 deletions
diff --git a/actionwebservice/examples/metaWeblog/apis/blogger_api.rb b/actionwebservice/examples/metaWeblog/apis/blogger_api.rb new file mode 100644 index 0000000000..9f85a2391e --- /dev/null +++ b/actionwebservice/examples/metaWeblog/apis/blogger_api.rb @@ -0,0 +1,60 @@ +# +# see the blogger API spec at http://www.blogger.com/developers/api/1_docs/ +# note that the method signatures are subtly different to metaWeblog, they +# are not identical. take care to ensure you handle the different semantics +# properly if you want to support blogger API too, to get maximum compatibility. +# + +module Blog + class Blog < ActionWebService::Struct + member :url, :string + member :blogid, :string + member :blogName, :string + end + + class User < ActionWebService::Struct + member :nickname, :string + member :userid, :string + member :url, :string + member :email, :string + member :lastname, :string + member :firstname, :string + end +end + +# +# blogger +# +class BloggerAPI < ActionWebService::API::Base + inflect_names false + + api_method :newPost, :returns => [:string], :expects => [ + {:appkey=>:string}, + {:blogid=>:string}, + {:username=>:string}, + {:password=>:string}, + {:content=>:string}, + {:publish=>:bool} + ] + + api_method :editPost, :returns => [:bool], :expects => [ + {:appkey=>:string}, + {:postid=>:string}, + {:username=>:string}, + {:password=>:string}, + {:content=>:string}, + {:publish=>:bool} + ] + + api_method :getUsersBlogs, :returns => [[Blog::Blog]], :expects => [ + {:appkey=>:string}, + {:username=>:string}, + {:password=>:string} + ] + + api_method :getUserInfo, :returns => [Blog::User], :expects => [ + {:appkey=>:string}, + {:username=>:string}, + {:password=>:string} + ] +end diff --git a/actionwebservice/examples/metaWeblog/apis/blogger_service.rb b/actionwebservice/examples/metaWeblog/apis/blogger_service.rb new file mode 100644 index 0000000000..b79b53e6f7 --- /dev/null +++ b/actionwebservice/examples/metaWeblog/apis/blogger_service.rb @@ -0,0 +1,34 @@ +require 'blogger_api' + +class BloggerService < ActionWebService::Base + web_service_api BloggerAPI + + def initialize + @postid = 0 + end + + def newPost(key, id, user, pw, content, publish) + $stderr.puts "id=#{id} user=#{user} pw=#{pw}, content=#{content.inspect} [#{publish}]" + (@postid += 1).to_s + end + + def editPost(key, post_id, user, pw, content, publish) + $stderr.puts "id=#{post_id} user=#{user} pw=#{pw} content=#{content.inspect} [#{publish}]" + true + end + + def getUsersBlogs(key, user, pw) + $stderr.puts "getting blogs for #{user}" + blog = Blog::Blog.new( + :url =>'http://blog', + :blogid => 'myblog', + :blogName => 'My Blog' + ) + [blog] + end + + def getUserInfo(key, user, pw) + $stderr.puts "getting user info for #{user}" + Blog::User.new(:nickname => 'user', :email => 'user@test.com') + end +end diff --git a/actionwebservice/examples/metaWeblog/apis/meta_weblog_api.rb b/actionwebservice/examples/metaWeblog/apis/meta_weblog_api.rb new file mode 100644 index 0000000000..adef12a20f --- /dev/null +++ b/actionwebservice/examples/metaWeblog/apis/meta_weblog_api.rb @@ -0,0 +1,67 @@ +# +# here lie structures, cousins of those on http://www.xmlrpc.com/metaWeblog +# but they don't necessarily the real world reflect +# so if you do, find that your client complains: +# please tell, of problems you suffered through +# + +module Blog + class Post < ActionWebService::Struct + member :title, :string + member :link, :string + member :description, :string + member :author, :string + member :category, :string + member :comments, :string + member :guid, :string + member :pubDate, :string + end + + class Category < ActionWebService::Struct + member :description, :string + member :htmlUrl, :string + member :rssUrl, :string + end +end + +# +# metaWeblog +# +class MetaWeblogAPI < ActionWebService::API::Base + inflect_names false + + api_method :newPost, :returns => [:string], :expects => [ + {:blogid=>:string}, + {:username=>:string}, + {:password=>:string}, + {:struct=>Blog::Post}, + {:publish=>:bool} + ] + + api_method :editPost, :returns => [:bool], :expects => [ + {:postid=>:string}, + {:username=>:string}, + {:password=>:string}, + {:struct=>Blog::Post}, + {:publish=>:bool}, + ] + + api_method :getPost, :returns => [Blog::Post], :expects => [ + {:postid=>:string}, + {:username=>:string}, + {:password=>:string}, + ] + + api_method :getCategories, :returns => [[Blog::Category]], :expects => [ + {:blogid=>:string}, + {:username=>:string}, + {:password=>:string}, + ] + + api_method :getRecentPosts, :returns => [[Blog::Post]], :expects => [ + {:blogid=>:string}, + {:username=>:string}, + {:password=>:string}, + {:numberOfPosts=>:int}, + ] +end diff --git a/actionwebservice/examples/metaWeblog/apis/meta_weblog_service.rb b/actionwebservice/examples/metaWeblog/apis/meta_weblog_service.rb new file mode 100644 index 0000000000..9c66558f1b --- /dev/null +++ b/actionwebservice/examples/metaWeblog/apis/meta_weblog_service.rb @@ -0,0 +1,48 @@ +require 'meta_weblog_api' + +class MetaWeblogService < ActionWebService::Base + web_service_api MetaWeblogAPI + + def initialize + @postid = 0 + end + + def newPost(id, user, pw, struct, publish) + $stderr.puts "id=#{id} user=#{user} pw=#{pw}, struct=#{struct.inspect} [#{publish}]" + (@postid += 1).to_s + end + + def editPost(post_id, user, pw, struct, publish) + $stderr.puts "id=#{post_id} user=#{user} pw=#{pw} struct=#{struct.inspect} [#{publish}]" + true + end + + def getPost(post_id, user, pw) + $stderr.puts "get post #{post_id}" + Blog::Post.new(:title => 'hello world', :description => 'first post!') + end + + def getCategories(id, user, pw) + $stderr.puts "categories for #{user}" + cat = Blog::Category.new( + :description => 'Tech', + :htmlUrl => 'http://blog/tech', + :rssUrl => 'http://blog/tech.rss') + [cat] + end + + def getRecentPosts(id, user, pw, num) + $stderr.puts "recent #{num} posts for #{user} on blog #{id}" + post1 = Blog::Post.new( + :title => 'first post!', + :link => 'http://blog.xeraph.org/testOne.html', + :description => 'this is the first post' + ) + post2 = Blog::Post.new( + :title => 'second post!', + :link => 'http://blog.xeraph.org/testTwo.html', + :description => 'this is the second post' + ) + [post1, post2] + end +end |