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.
Files changed (2) hide show
  1. data/lib/kns_endpoint.rb +80 -91
  2. metadata +11 -4
data/lib/kns_endpoint.rb CHANGED
@@ -1,20 +1,30 @@
1
- require 'net/https'
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
- @@use_single_session = true;
11
+ @@use_session = true;
12
+ @@environment = :production
13
+ @@ruleset = nil
13
14
 
14
15
  def initialize(opts={})
15
- @@ruleset = opts[:ruleset] if opts[:ruleset]
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 use_single_session; @@use_single_session end
32
- def use_single_session=(uss); @@use_single_session = uss end
41
+ def self.environment(e); @@environment = e end
42
+ def self.use_session(s); @@use_session = s end
33
43
 
34
- def signal(e, params={}, ruleset=nil)
35
- raise "Undefined ruleset" unless @@ruleset || ruleset
36
-
37
- run_event(e, ruleset || @@ruleset, params)
44
+ ##########
45
+
46
+ def signal(e, params={})
47
+ run_event(e, params)
38
48
  end
39
49
 
40
- def self.signal(e, params, ruleset)
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
- ruleset = nil
49
- params = {}
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.last if args.length > 1
69
+ params = args.length > 1 ? args.last : {}
54
70
  else
55
- params = args.first if args.first.class == Hash
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, ruleset, params)
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
- puts api_call if $KNS_ENDPOINT_DEBUG
95
- uri = URI.parse(api_call)
96
- http_session = Net::HTTP.new(uri.host, uri.port)
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
- http_session.start { |http|
108
- req = Net::HTTP::Post.new(uri.path)
109
- headers.each{|key, val| req.add_field(key, val)}
110
- puts "Params = \n#{params.to_url_params}" if $KNS_ENDPOINT_DEBUG
111
- resp, data = http.request(req, params.to_url_params)
112
- @session = parse_cookie(resp, 'SESSION_ID')
113
-
114
- puts 'Code = ' + resp.code if $KNS_ENDPOINT_DEBUG
115
- puts 'Message = ' + resp.message if $KNS_ENDPOINT_DEBUG
116
- resp.each {|key, val| puts key + ' = ' + val} if $KNS_ENDPOINT_DEBUG
117
- puts "Data = \n" + data if $KNS_ENDPOINT_DEBUG
118
-
119
-
120
- raise "Unexpected response from KNS (HTTP Error: #{resp.code} - #{resp.message})" unless resp.code == '200'
121
- begin
122
- kns_json = JSON.parse(data)
123
- rescue
124
- raise "Unexpected response from KNS (#{data})"
125
- end
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, symbolize_keys(d["options"])) if @@directives.keys.include?(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
- puts "Error in directive (#{d.to_s}): #{e.message}\n#{e.backtrace.join("\n")}"
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
- new_value = case value
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
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-02 00:00:00 -06:00
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.6
78
+ rubygems_version: 1.3.7
72
79
  signing_key:
73
80
  specification_version: 3
74
81
  summary: Creates a Kynetx KNS Endpoint