wiser_trails 1.1.3 → 2.0.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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTVhMjgwMTM0ZGYyYWYzOWI3Y2RjNzU3NTk3OWUzNDdiMzhiOTM5Nw==
4
+ Y2E1MmRmZmNmYjVmZWU1MWY4MjNlNWI3MzlkOTk0MjcxYTFhNWZiZA==
5
5
  data.tar.gz: !binary |-
6
- ZWI0ZDBhNTY4MGYyYWQyNjdjYTNhNjg0ZWE1NDFhZmQ1Y2FlOGIyYQ==
6
+ MGVjZTU3ZWYxNTk3NjE2ODFiMzFkNDgxYjBmYjA2NmM4NGNkYTZmNw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzVhN2ZjZTgyZGIwMGM4MWQzMTFiNmY1MmZhYTc1MjA4NTVjMmMxNmZjYjU1
10
- NjM2ZDEyYzg1YzQ3OTdiZjllZGM3ZTY0ZDA5OTliMDQ5ZTQwNDBkY2I1YjAy
11
- ZTg4OGVkMTY1NjA1OWU2NGJjMjFlMjI5NjgxMjM4NjJhODQ2MjM=
9
+ ZThiNWU0MGI3OGQ1NTM3M2JiYTk0NWY5OTJlNWY4NzgzMDQyOGIwMjNlZmQx
10
+ MmM4OTMxZGMwMzJkZTE5YWM0OTE4MWY0Njc2YjA1NjBkMzk2MDg1ZGYzZDZk
11
+ NWIyZTJhMmVhYWVkMGQ0YzZkMzMzZGM2Njk4YjJjZjFlNGVlZGM=
12
12
  data.tar.gz: !binary |-
13
- MGE2Y2Y3ZTE5MWIxNjU5MjcyNTIyOWNiN2E5M2VlYWY4ZTQ4ZmQ5MjkyMjc1
14
- M2FmNGJkNTYxNzljYjYwYmZhNGU3NjhlODgyOWQ5NTI4YTBhOWJhMjA5YmM3
15
- NTM3ZTI3Yzc5NmU5MGI3OTcwNjU3YzJhNDEyMWM1NmFhMWU3Zjk=
13
+ ZGFjMTE4OTVhZTQ5ZTY3YTI4OWE1ZDQ5ZWJmOWJkN2I2ZDg3ZTU3ZDNjMjQ2
14
+ ZjIxMmQwN2FhNDBkMDhhNzFiYmU3MDI3NTg5MWIwYWIxNTViZDhkNGQ5ZTUy
15
+ ZGE5ODhkMmIxYTdiNWVmMjBlZTI0YjNmYTcyNmMwNWU0NjI1MjA=
data/README.md CHANGED
@@ -17,12 +17,14 @@ You can do normal gem installation for `wiser_trails`:
17
17
  or in your Gemfile:
18
18
 
19
19
  ```ruby
20
- gem 'wiser_trails'
20
+ gem 'wiser_trails', ~> '2.0.0'
21
21
  ```
22
22
 
23
+ Then restart your application.
24
+
23
25
  ### Database
24
26
 
25
- **(ActiveRecord only)** Generate a migration for trails and migrate the database (in your Rails project):
27
+ Generate a migration for trails and migrate the database (in your Rails project):
26
28
 
27
29
  rails g wiser_trails:migration
28
30
  rake db:migrate
@@ -68,9 +70,33 @@ class Notes < ActiveRecord::Base
68
70
  end
69
71
  ```
70
72
 
73
+ This will automatically record all the changes for trailed models.
74
+
75
+ #### Good Thing
76
+
77
+ _Wiser Trails_ will saved **ONLY** the changed attributes during the `update` action.
78
+
79
+ For example:
80
+
81
+ ```ruby
82
+ @note = Note.create(title: "New Note", content: "This is my first note.")
83
+ # @note.old_value = {}
84
+ # @note.new_value = {"title" => "New Note", "content" => "This is my first note."}
85
+ ```
86
+
87
+ Then when you update the record:
88
+
89
+ ```ruby
90
+ @note.update_attribute(:title, "New Title")
91
+ # @note.old_value = {"title" => "New Note"}
92
+ # @note.new_value = {"title" => "New Note"}
93
+ ```
94
+
95
+ It will not save any unchanged attributes, and you can get the updated fields for displaying.
96
+
71
97
  ### Monitoring Custom Actions
72
98
 
73
- To record custom actions, you can manually trigger the `create_activity` method on the model record:
99
+ To record custom actions, you can manually trigger the `create_activity` method on the model record but **this will not save the `old_value`**:
74
100
 
75
101
  ```ruby
76
102
  @note.create_activity(key: 'note.published', owner: current_user)
@@ -114,11 +140,12 @@ def show
114
140
  end
115
141
  ```
116
142
 
117
- You can also get the new trackable value by calling `new_value`:
143
+ You can also get the old and new object value by calling `old_value` or `new_value`:
118
144
 
119
145
  ```ruby
120
146
  def show
121
147
  @trail = WiserTrails::Activity.find(params[:id])
148
+ # @trail.old_value => exact Note attributes before the trail was recorded
122
149
  # @trail.new_value => exact Note attributes after the trail was recorded
123
150
  end
124
151
  ```
@@ -7,6 +7,7 @@ class CreateWiserTrails < ActiveRecord::Migration
7
7
  t.belongs_to :account, :polymorphic => true
8
8
  t.belongs_to :owner, :polymorphic => true
9
9
  t.string :key
10
+ t.text :old_value
10
11
  t.text :new_value
11
12
 
12
13
  t.timestamps
@@ -1,10 +1,10 @@
1
- require 'generators/wiser_date'
1
+ require 'generators/wiser_trails'
2
2
  require 'rails/generators/active_record'
3
3
 
4
4
  module WiserTrails
5
5
  module Generators
6
6
  # Activity generator that creates activity model file from template
7
- class ActivityGenerator < ActiveRecord::Generators::Base
7
+ class ModelGenerator < ActiveRecord::Generators::Base
8
8
  extend Base
9
9
 
10
10
  argument :name, :type => :string, :default => 'wiser_trails'
@@ -9,7 +9,8 @@ module WiserTrails
9
9
  private
10
10
  # Creates activity upon creation of the tracked model
11
11
  def activity_on_create
12
- create_activity(:create)
12
+ activity = create_activity(:create, new_value: self.attributes.stringify_keys)
13
+ activity.update_attribute(:old_value, {}) if activity
13
14
  end
14
15
  end
15
- end
16
+ end
@@ -9,7 +9,8 @@ module WiserTrails
9
9
  private
10
10
  # Records an activity upon destruction of the tracked model
11
11
  def activity_on_destroy
12
- create_activity(:destroy)
12
+ activity = create_activity(:destroy, old_value: self.attributes)
13
+ activity.update_attribute(:old_value, self.attributes.stringify_keys) if activity
13
14
  end
14
15
  end
15
16
  end
@@ -4,12 +4,19 @@ module WiserTrails
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ before_update :initialize_activity
7
8
  after_update :activity_on_update
8
9
  end
9
10
  private
10
11
  # Creates activity upon modification of the tracked model
12
+ def initialize_activity
13
+ create_activity(:update) if self.changed_attributes.except("updated_at").count > 0
14
+ end
11
15
  def activity_on_update
12
- create_activity(:update)
16
+ if self.changed_attributes.except("updated_at").count > 0
17
+ activity = Activity.where(trackable_id: self.id, trackable_type: self.class, key: "#{self.class.to_s.downcase}.update").last
18
+ activity.update_attribute(:new_value, activity.trackable.attributes.stringify_keys) if activity
19
+ end
13
20
  end
14
21
  end
15
22
  end
@@ -298,7 +298,12 @@ module WiserTrails
298
298
  )
299
299
  )
300
300
  )
301
- options[:new_value] = self.attributes
301
+
302
+ changes = Hash.new
303
+ self.changed_attributes.each do |attr, val|
304
+ changes[attr.to_sym] = val if attr != "updated_at"
305
+ end
306
+ options[:old_value] = changes.stringify_keys
302
307
  options.delete(:params)
303
308
 
304
309
  customs = self.class.activity_custom_fields_global.clone
@@ -324,6 +329,7 @@ module WiserTrails
324
329
  # called from any other place, or from application code.
325
330
  # @private
326
331
  def reset_activity_instance_options
332
+ @activity_old_value = {}
327
333
  @activity_new_value = {}
328
334
  @activity_key = nil
329
335
  @activity_owner = nil
@@ -14,10 +14,11 @@ module WiserTrails
14
14
  # Define ownership to a resource targeted by this activity
15
15
  belongs_to :account, :polymorphic => true
16
16
  # Serialize parameters Hash
17
+ serialize :old_value, Hash
17
18
  serialize :new_value, Hash
18
19
 
19
20
  if ::ActiveRecord::VERSION::MAJOR < 4
20
- attr_accessible :key, :owner, :new_value, :account, :trackable
21
+ attr_accessible :key, :owner, :account, :trackable, :old_value, :new_value
21
22
  end
22
23
  end
23
24
  end
@@ -8,7 +8,9 @@ module WiserTrails
8
8
  class Adapter
9
9
  # Creates the activity on `trackable` with `options`
10
10
  def self.create_activity(trackable, options)
11
- trackable.activities.create options
11
+ activity = trackable.activities.create options
12
+ activity.update_attribute(:new_value, trackable.attributes.stringify_keys) if activity.new_value == {}
13
+ return activity
12
14
  end
13
15
  end
14
16
  end
@@ -1,3 +1,3 @@
1
1
  module WiserTrails
2
- VERSION = '1.1.3'
2
+ VERSION = '2.0.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wiser_trails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenneth John Balgos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-02 00:00:00.000000000 Z
11
+ date: 2013-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler