created-and-updated-by 0.1.1 → 0.1.2

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.
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