kns_endpoint 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/kns_endpoint.rb +80 -91
- metadata +11 -4
data/lib/kns_endpoint.rb
CHANGED
@@ -1,20 +1,30 @@
|
|
1
|
-
require '
|
2
|
-
require 'open-uri'
|
1
|
+
require 'rest_client'
|
3
2
|
require 'json'
|
4
3
|
|
5
4
|
module Kynetx
|
6
5
|
|
7
6
|
class Endpoint
|
8
|
-
attr_accessor :session
|
7
|
+
attr_accessor :session, :environment, :ruleset, :use_session
|
9
8
|
|
10
9
|
@@events = {}
|
11
10
|
@@directives = {}
|
12
|
-
@@
|
11
|
+
@@use_session = true;
|
12
|
+
@@environment = :production
|
13
|
+
@@ruleset = nil
|
13
14
|
|
14
15
|
def initialize(opts={})
|
15
|
-
|
16
|
+
@environment = opts[:environment] if opts[:environment]
|
17
|
+
@ruleset = opts[:ruleset] if opts[:ruleset]
|
18
|
+
@use_session = opts[:use_session] if opts[:use_session]
|
19
|
+
|
20
|
+
# set the defaults
|
21
|
+
@environment ||= @@environment
|
22
|
+
@use_session ||= @@use_session
|
23
|
+
@ruleset ||= @@ruleset
|
24
|
+
raise "Undefined ruleset." unless @ruleset
|
16
25
|
end
|
17
26
|
|
27
|
+
## Endpoint DSL
|
18
28
|
|
19
29
|
def self.event(e, params={}, &block)
|
20
30
|
@@events[e] = { :params => params }
|
@@ -28,102 +38,95 @@ module Kynetx
|
|
28
38
|
|
29
39
|
def self.ruleset(r); @@ruleset = r end
|
30
40
|
def self.domain(d); @@domain = d end
|
31
|
-
def
|
32
|
-
def
|
41
|
+
def self.environment(e); @@environment = e end
|
42
|
+
def self.use_session(s); @@use_session = s end
|
33
43
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
run_event(e,
|
44
|
+
##########
|
45
|
+
|
46
|
+
def signal(e, params={})
|
47
|
+
run_event(e, params)
|
38
48
|
end
|
39
49
|
|
40
|
-
def self.signal(e, params
|
41
|
-
tmp_endpoint = self.new({:ruleset => ruleset})
|
50
|
+
def self.signal(e, params)
|
51
|
+
tmp_endpoint = self.new({:ruleset => @@ruleset, :environment => @@environment})
|
42
52
|
tmp_endpoint.signal(e, params)
|
43
53
|
end
|
44
54
|
|
45
55
|
# allow calling events directly
|
46
56
|
def method_missing(meth, *args)
|
47
57
|
if @@events.keys.include? meth.to_sym
|
48
|
-
|
49
|
-
|
58
|
+
return run_event(meth.to_sym, args.first)
|
59
|
+
else
|
60
|
+
super
|
61
|
+
end
|
62
|
+
end
|
50
63
|
|
64
|
+
def self.method_missing(meth, *args)
|
65
|
+
if @@events.include? meth.to_sym
|
66
|
+
ruleset = @@ruleset
|
51
67
|
if args.first.class == Symbol
|
52
68
|
ruleset = args.first
|
53
|
-
params = args.
|
69
|
+
params = args.length > 1 ? args.last : {}
|
54
70
|
else
|
55
|
-
params = args.first
|
71
|
+
params = args.first
|
56
72
|
end
|
57
|
-
|
58
|
-
|
59
|
-
return run_event(meth.to_sym, ruleset || @@ruleset, params)
|
60
|
-
|
73
|
+
e = self.new({:ruleset => ruleset})
|
74
|
+
e.signal(meth.to_sym, params)
|
61
75
|
else
|
62
76
|
super
|
63
77
|
end
|
64
78
|
end
|
65
79
|
|
66
|
-
def self.method_missing(meth, *args)
|
67
|
-
raise "Undefined ruleset" unless args.first.class == Symbol
|
68
|
-
params = args.length > 1 ? args.last : {}
|
69
|
-
e = self.new({:ruleset => args.first})
|
70
|
-
e.signal(meth.to_sym, params)
|
71
|
-
end
|
72
|
-
|
73
80
|
private
|
74
81
|
|
75
|
-
def run_event(e,
|
76
|
-
|
77
|
-
# setup the parameters and call the block
|
78
|
-
|
79
|
-
if @@events.keys.include? e
|
80
|
-
@@events[e][:block].call(params)
|
81
|
-
else
|
82
|
-
raise "Undefined event #{e.to_s}"
|
83
|
-
end
|
84
|
-
|
85
|
-
|
82
|
+
def run_event(e, params)
|
86
83
|
# run the event
|
87
84
|
|
88
85
|
kns_json = {"directives" => []}
|
89
86
|
|
90
87
|
begin
|
88
|
+
# setup the parameters and call the block
|
89
|
+
|
90
|
+
if @@events.keys.include? e
|
91
|
+
@@events[e][:block].call(params)
|
92
|
+
else
|
93
|
+
raise "Undefined event #{e.to_s}"
|
94
|
+
end
|
95
|
+
|
91
96
|
raise "Undefined Domain" unless @@domain
|
92
97
|
|
93
|
-
api_call = "https://cs.kobj.net/blue/event/#{@@domain.to_s}/#{e.to_s}/#{ruleset}"
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
http_session.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
98
|
-
http_session.use_ssl = true
|
99
|
-
|
100
|
-
headers = {
|
101
|
-
'Host'=> uri.host,
|
102
|
-
}
|
103
|
-
|
104
|
-
headers["Cookie"] = "SESSION_ID=#{@session}" if @session && @@use_single_session
|
98
|
+
api_call = "https://cs.kobj.net/blue/event/#{@@domain.to_s}/#{e.to_s}/#{@ruleset}"
|
99
|
+
|
100
|
+
headers = {}
|
101
|
+
headers[:cookies] = {"SESSION_ID" => @session} if @session && @use_session
|
105
102
|
|
106
103
|
timeout(30) do
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
puts "
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
104
|
+
params[@ruleset.to_s + ":kynetx_app_version"] = "dev" unless @environment == :production
|
105
|
+
|
106
|
+
if $KNS_ENDPOINT_DEBUG
|
107
|
+
puts "-- NEW REQUEST --"
|
108
|
+
puts "-- URL: " + api_call
|
109
|
+
puts "-- HEADERS:\n#{headers.inspect}"
|
110
|
+
puts "-- PARAMS:\n#{params.inspect}"
|
111
|
+
end
|
112
|
+
|
113
|
+
response = RestClient.post(api_call, params, headers)
|
114
|
+
raise "Unexpected response from KNS (HTTP Error: #{response.code} - #{response})" unless response.code.to_s == "200"
|
115
|
+
|
116
|
+
@session = response.cookies["SESSION_ID"]
|
117
|
+
begin
|
118
|
+
kns_json = JSON.parse(response.to_s)
|
119
|
+
rescue
|
120
|
+
raise "Unexpected response from KNS (#{response.to_s})"
|
121
|
+
end
|
122
|
+
|
123
|
+
if $KNS_ENDPOINT_DEBUG
|
124
|
+
puts "-- RESPONSE --"
|
125
|
+
puts "-- CODE: #{response.code}"
|
126
|
+
puts "-- COOKIES: #{response.cookies.inspect}"
|
127
|
+
puts "-- HEADERS: #{response.headers.inspect}"
|
128
|
+
puts "-- BODY: \n" + response.to_s
|
129
|
+
end
|
127
130
|
end
|
128
131
|
rescue Exception => e
|
129
132
|
raise "Unable to connect to KNS. (#{e.message})"
|
@@ -132,7 +135,7 @@ module Kynetx
|
|
132
135
|
# execute the returned directives
|
133
136
|
directive_output = []
|
134
137
|
kns_json["directives"].each do |d|
|
135
|
-
o = run_directive(d["name"].to_sym,
|
138
|
+
o = run_directive(d["name"].to_sym, d["options"]) if @@directives.keys.include?(d["name"].to_sym)
|
136
139
|
directive_output.push o
|
137
140
|
end
|
138
141
|
|
@@ -143,9 +146,9 @@ module Kynetx
|
|
143
146
|
|
144
147
|
def run_directive(d, params)
|
145
148
|
begin
|
146
|
-
return @@directives[d].call(params)
|
149
|
+
return @@directives[d].call(symbolize_keys(params))
|
147
150
|
rescue Exception => e
|
148
|
-
|
151
|
+
raise "Error in directive (#{d.to_s}): #{e.message}"
|
149
152
|
end
|
150
153
|
|
151
154
|
end
|
@@ -158,7 +161,7 @@ module Kynetx
|
|
158
161
|
when String then key.to_sym
|
159
162
|
else key
|
160
163
|
end
|
161
|
-
|
164
|
+
new_value = case value
|
162
165
|
when Hash then symbolize_keys(value)
|
163
166
|
else value
|
164
167
|
end
|
@@ -167,26 +170,12 @@ module Kynetx
|
|
167
170
|
}
|
168
171
|
end
|
169
172
|
|
170
|
-
def parse_cookie(resp_hash, cookie)
|
171
|
-
cookie_str = resp_hash['set-cookie']
|
172
|
-
cookies = {}
|
173
|
-
cookie_str.split(";").map{|e| k,v = e.split('='); cookies[k] = v}
|
174
|
-
return cookies[cookie]
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
173
|
|
179
|
-
end
|
180
174
|
|
181
|
-
class Hash
|
182
|
-
def to_url_params
|
183
|
-
elements = []
|
184
|
-
self.each_pair do |k,v|
|
185
|
-
elements << "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}"
|
186
|
-
end
|
187
|
-
elements.join('&')
|
188
175
|
end
|
189
176
|
|
190
177
|
end
|
191
178
|
|
192
179
|
|
180
|
+
|
181
|
+
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kns_endpoint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
8
|
+
- 1
|
7
9
|
- 0
|
8
|
-
|
9
|
-
version: 0.0.9
|
10
|
+
version: 0.1.0
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Michael Farmer
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-15 00:00:00 -06:00
|
18
19
|
default_executable:
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: json
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ~>
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
27
30
|
segments:
|
28
31
|
- 1
|
29
32
|
- 2
|
@@ -52,23 +55,27 @@ rdoc_options:
|
|
52
55
|
require_paths:
|
53
56
|
- lib
|
54
57
|
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
55
59
|
requirements:
|
56
60
|
- - ">="
|
57
61
|
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
58
63
|
segments:
|
59
64
|
- 0
|
60
65
|
version: "0"
|
61
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
62
68
|
requirements:
|
63
69
|
- - ">="
|
64
70
|
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
65
72
|
segments:
|
66
73
|
- 0
|
67
74
|
version: "0"
|
68
75
|
requirements: []
|
69
76
|
|
70
77
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.3.
|
78
|
+
rubygems_version: 1.3.7
|
72
79
|
signing_key:
|
73
80
|
specification_version: 3
|
74
81
|
summary: Creates a Kynetx KNS Endpoint
|