good_touch 0.2.0 → 0.3.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,35 @@
1
+ # rcov generated
2
+ coverage
3
+
4
+ # rdoc generated
5
+ rdoc
6
+
7
+ # yard generated
8
+ doc
9
+ .yardoc
10
+
11
+ # bundler
12
+ .bundle
13
+ Gemfile.lock
14
+
15
+ # jeweler generated
16
+ pkg
17
+
18
+ # test files
19
+ test/*.log
20
+ test/*.sqlite3
21
+
22
+ # For vim:
23
+ *.swp
24
+
25
+ # For MacOS:
26
+ .DS_Store
27
+
28
+ # git files
29
+ *.orig
30
+
31
+ # rails files
32
+ tmp
33
+ log
34
+ *.log
35
+ *.sqlite3
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ree-1.8.7-2011.03@good_touch --create
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in good_touch.gemspec
4
+ gemspec
@@ -0,0 +1,21 @@
1
+ = good_touch
2
+
3
+ Update ActiveRecord timestamps without triggering callbacks.
4
+
5
+ = Installation
6
+
7
+ available on gemcutter:
8
+ http://rubygems.org/gems/good_touch
9
+
10
+ == Note on Patches/Pull Requests
11
+
12
+ * Fork the project.
13
+ * Make your feature addition or bug fix.
14
+ * Add tests for it. This is important so I don't break it in a
15
+ future version unintentionally.
16
+ * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
17
+ * Send me a pull request. Bonus points for topic branches.
18
+
19
+ == Copyright
20
+
21
+ Copyright (c) 2010 Ryan Sonnek. See LICENSE for details.
data/Rakefile CHANGED
@@ -1,22 +1,4 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "good_touch"
8
- gem.summary = %Q{ Rails 'touch' method without all the overhead}
9
- gem.description = %Q{ Update your timestamp attributes without invoking all ActiveRecord callbacks}
10
- gem.email = "ryan@codecrate.com"
11
- gem.homepage = "http://github.com/wireframe/good_touch"
12
- gem.authors = ["Ryan Sonnek"]
13
- gem.add_dependency "activerecord", ">= 2.1.0"
14
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- rescue LoadError
18
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
19
- end
1
+ require "bundler/gem_tasks"
20
2
 
21
3
  require 'rake/testtask'
22
4
  Rake::TestTask.new(:test) do |test|
@@ -24,30 +6,4 @@ Rake::TestTask.new(:test) do |test|
24
6
  test.pattern = 'test/**/test_*.rb'
25
7
  test.verbose = true
26
8
  end
27
-
28
- begin
29
- require 'rcov/rcovtask'
30
- Rcov::RcovTask.new do |test|
31
- test.libs << 'test'
32
- test.pattern = 'test/**/test_*.rb'
33
- test.verbose = true
34
- end
35
- rescue LoadError
36
- task :rcov do
37
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
38
- end
39
- end
40
-
41
- task :test => :check_dependencies
42
-
43
9
  task :default => :test
44
-
45
- require 'rake/rdoctask'
46
- Rake::RDocTask.new do |rdoc|
47
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
-
49
- rdoc.rdoc_dir = 'rdoc'
50
- rdoc.title = "good_touch #{version}"
51
- rdoc.rdoc_files.include('README*')
52
- rdoc.rdoc_files.include('lib/**/*.rb')
53
- end
@@ -1,56 +1,26 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "good_touch/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{good_touch}
8
- s.version = "0.2.0"
6
+ s.name = "good_touch"
7
+ s.version = GoodTouch::VERSION
8
+ s.authors = ["Ryan Sonnek"]
9
+ s.email = ["ryan@codecrate.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Update your timestamp attributes without invoking all ActiveRecord callbacks}
12
+ s.description = %q{Fix default rails behavior that fires callbacks when touching records}
9
13
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{Ryan Sonnek}]
12
- s.date = %q{2011-08-11}
13
- s.description = %q{ Update your timestamp attributes without invoking all ActiveRecord callbacks}
14
- s.email = %q{ryan@codecrate.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- "LICENSE",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "good_touch.gemspec",
26
- "good_touch.sqlite3",
27
- "lib/good_touch.rb",
28
- "test/database.yml",
29
- "test/helper.rb",
30
- "test/test_good_touch.rb"
31
- ]
32
- s.homepage = %q{http://github.com/wireframe/good_touch}
33
- s.require_paths = [%q{lib}]
34
- s.rubygems_version = %q{1.8.5}
35
- s.summary = %q{Rails 'touch' method without all the overhead}
36
- s.test_files = [
37
- "test/helper.rb",
38
- "test/test_good_touch.rb"
39
- ]
14
+ s.rubyforge_project = "good_touch"
40
15
 
41
- if s.respond_to? :specification_version then
42
- s.specification_version = 3
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
43
20
 
44
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
- s.add_runtime_dependency(%q<activerecord>, [">= 2.1.0"])
46
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
47
- else
48
- s.add_dependency(%q<activerecord>, [">= 2.1.0"])
49
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
50
- end
51
- else
52
- s.add_dependency(%q<activerecord>, [">= 2.1.0"])
53
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
54
- end
21
+ # specify any dependencies here; for example:
22
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.1.0"])
23
+ s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
24
+ s.add_development_dependency(%q<rake>, [">= 0.9.2.2"])
25
+ s.add_development_dependency(%q<sqlite3>, ['= 1.3.4'])
55
26
  end
56
-
Binary file
@@ -1,9 +1,19 @@
1
+ require "good_touch/version"
2
+
1
3
  module GoodTouch
2
4
  module InstanceMethods
3
5
  #touch a record without triggering callbacks
4
6
  #update DB directly to avoid overhead of reindexing the user
5
- def good_touch(attr = :updated_at, value = Time.now.utc)
6
- self.class.update_all({attr => value}, {:id => self.id})
7
+ def good_touch(*args)
8
+ value=args.pop unless args.empty?
9
+ if value.kind_of? Symbol
10
+ args << value
11
+ value=Time.now.utc
12
+ end
13
+ args << :updated_at if args.empty?
14
+ updates={}
15
+ args.each { |arg| updates[arg]=value }
16
+ self.class.update_all(updates, {:id => self.id})
7
17
  end
8
18
  end
9
19
  end
@@ -0,0 +1,3 @@
1
+ module GoodTouch
2
+ VERSION = "0.3.0"
3
+ end
@@ -36,6 +36,18 @@ class TestGoodTouch < Test::Unit::TestCase
36
36
  end
37
37
  end
38
38
 
39
+ context "calling good_touch with both posted_at and updated_at attributes" do
40
+ setup do
41
+ @post.good_touch :posted_at, :updated_at
42
+ end
43
+ should_change "posted_at timestamp", :to => @now do
44
+ @post.reload.posted_at
45
+ end
46
+ should_change "updated_at timestamp", :to => @now do
47
+ @post.reload.updated_at
48
+ end
49
+ end
50
+
39
51
  context "calling good_touch with a value" do
40
52
  setup do
41
53
  @time = Date.parse("01/01/2010 12:00")
@@ -45,5 +57,18 @@ class TestGoodTouch < Test::Unit::TestCase
45
57
  @post.reload.updated_at
46
58
  end
47
59
  end
60
+
61
+ context "calling good_touch with both posted_at and updated_at and a value" do
62
+ setup do
63
+ @time = Date.parse("01/01/2010 12:00")
64
+ @post.good_touch :updated_at, :posted_at, @time
65
+ end
66
+ should_change "updated_at timestamp", :to => @time do
67
+ @post.reload.updated_at
68
+ end
69
+ should_change "posted_at timestamp", :to => @time do
70
+ @post.reload.posted_at
71
+ end
72
+ end
48
73
  end
49
74
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: good_touch
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
8
+ - 3
9
9
  - 0
10
- version: 0.2.0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Sonnek
@@ -15,12 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-11 00:00:00 Z
18
+ date: 2011-11-17 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activerecord
22
22
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
26
  - - ">="
@@ -31,12 +31,12 @@ dependencies:
31
31
  - 1
32
32
  - 0
33
33
  version: 2.1.0
34
+ requirement: *id001
34
35
  type: :runtime
35
- version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: thoughtbot-shoulda
38
38
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ">="
@@ -45,30 +45,67 @@ dependencies:
45
45
  segments:
46
46
  - 0
47
47
  version: "0"
48
+ requirement: *id002
48
49
  type: :development
49
- version_requirements: *id002
50
- description: " Update your timestamp attributes without invoking all ActiveRecord callbacks"
51
- email: ryan@codecrate.com
50
+ - !ruby/object:Gem::Dependency
51
+ name: rake
52
+ prerelease: false
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 11
59
+ segments:
60
+ - 0
61
+ - 9
62
+ - 2
63
+ - 2
64
+ version: 0.9.2.2
65
+ requirement: *id003
66
+ type: :development
67
+ - !ruby/object:Gem::Dependency
68
+ name: sqlite3
69
+ prerelease: false
70
+ version_requirements: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - "="
74
+ - !ruby/object:Gem::Version
75
+ hash: 19
76
+ segments:
77
+ - 1
78
+ - 3
79
+ - 4
80
+ version: 1.3.4
81
+ requirement: *id004
82
+ type: :development
83
+ description: Fix default rails behavior that fires callbacks when touching records
84
+ email:
85
+ - ryan@codecrate.com
52
86
  executables: []
53
87
 
54
88
  extensions: []
55
89
 
56
- extra_rdoc_files:
57
- - LICENSE
58
- - README.rdoc
90
+ extra_rdoc_files: []
91
+
59
92
  files:
60
93
  - .document
94
+ - .gitignore
95
+ - .rvmrc
96
+ - Gemfile
61
97
  - LICENSE
98
+ - README.md
62
99
  - README.rdoc
63
100
  - Rakefile
64
- - VERSION
65
101
  - good_touch.gemspec
66
102
  - good_touch.sqlite3
67
103
  - lib/good_touch.rb
104
+ - lib/good_touch/version.rb
68
105
  - test/database.yml
69
106
  - test/helper.rb
70
107
  - test/test_good_touch.rb
71
- homepage: http://github.com/wireframe/good_touch
108
+ homepage: ""
72
109
  licenses: []
73
110
 
74
111
  post_install_message:
@@ -96,11 +133,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
133
  version: "0"
97
134
  requirements: []
98
135
 
99
- rubyforge_project:
136
+ rubyforge_project: good_touch
100
137
  rubygems_version: 1.8.5
101
138
  signing_key:
102
139
  specification_version: 3
103
- summary: Rails 'touch' method without all the overhead
140
+ summary: Update your timestamp attributes without invoking all ActiveRecord callbacks
104
141
  test_files:
142
+ - test/database.yml
105
143
  - test/helper.rb
106
144
  - test/test_good_touch.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.2.0