associate_by 0.1.0 → 0.1.1
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/Manifest +1 -0
- data/README.markdown +6 -1
- data/Rakefile +1 -1
- data/associate_by.gemspec +3 -2
- data/lib/associate_by.rb +1 -2
- data/test/associate_by_test.rb +113 -0
- metadata +6 -5
data/Manifest
CHANGED
data/README.markdown
CHANGED
@@ -14,13 +14,15 @@ Example:
|
|
14
14
|
|
15
15
|
You could assign a Product to a Category using the product name
|
16
16
|
|
17
|
+
*WARNING: This gem only works with Rails 3. It might work with Rails 2, but I haven't tried it.*
|
18
|
+
|
17
19
|
## Instalation
|
18
20
|
|
19
21
|
### Rails 3
|
20
22
|
|
21
23
|
Add the gem to your Gemfile
|
22
24
|
|
23
|
-
gem 'associate_by'
|
25
|
+
gem 'associate_by', '>=0.1.1'
|
24
26
|
|
25
27
|
Install using bundle
|
26
28
|
|
@@ -49,3 +51,6 @@ It will associate the Category with the Product so,
|
|
49
51
|
|
50
52
|
c.products # => [p]
|
51
53
|
|
54
|
+
## Todo
|
55
|
+
|
56
|
+
Finish this document
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('associate_by', '0.1.
|
5
|
+
Echoe.new('associate_by', '0.1.1') do |p|
|
6
6
|
p.description = "Associate objects using a specific attribute"
|
7
7
|
p.url = "http://github.com/crowdint/associate_by"
|
8
8
|
p.author = "David Padilla"
|
data/associate_by.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{associate_by}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["David Padilla"]
|
@@ -10,13 +10,14 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = %q{Associate objects using a specific attribute}
|
11
11
|
s.email = %q{david@crowdint.com}
|
12
12
|
s.extra_rdoc_files = ["README.markdown", "lib/associate_by.rb"]
|
13
|
-
s.files = ["README.markdown", "Rakefile", "init.rb", "lib/associate_by.rb", "Manifest", "associate_by.gemspec"]
|
13
|
+
s.files = ["README.markdown", "Rakefile", "init.rb", "lib/associate_by.rb", "test/associate_by_test.rb", "Manifest", "associate_by.gemspec"]
|
14
14
|
s.homepage = %q{http://github.com/crowdint/associate_by}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Associate_by", "--main", "README.markdown"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.rubyforge_project = %q{associate_by}
|
18
18
|
s.rubygems_version = %q{1.3.7}
|
19
19
|
s.summary = %q{Associate objects using a specific attribute}
|
20
|
+
s.test_files = ["test/associate_by_test.rb"]
|
20
21
|
|
21
22
|
if s.respond_to? :specification_version then
|
22
23
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/associate_by.rb
CHANGED
@@ -22,8 +22,7 @@ module AssociateBy
|
|
22
22
|
object = association.to_s.singularize.camelize.constantize.where(["#{method} = ?", self.send("#{association.to_s.singularize}_#{method}")]).first
|
23
23
|
|
24
24
|
# If the object doesn't exist and the parameter create is true, then create it
|
25
|
-
if object.nil? && self.send("#{association.to_s.singularize}_#{method}_create?")
|
26
|
-
Rails.logger.info("AAAAAAAAAAAAAAAAAAAAAAAAAAAA")
|
25
|
+
if object.nil? && !(self.send("#{association.to_s.singularize}_#{method}").empty?) && self.send("#{association.to_s.singularize}_#{method}_create?")
|
27
26
|
object = association.to_s.singularize.camelize.constantize.create({"#{method}" => self.send("#{association.to_s.singularize}_#{method}")})
|
28
27
|
end
|
29
28
|
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'activerecord', '>=3.0.0.beta4'
|
5
|
+
require 'active_record'
|
6
|
+
require "#{File.dirname(__FILE__)}/../init"
|
7
|
+
|
8
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
9
|
+
|
10
|
+
def setup_db
|
11
|
+
ActiveRecord::Schema.define(:version => 1) do
|
12
|
+
create_table :parents do |t|
|
13
|
+
t.column :name, :string
|
14
|
+
end
|
15
|
+
|
16
|
+
create_table :children do |t|
|
17
|
+
t.column :parent_id, :integer
|
18
|
+
t.column :name, :string
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown_db
|
24
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
25
|
+
ActiveRecord::Base.connection.drop_table(table)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Category < ActiveRecord::Base
|
30
|
+
has_many :products
|
31
|
+
associate_by :products, :name
|
32
|
+
|
33
|
+
def self.table_name
|
34
|
+
"parents"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Product < ActiveRecord::Base
|
39
|
+
associate_by :category, :name
|
40
|
+
belongs_to :category
|
41
|
+
|
42
|
+
def self.table_name
|
43
|
+
"children"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class Actor < ActiveRecord::Base
|
48
|
+
associate_by :movie, :name, :create => true
|
49
|
+
belongs_to :movie
|
50
|
+
|
51
|
+
def self.table_name
|
52
|
+
"children"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Movie < ActiveRecord::Base
|
57
|
+
associate_by :actors, :name, :create => true
|
58
|
+
has_many :actors
|
59
|
+
|
60
|
+
def self.table_name
|
61
|
+
"parents"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class AssociateByTest < Test::Unit::TestCase
|
66
|
+
def setup
|
67
|
+
setup_db
|
68
|
+
@category = Category.create(:name => 'Category')
|
69
|
+
@product = Product.create(:name => 'Product')
|
70
|
+
@movie= Movie.create(:name => 'Movie')
|
71
|
+
@actor= Actor.create(:name => 'Actor')
|
72
|
+
end
|
73
|
+
|
74
|
+
def teardown
|
75
|
+
teardown_db
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_has_many_association
|
79
|
+
@category.product_name = @product.name
|
80
|
+
@category.save
|
81
|
+
assert_equal(true, @category.products.include?(@product))
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_belongs_to_association
|
85
|
+
@product.category_name = @category.name
|
86
|
+
@product.save
|
87
|
+
assert_equal(@category, @product.category)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_create_has_many_association
|
91
|
+
@movie.actor_name = 'A Different Actor'
|
92
|
+
@movie.save
|
93
|
+
assert_equal(1, Actor.where(:name => 'A Different Actor').count)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_create_belongs_to_association
|
97
|
+
@actor.movie_name = 'A Different Movie'
|
98
|
+
@actor.save
|
99
|
+
assert_equal(1, Movie.where(:name => 'A Different Movie').count)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_belongs_to_reader
|
103
|
+
@product.category = @category
|
104
|
+
@product.save
|
105
|
+
assert_equal(@category.name, @product.category_name)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_has_many_reader
|
109
|
+
@category.products << @product
|
110
|
+
assert_equal("", @category.product_name)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: associate_by
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Padilla
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- Rakefile
|
34
34
|
- init.rb
|
35
35
|
- lib/associate_by.rb
|
36
|
+
- test/associate_by_test.rb
|
36
37
|
- Manifest
|
37
38
|
- associate_by.gemspec
|
38
39
|
has_rdoc: true
|
@@ -75,5 +76,5 @@ rubygems_version: 1.3.7
|
|
75
76
|
signing_key:
|
76
77
|
specification_version: 3
|
77
78
|
summary: Associate objects using a specific attribute
|
78
|
-
test_files:
|
79
|
-
|
79
|
+
test_files:
|
80
|
+
- test/associate_by_test.rb
|