state_machine_audits 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :gemcutter
2
+
3
+ # Specify your gem's dependencies in state_machine_audits.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,29 @@
1
+ == StateMachineAudits
2
+
3
+ This gem is meant to be used in conjunction with the state_machine gem in a Rails3 project. It will hook into before_save and track any state changes that happen in its own database table.
4
+
5
+ To that end, you need a migration that looks something like this:
6
+
7
+ class CreateStateMachineStateAudits < ActiveRecord::Migration
8
+ def self.up
9
+ create_table :state_machine_state_audits do |t|
10
+ t.string :state_machine_auditable_type
11
+ t.integer :state_machine_auditable_id
12
+ t.string :state_field
13
+ t.string :state
14
+ t.timestamps
15
+ end
16
+ end
17
+
18
+ def self.down
19
+ drop_table :state_machine_state_audits
20
+ end
21
+ end
22
+
23
+ After that, you just include the module in your class that uses state_machine like so:
24
+
25
+ class SomeClass < ActiveRecord::Base
26
+ include StateMachineAudits
27
+ end
28
+
29
+ That's it, you're done. Now it will keep a record of each state transition.
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ require 'state_machine_audits/state_machine_state_audit'
2
+
3
+ module StateMachineAudits
4
+ VERSION = "0.1.0"
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ after_save :store_state_machine_audit
9
+ has_many :state_machine_state_audits, :as => :state_machine_auditable
10
+ end
11
+
12
+ def store_state_machine_audit
13
+ self.class.state_machines.keys.each do |_state|
14
+ if self.changes.include?(_state.to_s)
15
+ the_new_state = self.changes[_state].last
16
+ self.state_machine_state_audits.create(:state => the_new_state, :state_field => _state.to_s)
17
+ Rails.logger.warn "AUDITING STATE: #{_state} - #{the_new_state}" if Rails.env.development?
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ class StateMachineStateAudit < ActiveRecord::Base
2
+ belongs_to :state_machine_auditable, :polymorphic => true
3
+ end
@@ -0,0 +1,3 @@
1
+ class StateMachineStateAudits < ActiveRecord::Base
2
+ belongs_to :state_machine_auditable, :polymorphic => true
3
+ end
@@ -0,0 +1,3 @@
1
+ module StateMachineAudits
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/state_machine_audits/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "state_machine_audits"
6
+ s.version = StateMachineAudits::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ['Josh Adams', 'Nick Fine', 'Adam Dill']
9
+ s.email = ['josh@isotope11.com']
10
+ s.homepage = "http://rubygems.org/gems/state_machine_audits"
11
+ s.summary = "Audits for the state_machine gem"
12
+
13
+ s.required_rubygems_version = ">= 1.3.6"
14
+ s.rubyforge_project = "state_machine_audits"
15
+
16
+ s.add_development_dependency "bundler", ">= 1.0.0.rc.6"
17
+
18
+ s.add_dependency 'activesupport', '~> 3.0.0'
19
+ s.add_dependency 'activerecord', '~> 3.0.0'
20
+ s.add_dependency 'state_machine', '~> 0.9.4'
21
+
22
+ s.files = `git ls-files`.split("\n")
23
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
24
+ s.require_path = 'lib'
25
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: state_machine_audits
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Josh Adams
13
+ - Nick Fine
14
+ - Adam Dill
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-01-14 00:00:00 -06:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: bundler
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 1
31
+ - 0
32
+ - 0
33
+ - rc
34
+ - 6
35
+ version: 1.0.0.rc.6
36
+ type: :development
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: activesupport
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 3
47
+ - 0
48
+ - 0
49
+ version: 3.0.0
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: activerecord
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ segments:
60
+ - 3
61
+ - 0
62
+ - 0
63
+ version: 3.0.0
64
+ type: :runtime
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: state_machine
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ~>
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ - 9
76
+ - 4
77
+ version: 0.9.4
78
+ type: :runtime
79
+ version_requirements: *id004
80
+ description:
81
+ email:
82
+ - josh@isotope11.com
83
+ executables: []
84
+
85
+ extensions: []
86
+
87
+ extra_rdoc_files: []
88
+
89
+ files:
90
+ - .gitignore
91
+ - Gemfile
92
+ - README
93
+ - Rakefile
94
+ - lib/state_machine_audits.rb
95
+ - lib/state_machine_audits/state_machine_state_audit.rb
96
+ - lib/state_machine_audits/state_machine_state_audits.rb
97
+ - lib/state_machine_audits/version.rb
98
+ - state_machine_audits.gemspec
99
+ has_rdoc: true
100
+ homepage: http://rubygems.org/gems/state_machine_audits
101
+ licenses: []
102
+
103
+ post_install_message:
104
+ rdoc_options: []
105
+
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ segments:
113
+ - 0
114
+ version: "0"
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ segments:
120
+ - 1
121
+ - 3
122
+ - 6
123
+ version: 1.3.6
124
+ requirements: []
125
+
126
+ rubyforge_project: state_machine_audits
127
+ rubygems_version: 1.3.6
128
+ signing_key:
129
+ specification_version: 3
130
+ summary: Audits for the state_machine gem
131
+ test_files: []
132
+