acts_as_relation 0.0.2 → 0.0.4

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/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ .rvmrc
4
+ Gemfile.lock
5
+ pkg/*
6
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in acts_as_list-rails3.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+
4
+ desc 'Test the acts_as_relation plugin.'
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << 'lib'
7
+ t.libs << 'test'
8
+ t.pattern = 'test/**/*_test.rb'
9
+ t.verbose = true
10
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'version'
4
+
5
+ Gem::Specification.new do |s|
6
+
7
+ # Description Meta...
8
+ s.name = 'acts_as_relation'
9
+ s.version = ActiveRecord::Acts::AsRelation::VERSION
10
+ s.platform = Gem::Platform::RUBY
11
+ s.author = 'Hassan Zamani'
12
+ s.email = 'hsn.zamani@gmail.com'
13
+ s.homepage = 'http://github.com/hzamani/acts_as_relation'
14
+ s.summary = 'Easy multi-table inheritance for rails'
15
+ s.description = "This 'acts_as' extension provides multi-table inheritance for rails models."
16
+
17
+
18
+ # Load Paths...
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ['lib']
23
+
24
+
25
+ # Dependencies (installed via 'bundle install')...
26
+ s.add_development_dependency("bundler")
27
+ s.add_development_dependency("sqlite3")
28
+ s.add_development_dependency("activerecord")
29
+ end
@@ -39,11 +39,12 @@ module ActiveRecord
39
39
  base.has_one :#{name}, :as => :#{name}, :autosave => true, :validate => false
40
40
  base.validate :#{name}_must_be_valid
41
41
  base.alias_method_chain :#{name}, :autobuild
42
-
42
+
43
43
  base.extend ActiveRecord::Acts::AsRelation::AccessMethods
44
44
  all_attributes = #{name.camelcase.constantize}.content_columns.map(&:name)
45
45
  ignored_attributes = ["created_at", "updated_at", "#{name}_type"]
46
- attributes_to_delegate = all_attributes - ignored_attributes
46
+ associations = #{name.camelcase.constantize}.reflect_on_all_associations(:belongs_to).map! { |assoc| assoc.name }
47
+ attributes_to_delegate = all_attributes - ignored_attributes + associations
47
48
  base.define_acts_as_accessors(attributes_to_delegate, "#{name}")
48
49
  end
49
50
 
@@ -52,7 +53,6 @@ module ActiveRecord
52
53
  end
53
54
 
54
55
  def method_missing(method, *arg, &block)
55
-
56
56
  end
57
57
 
58
58
  def respond_to?(method, include_private_methods = false)
data/lib/version.rb ADDED
@@ -0,0 +1,7 @@
1
+ module ActiveRecord
2
+ module Acts
3
+ module AsRelation
4
+ VERSION = "0.0.4"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,82 @@
1
+ require 'test_helper'
2
+
3
+ class ActsAsRelationTest < ActiveSupport::TestCase
4
+
5
+ test "acts as validation" do
6
+ pen = Pen.new
7
+ assert !pen.valid?
8
+ assert_equal pen.errors.keys, [:name, :price, :color]
9
+
10
+ pen.name = "TestPen"
11
+ assert !pen.valid?
12
+ assert_equal pen.errors.keys, [:price, :color]
13
+
14
+ pencil = Pencil.new
15
+ assert !pencil.valid?
16
+ assert_equal pencil.errors.keys, [:name, :price, :color]
17
+
18
+ pencil.color = "red"
19
+ assert !pencil.valid?
20
+ assert_equal pencil.errors.keys, [:name, :price]
21
+ end
22
+
23
+ test "save model" do
24
+ assert Pen.new(:name=>"FOO", :color=>"black", :price=>0.89).save
25
+ pen = Pen.new
26
+ pen.name = "BAR"
27
+ pen.color = "red"
28
+ pen.price = 0.99
29
+ assert pen.save
30
+ end
31
+
32
+ test "access methods" do
33
+ assert_nothing_raised(ActiveRecord::UnknownAttributeError) do
34
+ Pen.new(:name=>"RedPen", :price=>0.59, :color=>"red")
35
+ Pencil.new(:name=>"RedPencil", :price=>0.59, :color=>"red")
36
+ end
37
+ end
38
+
39
+ test "acts as method missing" do
40
+ assert_nothing_raised(NoMethodError) do
41
+ pen = Pen.new
42
+ pen.name_changed?
43
+ pen.price_changed?
44
+ pen.name_was
45
+
46
+ pencil = Pencil.new
47
+ pencil.name_changed?
48
+ pencil.price_changed?
49
+ pencil.name_was
50
+ pencil.color_was
51
+ end
52
+ end
53
+
54
+ test "acts as respond to?" do
55
+ pen = Pen.new
56
+ assert(pen.respond_to? :name_changed?)
57
+ assert(pen.respond_to? :name_was)
58
+ assert(pen.respond_to? :price_will_change!)
59
+
60
+ pencil = Pencil.new
61
+ assert(pencil.respond_to? :name_changed?)
62
+ assert(pencil.respond_to? :name_was)
63
+ assert(pencil.respond_to? :price_will_change!)
64
+ assert(pencil.respond_to? :color_changed?)
65
+ assert(pencil.respond_to? :color_was)
66
+ end
67
+
68
+ test "association reflections" do
69
+ store = Store.new
70
+ pen = Pen.new
71
+ pen.store = store
72
+
73
+ assert_equal store, pen.product.store
74
+ assert_equal store, pen.store
75
+ end
76
+
77
+ end
78
+
79
+ #ActiveRecord::Base.connection.tables.each do |table|
80
+ # ActiveRecord::Base.connection.drop_table(table)
81
+ #end
82
+
data/test/schema.rb ADDED
@@ -0,0 +1,48 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require 'acts_as_relation'
4
+
5
+ ActiveRecord::Base.establish_connection(
6
+ :adapter => "sqlite3",
7
+ :database => ":memory:"
8
+ )
9
+
10
+ ActiveRecord::Schema.define(:version => 1) do
11
+
12
+ create_table :stores do |t|
13
+ t.string :store_name
14
+ end
15
+
16
+ create_table :products do |t|
17
+ t.string :name
18
+ t.float :price
19
+ t.string :product_type
20
+ t.integer :product_id
21
+ end
22
+
23
+ create_table :pens do |t|
24
+ t.string :color
25
+ t.integer :pen_id
26
+ t.string :pen_type
27
+ end
28
+
29
+ create_table :pencils
30
+ end
31
+
32
+ class Store < ActiveRecord::Base
33
+ has_many :products
34
+ end
35
+
36
+ class Product < ActiveRecord::Base
37
+ belongs_to :store
38
+ validates_presence_of :name, :price
39
+ end
40
+
41
+ class Pen < ActiveRecord::Base
42
+ acts_as :product
43
+ validates_presence_of :color
44
+ end
45
+
46
+ class Pencil < ActiveRecord::Base
47
+ acts_as :pen
48
+ end
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'active_support'
4
+ require 'schema'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_relation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,19 +9,60 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-03 00:00:00.000000000Z
13
- dependencies: []
14
- description:
12
+ date: 2011-09-12 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: &14204820 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *14204820
25
+ - !ruby/object:Gem::Dependency
26
+ name: sqlite3
27
+ requirement: &14203940 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *14203940
36
+ - !ruby/object:Gem::Dependency
37
+ name: activerecord
38
+ requirement: &14178400 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *14178400
47
+ description: This 'acts_as' extension provides multi-table inheritance for rails models.
15
48
  email: hsn.zamani@gmail.com
16
49
  executables: []
17
50
  extensions: []
18
51
  extra_rdoc_files: []
19
52
  files:
20
- - lib/acts_as_relation.rb
21
- - lib/active_record/acts/as_relation.rb
22
- - init.rb
53
+ - .gitignore
54
+ - Gemfile
23
55
  - README.markdown
24
- homepage: https://github.com/hzamani/acts_as_relation
56
+ - Rakefile
57
+ - acts_as_relation.gemspec
58
+ - init.rb
59
+ - lib/active_record/acts/as_relation.rb
60
+ - lib/acts_as_relation.rb
61
+ - lib/version.rb
62
+ - test/acts_as_relation_test.rb
63
+ - test/schema.rb
64
+ - test/test_helper.rb
65
+ homepage: http://github.com/hzamani/acts_as_relation
25
66
  licenses: []
26
67
  post_install_message:
27
68
  rdoc_options: []
@@ -41,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
82
  version: '0'
42
83
  requirements: []
43
84
  rubyforge_project:
44
- rubygems_version: 1.8.6
85
+ rubygems_version: 1.8.10
45
86
  signing_key:
46
87
  specification_version: 3
47
88
  summary: Easy multi-table inheritance for rails