kns_endpoint 0.0.9 → 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.
- 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
|