created-and-updated-by 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -11,6 +11,8 @@ begin
11
11
  gem.homepage = "http://github.com/jamesdaniels/created-and-updated-by"
12
12
  gem.authors = ["James Daniels"]
13
13
  gem.add_development_dependency "rspec", ">= 1.2.9"
14
+ gem.add_development_dependency "activerecord"
15
+ gem.add_development_dependency "activesupport"
14
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
17
  end
16
18
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{created-and-updated-by}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James Daniels"]
12
- s.date = %q{2010-01-18}
12
+ s.date = %q{2010-01-21}
13
13
  s.description = %q{This gem extends ActiveRecord::Base causing created_by_id and updated_by_id attributes to be set magically with about 30 LOC}
14
14
  s.email = %q{james@jamesdaniels.net}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,10 @@ Gem::Specification.new do |s|
26
26
  "created-and-updated-by.gemspec",
27
27
  "lib/created-and-updated-by.rb",
28
28
  "spec/created-and-updated-by_spec.rb",
29
+ "spec/db/database.yml",
30
+ "spec/db/models.rb",
31
+ "spec/db/schema.rb",
32
+ "spec/db/test.sqlite3",
29
33
  "spec/spec.opts",
30
34
  "spec/spec_helper.rb"
31
35
  ]
@@ -36,6 +40,8 @@ Gem::Specification.new do |s|
36
40
  s.summary = %q{Preforms magic on created_by_id and updated_by_id fields}
37
41
  s.test_files = [
38
42
  "spec/created-and-updated-by_spec.rb",
43
+ "spec/db/models.rb",
44
+ "spec/db/schema.rb",
39
45
  "spec/spec_helper.rb"
40
46
  ]
41
47
 
@@ -45,11 +51,17 @@ Gem::Specification.new do |s|
45
51
 
46
52
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
53
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
54
+ s.add_development_dependency(%q<activerecord>, [">= 0"])
55
+ s.add_development_dependency(%q<activesupport>, [">= 0"])
48
56
  else
49
57
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
58
+ s.add_dependency(%q<activerecord>, [">= 0"])
59
+ s.add_dependency(%q<activesupport>, [">= 0"])
50
60
  end
51
61
  else
52
62
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
63
+ s.add_dependency(%q<activerecord>, [">= 0"])
64
+ s.add_dependency(%q<activesupport>, [">= 0"])
53
65
  end
54
66
  end
55
67
 
@@ -1,24 +1,32 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/core_ext'
4
+
1
5
  module CreatedAndUpdatedBy
2
6
  class Stamper
7
+ include ActiveSupport::CoreExtensions
3
8
  cattr_accessor :stampable, :attribute
4
- def self.attach(stamp_model = User, stamp_attribute = :current)
5
- raise ArgumentError, "#{stamp_model.name} does not respond to #{stamp_attribute}" unless stamp_model.respond_to?(stamp_attribute)
9
+ def self.attach(stamp_model = :User, stamp_attribute = :current)
10
+ raise ArgumentError, "#{stamp_model} does not respond to #{stamp_attribute}" unless Object.const_get(stamp_model).respond_to?(stamp_attribute)
6
11
  self.stampable, self.attribute = stamp_model, stamp_attribute
7
12
  ActiveRecord::Base.send(:include, CreatedAndUpdatedBy)
8
13
  end
9
14
  end
10
15
  def self.included(base)
11
- base.class_eval do
12
- send :include, InstanceMethods
13
- before_validation :set_stamps
14
- belongs_to :updated_by, :class_name => CreatedAndUpdatedBy::Stamper.stampable.name
15
- belongs_to :created_by, :class_name => CreatedAndUpdatedBy::Stamper.stampable.name
16
- end
16
+ base.class_eval [
17
+ "send :include, InstanceMethods",
18
+ "before_validation :set_stamps",
19
+ "belongs_to :updated_by, :class_name => '#{CreatedAndUpdatedBy::Stamper.stampable}'",
20
+ "belongs_to :created_by, :class_name => '#{CreatedAndUpdatedBy::Stamper.stampable}'",
21
+ ].join("\n")
17
22
  end
18
23
  module InstanceMethods
19
- def stamper; CreatedAndUpdatedBy::Stamper.stampable.send(CreatedAndUpdatedBy::Stamper.attribute); end
24
+ def stamper; Object.const_get(CreatedAndUpdatedBy::Stamper.stampable).send(CreatedAndUpdatedBy::Stamper.attribute); end
20
25
  def set_stamps
21
- self.created_by ||= self.updated_by = stamper if stamper && respond_to?(:created_by_id) && respond_to?(:updated_by_id)
26
+ if stamper && stamper.respond_to?(:id) && respond_to?(:created_by_id) && respond_to?(:updated_by_id)
27
+ self.created_by_id = stamper.id if new_record?
28
+ self.updated_by_id = stamper.id
29
+ end
22
30
  end
23
31
  end
24
32
  end
@@ -1,7 +1,46 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- describe "CreatedAndUpdatedBy" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
6
- end
3
+ describe User do
4
+ it 'should have a freaking user' do
5
+ User.count > 0
6
+ end
7
+ it 'should have a curent_user set' do
8
+ User.current.should == User.first
9
+ end
7
10
  end
11
+
12
+ describe WithCreated do
13
+ it 'should set the created_by_id on create' do
14
+ created = WithCreated.create!
15
+ created.created_by_id.should == User.first.id
16
+ created.updated_by_id.should == User.first.id
17
+ end
18
+ it 'can retrieve the created by' do
19
+ created = WithCreated.create!
20
+ created.created_by.should == User.first
21
+ created.updated_by.should == User.first
22
+ end
23
+ it 'sets the updated by' do
24
+ User.current = User.first
25
+ created = WithCreated.create!
26
+ User.current = User.last
27
+ created.something = 'blah blah something else'
28
+ created.save!
29
+ created.created_by_id.should == User.first.id
30
+ created.updated_by_id.should == User.last.id
31
+ User.current = User.first
32
+ end
33
+ end
34
+
35
+ describe WithoutCreated do
36
+ it 'should set the created_by_id on create' do
37
+ created = WithoutCreated.create!
38
+ created.respond_to?(:created_by_id).should be_false
39
+ created.respond_to?(:updated_by_id).should be_false
40
+ end
41
+ it 'can retrieve the created by' do
42
+ created = WithoutCreated.create!
43
+ created.created_by.should == nil
44
+ created.updated_by.should == nil
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ active_record_merge_test:
2
+ adapter: sqlite3
3
+ database: 'spec/db/test.sqlite3'
data/spec/db/models.rb ADDED
@@ -0,0 +1,9 @@
1
+ class User < ActiveRecord::Base
2
+ cattr_accessor :current
3
+ end
4
+
5
+ class WithCreated < ActiveRecord::Base
6
+ end
7
+
8
+ class WithoutCreated < ActiveRecord::Base
9
+ end
data/spec/db/schema.rb ADDED
@@ -0,0 +1,13 @@
1
+ ActiveRecord::Schema.define(:version => 1) do
2
+ create_table :with_createds, :force => true do |t|
3
+ t.column :something, :string
4
+ t.column :created_by_id, :integer
5
+ t.column :updated_by_id, :integer
6
+ end
7
+ create_table :without_createds, :force => true do |t|
8
+ t.column :something, :string
9
+ end
10
+ create_table :users, :force => true do |t|
11
+ t.column :something, :string
12
+ end
13
+ end
Binary file
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,30 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'created-and-updated-by'
4
+ require 'active_record'
5
+ require 'active_record/fixtures'
6
+ require 'active_support'
7
+ require 'active_support/core_ext'
4
8
  require 'spec'
5
9
  require 'spec/autorun'
6
10
 
11
+ # establish the database connection
12
+ ActiveRecord::Base.configurations = YAML::load(IO.read(File.dirname(__FILE__) + '/db/database.yml'))
13
+ ActiveRecord::Base.establish_connection('active_record_merge_test')
14
+
15
+ # load the schema
16
+ $stdout = File.open('/dev/null', 'w')
17
+ load(File.dirname(__FILE__) + "/db/schema.rb")
18
+ $stdout = STDOUT
19
+
20
+
21
+ require File.dirname(__FILE__) + '/db/models'
22
+ CreatedAndUpdatedBy::Stamper.attach(:User, :current)
23
+
24
+ users = [User.create!(:something => 'test'), User.create!(:something => 'something else')]
25
+
26
+ User.current = users[0]
27
+
7
28
  Spec::Runner.configure do |config|
8
29
 
9
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: created-and-updated-by
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Daniels
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-18 00:00:00 -05:00
12
+ date: 2010-01-21 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,6 +22,26 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 1.2.9
24
24
  version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: activerecord
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: activesupport
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
25
45
  description: This gem extends ActiveRecord::Base causing created_by_id and updated_by_id attributes to be set magically with about 30 LOC
26
46
  email: james@jamesdaniels.net
27
47
  executables: []
@@ -41,6 +61,10 @@ files:
41
61
  - created-and-updated-by.gemspec
42
62
  - lib/created-and-updated-by.rb
43
63
  - spec/created-and-updated-by_spec.rb
64
+ - spec/db/database.yml
65
+ - spec/db/models.rb
66
+ - spec/db/schema.rb
67
+ - spec/db/test.sqlite3
44
68
  - spec/spec.opts
45
69
  - spec/spec_helper.rb
46
70
  has_rdoc: true
@@ -73,4 +97,6 @@ specification_version: 3
73
97
  summary: Preforms magic on created_by_id and updated_by_id fields
74
98
  test_files:
75
99
  - spec/created-and-updated-by_spec.rb
100
+ - spec/db/models.rb
101
+ - spec/db/schema.rb
76
102
  - spec/spec_helper.rb