devise-activity 0.1.4 → 0.1.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11b74f54908a949e1fd7f77824b911847162465692517b1593127440f0e802ca
4
- data.tar.gz: 89582a91b0f7e5070d0f42a83027af79f3134c6c107278103f78af09c79bf173
3
+ metadata.gz: 7d2df215d3525ec9108eb6ea3ced82541277bc90bab084aa4a2963b64f4ecb8e
4
+ data.tar.gz: a17d8a0a190f94bd6927141ec5a12522ac501874a36658c5f21164248b586749
5
5
  SHA512:
6
- metadata.gz: e14f5b7c687c90c2347e805e00e9e8ba42b930f977915fd01ef345474d89afdcd18920cbe1c897b12ec20b8314b817ef457994750043410ef712789462157769
7
- data.tar.gz: d699cdb824ce163a8de475b3939138eb6b0d4a97bf911ce3a4a94e9699b8319a4587bccd604bedd123d5dcc1cea7f0f92865093f548231e7fc002bac83800dbf
6
+ metadata.gz: 99f7eb0ff9f06df3348b87eebf24b5eecce1afadcd9461c272205ccaa7c792e784342ad97174b317d148fd5146b7c06e75ed8dafd0217596b6814030e684f0f7
7
+ data.tar.gz: fbb2ee8d65a870b82fe5ee4ec75cf295d8c7255ec121a439f477bceacc020332344da759ff57616b161c03573f4205b1630e42a7dae3c9af5d4c397753d6a79c
data/README.rdoc CHANGED
@@ -1,16 +1,12 @@
1
- = Trackstamps
1
+ = DeviseActivity
2
2
 
3
- Track which user created or updated record in rails. This gem depends on devise gem and uses devise 'current_user' helper method.
4
-
5
- == Dependency
6
-
7
- This gem depends on devise gem and uses devise 'current_user' helper method.
3
+ Keep history of user page views and time spent on differnt pages in rails. This gem depends on devise gem and uses devise 'current_user' helper method which can be configured.
8
4
 
9
5
  == Installation
10
6
 
11
7
  Simply add trackstamps gem to your Gemfile.
12
8
 
13
- gem 'trackstamps'
9
+ gem 'devise-activity'
14
10
 
15
11
  Install bundler gems
16
12
 
@@ -18,20 +14,17 @@ Install bundler gems
18
14
 
19
15
  Install trackstamps
20
16
 
21
- rails generate trackstamps:install
17
+ rails generate devise_activity:install
22
18
 
19
+ You can change sessions and navigations table names from generated configuration file (config/initializers/devise_activity.rb) before generating migration.
23
20
  Generate migration on required model's table
24
21
 
25
- rails generate trackstamps:migration table_name
26
-
27
- i.e. if you need to track changes on Account model, you need to do this
22
+ rails generate devise_activity:migration
28
23
 
29
- rails generate trackstamps:migration accounts
24
+ Include DeviseActivity module to application controller or admin etc for which you want to track user activities
30
25
 
31
- It will automatically include trackstamps module inside your model class
32
-
33
- class Account < ActiveRecord::Base
34
- include Trackstamps
26
+ class ApplicationController
27
+ include DeviseActivity
35
28
 
36
29
  .....
37
30
 
@@ -46,19 +39,22 @@ And now you are ready to track changes
46
39
 
47
40
  == Usage
48
41
 
49
- It will automatically track record is created or updated by which user. i.e.
42
+ It will automatically keep of sign in's, sign out's and page views history in sessions and navigations table i.e.
50
43
 
51
- Account.last.creator
44
+ Session.all
52
45
 
53
46
  will return last account was created by which user. Similarily
54
47
 
55
- Account.find(8).updater
48
+ Session.last.navigations
49
+
50
+ Session.where(user_id: 12).all
51
+
52
+ Session.where(user_id: 12).last.navigations
56
53
 
57
54
  will tells us which user updated account with id 8
58
55
 
59
56
  == TODO
60
57
 
61
- * Autodiscover devise model class
62
58
  * Mongoid ORM support
63
59
 
64
60
  == Contributing
@@ -2,10 +2,19 @@ module DeviseActivity
2
2
  class Configuration
3
3
  attr_accessor :sessions_table_name,
4
4
  :navigations_table_name,
5
- :devise_model_name
5
+ :devise_model_name,
6
+ :sign_in_controller_name,
7
+ :sign_in_action_name,
8
+ :sign_out_controller_name,
9
+ :sign_out_action_name
6
10
 
7
11
  def initialize
8
-
12
+ @sessions_table_name = 'sessions'
13
+ @navigations_table_name = 'navigations'
14
+ @sign_in_controller_name = 'sessions'
15
+ @sign_in_action_name = 'create'
16
+ @sign_out_controller_name = 'sessions'
17
+ @sign_out_action_name = 'destroy'
9
18
  end
10
19
  end
11
20
  end
@@ -0,0 +1,8 @@
1
+ module DeviseActivity
2
+ module Extenders
3
+ module Navigation
4
+ # TODO: attrs tracking
5
+ end
6
+ end
7
+
8
+ end
@@ -0,0 +1,7 @@
1
+ module DeviseActivity
2
+ module Extenders
3
+ module Session
4
+ # TODO: attrs tracking
5
+ end
6
+ end
7
+ end
@@ -1,5 +1,8 @@
1
1
  module DeviseActivity
2
2
  class Navigation < ApplicationRecord
3
- #self.table_name = DeviseActivity.configuration.session_navigations_table_name
3
+ self.table_name = DeviseActivity.configuration.navigations_table_name
4
+
5
+ belongs_to :session, class_name: 'DeviseActivity::Session'
6
+
4
7
  end
5
8
  end
@@ -1,6 +1,10 @@
1
1
  module DeviseActivity
2
2
  class Session < ApplicationRecord
3
- #self.table_name = DeviseActivity.configuration.session_activities_table_name
3
+ self.table_name = DeviseActivity.configuration.sessions_table_name
4
+
5
+ scope :current, ->(current_user){ where(user_id: current_user.id)}
6
+
7
+ has_many :navigations, class_name: 'DeviseActivity::Navigation'
4
8
 
5
9
  end
6
10
  end
@@ -1,3 +1,3 @@
1
1
  module DeviseActivity
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -1,22 +1,53 @@
1
1
  require 'devise_activity/configuration'
2
2
  require 'active_record'
3
3
 
4
-
5
4
  module DeviseActivity
6
- require 'devise_activity/session'
7
- require 'devise_activity/navigation'
8
5
 
9
6
  extend ActiveSupport::Concern
10
7
 
11
8
  included do
12
9
 
13
- before_action :track_user_activity
10
+ before_action :track_navigation_activity, if: Proc.new{ da_current_user.present? }
11
+
12
+ prepend_before_action :track_sign_out_activity, if: Proc.new{ controller_name == DeviseActivity.configuration.sign_out_controller_name and action_name == DeviseActivity.configuration.sign_out_action_name and da_current_user.present? }
13
+ after_action :track_sign_in_activity, if: Proc.new{ controller_name == DeviseActivity.configuration.sign_in_controller_name and action_name == DeviseActivity.configuration.sign_in_action_name and da_current_user.present? }
14
14
 
15
15
  protected
16
16
 
17
- def track_user_activity
18
- DeviseActivity::Session.create
19
- DeviseActivity::Navigation.create
17
+ def track_sign_out_activity
18
+ current_session = Session.current(current_user).last
19
+ current_session.signed_out_at = Time.now
20
+ current_session.save
21
+ end
22
+
23
+ def track_sign_in_activity
24
+ current_session = Session.current(da_current_user).new
25
+ current_session.signed_in_at = Time.now
26
+ current_session.user_id = da_current_user.id
27
+ current_session.ip_address = request.remote_ip
28
+ current_session.save
29
+ end
30
+
31
+ def track_navigation_activity
32
+ current_session = find_or_create_current_session
33
+ navigation = Navigation.create session_id:current_session.id,
34
+ page_url: request.original_url,
35
+ controller_name: controller_name,
36
+ action_name: action_name
37
+ end
38
+
39
+ def find_or_create_current_session
40
+ session = Session.current(da_current_user).last
41
+ unless session.present? and session.signed_out_at.nil?
42
+ session = Session.create ip_address: request.remote_ip,
43
+ user_id: da_current_user.id,
44
+ signed_in_at: Time.now
45
+ end
46
+ session
47
+ end
48
+
49
+ def da_current_user
50
+ self.send("current_#{DeviseActivity.configuration.devise_model_name}")
20
51
  end
21
52
 
22
53
  end
@@ -28,5 +59,16 @@ module DeviseActivity
28
59
  def self.configure
29
60
  self.configuration ||= Configuration.new
30
61
  yield(configuration)
62
+ # Load models after configurations
63
+ if defined?(ActiveRecord::Base)
64
+ require "devise_activity/extenders/session"
65
+ require "devise_activity/extenders/navigation"
66
+ require "devise_activity/session"
67
+ require "devise_activity/navigation"
68
+ ActiveRecord::Base.extend DeviseActivity::Extenders::Session
69
+ ActiveRecord::Base.extend DeviseActivity::Extenders::Navigation
70
+ end
71
+
72
+
31
73
  end
32
74
  end
@@ -5,4 +5,10 @@ DeviseActivity.configure do |config|
5
5
  config.sessions_table_name = 'sessions'
6
6
  config.navigations_table_name = 'navigations'
7
7
  config.devise_model_name = 'user'
8
+
9
+ config.sign_in_controller_name = 'sessions'
10
+ config.sign_in_action_name = 'create'
11
+ config.sign_out_controller_name = 'sessions'
12
+ config.sign_out_action_name = 'destroy'
13
+
8
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-activity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - M Shahzad Tariq
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-22 00:00:00.000000000 Z
11
+ date: 2019-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -37,6 +37,8 @@ files:
37
37
  - Rakefile
38
38
  - lib/devise_activity.rb
39
39
  - lib/devise_activity/configuration.rb
40
+ - lib/devise_activity/extenders/navigation.rb
41
+ - lib/devise_activity/extenders/session.rb
40
42
  - lib/devise_activity/navigation.rb
41
43
  - lib/devise_activity/session.rb
42
44
  - lib/devise_activity/version.rb