filthy 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -10,6 +10,7 @@ gem install filthy
10
10
 
11
11
  ```ruby
12
12
  class Movie < ActiveRecord::Base
13
+ include Filthy
13
14
 
14
15
  filthy_attributes :title, :director
15
16
 
@@ -31,7 +32,7 @@ end
31
32
 
32
33
  # Credits
33
34
 
34
- Filthy is maintained by [Mike Taylor](http://github.com/sealabcore) and is funded by [BookRenter.com](http://www.bookrenter.com "BookRenter.com"). Many of the ideas that have inspired Filthy come from practical usage by the Bookrenter software development team and conversations with Bookrenter developers [Andrew Wheeler](http://github.com/jawheeler), [Michael Pearce](http://github.com/michaelgpearce), and [Philippe Huibonhoa](http://github.com/phuibonhoa).
35
+ Filthy is maintained by [Mike Taylor](http://github.com/sealabcore) and is funded by [BookRenter.com](http://www.bookrenter.com "BookRenter.com"). Many of the ideas that have inspired Filthy come from practical usage by the Bookrenter software development team and conversations with Bookrenter developers [Andrew Wheeler](http://github.com/jawheeler), [Michael Pearce](http://github.com/michaelgpearce), [Philippe Huibonhoa](http://github.com/phuibonhoa), and [Ben Somers](http://github.com/bensomers).
35
36
 
36
37
  ![BookRenter.com Logo](http://assets0.bookrenter.com/images/header/bookrenter_logo.gif "BookRenter.com")
37
38
 
data/README.rdoc CHANGED
@@ -10,6 +10,7 @@ Rails gem to check if an attribute was changed on the last save. Useful in after
10
10
 
11
11
 
12
12
  class Movie < ActiveRecord::Base
13
+ include Filthy
13
14
 
14
15
  filthy_attributes :title, :director
15
16
 
@@ -35,4 +36,4 @@ Filthy is maintained by Mike Taylor and is funded by BookRenter.com. Many of the
35
36
 
36
37
  == Copyright
37
38
 
38
- Copyright (c) 2012 Mike Taylor, Bookrenter.com.
39
+ Copyright (c) 2012 Mike Taylor, Bookrenter.com.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('filthy', '1.0.1') do |p|
5
+ Echoe.new('filthy', '2.0.0') do |p|
6
6
  p.description = "Check if an attribute was changed after the last save."
7
7
  p.url = "http://github.com/sealabcore/filthy"
8
8
  p.author = "Mike Taylor"
data/filthy.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "filthy"
5
- s.version = "1.0.1"
5
+ s.version = "2.0.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Mike Taylor"]
9
- s.date = "2012-01-20"
9
+ s.date = "2012-02-08"
10
10
  s.description = "Check if an attribute was changed after the last save."
11
11
  s.email = "michael.taylor@bookrenter.com"
12
12
  s.extra_rdoc_files = ["README.md", "README.rdoc", "lib/filthy.rb"]
data/lib/filthy.rb CHANGED
@@ -6,11 +6,17 @@ module Filthy
6
6
  module ClassMethods
7
7
 
8
8
  def filthy_attributes(*args)
9
- class_variable_set(:@@filthy_attributes, args)
10
-
11
- class_variable_set(:@@filthy_attribute_methods, class_variable_get(:@@filthy_attributes).collect { |attribute| :"#{attribute}_filthy" })
9
+ raise ArgumentError if args.empty?
10
+ class_inheritable_accessor :filthy_columns, :filthy_attribute_methods
11
+
12
+ if self.filthy_columns
13
+ self.filthy_columns |= args
14
+ else
15
+ self.filthy_columns = args
16
+ end
17
+ self.filthy_attribute_methods = self.filthy_columns.collect { |attribute| :"#{attribute}_filthy" }
12
18
 
13
- class_variable_get(:@@filthy_attribute_methods).each do |method|
19
+ self.filthy_attribute_methods.each do |method|
14
20
  attr_accessor method
15
21
 
16
22
  send(:define_method, :"#{method}?") do
@@ -23,19 +29,19 @@ module Filthy
23
29
  module InstanceMethods
24
30
 
25
31
  def has_filthy_attributes?
26
- self.class.class_variables.include?("@@filthy_attributes")
32
+ defined?(filthy_columns) and self.filthy_columns.present?
27
33
  end
28
34
 
29
35
  def set_filthy_before_save
30
36
  clean_filthy_attributes
31
- filthy_attributes = changes.keys.select { |attribute| self.class.send(:class_variable_get, :@@filthy_attributes).include? attribute.to_sym }
37
+ filthy_attributes = changes.keys.select { |attribute| self.class.filthy_columns.include? attribute.to_sym }
32
38
  filthy_attributes.each do |filthy_attribute|
33
39
  send("#{filthy_attribute}_filthy=", true)
34
40
  end
35
41
  end
36
42
 
37
43
  def clean_filthy_attributes
38
- self.class.send(:class_variable_get, :@@filthy_attribute_methods).each { |fa| send("#{fa}=", nil) }
44
+ self.class.filthy_attribute_methods.each { |fa| send("#{fa}=", nil) }
39
45
  end
40
46
 
41
47
  end
@@ -47,7 +53,3 @@ module Filthy
47
53
  end
48
54
 
49
55
  end
50
-
51
- class ActiveRecord::Base
52
- include Filthy
53
- end
data/test/filthy_test.rb CHANGED
@@ -7,6 +7,12 @@ class MovieTest < Test::Unit::TestCase
7
7
  @movie = Movie.new
8
8
  end
9
9
 
10
+ context "with no arguments" do
11
+ should "raise an ArgumentError" do
12
+ assert_raise(ArgumentError) { Movie.filthy_attributes }
13
+ end
14
+ end
15
+
10
16
  context "with passed attributes" do
11
17
  context "on a new record" do
12
18
  should "create accessors" do
@@ -82,7 +88,18 @@ class MovieTest < Test::Unit::TestCase
82
88
  assert @short.title_filthy?
83
89
  end
84
90
  end
91
+
92
+ context "with a subclass with different filthy_attributes defined" do
93
+ should "inherit the parent class's filthy attributes and add to them" do
94
+ assert_same_elements [:best_boy_grip, :title, :director], Documentary.filthy_columns
95
+ end
96
+
97
+ should "not alter the parent class's filthy attributes" do
98
+ assert_same_elements [:title, :director], Movie.filthy_columns
99
+ end
100
+ end
85
101
  end
102
+
86
103
 
87
104
  end
88
105
 
data/test/helper.rb CHANGED
@@ -10,6 +10,7 @@ ActiveRecord::Base.establish_connection(config['test'])
10
10
  ActiveRecord::Base.connection.create_table :movies, :force => true do |table|
11
11
  table.column :title, :string
12
12
  table.column :director, :string
13
+ table.column :best_boy_grip, :string
13
14
  end
14
15
 
15
16
  ActiveRecord::Base.connection.create_table :actors, :force => true do |table|
@@ -18,14 +19,19 @@ ActiveRecord::Base.connection.create_table :actors, :force => true do |table|
18
19
  end
19
20
 
20
21
  class Movie < ActiveRecord::Base
22
+ include Filthy
21
23
 
22
24
  filthy_attributes :title, :director
23
-
24
25
  end
25
26
 
26
27
  class Short < Movie
27
28
  end
28
29
 
30
+ class Documentary < Movie
31
+ filthy_attributes :best_boy_grip
32
+ end
33
+
29
34
  class Actor < ActiveRecord::Base
35
+ include Filthy
30
36
 
31
37
  end
metadata CHANGED
@@ -1,103 +1,80 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: filthy
3
- version: !ruby/object:Gem::Version
4
- hash: 21
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Mike Taylor
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-01-20 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-02-08 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: sqlite3
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70268718749540 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: active_record
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70268718749540
25
+ - !ruby/object:Gem::Dependency
26
+ name: active_record
27
+ requirement: &70268718748840 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
46
33
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: active_support
50
34
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70268718748840
36
+ - !ruby/object:Gem::Dependency
37
+ name: active_support
38
+ requirement: &70268718748120 !ruby/object:Gem::Requirement
52
39
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
60
44
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: test-unit
64
45
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70268718748120
47
+ - !ruby/object:Gem::Dependency
48
+ name: test-unit
49
+ requirement: &70268718747380 !ruby/object:Gem::Requirement
66
50
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
74
55
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: shoulda-context
78
56
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70268718747380
58
+ - !ruby/object:Gem::Dependency
59
+ name: shoulda-context
60
+ requirement: &70268718746660 !ruby/object:Gem::Requirement
80
61
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
88
66
  type: :development
89
- version_requirements: *id005
67
+ prerelease: false
68
+ version_requirements: *70268718746660
90
69
  description: Check if an attribute was changed after the last save.
91
70
  email: michael.taylor@bookrenter.com
92
71
  executables: []
93
-
94
72
  extensions: []
95
-
96
- extra_rdoc_files:
73
+ extra_rdoc_files:
97
74
  - README.md
98
75
  - README.rdoc
99
76
  - lib/filthy.rb
100
- files:
77
+ files:
101
78
  - README.md
102
79
  - README.rdoc
103
80
  - Rakefile
@@ -109,42 +86,33 @@ files:
109
86
  - filthy.gemspec
110
87
  homepage: http://github.com/sealabcore/filthy
111
88
  licenses: []
112
-
113
89
  post_install_message:
114
- rdoc_options:
90
+ rdoc_options:
115
91
  - --line-numbers
116
92
  - --inline-source
117
93
  - --title
118
94
  - Filthy
119
95
  - --main
120
96
  - README.md
121
- require_paths:
97
+ require_paths:
122
98
  - lib
123
- required_ruby_version: !ruby/object:Gem::Requirement
99
+ required_ruby_version: !ruby/object:Gem::Requirement
124
100
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
132
- required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
106
  none: false
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- hash: 11
138
- segments:
139
- - 1
140
- - 2
141
- version: "1.2"
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '1.2'
142
111
  requirements: []
143
-
144
112
  rubyforge_project: filthy
145
113
  rubygems_version: 1.8.10
146
114
  signing_key:
147
115
  specification_version: 3
148
116
  summary: Check if an attribute was changed after the last save.
149
- test_files:
117
+ test_files:
150
118
  - test/filthy_test.rb