state_machine-audit_trail 0.0.1 → 0.0.2

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.rdoc CHANGED
@@ -1,6 +1,6 @@
1
1
  = StateMachine audit trail
2
2
 
3
- The plugin for the state machine gem (see https://github.com/pluginaweek/state_machine) adds support for keeping an audit trail for any state machine. Having an audit trail gives you a complete history of the state changes in your model. This history allows you to investigate incidents or perform analytics, like: "How long does it take on average to go from state a to state b?", or "What percentage of cases goes from state a to b via state c?"
3
+ This plugin for the state machine gem (see https://github.com/pluginaweek/state_machine) adds support for keeping an audit trail for any state machine. Having an audit trail gives you a complete history of the state changes in your model. This history allows you to investigate incidents or perform analytics, like: "How long does it take on average to go from state a to state b?", or "What percentage of cases goes from state a to b via state c?"
4
4
 
5
5
  Note: while the state_machine gem integrates with multiple ORMs, this plugin currently only has an ActiveRecord backend. It should be easy to add support for other ActiveModel-based ORMs though.
6
6
 
@@ -16,22 +16,22 @@ Create a model/table that holds the audit trail. The table needs to have a forei
16
16
 
17
17
  For a model called "Model", and a state attribute "state", this will generate the ModelStateTransition model and an accompanying migration.
18
18
 
19
- Next, tell your state machine you want to keep an audit trail:
19
+ Next, tell your state machine you want to store an audit trail:
20
20
 
21
21
  class Model < ActiveRecord::Base
22
22
  state_machine :state, :initial => :start do
23
- log_transitions
23
+ store_audit_trail
24
24
  ...
25
25
 
26
26
  If your audit trail model does not use the default naming scheme, provide it using the <tt>:to</tt> option:
27
27
 
28
28
  class Model < ActiveRecord::Base
29
29
  state_machine :state, :initial => :start do
30
- log_transitions :to => 'ModelAuditTrail'
30
+ store_audit_trail :to => 'ModelAuditTrail'
31
31
  ...
32
32
 
33
33
  That's it! The plugin will register an <tt>after_transition</tt> callback that is used to log all transitions. It will also log the initial state if there is one.
34
34
 
35
35
  == About
36
36
 
37
- This plugin is written by Jesse Storimer and Willem van Bergen for Shopify. It is released under the MIT license (see LICENSE)
37
+ This plugin is written by Jesse Storimer and Willem van Bergen for Shopify. It is released under the MIT license (see LICENSE)
@@ -2,10 +2,10 @@ require 'state_machine'
2
2
 
3
3
  module StateMachine::AuditTrail
4
4
 
5
- VERSION = "0.0.1"
5
+ VERSION = "0.0.2"
6
6
 
7
7
  def self.setup
8
- StateMachine::Machine.send(:include, StateMachine::AuditTrail::TransitionLogging)
8
+ StateMachine::Machine.send(:include, StateMachine::AuditTrail::TransitionAuditing)
9
9
  end
10
10
 
11
11
  def self.create(transition_class)
@@ -14,8 +14,7 @@ module StateMachine::AuditTrail
14
14
  end
15
15
  end
16
16
 
17
- require 'state_machine/audit_trail/transition_logging'
18
- require 'state_machine/audit_trail/base'
19
- require 'state_machine/audit_trail/active_record'
17
+ require 'state_machine/audit_trail/transition_auditing'
18
+ require 'state_machine/audit_trail/backend'
20
19
  require 'state_machine/audit_trail/railtie' if defined?(::Rails)
21
20
  StateMachine::AuditTrail.setup
@@ -1,7 +1,7 @@
1
- class StateMachine::AuditTrail::ActiveRecord < StateMachine::AuditTrail::Base
1
+ class StateMachine::AuditTrail::ActiveRecord < StateMachine::AuditTrail::Backend
2
2
  def log(object, event, from, to, timestamp = Time.now)
3
3
  # Let ActiveRecord manage the timestamp for us so it does the
4
- # right thing width regards to timezones.
4
+ # right thing with regards to timezones.
5
5
  transition_class.create(foreign_key_field(object) => object.id, :event => event, :from => from, :to => to)
6
6
  end
7
7
 
@@ -0,0 +1,7 @@
1
+ class StateMachine::AuditTrail::Backend < Struct.new(:transition_class)
2
+ def log(object, event, from, to, timestamp = Time.now)
3
+ raise NotImplemented, "Implement in a subclass."
4
+ end
5
+ end
6
+
7
+ require 'state_machine/audit_trail/active_record'
@@ -1,7 +1,7 @@
1
- module StateMachine::AuditTrail::TransitionLogging
1
+ module StateMachine::AuditTrail::TransitionAuditing
2
2
  attr_accessor :transition_class_name
3
3
 
4
- def log_transitions(options = {})
4
+ def store_audit_trail(options = {})
5
5
  state_machine = self
6
6
  state_machine.transition_class_name = (options[:to] || default_transition_class_name).to_s
7
7
 
@@ -17,7 +17,7 @@ module StateMachine::AuditTrail::TransitionLogging
17
17
  end
18
18
 
19
19
  def audit_trail
20
- @transition_logger ||= StateMachine::AuditTrail.create(transition_class)
20
+ @transition_auditor ||= StateMachine::AuditTrail.create(transition_class)
21
21
  end
22
22
 
23
23
  private
data/spec/spec_helper.rb CHANGED
@@ -53,7 +53,7 @@ end
53
53
  class TestModel < ActiveRecord::Base
54
54
 
55
55
  state_machine :state, :initial => :waiting do # log initial state?
56
- log_transitions
56
+ store_audit_trail
57
57
 
58
58
  event :start do
59
59
  transition [:waiting, :stopped] => :started
@@ -68,7 +68,7 @@ end
68
68
  class TestModelWithMultipleStateMachines < ActiveRecord::Base
69
69
 
70
70
  state_machine :first, :initial => :beginning do
71
- log_transitions
71
+ store_audit_trail
72
72
 
73
73
  event :begin_first do
74
74
  transition :beginning => :end
@@ -76,7 +76,7 @@ class TestModelWithMultipleStateMachines < ActiveRecord::Base
76
76
  end
77
77
 
78
78
  state_machine :second do
79
- log_transitions
79
+ store_audit_trail
80
80
 
81
81
  event :begin_second do
82
82
  transition nil => :beginning
@@ -1,10 +1,10 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  Gem::Specification.new do |s|
3
3
  s.name = "state_machine-audit_trail"
4
- s.version = "0.0.1"
4
+ s.version = "0.0.2"
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ["Willem van Bergen", "Jesse Storimer"]
7
- s.email = ["willem@shopify.com", "jesse.storimer@shopify.com"]
7
+ s.email = ["willem@shopify.com", "jesse@shopify.com"]
8
8
  s.homepage = "https://github.com/wvanbergen/state_machine-audit_trail"
9
9
  s.summary = %q{Log transitions on a state machine to support auditing and business process analytics.}
10
10
  s.description = %q{Log transitions on a state machine to support auditing and business process analytics.}
@@ -18,6 +18,6 @@ Gem::Specification.new do |s|
18
18
  s.add_development_dependency('activerecord', '~> 3')
19
19
  s.add_development_dependency('sqlite3')
20
20
 
21
- s.files = %w(.gitignore Gemfile LICENSE README.rdoc Rakefile lib/state_machine-audit_trail.rb lib/state_machine/audit_trail.rb lib/state_machine/audit_trail/active_record.rb lib/state_machine/audit_trail/base.rb lib/state_machine/audit_trail/railtie.rb lib/state_machine/audit_trail/transition_logging.rb lib/state_machine/audit_trail_generator.rb spec/spec_helper.rb spec/state_machine/audit_trail_spec.rb state_machine-audit_trail.gemspec tasks/github_gem.rb)
21
+ s.files = %w(.gitignore Gemfile LICENSE README.rdoc Rakefile lib/state_machine-audit_trail.rb lib/state_machine/audit_trail.rb lib/state_machine/audit_trail/active_record.rb lib/state_machine/audit_trail/backend.rb lib/state_machine/audit_trail/railtie.rb lib/state_machine/audit_trail/transition_auditing.rb lib/state_machine/audit_trail_generator.rb spec/spec_helper.rb spec/state_machine/audit_trail_spec.rb state_machine-audit_trail.gemspec tasks/github_gem.rb)
22
22
  s.test_files = %w(spec/state_machine/audit_trail_spec.rb)
23
23
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Willem van Bergen
@@ -86,7 +86,7 @@ dependencies:
86
86
  description: Log transitions on a state machine to support auditing and business process analytics.
87
87
  email:
88
88
  - willem@shopify.com
89
- - jesse.storimer@shopify.com
89
+ - jesse@shopify.com
90
90
  executables: []
91
91
 
92
92
  extensions: []
@@ -102,9 +102,9 @@ files:
102
102
  - lib/state_machine-audit_trail.rb
103
103
  - lib/state_machine/audit_trail.rb
104
104
  - lib/state_machine/audit_trail/active_record.rb
105
- - lib/state_machine/audit_trail/base.rb
105
+ - lib/state_machine/audit_trail/backend.rb
106
106
  - lib/state_machine/audit_trail/railtie.rb
107
- - lib/state_machine/audit_trail/transition_logging.rb
107
+ - lib/state_machine/audit_trail/transition_auditing.rb
108
108
  - lib/state_machine/audit_trail_generator.rb
109
109
  - spec/spec_helper.rb
110
110
  - spec/state_machine/audit_trail_spec.rb
@@ -1,5 +0,0 @@
1
- class StateMachine::AuditTrail::Base < Struct.new(:transition_class)
2
- def log(object, event, from, to, timestamp = Time.now)
3
- raise NotImplemented, "Implement in a subclass."
4
- end
5
- end