track_changes 0.5.1 → 1.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/README.rdoc +46 -32
  2. data/TODO +1 -1
  3. data/VERSION.yml +4 -4
  4. data/lib/generators/track_changes/templates/initializer.rb +1 -0
  5. data/lib/generators/track_changes/templates/migration.rb +18 -0
  6. data/lib/generators/track_changes/templates/stylesheet.css +12 -0
  7. data/lib/generators/track_changes/track_changes_generator.rb +30 -0
  8. data/lib/track_changes/action_controller.rb +31 -0
  9. data/lib/track_changes/active_record.rb +26 -0
  10. data/lib/track_changes/around_save.rb +9 -0
  11. data/lib/track_changes/changes.rb +15 -0
  12. data/lib/track_changes/configuration.rb +3 -32
  13. data/lib/track_changes/current_user.rb +5 -0
  14. data/lib/track_changes/current_user_filter.rb +12 -0
  15. data/lib/track_changes/engine.rb +7 -0
  16. data/lib/track_changes.rb +11 -10
  17. data/test/functional/posts_controller_test.rb +39 -10
  18. data/test/railsapp/Gemfile +12 -0
  19. data/test/railsapp/Gemfile.lock +84 -0
  20. data/test/railsapp/Rakefile +4 -0
  21. data/test/{rails_root → railsapp}/app/controllers/application_controller.rb +1 -0
  22. data/test/railsapp/app/controllers/posts_controller.rb +40 -0
  23. data/test/railsapp/app/models/post.rb +3 -0
  24. data/test/railsapp/app/models/user.rb +3 -0
  25. data/test/railsapp/app/views/layouts/application.html.erb +12 -0
  26. data/test/railsapp/app/views/posts/_form.html.erb +13 -0
  27. data/test/railsapp/app/views/posts/_post.html.erb +3 -0
  28. data/test/railsapp/app/views/posts/edit.html.erb +5 -0
  29. data/test/railsapp/app/views/posts/index.html.erb +2 -0
  30. data/test/railsapp/config/application.rb +12 -0
  31. data/test/railsapp/config/boot.rb +13 -0
  32. data/test/railsapp/config/database.yml +5 -0
  33. data/test/railsapp/config/environment.rb +5 -0
  34. data/test/railsapp/config/environments/test.rb +10 -0
  35. data/test/railsapp/config/routes.rb +3 -0
  36. data/test/railsapp/config.ru +2 -0
  37. data/test/railsapp/db/test.sqlite3 +0 -0
  38. data/test/railsapp/log/test.log +6385 -0
  39. data/test/railsapp/script/rails +6 -0
  40. data/test/schema.rb +19 -0
  41. data/test/test_helper.rb +4 -26
  42. data/test/track_changes_test.rb +34 -0
  43. metadata +124 -88
  44. data/lib/track_changes/audit_filter.rb +0 -69
  45. data/lib/track_changes/base.rb +0 -9
  46. data/lib/track_changes/class_methods.rb +0 -74
  47. data/lib/track_changes/filter.rb +0 -43
  48. data/lib/track_changes/initializer.rb +0 -18
  49. data/lib/track_changes/instance_methods.rb +0 -5
  50. data/lib/track_changes/result.rb +0 -36
  51. data/test/base_test.rb +0 -20
  52. data/test/class_methods_test.rb +0 -29
  53. data/test/filter_test.rb +0 -73
  54. data/test/rails_root/app/controllers/posts_controller.rb +0 -36
  55. data/test/rails_root/app/models/audit.rb +0 -4
  56. data/test/rails_root/app/models/post.rb +0 -3
  57. data/test/rails_root/config/boot.rb +0 -110
  58. data/test/rails_root/config/database.yml +0 -3
  59. data/test/rails_root/config/environment.rb +0 -7
  60. data/test/rails_root/config/environments/test.rb +0 -7
  61. data/test/rails_root/config/initializers/new_rails_defaults.rb +0 -7
  62. data/test/rails_root/config/initializers/session_store.rb +0 -4
  63. data/test/rails_root/config/initializers/track_changes_setup.rb +0 -8
  64. data/test/rails_root/config/routes.rb +0 -3
  65. data/test/rails_root/db/migrate/20100115021125_create_audits.rb +0 -16
  66. data/test/rails_root/db/migrate/20100115021151_create_posts.rb +0 -15
  67. data/test/rails_root/log/test.log +0 -543
  68. data/test/rails_root/script/console +0 -3
  69. data/test/rails_root/script/generate +0 -3
  70. data/test/result_test.rb +0 -35
  71. data/test/track_changes/audit_filter_test.rb +0 -154
  72. data/test/track_changes/configuration_test.rb +0 -36
  73. data/test/track_changes/initializer_test.rb +0 -37
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env jruby.exe
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
data/test/schema.rb ADDED
@@ -0,0 +1,19 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+ create_table :audits, :force => true do |t|
3
+ t.references :audited, :polymorphic => true, :null => false
4
+ t.references :user
5
+ t.text :change_set, :null => false
6
+
7
+ t.datetime :created_at, :null => false
8
+ end
9
+
10
+ create_table :posts, :force => true do |t|
11
+ t.string :title
12
+ t.text :body
13
+ end
14
+
15
+ create_table :users, :force => true do |t|
16
+ t.string :name
17
+ end
18
+
19
+ end
data/test/test_helper.rb CHANGED
@@ -1,29 +1,7 @@
1
- # Copied from the shoulda library
2
- require 'fileutils'
3
-
4
- # Load the environment
5
1
  ENV['RAILS_ENV'] = 'test'
2
+ require File.expand_path("../railsapp/config/environment.rb", __FILE__)
3
+ require 'rails/test_help'
6
4
 
7
- rails_root = File.dirname(__FILE__) + '/rails_root'
8
-
9
- require "#{rails_root}/config/environment.rb"
10
-
11
- # Load the testing framework
12
- require 'test_help'
13
- silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
14
-
15
- # Run the migrations
16
- ActiveRecord::Migration.verbose = false
17
- ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
18
-
19
- # Setup the fixtures path
20
- ActiveSupport::TestCase.fixture_path =
21
- File.join(File.dirname(__FILE__), "fixtures")
22
-
23
- class ActiveSupport::TestCase #:nodoc:
24
- self.use_transactional_fixtures = false
25
- self.use_instantiated_fixtures = false
5
+ def load_schema
6
+ load(File.dirname(__FILE__) + "/schema.rb")
26
7
  end
27
-
28
- require 'track_changes'
29
- require 'shoulda'
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class TrackChangesTest < Test::Unit::TestCase
4
+ load_schema
5
+
6
+ def test_schema_has_loaded_correctly
7
+ assert_equal [], Audit.all
8
+ assert_equal [], Post.all
9
+ assert_equal [], User.all
10
+ end
11
+
12
+ def test_should_add_track_changes_method_to_models
13
+ assert Post.new.respond_to?(:current_user)
14
+ assert Post.new.respond_to?(:current_user=)
15
+ end
16
+
17
+ def test_should_add_association_to_models
18
+ assert Post.new.respond_to?(:audits)
19
+ assert_equal [], Post.new.audits.all
20
+ end
21
+
22
+ def test_should_audit_changes
23
+ user = User.create!(:name => "John Public")
24
+ post = Post.create!(:title => "Test Post", :body => "Hello, world!")
25
+
26
+ post.update_attributes(:title => "Title Changed")
27
+
28
+ audit = post.audits.desc.first
29
+ expected_change = {"title" => ["Test Post", "Title Changed"]}
30
+
31
+ assert_equal 2, post.audits.count
32
+ assert_equal expected_change, audit.change_set
33
+ end
34
+ end
metadata CHANGED
@@ -1,24 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: track_changes
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease: false
4
+ prerelease: true
6
5
  segments:
7
- - 0
8
- - 5
9
- - 1
10
- version: 0.5.1
6
+ - 1
7
+ - 0
8
+ - 0
9
+ - pre1
10
+ version: 1.0.0.pre1
11
11
  platform: ruby
12
12
  authors:
13
- - Matt Haley
13
+ - Matt Haley
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-30 00:00:00 -07:00
18
+ date: 2010-08-19 00:00:00 -07:00
19
19
  default_executable:
20
- dependencies: []
21
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 3
31
+ - 0
32
+ - 0
33
+ - rc
34
+ version: 3.0.0.rc
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: activerecord-jdbc-adapter
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ type: :development
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: activerecord-jdbcsqlite3-adapter
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
22
63
  description: Easier auditing of Rails model changes in your controllers.
23
64
  email: matt@smajnr.net
24
65
  executables: []
@@ -26,76 +67,80 @@ executables: []
26
67
  extensions: []
27
68
 
28
69
  extra_rdoc_files:
29
- - LICENSE
30
- - README.rdoc
31
- - TODO
70
+ - LICENSE
71
+ - README.rdoc
72
+ - TODO
32
73
  files:
33
- - LICENSE
34
- - TODO
35
- - VERSION.yml
36
- - lib/track_changes.rb
37
- - lib/track_changes/audit_filter.rb
38
- - lib/track_changes/base.rb
39
- - lib/track_changes/class_methods.rb
40
- - lib/track_changes/configuration.rb
41
- - lib/track_changes/filter.rb
42
- - lib/track_changes/initializer.rb
43
- - lib/track_changes/instance_methods.rb
44
- - lib/track_changes/result.rb
45
- - test/base_test.rb
46
- - test/class_methods_test.rb
47
- - test/filter_test.rb
48
- - test/functional/posts_controller_test.rb
49
- - test/rails_root/app/controllers/application_controller.rb
50
- - test/rails_root/app/controllers/posts_controller.rb
51
- - test/rails_root/app/models/audit.rb
52
- - test/rails_root/app/models/post.rb
53
- - test/rails_root/config/boot.rb
54
- - test/rails_root/config/database.yml
55
- - test/rails_root/config/environment.rb
56
- - test/rails_root/config/environments/test.rb
57
- - test/rails_root/config/initializers/new_rails_defaults.rb
58
- - test/rails_root/config/initializers/session_store.rb
59
- - test/rails_root/config/initializers/track_changes_setup.rb
60
- - test/rails_root/config/routes.rb
61
- - test/rails_root/db/migrate/20100115021125_create_audits.rb
62
- - test/rails_root/db/migrate/20100115021151_create_posts.rb
63
- - test/rails_root/log/test.log
64
- - test/rails_root/script/console
65
- - test/rails_root/script/generate
66
- - test/result_test.rb
67
- - test/test_helper.rb
68
- - test/track_changes/audit_filter_test.rb
69
- - test/track_changes/configuration_test.rb
70
- - test/track_changes/initializer_test.rb
71
- - README.rdoc
74
+ - LICENSE
75
+ - TODO
76
+ - VERSION.yml
77
+ - lib/generators/track_changes/templates/initializer.rb
78
+ - lib/generators/track_changes/templates/migration.rb
79
+ - lib/generators/track_changes/templates/stylesheet.css
80
+ - lib/generators/track_changes/track_changes_generator.rb
81
+ - lib/track_changes.rb
82
+ - lib/track_changes/action_controller.rb
83
+ - lib/track_changes/active_record.rb
84
+ - lib/track_changes/around_save.rb
85
+ - lib/track_changes/changes.rb
86
+ - lib/track_changes/configuration.rb
87
+ - lib/track_changes/current_user.rb
88
+ - lib/track_changes/current_user_filter.rb
89
+ - lib/track_changes/engine.rb
90
+ - test/functional/posts_controller_test.rb
91
+ - test/railsapp/Gemfile
92
+ - test/railsapp/Gemfile.lock
93
+ - test/railsapp/Rakefile
94
+ - test/railsapp/app/controllers/application_controller.rb
95
+ - test/railsapp/app/controllers/posts_controller.rb
96
+ - test/railsapp/app/models/post.rb
97
+ - test/railsapp/app/models/user.rb
98
+ - test/railsapp/app/views/layouts/application.html.erb
99
+ - test/railsapp/app/views/posts/_form.html.erb
100
+ - test/railsapp/app/views/posts/_post.html.erb
101
+ - test/railsapp/app/views/posts/edit.html.erb
102
+ - test/railsapp/app/views/posts/index.html.erb
103
+ - test/railsapp/config.ru
104
+ - test/railsapp/config/application.rb
105
+ - test/railsapp/config/boot.rb
106
+ - test/railsapp/config/database.yml
107
+ - test/railsapp/config/environment.rb
108
+ - test/railsapp/config/environments/test.rb
109
+ - test/railsapp/config/routes.rb
110
+ - test/railsapp/db/test.sqlite3
111
+ - test/railsapp/log/test.log
112
+ - test/railsapp/script/rails
113
+ - test/schema.rb
114
+ - test/test_helper.rb
115
+ - test/track_changes_test.rb
116
+ - README.rdoc
72
117
  has_rdoc: true
73
118
  homepage: http://github.com/mhaley/track_changes
74
119
  licenses: []
75
120
 
76
121
  post_install_message:
77
122
  rdoc_options:
78
- - --charset=UTF-8
123
+ - --charset=UTF-8
79
124
  require_paths:
80
- - lib
125
+ - lib
81
126
  required_ruby_version: !ruby/object:Gem::Requirement
82
127
  none: false
83
128
  requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
- version: "0"
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ segments:
132
+ - 0
133
+ version: "0"
90
134
  required_rubygems_version: !ruby/object:Gem::Requirement
91
135
  none: false
92
136
  requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- hash: 3
96
- segments:
97
- - 0
98
- version: "0"
137
+ - - ">"
138
+ - !ruby/object:Gem::Version
139
+ segments:
140
+ - 1
141
+ - 3
142
+ - 1
143
+ version: 1.3.1
99
144
  requirements: []
100
145
 
101
146
  rubyforge_project: mhaley
@@ -104,25 +149,16 @@ signing_key:
104
149
  specification_version: 3
105
150
  summary: Easier auditing of Rails model changes in your controllers.
106
151
  test_files:
107
- - test/base_test.rb
108
- - test/class_methods_test.rb
109
- - test/filter_test.rb
110
- - test/functional/posts_controller_test.rb
111
- - test/rails_root/app/controllers/application_controller.rb
112
- - test/rails_root/app/controllers/posts_controller.rb
113
- - test/rails_root/app/models/audit.rb
114
- - test/rails_root/app/models/post.rb
115
- - test/rails_root/config/boot.rb
116
- - test/rails_root/config/environment.rb
117
- - test/rails_root/config/environments/test.rb
118
- - test/rails_root/config/initializers/new_rails_defaults.rb
119
- - test/rails_root/config/initializers/session_store.rb
120
- - test/rails_root/config/initializers/track_changes_setup.rb
121
- - test/rails_root/config/routes.rb
122
- - test/rails_root/db/migrate/20100115021125_create_audits.rb
123
- - test/rails_root/db/migrate/20100115021151_create_posts.rb
124
- - test/result_test.rb
125
- - test/test_helper.rb
126
- - test/track_changes/audit_filter_test.rb
127
- - test/track_changes/configuration_test.rb
128
- - test/track_changes/initializer_test.rb
152
+ - test/schema.rb
153
+ - test/test_helper.rb
154
+ - test/track_changes_test.rb
155
+ - test/functional/posts_controller_test.rb
156
+ - test/railsapp/app/controllers/application_controller.rb
157
+ - test/railsapp/app/controllers/posts_controller.rb
158
+ - test/railsapp/app/models/post.rb
159
+ - test/railsapp/app/models/user.rb
160
+ - test/railsapp/config/application.rb
161
+ - test/railsapp/config/boot.rb
162
+ - test/railsapp/config/environment.rb
163
+ - test/railsapp/config/routes.rb
164
+ - test/railsapp/config/environments/test.rb
@@ -1,69 +0,0 @@
1
- module TrackChanges
2
- # An around filter that will audit changes to your models.
3
- #
4
- # Example:
5
- # class OrdersController < ApplicationController
6
- # before_filter :find_order, :except => [:index, :new, :create]
7
- # around_filter AuditFilter.new(:order), :only => :update
8
- #
9
- # def update
10
- # ...
11
- # end
12
- #
13
- # protected
14
- #
15
- # def find_order
16
- # @order = Order.find(params[:id])
17
- # end
18
- # end
19
- class AuditFilter
20
- attr_accessor :cached_models, :models
21
-
22
- def initialize(*models)
23
- models.flatten!
24
- options = models.extract_options!
25
-
26
- self.cached_models = {}
27
- self.models = models
28
-
29
- @audit_accessor = options[:audit_accessor] || :audits
30
- @current_user = options[:current_user] || :current_user
31
- @ignore_nils = if options[:ignore_nil] == false
32
- false
33
- else
34
- true
35
- end
36
- end
37
-
38
- def before(controller)
39
- self.models.each do |model|
40
- instance_variable_symbol = "@#{model}".to_sym
41
- instance = controller.instance_variable_get(instance_variable_symbol)
42
- next if instance.nil? && @ignore_nils
43
-
44
- self.cached_models[instance_variable_symbol] = instance.clone
45
- end
46
- end
47
-
48
- def after(controller)
49
- self.cached_models.each_pair do |instance_variable_symbol, original_instance|
50
- new_instance = controller.instance_variable_get(instance_variable_symbol)
51
- next if new_instance.changed? # Dirty objects didn't save
52
-
53
- changes = changes_between(new_instance, original_instance)
54
-
55
- unless changes.empty?
56
- audit = new_instance.send(@audit_accessor).create!(:user => controller.send(@current_user), :change_set => changes)
57
- end
58
- end
59
- end
60
-
61
- private
62
-
63
- def changes_between(new, old)
64
- clone = old.clone
65
- clone.attributes = new.attributes
66
- clone.changes
67
- end
68
- end
69
- end
@@ -1,9 +0,0 @@
1
- require 'track_changes/instance_methods'
2
- require 'track_changes/class_methods'
3
-
4
- module TrackChanges
5
- def self.included(controller)
6
- controller.send(:include, InstanceMethods)
7
- controller.extend(ClassMethods)
8
- end
9
- end
@@ -1,74 +0,0 @@
1
- require 'active_support'
2
- require 'track_changes/filter'
3
-
4
- module TrackChanges
5
- module ClassMethods
6
- # Create an audit of the changes made to a module during a controller action.
7
- # Some assumptions are made, primarily that the given models will have a
8
- # polymorphic association to an Audit model. An example Audit model:
9
- #
10
- # class Audit < ActiveRecord::Base
11
- # belongs_to :audited, :polymorphic => true
12
- # belongs_to :user
13
- # serialize :change_set
14
- # end
15
- #
16
- # # Example model that would be audited:
17
- # class Order < ActiveRecord::Base
18
- # has_many :audits, :as => :audited
19
- # end
20
- #
21
- # ==== Parameters
22
- #
23
- # * A symbol or many symbols of the name(s) of the instance variable to create audits for.
24
- # * An optional hash that will be passed as filter conditions to <tt>around_filter</tt>
25
- #
26
- # ==== Examples
27
- #
28
- # # Create an audit of changes made to @order during the <tt>:update</tt> action.
29
- # track_changes :order
30
- #
31
- # # Creates an audit of changes made to @order or @customer during the <tt>:update</tt> action.
32
- # track_changes :order, :customer
33
- #
34
- # # Create an audit of changes made to @order during the <tt>:update</tt> or <tt>:process</tt> actions.
35
- # track_changes :order, :only => [:update, :process]
36
- def track_changes(*args)
37
- options = args.extract_options!
38
- models = args.flatten
39
- options = {:only => :update} if options.empty?
40
-
41
- configuration = TrackChanges::Initializer.instance.configuration
42
-
43
- audit_filter = AuditFilter.new(models,
44
- :audit_accessor => configuration.audit_association,
45
- :current_user => configuration.current_user,
46
- :ignore_nil => configuration.ignore_nil)
47
- around_filter(audit_filter, options)
48
- end
49
-
50
- # Uses a combination of <tt>before_filter</tt> and <tt>after_filter</tt>
51
- # to act on changes made to a module during a controllers <tt>update</tt>
52
- # action.
53
- #
54
- # Parameters:
55
- #
56
- # * <tt>model</tt>: A symbol of the model instance name to track changes to
57
- # * <tt>only_if_changed</tt>: If true, will only yield block if changes is not empty. Defaults to <tt>true</tt>.
58
- # * <tt>options</tt>: An options hash the will be supplied to <tt>before_filter</tt> and <tt>after_filter</tt>. Defaults to <tt>:only => :update</tt>.
59
- # * <tt>&block</tt>: The supplied block is called with an instance of Result as its parameter.
60
- def track_changes_to(models, only_if_changed = true, options = {:only => :update}, &block)
61
- warn "[DEPRECATED] track_changes_to is deprecated. Use track_changes instead"
62
- append_before_filter(options) do |controller|
63
- track_filter = Filter.new(models, only_if_changed, block)
64
- controller.track_changes_filter = track_filter
65
-
66
- track_filter.before(controller)
67
- end
68
-
69
- append_after_filter(options)do |controller|
70
- controller.track_changes_filter.after(controller)
71
- end
72
- end
73
- end
74
- end
@@ -1,43 +0,0 @@
1
- require 'track_changes/result'
2
-
3
- module TrackChanges
4
- class Filter
5
- attr_accessor :call_proc, :changes, :model, :original
6
-
7
- def initialize(model, yield_only_changed, call_proc)
8
- @call_proc = call_proc
9
- @model = model
10
- @yield_only_changed = yield_only_changed
11
- @changes = []
12
- @original = []
13
- end
14
-
15
- def before(controller)
16
- @original = clone_model(controller)
17
- end
18
-
19
- def after(controller)
20
- cur_model = controller.instance_variable_get("@#{@model}")
21
- # If changed? returns true, then the update didn't succeed.
22
- unless cur_model.changed?
23
- @changes = changes_between(@original, cur_model)
24
- unless @yield_only_changed && @changes.empty?
25
- @call_proc.call(Result.new(@model, controller, @changes))
26
- end
27
- end
28
- nil
29
- end
30
-
31
- private
32
-
33
- def changes_between(old, new)
34
- old.attributes = new.attributes
35
- old.changes
36
- end
37
-
38
- def clone_model(controller)
39
- ivar = controller.instance_variable_get("@#{@model}")
40
- ivar.clone if ivar.respond_to?(:clone)
41
- end
42
- end
43
- end
@@ -1,18 +0,0 @@
1
- module TrackChanges
2
- class Initializer
3
- attr_accessor :configuration
4
-
5
- include Singleton
6
-
7
- class << self
8
- alias_method :__tr_instance, :instance
9
-
10
- def instance(&block)
11
- obj = __tr_instance
12
- obj.configuration ||= Configuration.new
13
- yield obj.configuration if block_given?
14
- obj
15
- end
16
- end
17
- end
18
- end
@@ -1,5 +0,0 @@
1
- module TrackChanges
2
- module InstanceMethods
3
- attr_accessor :track_changes_filter
4
- end
5
- end
@@ -1,36 +0,0 @@
1
- module TrackChanges
2
- # A Result instance is yielded by ClassMethods#track_changes_to.
3
- #
4
- # Example:
5
- #
6
- # track_changes_to :post do |result|
7
- # result.post # => The instance variable in the current_controler
8
- # # given by the :post option.
9
- # result.controller # => The instance of the current controller
10
- # result.current_user # => The current controllers @current_user
11
- # result.some_method # => Call some_method on the current controller instance
12
- # end
13
- class Result
14
- attr_accessor :changes, :controller
15
-
16
- def initialize(model_name, controller, changes)
17
- @changes = changes
18
- @controller = controller
19
-
20
- self.class.send(:define_method, model_name) do
21
- @controller.instance_variable_get("@#{model_name}")
22
- end
23
- end
24
-
25
- # Pass all other methods to the controller.
26
- def method_missing(method_sym, *args)
27
- controller.send(method_sym, *args)
28
- end
29
-
30
- # A convienence method that returns the <tt>@current_user</tt>
31
- # in the current controller.
32
- def current_user
33
- user = controller.instance_variable_get("@current_user")
34
- end
35
- end
36
- end
data/test/base_test.rb DELETED
@@ -1,20 +0,0 @@
1
- require 'test_helper'
2
-
3
- class BaseTest < Test::Unit::TestCase
4
- context "when TrackChanges is included in a Class" do
5
- setup do
6
- class A
7
- include TrackChanges
8
- end
9
- end
10
-
11
- should "include InstanceMethods" do
12
- assert A.included_modules.include?(TrackChanges::InstanceMethods)
13
- end
14
-
15
- should "extend class with ClassMethods" do
16
- extended_modules = (class << A; self; end).included_modules
17
- assert extended_modules.include?(TrackChanges::ClassMethods)
18
- end
19
- end
20
- end
@@ -1,29 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ClassMethodsTest < Test::Unit::TestCase
4
- include TrackChanges::ClassMethods
5
-
6
- context "a ClassMethods module" do
7
- context "when track_changes_to method called" do
8
- setup { track_changes_to(:something) {} }
9
-
10
- should "call append_before_filter" do
11
- assert @before_filter
12
- end
13
-
14
- should "call append_after_filter" do
15
- assert @after_filter
16
- end
17
- end
18
- end
19
-
20
- protected
21
-
22
- def append_before_filter(options = {}, &block)
23
- @before_filter = block
24
- end
25
-
26
- def append_after_filter(options = {}, &block)
27
- @after_filter = block
28
- end
29
- end