kns_endpoint 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/kns_endpoint.rb +82 -62
  2. metadata +4 -4
data/lib/kns_endpoint.rb CHANGED
@@ -5,99 +5,106 @@ require 'logger'
5
5
  module Kynetx
6
6
 
7
7
  class Endpoint
8
- attr_accessor :session, :environment, :ruleset, :use_session, :headers, :logging, :log
9
8
 
10
- @@events = {}
11
- @@directives = {}
12
- @@use_session = true;
13
- @@environment = :production
14
- @@ruleset = nil
15
9
  RestClient.log = Logger.new(STDOUT) if $KNS_ENDPOINT_DEBUG
16
10
 
11
+ # DSL
12
+ class << self
13
+ attr_reader :events, :directives
14
+ attr_reader :c_ruleset, :c_domain, :c_use_session, :c_environment
15
+
16
+ def event(e, params={}, &block)
17
+ @events ||= {}
18
+ @events[e] = { :params => params }
19
+ @events[e][:block] = block_given? ? block : lambda { |p| p }
20
+ end
21
+
22
+ def directive(d, &block)
23
+ @directives ||= {}
24
+ @directives[d] = block_given? ? block : lambda { |p| p }
25
+ end
26
+
27
+ def use_session(u); @c_use_session = u end
28
+ def environment(e); @c_environment = e end
29
+ def ruleset(r); @c_ruleset = r end
30
+ def domain(d); @c_domain = d end
31
+
32
+ def signal(e, params)
33
+ tmp_endpoint = self.new
34
+ tmp_endpoint.signal(e, params)
35
+ end
36
+
37
+ def method_missing(meth, *args)
38
+ if @events.include? meth.to_sym
39
+ ruleset = @ruleset
40
+ if args.first.class == Symbol
41
+ ruleset = args.first
42
+ params = args.length > 1 ? args.last : {}
43
+ else
44
+ params = args.first
45
+ end
46
+ e = self.new({:ruleset => ruleset})
47
+ e.signal(meth.to_sym, params)
48
+ else
49
+ super
50
+ end
51
+ end
52
+
53
+
54
+ end
55
+
56
+ attr_accessor :session, :environment, :ruleset, :use_session, :headers, :logging, :query_timeout
57
+ attr_reader :log
58
+
17
59
  def initialize(opts={})
18
60
  @environment = opts[:environment] if opts[:environment]
19
61
  @ruleset = opts[:ruleset] if opts[:ruleset]
20
62
  @use_session = opts[:use_session] if opts[:use_session]
21
63
  @query_timeout = opts[:query_timeout] if opts[:query_timeout]
22
64
  @logging = opts[:logging] if opts[:logging]
23
-
24
- # set the defaults
25
- @events = @@events
26
- @directives = @@directives
27
- @domain = @@domain
28
- @environment ||= @@environment
29
- @use_session ||= @@use_session
30
- @ruleset ||= @@ruleset
65
+ @headers = opts[:headers] if opts[:headers]
66
+
67
+ @events = self.class.events
68
+ @directives = self.class.directives
69
+ @ruleset ||= self.class.c_ruleset
70
+ @domain = self.class.c_domain
71
+ @environment ||= self.class.c_environment || :production
72
+ @use_session ||= self.class.c_use_session || true
73
+
74
+ # instance level settings
31
75
  @query_timeout ||= 120
32
76
  @headers ||= {}
33
77
  @logging ||= false
34
78
  @log = []
79
+ @params = {}
80
+ raise "No events defined" unless @events
81
+ raise "No directives defined" unless @directives
35
82
  raise "Undefined ruleset." unless @ruleset
36
- raise "Undefined Domain" unless @domain
37
- end
38
-
39
- ## Endpoint DSL
40
-
41
- def self.event(e, params={}, &block)
42
- @@events[e] = { :params => params }
43
- @@events[e][:block] = block_given? ? block : lambda { |p| p }
44
- end
45
-
46
- def self.directive(d, &block)
47
- raise "Directive must supply a block." unless block_given?
48
- @@directives[d] = block
83
+ raise "Undefined domain." unless @domain
49
84
  end
50
85
 
51
- def self.ruleset(r); @@ruleset = r end
52
- def self.domain(d); @@domain = d end
53
- def self.environment(e); @@environment = e end
54
- def self.use_session(s); @@use_session = s end
55
-
56
- ##########
57
-
58
86
  def signal(e, params={})
59
87
  run_event(e, params)
60
88
  end
61
89
 
62
- def self.signal(e, params)
63
- tmp_endpoint = self.new({:ruleset => @@ruleset, :environment => @@environment})
64
- tmp_endpoint.signal(e, params)
90
+ def params
91
+ @params ||= {}
65
92
  end
66
93
 
67
94
  # allow calling events directly
68
95
  def method_missing(meth, *args)
69
- if @@events.keys.include? meth.to_sym
96
+ if @events.keys.include? meth.to_sym
70
97
  return run_event(meth.to_sym, args.first)
71
98
  else
72
99
  super
73
100
  end
74
101
  end
75
102
 
76
- def self.method_missing(meth, *args)
77
- if @@events.include? meth.to_sym
78
- ruleset = @@ruleset
79
- if args.first.class == Symbol
80
- ruleset = args.first
81
- params = args.length > 1 ? args.last : {}
82
- else
83
- params = args.first
84
- end
85
- e = self.new({:ruleset => ruleset})
86
- e.signal(meth.to_sym, params)
87
- else
88
- super
89
- end
90
- end
91
-
92
103
  private
93
104
 
94
- def run_event(e, params)
105
+ def run_event(e, p)
95
106
  # run the event
96
-
97
- # set the default params as an empty hash
98
-
99
- params ||= {}
100
-
107
+ @params = p
101
108
  kns_json = {"directives" => []}
102
109
 
103
110
  begin
@@ -105,6 +112,10 @@ module Kynetx
105
112
 
106
113
  if @events.keys.include? e
107
114
  @events[e][:block].call(params)
115
+
116
+ if self.methods.include? "before_#{e}"
117
+ send "before_#{e}".to_sym
118
+ end
108
119
  else
109
120
  raise "Undefined event #{e.to_s}"
110
121
  end
@@ -169,8 +180,17 @@ module Kynetx
169
180
  # execute the returned directives
170
181
  directive_output = []
171
182
  kns_json["directives"].each do |d|
172
- o = run_directive(d["name"].to_sym, d["options"]) if @directives.keys.include?(d["name"].to_sym)
173
- directive_output.push o
183
+ directive = d["name"].to_sym
184
+ d_opts = d["options"]
185
+ if @directives.keys.include?(directive)
186
+ o = run_directive(directive, d_opts)
187
+ directive_output.push o
188
+
189
+ if self.methods.include? "after_#{directive}"
190
+ send "after_#{directive}".to_sym, d_opts
191
+ end
192
+
193
+ end
174
194
  end
175
195
 
176
196
  return directive_output
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kns_endpoint
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 8
10
- version: 0.1.8
9
+ - 9
10
+ version: 0.1.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Farmer
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-22 00:00:00 -07:00
18
+ date: 2010-12-23 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency