xmlrpc_controller 0.0.1
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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +27 -0
- data/Rakefile +1 -0
- data/lib/xmlrpc_controller/version.rb +3 -0
- data/lib/xmlrpc_controller.rb +64 -0
- data/xmlrpc_controller.gemspec +23 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f70cdf8556554e04b96160d5bbaa2258d937e3e6
|
4
|
+
data.tar.gz: d5ebf702bfe7330d4e7a9fb8423ea6107f8ca39b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1543976a26c3d950331b81fc603e332cb791f7ad5b55bcae4b32eab9b344afaa0a97016cb9f166fef23a20382bc445b917cd7fe7588015fe45ae1aadff3bc089
|
7
|
+
data.tar.gz: 16c11385de36597aa18557df4c85ec76c0b17c9c6ebc3811870b3ba488c5df7a3c341e87e59b2d2a748d53ef974e8a360555efcf16d043a5e8e3cc9da69628c9
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Nam Chu Hoai
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# XmlrpcController
|
2
|
+
|
3
|
+
Small gem to accept XMLRPC calls in your controller, written for providing Webhooks as a IFTTT trigger by pretending to be a Wordpress blog. Entirely inspired from [femto113/node-ifttt-webhook](https://github.com/femto113/node-ifttt-webhook) which is entirely inspired from [captn3m0/ifttt-webhook](https://github.com/captn3m0/ifttt-webhook)
|
4
|
+
|
5
|
+
## How to use
|
6
|
+
|
7
|
+
### For ITTT
|
8
|
+
|
9
|
+
````
|
10
|
+
class RpcController < ApplicationController
|
11
|
+
include XmlrpcController
|
12
|
+
# you want to be selective with this
|
13
|
+
skip_before_filter :verify_authenticity_token
|
14
|
+
|
15
|
+
before_filter :ifttt_webhook_defaults
|
16
|
+
|
17
|
+
# override when needed, by default it will POST a request to the url as specified in the tags, body is the payload
|
18
|
+
def ifttt_new_post(title, body, categories, tags)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
````
|
24
|
+
|
25
|
+
### Other Uses
|
26
|
+
|
27
|
+
The module will call try to call the method defined on the controller as specified in the RPC call with a Nokogiri Object as the argument.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "xmlrpc_controller/version"
|
2
|
+
|
3
|
+
module XmlrpcController
|
4
|
+
|
5
|
+
# the main method handling the RPC request. It parses the method name, and passes the Nokogiri XML node that represents the params
|
6
|
+
# @@xmlrpc_method_name_map contains a map to resolve for non-ruby method names (with a . for example)
|
7
|
+
def rpc
|
8
|
+
parsed_request = Nokogiri::XML.parse(request.body.read)
|
9
|
+
method_name = parsed_request.xpath('methodCall/methodName').text
|
10
|
+
method_params = parsed_request.xpath('methodCall/params')
|
11
|
+
method_name = @@xmlrpc_method_name_map[method_name] || method_name
|
12
|
+
self.send(method_name, method_params)
|
13
|
+
end
|
14
|
+
|
15
|
+
# default handling methods for IFTTT to make a simple Webhook bridge
|
16
|
+
def ifttt_defaults
|
17
|
+
@@xmlrpc_method_name_map ||= {}
|
18
|
+
@@xmlrpc_method_name_map.merge!({
|
19
|
+
"metaWeblog.getRecentPosts" => :metaWeblog_getRecentPosts,
|
20
|
+
"mt.supportedMethods" => :mt_supportedMethods,
|
21
|
+
"metaWeblog.newPost" => :metaWeblog_newPost,
|
22
|
+
"metaWeblog.getCategories" => :metaWeblog_getCategories,
|
23
|
+
"wp.newCategory" => :wp_newCategory
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
# actual method doing the webhook request
|
28
|
+
def ifttt_new_post(title, body, categories, tags)
|
29
|
+
# default protocol to respond to a new post is to POST a request to the url as specified in the tags, body is the payload
|
30
|
+
HTTParty.post(tags.first, body: body)
|
31
|
+
end
|
32
|
+
|
33
|
+
# convenience method to send back a xmlrpc response
|
34
|
+
def rpc_response(value)
|
35
|
+
render inline: "xml.instruct! :xml, :version=>'1.0' \n xml.methodResponse { xml.params { xml.param { #{value} }}}", type: :builder, content_type: "text/xml"
|
36
|
+
end
|
37
|
+
|
38
|
+
# utility methods to make IFTTT believe we are a wordpress blog
|
39
|
+
def mt_supportedMethods(*args)
|
40
|
+
rpc_response("xml.value { xml.array {xml.data { xml.value { xml.string 'metaWeblog.getRecentPosts' } \n xml.value { xml.string 'metaWeblog.newPost' } }}} ")
|
41
|
+
end
|
42
|
+
|
43
|
+
def metaWeblog_getRecentPosts(*args)
|
44
|
+
rpc_response("xml.value { xml.array { xml.data }}")
|
45
|
+
end
|
46
|
+
|
47
|
+
def metaWeblog_newPost(args)
|
48
|
+
new_post_params = Hash.from_xml(args.children[3].to_s)['param']['value']['struct']['member']
|
49
|
+
title = new_post_params[0]['value']['string']
|
50
|
+
body = new_post_params[1]['value']['string']
|
51
|
+
categories = (new_post_params[2]['value']['array']['data']['value'].class == Array ? new_post_params[2]['value']['array']['data']['value'].map { |e| e['string'] } : [new_post_params[2]['value']['array']['data']['value']['string']] )
|
52
|
+
tags = (new_post_params[3]['value']['array']['data']['value'].class == Array ? new_post_params[3]['value']['array']['data']['value'].map { |e| e['string'] } : [new_post_params[3]['value']['array']['data']['value']['string']] )
|
53
|
+
ifttt_new_post(title, body, categories, tags)
|
54
|
+
rpc_response("xml.value 'nothing'")
|
55
|
+
end
|
56
|
+
|
57
|
+
def metaWeblog_getCategories(args)
|
58
|
+
rpc_response("xml.value { xml.array { xml.data }}")
|
59
|
+
end
|
60
|
+
|
61
|
+
def wp_newCategory(args)
|
62
|
+
rpc_response("xml.value { xml.array { xml.data }}")
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'xmlrpc_controller/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "xmlrpc_controller"
|
8
|
+
spec.version = XmlrpcController::VERSION
|
9
|
+
spec.authors = ["Nam Chu Hoai"]
|
10
|
+
spec.email = ["nambrot@googlemail.com"]
|
11
|
+
spec.summary = "Include XMLRPC into any Controller"
|
12
|
+
spec.description = "Utility methods to work with XMLRPC"
|
13
|
+
spec.homepage = "https://github.com/nambrot/xmlrpc_controller"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xmlrpc_controller
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nam Chu Hoai
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Utility methods to work with XMLRPC
|
42
|
+
email:
|
43
|
+
- nambrot@googlemail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- LICENSE.txt
|
51
|
+
- README.md
|
52
|
+
- Rakefile
|
53
|
+
- lib/xmlrpc_controller.rb
|
54
|
+
- lib/xmlrpc_controller/version.rb
|
55
|
+
- xmlrpc_controller.gemspec
|
56
|
+
homepage: https://github.com/nambrot/xmlrpc_controller
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.2.2
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: Include XMLRPC into any Controller
|
80
|
+
test_files: []
|