yoon-view_trail 0.2.2 → 0.3.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/README.md CHANGED
@@ -10,15 +10,29 @@ Works with Rails 2.3.
10
10
 
11
11
  class FooController < ActionController::Base
12
12
  has_view_trail :except => :index
13
+
14
+ def index
15
+ end
16
+
17
+ def search
18
+ @results = Model.search(params[:query])
19
+
20
+ audit({:results => @results.map(&:id), :flag => "blue"})
21
+ end
13
22
  end
14
23
 
15
- Takes :except and :only conditions like other controller filters
24
+ Takes :except and :only conditions like other controller filters
16
25
 
17
- >> Activities.last.whodunnit
18
- >> Activities.last.created_at
19
- >> Activities.last.controller
20
- >> Activities.last.action
21
- >> Activities.last.params
26
+ Also allows you to audit an arbitrary key/value hash
27
+
28
+ For example: when you visit /foo/search?query=pie
29
+
30
+ >> Activities.last.whodunnit #=> (@controller.current_user)
31
+ >> Activities.last.created_at #=> (date/time of activity)
32
+ >> Activities.last.controller #=> FooController
33
+ >> Activities.last.action #=> "search"
34
+ >> Activities.last.params #=> {:query => "pie"}
35
+ >> Activities.last.activity_items #=> [{:key => :results, :value => [2, 12, 14]}], [{:key => :flag, :value => "blue"}]
22
36
 
23
37
  ## Installation
24
38
 
@@ -36,9 +50,9 @@ Takes :except and :only conditions like other controller filters
36
50
 
37
51
  4. Add `has view_trail` to the controllers you want to track
38
52
 
39
- ## TODO
53
+ ## Issues
40
54
 
41
- Test!
55
+ Please submit issues via GitHub's [Issue Tracker](http://github.com/yoon/view_trail/issues)
42
56
 
43
57
  ## Inspiration
44
58
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
@@ -23,7 +23,15 @@ Given /^I ([^ ]*) the ([^ ]*) page with params$/ do |method, page|
23
23
  end
24
24
 
25
25
  Then /^the last activity should have params$/ do
26
- Activity.last.params.should == HashWithIndifferentAccess.new({:check => "yourself"})
26
+ HashWithIndifferentAccess.new(Activity.last.params).should == HashWithIndifferentAccess.new({:check => "yourself"})
27
+ end
28
+
29
+ Then /^the last activity should have data$/ do
30
+ Activity.last.activity_items.should have(2).activity_items
31
+ Activity.last.activity_items.first.key.should == "pi"
32
+ Activity.last.activity_items.first.value.should == [3,1,4,1,5,9]
33
+ Activity.last.activity_items.last.key.should == "pie"
34
+ Activity.last.activity_items.last.value.should == ["apple", "blueberry", "pecan", "strawberry"]
27
35
  end
28
36
 
29
37
 
@@ -37,10 +37,15 @@ class FooController < ApplicationController
37
37
  def bar
38
38
  head :ok
39
39
  end
40
+ def baz
41
+ audit({:pi => [3,1,4,1,5,9], :pie => ["apple", "blueberry", "pecan", "strawberry"]})
42
+ head :ok
43
+ end
40
44
  end
41
45
 
42
46
  # Sets up routes
43
47
  ActionController::Routing::Routes.draw do |map|
44
48
  map.foo "/foo", :controller => "foo", :action => "foo"
45
- map.foo "/bar", :controller => "foo", :action => "bar"
49
+ map.bar "/bar", :controller => "foo", :action => "bar"
50
+ map.baz "/baz", :controller => "foo", :action => "baz"
46
51
  end
@@ -10,24 +10,6 @@ module NavigationHelpers
10
10
 
11
11
  when /the homepage/
12
12
  default_path
13
-
14
- when /the login page/
15
- authentication_index_path
16
-
17
- when /the dashboard/
18
- dashboard_path
19
-
20
- when /the all studies page/
21
- studies_path
22
-
23
- when /my subjects/
24
- subjects_path
25
-
26
- when /the study page for id "([^\"]*)"/
27
- "/studies/#{$1}"
28
-
29
- when /the search page/
30
- search_path
31
13
 
32
14
  # Add more mappings here.
33
15
  # Here is a more fancy example:
@@ -32,11 +32,17 @@ Feature: ViewTrail
32
32
  And the last activity should have "312" whodunnit
33
33
  And the last activity should have "foo" action
34
34
 
35
- Scenario: GET request
35
+ Scenario: GET request with params
36
36
  Given I get the foo page with params
37
37
  Then I should have 5 activities
38
38
  And the last activity should have params
39
39
 
40
+ Scenario: GET request with params and arbitrary data
41
+ Given I get the baz page with params
42
+ Then I should have 6 activities
43
+ And the last activity should have data
44
+ And the last activity should have params
45
+
40
46
  Scenario: GET request on excepted path
41
47
  Given I have 0 activities
42
48
  When I get the bar page
@@ -1,4 +1,4 @@
1
- class CreateActivities < ActiveRecord::Migration
1
+ class CreateActivitiesAndItems < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :activities do |t|
4
4
  t.string :controller
@@ -6,12 +6,16 @@ class CreateActivities < ActiveRecord::Migration
6
6
  t.text :params
7
7
  t.string :whodunnit
8
8
  t.datetime :created_at
9
+ end
10
+ create_table :activity_items do |t|
11
+ t.integer :activity_id
12
+ t.string :key
13
+ t.text :value
9
14
  end
10
- # add_index :activities, [:item_type, :item_id]
11
15
  end
12
16
 
13
17
  def self.down
14
- # remove_index :activities, [:item_type, :item_id]
15
18
  drop_table :activities
19
+ drop_table :activity_items
16
20
  end
17
- end
21
+ end
@@ -2,8 +2,9 @@ class ViewTrailGenerator < Rails::Generator::Base
2
2
 
3
3
  def manifest
4
4
  record do |m|
5
- m.migration_template 'create_activities.rb', 'db/migrate', :migration_file_name => 'create_activities'
5
+ m.migration_template 'create_activities_and_items.rb', 'db/migrate', :migration_file_name => 'create_activities_and_items'
6
6
  end
7
+
7
8
  end
8
9
 
9
10
  end
@@ -1,3 +1,4 @@
1
1
  class Activity < ActiveRecord::Base
2
2
  serialize :params
3
+ has_many :activity_items
3
4
  end
@@ -0,0 +1,3 @@
1
+ class ActivityItem < ActiveRecord::Base
2
+ serialize :value
3
+ end
data/lib/view_trail.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'view_trail/activity'
2
+ require 'view_trail/activity_item'
2
3
 
3
4
  module ViewTrail
4
5
  @@whodunnit = nil
@@ -42,9 +43,16 @@ module ViewTrail
42
43
  end
43
44
 
44
45
  module InstanceMethods
46
+ def audit(items)
47
+ @activity_items = items
48
+ end
45
49
  def record_activity
46
50
  if self.class.view_trail_active
47
- Activity.create(:whodunnit => ViewTrail.whodunnit, :controller => params.delete(:controller), :action => params.delete(:action), :params => params)
51
+ a = Activity.create(:whodunnit => ViewTrail.whodunnit, :controller => params.delete(:controller), :action => params.delete(:action), :params => params)
52
+ (@activity_items || {}).each do |k,v|
53
+ a.activity_items.create(:key => k.to_s, :value => v)
54
+ end
55
+ @activity_items = nil
48
56
  end
49
57
  end
50
58
  end
data/view_trail.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{view_trail}
5
- s.version = "0.2.2"
5
+ s.version = "0.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Mark Yoon"]
@@ -25,10 +25,11 @@ Gem::Specification.new do |s|
25
25
  "features/support/env.rb",
26
26
  "features/support/paths.rb",
27
27
  "features/view_trail.feature",
28
- "generators/view_trail/templates/create_activities.rb",
28
+ "generators/view_trail/templates/create_activities_and_items.rb",
29
29
  "generators/view_trail/view_trail_generator.rb",
30
30
  "lib/view_trail.rb",
31
31
  "lib/view_trail/activity.rb",
32
+ "lib/view_trail/activity_item.rb",
32
33
  "spec/spec_helper.rb",
33
34
  "spec/view_trail_spec.rb",
34
35
  "view_trail.gemspec"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yoon-view_trail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Yoon
@@ -34,10 +34,11 @@ files:
34
34
  - features/support/env.rb
35
35
  - features/support/paths.rb
36
36
  - features/view_trail.feature
37
- - generators/view_trail/templates/create_activities.rb
37
+ - generators/view_trail/templates/create_activities_and_items.rb
38
38
  - generators/view_trail/view_trail_generator.rb
39
39
  - lib/view_trail.rb
40
40
  - lib/view_trail/activity.rb
41
+ - lib/view_trail/activity_item.rb
41
42
  - spec/spec_helper.rb
42
43
  - spec/view_trail_spec.rb
43
44
  - view_trail.gemspec