preact 0.8.2 → 0.8.3

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.
@@ -17,7 +17,7 @@ Preact.configure do |config|
17
17
 
18
18
  # specify controller#action items that you want to ignore and not log to Preact.
19
19
  # default is to not log sessions#create beacuse if you're using Devise, we get that already
20
- config.autolog_ignored_actions = ["sessions#create"]
20
+ config.autolog_ignored_actions = ["sessions#create", "devise/sessions#create"]
21
21
 
22
22
  # disable in Rails non-production environments
23
23
  # uncomment this if you don't want to log development activities
@@ -113,9 +113,7 @@ module Preact
113
113
  :name => user.name,
114
114
  :email => user.email,
115
115
  :uid => user.id,
116
- :properties => {
117
- :created_at => (user.created_at.to_i if user.respond_to?(:created_at))
118
- }
116
+ :created_at => (user.created_at.to_i if user.respond_to?(:created_at))
119
117
  }
120
118
  end
121
119
 
@@ -3,12 +3,12 @@ class Preact::Person < Preact::ApiObject
3
3
  attr_accessor :name, :email, :external_identifier, :properties, :uid, :created_at
4
4
 
5
5
  def as_json(options={})
6
- {
6
+ d = {
7
7
  :name => self.name,
8
8
  :email => self.email,
9
9
  :uid => self.uid || self.external_identifier,
10
- :created_at => self.created_at.to_i,
11
- :properties => self.properties
10
+ :created_at => self.created_at ? self.created_at.to_i : nil,
11
+ :properties => self.properties || {}
12
12
  }
13
13
  end
14
14
 
@@ -1,16 +1,18 @@
1
1
  module Preact
2
2
  module Controllers
3
3
  module Helpers
4
- extend ActiveSupport::Concern
5
4
 
6
5
  def preact_autolog_controller_action
6
+
7
7
  # only track logged-in users
8
8
  return true unless current_user
9
+
10
+ # don't autolog if we logged something already on this controller execution
11
+ # this allows you to add better preact logging in your controller and not get duplicate logging
12
+ return true if defined?(@preact_logged_event)
9
13
 
10
14
  controller = params[:controller]
11
15
  action = params[:action]
12
- target_id = params[:id]
13
- note = nil
14
16
 
15
17
  return true unless controller && action
16
18
 
@@ -18,15 +20,11 @@ module Preact
18
20
 
19
21
  event_name = "#{controller}##{action}"
20
22
 
21
- if response.status == 404
22
- note = "NOT FOUND"
23
- elsif response.status == 500
24
- event_name = "!#{event_name}--error"
25
- end
23
+ note = self.guess_target_item_name(controller)
26
24
 
27
25
  event = {
28
26
  :name => event_name,
29
- :target_id => target_id,
27
+ :target_id => params[:id],
30
28
  :medium => "autolog-rails-v1.0",
31
29
  :note => note,
32
30
  :extras => {
@@ -39,6 +37,9 @@ module Preact
39
37
  preact_log(event)
40
38
 
41
39
  true
40
+ rescue => ex
41
+ Preact.logger.warn "[Preact] Autolog failed: #{ex.message}"
42
+ true # always returns strue no matter what...
42
43
  end
43
44
 
44
45
  # helper method on the controller to make logging events easy
@@ -48,6 +49,9 @@ module Preact
48
49
  else
49
50
  Preact.log_event(current_user, event)
50
51
  end
52
+
53
+ # make a note that we've logged an event on this controller
54
+ @preact_logged_event = event
51
55
  end
52
56
 
53
57
  # attach the after_filter to all controllers if we've enabled autologging
@@ -57,6 +61,21 @@ module Preact
57
61
  end
58
62
  end
59
63
 
64
+
65
+ protected
66
+
67
+ def guess_target_item_name(controller)
68
+ # get a little too clever and try to see if we've loaded an item
69
+ guessed_target_variable = controller.split("/").last.singularize rescue nil
70
+ if guessed_target_variable
71
+ if guessed_target_item = self.instance_variable_get("@#{guessed_target_variable}")
72
+ return guessed_target_item.name if guessed_target_item.respond_to?(:name)
73
+ return guessed_target_item.title if guessed_target_item.respond_to?(:title)
74
+ end
75
+ end
76
+ nil
77
+ end
78
+
60
79
  end
61
80
  end
62
81
  end
@@ -1,3 +1,3 @@
1
1
  module Preact
2
- VERSION = "0.8.2"
2
+ VERSION = "0.8.3"
3
3
  end
data/readme.md CHANGED
@@ -8,28 +8,87 @@ Installation
8
8
  In your Gemfile:
9
9
 
10
10
  ```ruby
11
- gem 'preact'
11
+ gem 'preact', "~> 0.8.0"
12
12
  ```
13
13
 
14
+ Then do a `bundle install` to get the gem.
15
+
14
16
  Configuration
15
17
  ---
16
18
 
17
- Configure Preact with your API credentials. You can find your Preact credentials on the [API settings page](https://secure.preact.io/settings/api) (This should go in an initializer file named `/config/initializers/preact.rb` in Rails applications)
19
+ In version 0.8.1 we added a rails generator to make it really easy to add the initializer and get you up and running.
20
+
21
+ First, obtain your Preact Project Code and API Secret from the [API settings page](https://secure.preact.io/settings/api). Then, in your application directory, run the generator:
22
+
23
+ ```bash
24
+ rails g preact your-code-1234 api-secret-xyzw
25
+ ```
26
+
27
+ That will generate a preact.rb initializer that looks something like this:
18
28
 
19
29
  ```ruby
20
30
  Preact.configure do |config|
21
- config.code = 'abcdefg' # required
22
- config.secret = '1234asdfasdf1234' # required
31
+ config.code = 'your-code-1234' # required
32
+ config.secret = 'api-secret-xyzw' # required
23
33
 
34
+ config.autolog = true
35
+ config.autolog_ignored_actions = ["sessions#create"]
36
+
24
37
  # Disable in Rails development environments
25
38
  # config.disabled = Rails.env.development?
39
+ end
40
+ ```
41
+
42
+ Now when you launch your app and do something as an authenticated user, you should see the activity in Preact.
43
+
44
+ Autolog
45
+ ---
46
+
47
+ New in version 0.8.1 is the ability to automatically log all controller-based actions that your authenticated users are performing.
48
+
49
+ In many cases, you won't need to do anything other than put the gem in your Gemfile, bundle, and run the generator.
50
+
51
+ This works by creating an method on the ActiveController::Base class and setting it as an after_filter for all controllers. We assume that you're using Devise/Warden, because everyone does, and can directly access that to identify who the current_user is. With Autolog enabled, what you will see is rails routes-style events in Preact for each user.
52
+
53
+ We turn Autolog on by default when you use the generator to build the preact.rb initializer, but if you're upgrading from an existing preact-ruby install you will need to manually update your config.
54
+
55
+ You can configure controllers and routes to ignore by adding them in the initializer as well. If you want to ignore a specific action, you can include it like so:
56
+
57
+ ```ruby
58
+ config.autolog_ignored_actions = [
59
+ "documents#new", # ignores the new action on the documents_controller
60
+ "people#new", # ignores the new action on the people_controller
61
+ "secret_pages#*" # ignores ALL actions on the secret_pages_controller
62
+ ]
63
+ ```
64
+
65
+ Rails Controller Helper
66
+ ---
67
+
68
+ Since version 0.8.1, we include a helper method on the base controller called `preact_log` to make it convenient for you to log events directly.
69
+
70
+ The helper is aware of the current_user and so only requires you to pass the event information as things occur. So for instance, you may log a simple event from one of yoru controllers like so:
71
+
72
+ ```ruby
73
+ class DocumentsController < ApplicationController
74
+ def show
75
+ # YOUR CODE STUFF HERE
76
+
77
+ preact_log("did-something-cool")
78
+ end
26
79
 
27
- # Uncomment this this line to customize the data sent with your Person objects.
28
- # Your custom procedure should return a Hash of attributes
29
- # config.person_builder = lambda {|user| {:keys => :values}}
30
-
31
- # Defaults to Rails.logger or Logger.new(STDOUT). Set to Logger.new('/dev/null') to disable logging.
32
- # config.logger = Logger.new('/dev/null')
80
+ def search
81
+ # YOUR CODE STUFF HERE
82
+
83
+ preact_log({
84
+ name: "searched-documents",
85
+ note: @search_term,
86
+ extras: {
87
+ term: @search_term,
88
+ result_count: @results.count
89
+ }
90
+ })
91
+ end
33
92
  end
34
93
  ```
35
94
 
@@ -138,19 +197,13 @@ All you need to do is add `require 'preact/sidekiq'` at the top of your `preact.
138
197
 
139
198
  Devise / Warden Integration
140
199
  --
141
- Automatically log your login/logout events by including this in your `preact.rb` initializer. Just put it under the Preact config block.
200
+ If you are using Warden, Preact will automatically log your login/logout events.
201
+ If when Preact loads, it notices that a ::Warden class is defined, it will require the preact/warden module which adds the appropriate hooks into Warden.
142
202
 
143
- ```ruby
144
- # after-auth hook to log the login
145
- Warden::Manager.after_authentication do |user,auth,opts|
146
- Preact.log_event(user, "logged-in")
147
- end
148
- Warden::Manager.before_logout do |user,auth,opts|
149
- Preact.log_event(user, "logged-out")
150
- end
151
- ```
152
203
 
153
204
 
205
+ License
206
+ --
154
207
  Copyright (c) 2011-2013 Christopher Gooley, Preact / Less Neglect, Inc. See LICENSE.txt for further details.
155
208
 
156
209
  Thanks to [Zach Millman](https://github.com/zmillman) for many contributions.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: preact
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: