state_machine_audits 0.1.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.
@@ -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
+