rulesio 0.9.10 → 0.10.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/rulesio/base.rb +33 -0
- data/lib/rulesio/exceptions.rb +11 -9
- data/lib/rulesio/girl_friday_queue.rb +1 -1
- data/lib/rulesio/memory_queue.rb +1 -1
- data/lib/rulesio/rack.rb +115 -0
- data/lib/rulesio/railtie.rb +24 -13
- data/lib/rulesio/users.rb +34 -5
- data/lib/rulesio/version.rb +1 -1
- data/lib/rulesio.rb +11 -135
- data/test/test_configuration.rb +23 -21
- metadata +4 -2
data/lib/rulesio/base.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module RulesIO
|
2
|
+
class Base
|
3
|
+
# include Singleton
|
4
|
+
attr_accessor :token, :buffer
|
5
|
+
|
6
|
+
def initialize(token)
|
7
|
+
RulesIO.instance = self
|
8
|
+
puts "INSTANCE SET"
|
9
|
+
@token = token
|
10
|
+
@buffer = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def send_event(event)
|
14
|
+
@buffer << prepare_event(event)
|
15
|
+
end
|
16
|
+
|
17
|
+
def flush
|
18
|
+
return if (events = @buffer).empty?
|
19
|
+
@buffer = []
|
20
|
+
RulesIO.queue.push(:payload => events, :token => @token)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
def prepare_event(event)
|
25
|
+
event = event.with_indifferent_access
|
26
|
+
|
27
|
+
event[:_actor] = event[:_actor].to_s
|
28
|
+
event[:_timestamp] ||= Time.now.to_f
|
29
|
+
|
30
|
+
event
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/rulesio/exceptions.rb
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
# http://sharagoz.com/posts/1-rolling-your-own-exception-handler-in-rails-3
|
4
4
|
|
5
5
|
require 'action_dispatch'
|
6
|
+
require 'rulesio/users'
|
6
7
|
|
7
8
|
module RulesIO
|
8
|
-
class Exceptions
|
9
|
+
class Exceptions < RulesIO::Users
|
9
10
|
include RulesIO::Helpers
|
10
11
|
|
11
12
|
def self.default_ignored_exceptions
|
@@ -19,7 +20,7 @@ module RulesIO
|
|
19
20
|
def initialize(app, options={})
|
20
21
|
@app, @options = app, options
|
21
22
|
@options[:ignore_exceptions] ||= self.class.default_ignored_exceptions
|
22
|
-
@options[:ignore_crawlers] ||=
|
23
|
+
@options[:ignore_crawlers] ||= default_ignored_crawlers
|
23
24
|
@options[:ignore_if] ||= lambda { |env, e| false }
|
24
25
|
@options[:token] ||= RulesIO.token
|
25
26
|
@options[:custom_data] ||= lambda { |env| {} }
|
@@ -30,17 +31,18 @@ module RulesIO
|
|
30
31
|
@app.call(env)
|
31
32
|
rescue Exception => exception
|
32
33
|
env['rulesio.exception'] = exception
|
33
|
-
|
34
|
+
send_event event(env, exception), env unless should_be_ignored(env, exception)
|
34
35
|
raise exception
|
35
36
|
end
|
36
37
|
end
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
RulesIO.post_payload_to_token prep, token
|
38
|
+
|
39
|
+
def send_event(event, env)
|
40
|
+
prep = prepare_event(event, env)
|
41
|
+
RulesIO.post_payload_to_token prep, @options[:token]
|
42
42
|
end
|
43
43
|
|
44
|
+
|
45
|
+
private
|
44
46
|
def should_be_ignored(env, exception)
|
45
47
|
ignored_exception(@options[:ignore_exceptions], exception) ||
|
46
48
|
from_crawler(@options[:ignore_crawlers], env['HTTP_USER_AGENT']) ||
|
@@ -69,7 +71,7 @@ module RulesIO
|
|
69
71
|
:file => fileline(exception),
|
70
72
|
:backtrace => backtrace.join("\n")
|
71
73
|
}.with_indifferent_access
|
72
|
-
useractor =
|
74
|
+
useractor = current_actor(env)
|
73
75
|
event[:_xactor] = useractor if useractor
|
74
76
|
event.merge!(@options[:custom_data].call(env))
|
75
77
|
event
|
@@ -10,7 +10,7 @@ module RulesIO
|
|
10
10
|
super(:rulesio, {:size => 1}.merge(RulesIO.queue_options)) do |msg|
|
11
11
|
retries = 0
|
12
12
|
begin
|
13
|
-
RulesIO.post_payload_to_token msg[:payload],
|
13
|
+
RulesIO.post_payload_to_token msg[:payload], msg[:token]
|
14
14
|
rescue Exception => e
|
15
15
|
if (retries += 1) % 6 == 5
|
16
16
|
RulesIO.logger.warn "RulesIO having trouble sending events; #{retries} attempts so far."
|
data/lib/rulesio/memory_queue.rb
CHANGED
data/lib/rulesio/rack.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
module RulesIO
|
2
|
+
class Rack < Base
|
3
|
+
attr_accessor :filter_parameters, :controller_data, :config_options
|
4
|
+
|
5
|
+
#cattr_accessor :config_options
|
6
|
+
@@config_options = {}
|
7
|
+
|
8
|
+
def self.config_options
|
9
|
+
@@config_options
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.config_options=(opts)
|
13
|
+
@@config_options = opts
|
14
|
+
end
|
15
|
+
|
16
|
+
def default_ignored_crawlers
|
17
|
+
%w(Baidu Gigabot Googlebot libwww-perl lwp-trivial msnbot SiteUptime Slurp WordPress ZIBB ZyBorg Yandex Jyxobot Huaweisymantecspider ApptusBot NewRelicPinger CopperEgg Pingdom UptimeRobot)
|
18
|
+
end
|
19
|
+
|
20
|
+
def initialize(app, options={})
|
21
|
+
self.class.config_options = @config_options = (options || {})
|
22
|
+
RulesIO.instance = self
|
23
|
+
@app = app
|
24
|
+
@buffer = []
|
25
|
+
@filter_parameters ||= defined?(Rails) ? Rails.application.config.filter_parameters : []
|
26
|
+
@token = options[:token]
|
27
|
+
@controller_data = options[:controller_data] || '{}'
|
28
|
+
end
|
29
|
+
|
30
|
+
def call(env)
|
31
|
+
@buffer = []
|
32
|
+
request = ::Rack::Request.new(env)
|
33
|
+
env['rulesio.request_url'] = request.url
|
34
|
+
env['rulesio.request_method'] = request.request_method
|
35
|
+
@app.call(env)
|
36
|
+
ensure
|
37
|
+
flush(env)
|
38
|
+
end
|
39
|
+
|
40
|
+
def send_event(event)
|
41
|
+
@buffer << event
|
42
|
+
end
|
43
|
+
|
44
|
+
def flush(env={})
|
45
|
+
return if (events = @buffer).empty?
|
46
|
+
@buffer = []
|
47
|
+
RulesIO.queue.push(:token => @token, :payload => events.map {|event| prepare_event(event, env)})
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
def prepare_event(event, env)
|
52
|
+
event = event.with_indifferent_access
|
53
|
+
|
54
|
+
current_user = current_user(env) rescue nil
|
55
|
+
actor = current_actor(env) rescue nil
|
56
|
+
|
57
|
+
if controller = env['action_controller.instance']
|
58
|
+
begin
|
59
|
+
data = if RulesIO.controller_data.is_a?(String)
|
60
|
+
controller.instance_eval(RulesIO.controller_data)
|
61
|
+
elsif RulesIO.controller_data.is_a?(Proc) && !RulesIO.controller_data.lambda?
|
62
|
+
controller.instance_eval(&RulesIO.controller_data)
|
63
|
+
else
|
64
|
+
{}
|
65
|
+
end
|
66
|
+
event = data.with_indifferent_access.merge(event)
|
67
|
+
rescue Exception => e
|
68
|
+
RulesIO.logger.warn "RulesIO having trouble with controller_data: #{e}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
event[:_actor] = actor || 'anonymous' unless event[:_actor].present?
|
73
|
+
event[:rails_env] = Rails.env if defined?(Rails)
|
74
|
+
|
75
|
+
unless env.empty?
|
76
|
+
env['rack.input'].rewind
|
77
|
+
request = defined?(Rails) ? ActionDispatch::Request.new(env) : ::Rack::Request.new(env)
|
78
|
+
params = request.params
|
79
|
+
action = page_event_name(request, params)
|
80
|
+
|
81
|
+
event[:_domain] = 'JSON' if event[:_domain] == 'pageview' && params['format'] == 'json'
|
82
|
+
event[:_domain] = 'XML' if event[:_domain] == 'pageview' && params['format'] == 'xml'
|
83
|
+
event[:_name] ||= action
|
84
|
+
event[:_from] ||= current_user.email if current_user && current_user.respond_to?(:email) && current_user.email != event[:_actor]
|
85
|
+
event[:action] = action
|
86
|
+
event[:request_url] = env['rulesio.request_url']
|
87
|
+
event[:request_method] = env['rulesio.request_method']
|
88
|
+
event[:user_agent] = request.user_agent
|
89
|
+
event[:referer_url] = request.referer
|
90
|
+
event[:session] = request.session
|
91
|
+
parameter_filter = ::ActionDispatch::Http::ParameterFilter.new(filter_parameters)
|
92
|
+
event[:params] = parameter_filter.filter(params)
|
93
|
+
end
|
94
|
+
|
95
|
+
event.reject! {|k, v| v.to_s.blank?}
|
96
|
+
event
|
97
|
+
end
|
98
|
+
|
99
|
+
def current_user(env)
|
100
|
+
if controller = env['action_controller.instance']
|
101
|
+
controller.instance_variable_get('@current_user') || controller.instance_eval('current_user')
|
102
|
+
end
|
103
|
+
rescue
|
104
|
+
nil
|
105
|
+
end
|
106
|
+
|
107
|
+
def page_event_name(request, params)
|
108
|
+
if params && params['controller']
|
109
|
+
"#{params['controller']}##{params['action']}"
|
110
|
+
else
|
111
|
+
request.path.gsub('/', '-')[1..-1]
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
data/lib/rulesio/railtie.rb
CHANGED
@@ -19,7 +19,7 @@ module RulesIO
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def middleware(middleware, &block)
|
22
|
-
@middlewares[middleware] = MiddlewareConfigurator.apply(&block)
|
22
|
+
@middlewares[middleware] = MiddlewareConfigurator.apply(self, &block)
|
23
23
|
end
|
24
24
|
|
25
25
|
def queue(queue, options)
|
@@ -38,13 +38,25 @@ module RulesIO
|
|
38
38
|
def girl_friday_options(options)
|
39
39
|
@girl_friday_options = options
|
40
40
|
end
|
41
|
+
|
42
|
+
def configuration
|
43
|
+
{
|
44
|
+
:webhook_url => @webhook_url,
|
45
|
+
:disable_sending_events => @disable,
|
46
|
+
:token => @token,
|
47
|
+
:queue => @queue,
|
48
|
+
:queue_options => @queue_options,
|
49
|
+
:controller_data => @controller_data
|
50
|
+
}
|
51
|
+
end
|
41
52
|
end
|
42
53
|
|
43
54
|
class MiddlewareConfigurator
|
44
|
-
attr_accessor :configuration
|
55
|
+
attr_accessor :configuration, :root
|
45
56
|
|
46
|
-
def self.apply(&block)
|
57
|
+
def self.apply(root, &block)
|
47
58
|
x = new
|
59
|
+
x.root = root
|
48
60
|
x.configure(&block) if block_given?
|
49
61
|
x
|
50
62
|
end
|
@@ -77,17 +89,16 @@ module RulesIO
|
|
77
89
|
if File.exists?(filename)
|
78
90
|
RulesIO::RailsConfigurator.new.instance_eval do
|
79
91
|
eval IO.read(filename), binding, filename.to_s, 1
|
92
|
+
RulesIO.logger = Rails.logger
|
93
|
+
RulesIO.webhook_url = @webhook_url || 'https://www.rules.io/events/'
|
94
|
+
RulesIO.queue = @queue || RulesIO::MemoryQueue
|
95
|
+
RulesIO.queue_options = @queue_options || {}
|
96
|
+
RulesIO.disable_sending_events = @disable_sending_events || false
|
80
97
|
if defined?(::Rails.configuration) && ::Rails.configuration.respond_to?(:middleware)
|
81
|
-
::Rails.configuration.middleware.insert 0, 'RulesIO::Rack',
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
:queue => @queue,
|
86
|
-
:queue_options => @queue_options,
|
87
|
-
:controller_data => @controller_data
|
88
|
-
::Rails.configuration.middleware.use('RulesIO::Users', @middlewares[:users].configuration) if @middlewares.has_key?(:users)
|
89
|
-
::Rails.configuration.middleware.use('RulesIO::Users', @middlewares[:pageviews].configuration) if @middlewares.has_key?(:pageviews)
|
90
|
-
::Rails.configuration.middleware.use('RulesIO::Exceptions', @middlewares[:exceptions].configuration) if @middlewares.has_key?(:exceptions)
|
98
|
+
::Rails.configuration.middleware.insert 0, 'RulesIO::Rack', configuration
|
99
|
+
::Rails.configuration.middleware.use('RulesIO::Users', configuration.merge(@middlewares[:users].configuration)) if @middlewares.has_key?(:users)
|
100
|
+
::Rails.configuration.middleware.use('RulesIO::Users', configuration.merge(@middlewares[:pageviews].configuration)) if @middlewares.has_key?(:pageviews)
|
101
|
+
::Rails.configuration.middleware.use('RulesIO::Exceptions', configuration.merge(@middlewares[:exceptions].configuration)) if @middlewares.has_key?(:exceptions)
|
91
102
|
end
|
92
103
|
end
|
93
104
|
else
|
data/lib/rulesio/users.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'action_dispatch'
|
2
2
|
|
3
3
|
module RulesIO
|
4
|
-
class Users
|
5
|
-
include
|
6
|
-
|
4
|
+
class Users < RulesIO::Rack
|
5
|
+
include Helpers
|
7
6
|
def initialize(app, options={})
|
8
|
-
@app, @options = app, options
|
9
|
-
@options
|
7
|
+
@app, @options = app, RulesIO::Rack.config_options.merge(options)
|
8
|
+
super(@app, @options)
|
9
|
+
@options[:ignore_crawlers] ||= default_ignored_crawlers
|
10
10
|
@options[:ignore_if] ||= Proc.new { |env| false }
|
11
11
|
@options[:ignore_if_controller] ||= 'false'
|
12
12
|
@options[:custom_data] ||= Proc.new { |env| {} }
|
@@ -73,5 +73,34 @@ module RulesIO
|
|
73
73
|
event
|
74
74
|
end
|
75
75
|
|
76
|
+
def current_actor(env)
|
77
|
+
if controller = env['action_controller.instance']
|
78
|
+
begin
|
79
|
+
data = if @controller_data.is_a?(String)
|
80
|
+
controller.instance_eval(@controller_data)
|
81
|
+
elsif @controller_data.is_a?(Proc) && !@controller_data.lambda?
|
82
|
+
controller.instance_eval(&@controller_data)
|
83
|
+
else
|
84
|
+
{}
|
85
|
+
end
|
86
|
+
data = data.with_indifferent_access
|
87
|
+
return data[:_actor] if data[:_actor]
|
88
|
+
rescue Exception => e
|
89
|
+
puts e.message
|
90
|
+
puts e.backtrace.join("\n")
|
91
|
+
end
|
92
|
+
|
93
|
+
begin
|
94
|
+
user = controller.instance_variable_get('@current_user') || controller.instance_eval('current_user')
|
95
|
+
[:to_param, :id].each do |method|
|
96
|
+
return user.send(method) if user && user.respond_to?(method)
|
97
|
+
end
|
98
|
+
rescue Exception => e
|
99
|
+
puts e.message
|
100
|
+
puts e.backtrace.join("\n")
|
101
|
+
end
|
102
|
+
end
|
103
|
+
nil
|
104
|
+
end
|
76
105
|
end
|
77
106
|
end
|
data/lib/rulesio/version.rb
CHANGED
data/lib/rulesio.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'rulesio/version'
|
2
2
|
require 'rulesio/helpers'
|
3
|
-
require 'rulesio/
|
3
|
+
require 'rulesio/base'
|
4
|
+
require 'rulesio/rack'
|
4
5
|
require 'rulesio/users'
|
6
|
+
require 'rulesio/exceptions'
|
5
7
|
require 'rulesio/girl_friday_queue'
|
6
8
|
require 'rulesio/memory_queue'
|
7
9
|
require 'net/http'
|
@@ -12,21 +14,16 @@ require 'active_support/core_ext/hash/indifferent_access'
|
|
12
14
|
require 'action_dispatch/http/parameter_filter'
|
13
15
|
|
14
16
|
module RulesIO
|
15
|
-
mattr_accessor :
|
16
|
-
|
17
|
-
def self.default_ignored_crawlers
|
18
|
-
%w(Baidu Gigabot Googlebot libwww-perl lwp-trivial msnbot SiteUptime Slurp WordPress ZIBB ZyBorg Yandex Jyxobot Huaweisymantecspider ApptusBot NewRelicPinger CopperEgg Pingdom UptimeRobot)
|
19
|
-
end
|
17
|
+
mattr_accessor :webhook_url, :queue, :queue_options, :logger, :disable_sending_events, :instance
|
20
18
|
|
21
|
-
|
22
|
-
|
19
|
+
@logger = Logger.new(STDOUT)
|
20
|
+
|
21
|
+
def self.send_event(*args)
|
22
|
+
instance.send_event(*args)
|
23
23
|
end
|
24
|
-
|
25
|
-
def self.flush
|
26
|
-
|
27
|
-
RulesIO.buffer = []
|
28
|
-
RulesIO.queue.push(:payload => events.map {|event| RulesIO.prepare_event(event, env)})
|
29
|
-
# RulesIO.post_payload_to_token events.to_json, RulesIO.token
|
24
|
+
|
25
|
+
def self.flush
|
26
|
+
instance.flush
|
30
27
|
end
|
31
28
|
|
32
29
|
def self.post_payload_to_token(payload, token)
|
@@ -41,127 +38,6 @@ module RulesIO
|
|
41
38
|
http.request(req)
|
42
39
|
end
|
43
40
|
end
|
44
|
-
|
45
|
-
def self.current_user(env)
|
46
|
-
if controller = env['action_controller.instance']
|
47
|
-
controller.instance_variable_get('@current_user') || controller.instance_eval('current_user')
|
48
|
-
end
|
49
|
-
rescue
|
50
|
-
nil
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.current_actor(env)
|
54
|
-
if controller = env['action_controller.instance']
|
55
|
-
begin
|
56
|
-
data = if RulesIO.controller_data.is_a?(String)
|
57
|
-
controller.instance_eval(RulesIO.controller_data)
|
58
|
-
elsif RulesIO.controller_data.is_a?(Proc) && !RulesIO.controller_data.lambda?
|
59
|
-
controller.instance_eval(&RulesIO.controller_data)
|
60
|
-
else
|
61
|
-
{}
|
62
|
-
end
|
63
|
-
data = data.with_indifferent_access
|
64
|
-
return data[:_actor] if data[:_actor]
|
65
|
-
rescue Exception => e
|
66
|
-
puts e.message
|
67
|
-
puts e.backtrace.join("\n")
|
68
|
-
end
|
69
|
-
|
70
|
-
begin
|
71
|
-
user = controller.instance_variable_get('@current_user') || controller.instance_eval('current_user')
|
72
|
-
[:to_param, :id].each do |method|
|
73
|
-
return user.send(method) if user && user.respond_to?(method)
|
74
|
-
end
|
75
|
-
rescue Exception => e
|
76
|
-
puts e.message
|
77
|
-
puts e.backtrace.join("\n")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
nil
|
81
|
-
end
|
82
|
-
|
83
|
-
private
|
84
|
-
def self.page_event_name(request, params)
|
85
|
-
if params && params['controller']
|
86
|
-
"#{params['controller']}##{params['action']}"
|
87
|
-
else
|
88
|
-
request.path.gsub('/', '-')[1..-1]
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
def self.prepare_event(event, env)
|
93
|
-
event = event.with_indifferent_access
|
94
|
-
|
95
|
-
current_user = current_user(env)
|
96
|
-
actor = current_actor(env)
|
97
|
-
|
98
|
-
if controller = env['action_controller.instance']
|
99
|
-
begin
|
100
|
-
data = if RulesIO.controller_data.is_a?(String)
|
101
|
-
controller.instance_eval(RulesIO.controller_data)
|
102
|
-
elsif RulesIO.controller_data.is_a?(Proc) && !RulesIO.controller_data.lambda?
|
103
|
-
controller.instance_eval(&RulesIO.controller_data)
|
104
|
-
else
|
105
|
-
{}
|
106
|
-
end
|
107
|
-
event = data.with_indifferent_access.merge(event)
|
108
|
-
rescue Exception => e
|
109
|
-
RulesIO.logger.warn "RulesIO having trouble with controller_data: #{e}"
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
event[:_actor] = actor || 'anonymous' unless event[:_actor].present?
|
114
|
-
event[:_timestamp] ||= Time.now.to_f
|
115
|
-
event[:rails_env] = Rails.env if defined?(Rails)
|
116
|
-
|
117
|
-
unless env.empty?
|
118
|
-
env['rack.input'].rewind
|
119
|
-
request = defined?(Rails) ? ActionDispatch::Request.new(env) : ::Rack::Request.new(env)
|
120
|
-
params = request.params
|
121
|
-
action = page_event_name(request, params)
|
122
|
-
|
123
|
-
event[:_domain] = 'JSON' if event[:_domain] == 'pageview' && params['format'] == 'json'
|
124
|
-
event[:_domain] = 'XML' if event[:_domain] == 'pageview' && params['format'] == 'xml'
|
125
|
-
event[:_name] ||= action
|
126
|
-
event[:_from] ||= current_user.email if current_user && current_user.respond_to?(:email) && current_user.email != event[:_actor]
|
127
|
-
event[:action] = action
|
128
|
-
event[:request_url] = env['rulesio.request_url']
|
129
|
-
event[:request_method] = env['rulesio.request_method']
|
130
|
-
event[:user_agent] = request.user_agent
|
131
|
-
event[:referer_url] = request.referer
|
132
|
-
event[:session] = request.session
|
133
|
-
parameter_filter = ::ActionDispatch::Http::ParameterFilter.new(RulesIO.filter_parameters)
|
134
|
-
event[:params] = parameter_filter.filter(params)
|
135
|
-
end
|
136
|
-
|
137
|
-
event.reject! {|k, v| v.to_s.blank?}
|
138
|
-
event
|
139
|
-
end
|
140
|
-
|
141
|
-
class Rack
|
142
|
-
def initialize(app, options={})
|
143
|
-
@app = app
|
144
|
-
RulesIO.logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
|
145
|
-
RulesIO.webhook_url = options[:webhook_url] || 'https://www.rules.io/events/'
|
146
|
-
RulesIO.buffer = []
|
147
|
-
RulesIO.filter_parameters = defined?(Rails) ? Rails.application.config.filter_parameters : []
|
148
|
-
RulesIO.token = options[:token]
|
149
|
-
RulesIO.queue = options[:queue] || RulesIO::MemoryQueue
|
150
|
-
RulesIO.queue_options = options[:queue_options] || {}
|
151
|
-
RulesIO.controller_data = options[:controller_data] || '{}'
|
152
|
-
RulesIO.disable_sending_events = options[:disable_sending_events] || false
|
153
|
-
end
|
154
|
-
|
155
|
-
def call(env)
|
156
|
-
RulesIO.buffer = []
|
157
|
-
request = ::Rack::Request.new(env)
|
158
|
-
env['rulesio.request_url'] = request.url
|
159
|
-
env['rulesio.request_method'] = request.request_method
|
160
|
-
@app.call(env)
|
161
|
-
ensure
|
162
|
-
RulesIO.flush(env)
|
163
|
-
end
|
164
|
-
end
|
165
41
|
end
|
166
42
|
|
167
43
|
require 'rulesio/railtie' if defined?(Rails)
|
data/test/test_configuration.rb
CHANGED
@@ -5,7 +5,7 @@ require "rulesio/girl_friday_queue"
|
|
5
5
|
MockController = Class.new
|
6
6
|
|
7
7
|
class TestConfiguration < Test::Unit::TestCase
|
8
|
-
REDIS = Object.new
|
8
|
+
REDIS = APP = Object.new
|
9
9
|
|
10
10
|
STRING_CONFIGURATION = <<-CONFIG
|
11
11
|
token 'FOOF'
|
@@ -30,23 +30,23 @@ class TestConfiguration < Test::Unit::TestCase
|
|
30
30
|
PROC_CONFIGURATION = <<-CONFIG
|
31
31
|
token 'FOOF'
|
32
32
|
queue RulesIO::GirlFridayQueue, :store => GirlFriday::Store::Redis, :store_config => { :pool => TestConfiguration::REDIS }
|
33
|
-
controller_data
|
33
|
+
controller_data proc { {:_actor => self.current_user.try(:email) || 'anonymous'} }
|
34
34
|
|
35
35
|
middleware :users do
|
36
|
-
ignore_if_controller
|
36
|
+
ignore_if_controller proc { self.is_a?(MockController) && ["create", "recent"].include?(params[:action]) }
|
37
37
|
end
|
38
38
|
CONFIG
|
39
39
|
|
40
40
|
setup do
|
41
|
-
Rails.
|
42
|
-
Rails.
|
41
|
+
Rails.stubs(:logger)
|
42
|
+
Rails.stubs(:application).returns(stub(:config => stub(:filter_parameters => [])))
|
43
43
|
@rc = RulesIO::RailsConfigurator.new
|
44
44
|
end
|
45
45
|
|
46
46
|
test "general configuration works" do
|
47
|
-
user_middleware = @rc.instance_eval do
|
47
|
+
rack_middleware, user_middleware = @rc.instance_eval do
|
48
48
|
eval TestConfiguration::STRING_CONFIGURATION, binding, __FILE__, __LINE__
|
49
|
-
RulesIO::Rack.new(
|
49
|
+
a = RulesIO::Rack.new(APP,
|
50
50
|
:webhook_url => @webhook_url,
|
51
51
|
:disable_sending_events => @disable,
|
52
52
|
:token => @token,
|
@@ -54,18 +54,18 @@ class TestConfiguration < Test::Unit::TestCase
|
|
54
54
|
:queue_options => @queue_options,
|
55
55
|
:controller_data => @controller_data
|
56
56
|
)
|
57
|
-
RulesIO::Users.new(
|
57
|
+
b = RulesIO::Users.new(APP, @middlewares[:users].configuration)
|
58
|
+
[a,b]
|
58
59
|
end
|
59
60
|
assert_not_nil @rc.middlewares
|
60
|
-
assert_equal 'FOOF',
|
61
|
-
assert_equal RulesIO::GirlFridayQueue, RulesIO.queue
|
61
|
+
assert_equal 'FOOF', rack_middleware.token
|
62
62
|
assert_equal 'self.is_a?(MockController) && ["create", "recent"].include?(params[:action])', user_middleware.instance_variable_get(:@options)[:ignore_if_controller]
|
63
63
|
end
|
64
64
|
|
65
65
|
test "configuring blocks as strings works" do
|
66
|
-
user_middleware = @rc.instance_eval do
|
66
|
+
rack_middleware, user_middleware = @rc.instance_eval do
|
67
67
|
eval TestConfiguration::STRING_CONFIGURATION, binding, __FILE__, __LINE__
|
68
|
-
RulesIO::Rack.new(
|
68
|
+
a = RulesIO::Rack.new(APP,
|
69
69
|
:webhook_url => @webhook_url,
|
70
70
|
:disable_sending_events => @disable,
|
71
71
|
:token => @token,
|
@@ -73,7 +73,8 @@ class TestConfiguration < Test::Unit::TestCase
|
|
73
73
|
:queue_options => @queue_options,
|
74
74
|
:controller_data => @controller_data
|
75
75
|
)
|
76
|
-
RulesIO::Users.new(
|
76
|
+
b = RulesIO::Users.new(APP, @middlewares[:users].configuration)
|
77
|
+
[a,b]
|
77
78
|
end
|
78
79
|
|
79
80
|
assert @rc.middlewares[:users].configuration[:ignore_if_controller].is_a? String
|
@@ -83,14 +84,14 @@ class TestConfiguration < Test::Unit::TestCase
|
|
83
84
|
stub_controller_instance = stub(:current_user => stub(:email => 'email@example.com'), :params => {:action => 'update'})
|
84
85
|
stub_controller_instance.expects(:is_a?).with(MockController).returns(true)
|
85
86
|
env = {'action_controller.instance' => stub_controller_instance}
|
86
|
-
assert_equal 'email@example.com',
|
87
|
+
assert_equal 'email@example.com', user_middleware.send(:current_actor, env)
|
87
88
|
assert_equal false, user_middleware.send(:should_be_ignored, env)
|
88
89
|
end
|
89
90
|
|
90
91
|
test "configuring blocks as lambdas DOES NOT work" do
|
91
|
-
user_middleware = @rc.instance_eval do
|
92
|
+
rack_middleware, user_middleware = @rc.instance_eval do
|
92
93
|
eval TestConfiguration::BLOCK_CONFIGURATION
|
93
|
-
RulesIO::Rack.new(
|
94
|
+
a = RulesIO::Rack.new(APP,
|
94
95
|
:webhook_url => @webhook_url,
|
95
96
|
:disable_sending_events => @disable,
|
96
97
|
:token => @token,
|
@@ -98,7 +99,8 @@ class TestConfiguration < Test::Unit::TestCase
|
|
98
99
|
:queue_options => @queue_options,
|
99
100
|
:controller_data => @controller_data
|
100
101
|
)
|
101
|
-
RulesIO::Users.new(
|
102
|
+
b = RulesIO::Users.new(APP, @middlewares[:users].configuration)
|
103
|
+
[a,b]
|
102
104
|
end
|
103
105
|
|
104
106
|
assert @rc.middlewares[:users].configuration[:ignore_if_controller].is_a? Proc
|
@@ -111,14 +113,14 @@ class TestConfiguration < Test::Unit::TestCase
|
|
111
113
|
stub_controller_instance.expects(:is_a?).never
|
112
114
|
env = {'action_controller.instance' => stub_controller_instance}
|
113
115
|
# returns nil, because lambda doesn't work right with instance_eval
|
114
|
-
assert_equal nil,
|
116
|
+
assert_equal nil, user_middleware.send(:current_actor, env)
|
115
117
|
assert_equal false, user_middleware.send(:should_be_ignored, env)
|
116
118
|
end
|
117
119
|
|
118
120
|
test "configuring blocks as Procs works" do
|
119
121
|
user_middleware = @rc.instance_eval do
|
120
122
|
eval TestConfiguration::PROC_CONFIGURATION, binding, __FILE__, __LINE__
|
121
|
-
RulesIO::Rack.new(
|
123
|
+
RulesIO::Rack.new(APP,
|
122
124
|
:webhook_url => @webhook_url,
|
123
125
|
:disable_sending_events => @disable,
|
124
126
|
:token => @token,
|
@@ -126,7 +128,7 @@ class TestConfiguration < Test::Unit::TestCase
|
|
126
128
|
:queue_options => @queue_options,
|
127
129
|
:controller_data => @controller_data
|
128
130
|
)
|
129
|
-
RulesIO::Users.new(
|
131
|
+
RulesIO::Users.new(APP, @middlewares[:users].configuration)
|
130
132
|
end
|
131
133
|
|
132
134
|
assert @rc.middlewares[:users].configuration[:ignore_if_controller].is_a? Proc
|
@@ -137,7 +139,7 @@ class TestConfiguration < Test::Unit::TestCase
|
|
137
139
|
stub_controller_instance = stub(:current_user => stub(:email => 'email@example.com'), :params => {:action => 'update'})
|
138
140
|
stub_controller_instance.expects(:is_a?).with(MockController).returns(true)
|
139
141
|
env = {'action_controller.instance' => stub_controller_instance}
|
140
|
-
assert_equal 'email@example.com',
|
142
|
+
assert_equal 'email@example.com', user_middleware.send(:current_actor, env)
|
141
143
|
assert_equal false, user_middleware.send(:should_be_ignored, env)
|
142
144
|
end
|
143
145
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rulesio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-02-
|
13
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -155,10 +155,12 @@ files:
|
|
155
155
|
- Rakefile
|
156
156
|
- lib/rulesio.rb
|
157
157
|
- lib/rulesio/active_record_extension.rb
|
158
|
+
- lib/rulesio/base.rb
|
158
159
|
- lib/rulesio/exceptions.rb
|
159
160
|
- lib/rulesio/girl_friday_queue.rb
|
160
161
|
- lib/rulesio/helpers.rb
|
161
162
|
- lib/rulesio/memory_queue.rb
|
163
|
+
- lib/rulesio/rack.rb
|
162
164
|
- lib/rulesio/railtie.rb
|
163
165
|
- lib/rulesio/users.rb
|
164
166
|
- lib/rulesio/version.rb
|