a_a_n 0.2.5 → 0.2.6
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/.rspec +1 -0
- data/Gemfile +23 -2
- data/Guardfile +5 -0
- data/Rakefile +31 -1
- data/VERSION +1 -0
- data/a_a_n.gemspec +86 -28
- data/db/seeds.rb +45 -0
- data/lib/a_a_n/association_as_name.rb +2 -1
- data/lib/a_a_n/version.rb +1 -1
- data/spec/aan_spec.rb +99 -0
- data/spec/aliases_spec.rb +100 -0
- data/spec/multiple_spec.rb +122 -0
- data/spec/spec_helper.rb +29 -0
- metadata +124 -36
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
CHANGED
@@ -1,4 +1,25 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
group :development do
|
4
|
+
gem "rake", "~> 0.9.2"
|
5
|
+
|
6
|
+
gem "rspec"
|
7
|
+
|
8
|
+
gem "activerecord", :require => false
|
9
|
+
gem "activesupport", :require => false
|
10
|
+
|
11
|
+
gem "yard", "~> 0.6.0"
|
12
|
+
gem "jeweler", "~> 1.6.4"
|
13
|
+
|
14
|
+
gem 'shoulda-context'
|
15
|
+
gem "mocha"
|
16
|
+
|
17
|
+
gem "simplecov", "~> 0.6.4", :platform => :ruby_19
|
18
|
+
gem "rcov", "~> 1.0.0", :platform => :ruby_18
|
19
|
+
|
20
|
+
gem "debugger", "~> 1.1.3", :platform => :ruby_19
|
21
|
+
gem 'ruby-debug', :platform => :ruby_18
|
22
|
+
|
23
|
+
gem "database_cleaner", :group => :test
|
24
|
+
gem "sqlite3", :group => :test
|
25
|
+
end
|
data/Guardfile
ADDED
data/Rakefile
CHANGED
@@ -1 +1,31 @@
|
|
1
|
-
require
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
begin
|
5
|
+
Bundler.setup(:default, :development)
|
6
|
+
rescue Bundler::BundlerError => e
|
7
|
+
$stderr.puts e.message
|
8
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
9
|
+
exit e.status_code
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "a_a_n"
|
18
|
+
gem.homepage = "https://github.com/kot-begemot/association_as_name"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Association as name}
|
21
|
+
gem.description = %Q{Whenever you need assign an association by its attribute,
|
22
|
+
like name, this gem comes to business.}
|
23
|
+
gem.email = "test@example.com"
|
24
|
+
gem.authors = ["E-Max"]
|
25
|
+
# dependencies defined in Gemfile
|
26
|
+
end
|
27
|
+
Jeweler::RubygemsDotOrgTasks.new
|
28
|
+
|
29
|
+
|
30
|
+
require 'yard'
|
31
|
+
YARD::Rake::YardocTask.new
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.6
|
data/a_a_n.gemspec
CHANGED
@@ -1,35 +1,93 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "a_a_n/version"
|
4
5
|
|
5
6
|
Gem::Specification.new do |s|
|
6
|
-
s.name
|
7
|
-
s.version
|
8
|
-
s.authors = ["E-Max","shell"]
|
9
|
-
s.email = ["developers@studentify.nl"]
|
10
|
-
s.homepage = "https://github.com/Studentify/association_as_name"
|
11
|
-
s.summary = %q{Association as name}
|
12
|
-
s.description = %q{Whenever you need assign an association by its attribute,
|
13
|
-
like name, this gem comes to busines.}
|
7
|
+
s.name = "a_a_n"
|
8
|
+
s.version = "0.2.6"
|
14
9
|
|
15
|
-
s.
|
16
|
-
|
17
|
-
s.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["E-Max"]
|
12
|
+
s.date = "2012-10-27"
|
13
|
+
s.description = "Whenever you need assign an association by its attribute,\n like name, this gem comes to business."
|
14
|
+
s.email = "test@example.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".rspec",
|
20
|
+
"Gemfile",
|
21
|
+
"Guardfile",
|
22
|
+
"README",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"a_a_n.gemspec",
|
26
|
+
"db/seeds.rb",
|
27
|
+
"lib/a_a_n.rb",
|
28
|
+
"lib/a_a_n/association_as_name.rb",
|
29
|
+
"lib/a_a_n/keeper.rb",
|
30
|
+
"lib/a_a_n/version.rb",
|
31
|
+
"spec/aan_spec.rb",
|
32
|
+
"spec/aliases_spec.rb",
|
33
|
+
"spec/multiple_spec.rb",
|
34
|
+
"spec/spec_helper.rb"
|
35
|
+
]
|
36
|
+
s.homepage = "https://github.com/kot-begemot/association_as_name"
|
37
|
+
s.licenses = ["MIT"]
|
26
38
|
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = "1.8.10"
|
40
|
+
s.summary = "Association as name"
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
s.specification_version = 3
|
27
44
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
45
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
46
|
+
s.add_development_dependency(%q<rake>, ["~> 0.9.2"])
|
47
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
48
|
+
s.add_development_dependency(%q<activerecord>, [">= 0"])
|
49
|
+
s.add_development_dependency(%q<activesupport>, [">= 0"])
|
50
|
+
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
51
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
52
|
+
s.add_development_dependency(%q<shoulda-context>, [">= 0"])
|
53
|
+
s.add_development_dependency(%q<mocha>, [">= 0"])
|
54
|
+
s.add_development_dependency(%q<simplecov>, ["~> 0.6.4"])
|
55
|
+
s.add_development_dependency(%q<rcov>, ["~> 1.0.0"])
|
56
|
+
s.add_development_dependency(%q<debugger>, ["~> 1.1.3"])
|
57
|
+
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
58
|
+
s.add_development_dependency(%q<database_cleaner>, [">= 0"])
|
59
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
62
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
63
|
+
s.add_dependency(%q<activerecord>, [">= 0"])
|
64
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
65
|
+
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
66
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
67
|
+
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
68
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
69
|
+
s.add_dependency(%q<simplecov>, ["~> 0.6.4"])
|
70
|
+
s.add_dependency(%q<rcov>, ["~> 1.0.0"])
|
71
|
+
s.add_dependency(%q<debugger>, ["~> 1.1.3"])
|
72
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
73
|
+
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
74
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
75
|
+
end
|
76
|
+
else
|
77
|
+
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
78
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
79
|
+
s.add_dependency(%q<activerecord>, [">= 0"])
|
80
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
81
|
+
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
82
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
83
|
+
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
84
|
+
s.add_dependency(%q<mocha>, [">= 0"])
|
85
|
+
s.add_dependency(%q<simplecov>, ["~> 0.6.4"])
|
86
|
+
s.add_dependency(%q<rcov>, ["~> 1.0.0"])
|
87
|
+
s.add_dependency(%q<debugger>, ["~> 1.1.3"])
|
88
|
+
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
89
|
+
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
90
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
91
|
+
end
|
35
92
|
end
|
93
|
+
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
[{:name => 'Afghanistan',:iso_3166_a2 => 'AF'},
|
2
|
+
{:name => 'Argentina',:iso_3166_a2 => 'AR'},
|
3
|
+
{:name => 'Australia',:iso_3166_a2 => 'AU'},
|
4
|
+
{:name => 'Austria',:iso_3166_a2 => 'AT'},
|
5
|
+
{:name => 'Belgium',:iso_3166_a2 => 'BE'},
|
6
|
+
{:name => 'Bolivia',:iso_3166_a2 => 'BO'},
|
7
|
+
{:name => 'Bosnia and Herzegovina',:iso_3166_a2 => 'BA'},
|
8
|
+
{:name => 'Bulgaria',:iso_3166_a2 => 'BG'},
|
9
|
+
{:name => 'Chile',:iso_3166_a2 => 'CL'},
|
10
|
+
{:name => 'China',:iso_3166_a2 => 'CN'},
|
11
|
+
{:name => 'Cote d\'Ivoire',:iso_3166_a2 => 'CI'},
|
12
|
+
{:name => 'Croatia',:iso_3166_a2 => 'HR'},
|
13
|
+
{:name => 'Cuba',:iso_3166_a2 => 'CU'},
|
14
|
+
{:name => 'Curacao',:iso_3166_a2 => 'CW'},
|
15
|
+
{:name => 'Cyprus',:iso_3166_a2 => 'CY'},
|
16
|
+
{:name => 'Czech Republic',:iso_3166_a2 => 'CZ'},
|
17
|
+
{:name => 'Denmark',:iso_3166_a2 => 'DK'},
|
18
|
+
{:name => 'Estonia',:iso_3166_a2 => 'EE'},
|
19
|
+
{:name => 'Gibraltar',:iso_3166_a2 => 'GI'},
|
20
|
+
{:name => 'Iran, Islamic Republic of',:iso_3166_a2 => 'IR'},
|
21
|
+
{:name => 'Iraq',:iso_3166_a2 => 'IQ'},
|
22
|
+
{:name => 'Ireland',:iso_3166_a2 => 'IE'},
|
23
|
+
{:name => 'Italy',:iso_3166_a2 => 'IT'},
|
24
|
+
{:name => 'Japan',:iso_3166_a2 => 'JP'},
|
25
|
+
{:name => 'Kazakhstan',:iso_3166_a2 => 'KZ'},
|
26
|
+
{:name => 'Latvia',:iso_3166_a2 => 'LV'},
|
27
|
+
{:name => 'Luxembourg',:iso_3166_a2 => 'LU'},
|
28
|
+
{:name => 'Mexico',:iso_3166_a2 => 'MX'},
|
29
|
+
{:name => 'Nepal',:iso_3166_a2 => 'NP'},
|
30
|
+
{:name => 'Nigeria',:iso_3166_a2 => 'NG'},
|
31
|
+
{:name => 'Peru',:iso_3166_a2 => 'PE'},
|
32
|
+
{:name => 'Romania',:iso_3166_a2 => 'RO'},
|
33
|
+
{:name => 'Russian Federation',:iso_3166_a2 => 'RU'},
|
34
|
+
{:name => 'Serbia',:iso_3166_a2 => 'RS'},
|
35
|
+
{:name => 'Spain',:iso_3166_a2 => 'ES'},
|
36
|
+
{:name => 'Swaziland',:iso_3166_a2 => 'SZ'},
|
37
|
+
{:name => 'Sweden',:iso_3166_a2 => 'SE'},
|
38
|
+
{:name => 'Switzerland',:iso_3166_a2 => 'CH'},
|
39
|
+
{:name => 'Thailand',:iso_3166_a2 => 'TH'},
|
40
|
+
{:name => 'Turkey',:iso_3166_a2 => 'TR'},
|
41
|
+
{:name => 'Uganda',:iso_3166_a2 => 'UG'},
|
42
|
+
{:name => 'Ukraine',:iso_3166_a2 => 'UA'},
|
43
|
+
{:name => 'United Arab Emirates',:iso_3166_a2 => 'AE'},
|
44
|
+
{:name => 'United Kingdom',:iso_3166_a2 => 'GB'},
|
45
|
+
{:name => 'Venezuela',:iso_3166_a2 => 'VE'},].each {|c| Country.create!(c)}
|
@@ -30,10 +30,11 @@ module AAN
|
|
30
30
|
class_eval <<EOF
|
31
31
|
# Could not use delegate for that, since attribute and aliased method could have different names
|
32
32
|
def #{aliased_method}
|
33
|
-
self.send(:#{association}).try(:#{attribute})
|
33
|
+
@#{aliased_method} ||= self.send(:#{association}).try(:#{attribute})
|
34
34
|
end
|
35
35
|
|
36
36
|
def #{aliased_method}=(value)
|
37
|
+
@#{aliased_method} = nil
|
37
38
|
self.send(:#{association}_id=, association(:#{association}).klass.find_by_#{attribute}(value).try(:id))
|
38
39
|
end
|
39
40
|
EOF
|
data/lib/a_a_n/version.rb
CHANGED
data/spec/aan_spec.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'countries'")
|
4
|
+
ActiveRecord::Base.connection.create_table(:countries) do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :iso_3166_a2
|
7
|
+
end
|
8
|
+
|
9
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'cities'")
|
10
|
+
ActiveRecord::Base.connection.create_table(:cities) do |t|
|
11
|
+
t.string :name
|
12
|
+
t.string :country_id
|
13
|
+
end
|
14
|
+
|
15
|
+
class Country < ActiveRecord::Base
|
16
|
+
validates :name, :presence => true
|
17
|
+
end
|
18
|
+
|
19
|
+
class City < ActiveRecord::Base
|
20
|
+
belongs_to :country
|
21
|
+
|
22
|
+
acts_as_aan do
|
23
|
+
association :country do
|
24
|
+
[:name]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
validates :name, :presence => true
|
29
|
+
end
|
30
|
+
|
31
|
+
describe AAN do
|
32
|
+
|
33
|
+
it "Should assign a correct association by name for existed object" do
|
34
|
+
city = City.create!(:name => 'Roma')
|
35
|
+
city.country_name = 'Italy'
|
36
|
+
city.save
|
37
|
+
|
38
|
+
city.country.should == Country.find_by_name('Italy')
|
39
|
+
city.reload
|
40
|
+
city.country.should == Country.find_by_name('Italy')
|
41
|
+
end
|
42
|
+
|
43
|
+
it "Should not assign anything if record does not exists for existed object" do
|
44
|
+
city = City.create!(:name => 'Roma')
|
45
|
+
city.country_name = 'Country of OZ'
|
46
|
+
city.save
|
47
|
+
|
48
|
+
city.country.should be_nil
|
49
|
+
city.reload
|
50
|
+
city.country.should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "Should assign a correct association by name for new object" do
|
54
|
+
city = City.create!(:name => 'Roma', :country_name => 'Italy')
|
55
|
+
|
56
|
+
city.country.should == Country.find_by_name('Italy')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "Should not assign anything if record does not exists for new object" do
|
60
|
+
city = City.create!(:name => 'Roma', :country_name => 'Country of OZ')
|
61
|
+
|
62
|
+
city.country.should be_nil
|
63
|
+
city.reload
|
64
|
+
city.country.should be_nil
|
65
|
+
end
|
66
|
+
|
67
|
+
it "Should assign a correct association" do
|
68
|
+
country = Country.find_by_name('Italy')
|
69
|
+
city = City.create!(:name => 'Roma')
|
70
|
+
city.country = country
|
71
|
+
city.save
|
72
|
+
|
73
|
+
city.country.should == Country.find_by_name('Italy')
|
74
|
+
city.country_name == 'Italy'
|
75
|
+
city.reload
|
76
|
+
city.country.should == Country.find_by_name('Italy')
|
77
|
+
city.country_name == 'Italy'
|
78
|
+
end
|
79
|
+
|
80
|
+
it "Should be overwritten by new object assigement" do
|
81
|
+
country_1 = Country.find_by_name('Italy')
|
82
|
+
city = City.create!(:name => 'Paris', :country => country_1)
|
83
|
+
|
84
|
+
country_2 = Country.find_by_name('Denmark')
|
85
|
+
city.country = country_2
|
86
|
+
city.country_name.should == 'Denmark'
|
87
|
+
city.save!
|
88
|
+
city.reload
|
89
|
+
city.country_name.should == 'Denmark'
|
90
|
+
end
|
91
|
+
|
92
|
+
it "Should react on object nulification" do
|
93
|
+
country_1 = Country.find_by_name('Italy')
|
94
|
+
city = City.create!(:name => 'Paris', :country_id => country_1.id)
|
95
|
+
|
96
|
+
city.country = nil
|
97
|
+
city.country_name == nil
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'countries'")
|
4
|
+
ActiveRecord::Base.connection.create_table(:countries) do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :iso_3166_a2
|
7
|
+
end
|
8
|
+
|
9
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'cities'")
|
10
|
+
ActiveRecord::Base.connection.create_table(:cities) do |t|
|
11
|
+
t.string :name
|
12
|
+
t.string :country_id
|
13
|
+
end
|
14
|
+
|
15
|
+
class Country < ActiveRecord::Base
|
16
|
+
validates_presence_of :name, :iso_3166_a2
|
17
|
+
end
|
18
|
+
|
19
|
+
class City < ActiveRecord::Base
|
20
|
+
belongs_to :country
|
21
|
+
|
22
|
+
acts_as_aan do
|
23
|
+
association :country do
|
24
|
+
[{ :iso_3166_a2 => :country_code}]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
validates :name, :presence => true
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "Aliases" do
|
32
|
+
|
33
|
+
it "Should assign a correct association by alias for existed object" do
|
34
|
+
city = City.create!(:name => 'Roma')
|
35
|
+
city.country_code = 'IT'
|
36
|
+
city.save
|
37
|
+
|
38
|
+
city.country.should == Country.find_by_name('Italy')
|
39
|
+
city.reload
|
40
|
+
city.country.should == Country.find_by_name('Italy')
|
41
|
+
end
|
42
|
+
|
43
|
+
it "Should not assign anything if record does not exists for existed object" do
|
44
|
+
city = City.create!(:name => 'Roma')
|
45
|
+
city.country_code = 'OZ'
|
46
|
+
city.save
|
47
|
+
|
48
|
+
city.country.should be_nil
|
49
|
+
city.reload
|
50
|
+
city.country.should be_nil
|
51
|
+
end
|
52
|
+
|
53
|
+
it "Should assign a correct association by alias for new object" do
|
54
|
+
city = City.create!(:name => 'Roma', :country_code => 'IT')
|
55
|
+
|
56
|
+
city.country.should == Country.find_by_name('Italy')
|
57
|
+
end
|
58
|
+
|
59
|
+
it "Should not assign anything if record does not exists for new object" do
|
60
|
+
city = City.create!(:name => 'Roma', :country_code => 'OZ')
|
61
|
+
|
62
|
+
city.country.should be_nil
|
63
|
+
city.reload
|
64
|
+
city.country.should be_nil
|
65
|
+
end
|
66
|
+
|
67
|
+
it "Should assign a correct association" do
|
68
|
+
country = Country.find_by_name('Italy')
|
69
|
+
city = City.create!(:name => 'Roma')
|
70
|
+
city.country = country
|
71
|
+
city.save
|
72
|
+
|
73
|
+
city.country.should == Country.find_by_name('Italy')
|
74
|
+
city.country_code == 'IT'
|
75
|
+
city.reload
|
76
|
+
city.country.should == Country.find_by_name('Italy')
|
77
|
+
city.country_code == 'IT'
|
78
|
+
end
|
79
|
+
|
80
|
+
it "Should be overwritten by new object assigement" do
|
81
|
+
country_1 = Country.find_by_name('Italy')
|
82
|
+
city = City.create!(:name => 'Paris', :country_id => country_1.id)
|
83
|
+
|
84
|
+
country_2 = Country.find_by_name('France')
|
85
|
+
|
86
|
+
city.country = country_2
|
87
|
+
city.country_code == 'FR'
|
88
|
+
city.save
|
89
|
+
city.reload
|
90
|
+
city.country_code == 'FR'
|
91
|
+
end
|
92
|
+
|
93
|
+
it "Should react on object nulification" do
|
94
|
+
country_1 = Country.find_by_name('Italy')
|
95
|
+
city = City.create!(:name => 'Paris', :country_id => country_1.id)
|
96
|
+
|
97
|
+
city.country = nil
|
98
|
+
city.country_code == nil
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'countries'")
|
4
|
+
ActiveRecord::Base.connection.create_table(:countries) do |t|
|
5
|
+
t.string :name
|
6
|
+
t.string :iso_3166_a2
|
7
|
+
end
|
8
|
+
|
9
|
+
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS 'cities'")
|
10
|
+
ActiveRecord::Base.connection.create_table(:cities) do |t|
|
11
|
+
t.string :name
|
12
|
+
t.string :country_id
|
13
|
+
end
|
14
|
+
|
15
|
+
class Country < ActiveRecord::Base
|
16
|
+
validates :name, :iso_3166_a2, :presence => true
|
17
|
+
end
|
18
|
+
|
19
|
+
class City < ActiveRecord::Base
|
20
|
+
belongs_to :country
|
21
|
+
|
22
|
+
acts_as_aan do
|
23
|
+
association :country do
|
24
|
+
[:name, { :iso_3166_a2 => :country_code}]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
validates :name, :presence => true
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "Multiple" do
|
32
|
+
it "Should assign a correct association by alias for existed object" do
|
33
|
+
city = City.create!(:name => 'Roma')
|
34
|
+
city.country_code = 'IT'
|
35
|
+
city.save
|
36
|
+
|
37
|
+
city.country.should == Country.find_by_name('Italy')
|
38
|
+
city.country_name.should == 'Italy'
|
39
|
+
city.reload
|
40
|
+
city.country.should == Country.find_by_name('Italy')
|
41
|
+
city.country_name.should == 'Italy'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "Should not assign anything if record does not exists for existed object" do
|
45
|
+
city = City.create!(:name => 'Roma')
|
46
|
+
city.country_name = 'Country of OZ'
|
47
|
+
city.save
|
48
|
+
|
49
|
+
city.country.should be_nil
|
50
|
+
city.reload
|
51
|
+
city.country.should be_nil
|
52
|
+
end
|
53
|
+
|
54
|
+
it "Should not assign anything if record does not exists for existed object" do
|
55
|
+
city = City.create!(:name => 'Roma')
|
56
|
+
city.country_code = 'OZ'
|
57
|
+
city.save
|
58
|
+
|
59
|
+
city.country.should be_nil
|
60
|
+
city.reload
|
61
|
+
city.country.should be_nil
|
62
|
+
end
|
63
|
+
|
64
|
+
it "Should assign a correct association by name for new object" do
|
65
|
+
city = City.create!(:name => 'Roma', :country_code => 'IT')
|
66
|
+
|
67
|
+
city.country.should == Country.find_by_name('Italy')
|
68
|
+
end
|
69
|
+
|
70
|
+
it "Should assign a correct association by name for new object" do
|
71
|
+
city = City.create!(:name => 'Roma', :country_name => 'Italy')
|
72
|
+
|
73
|
+
city.country.should == Country.find_by_name('Italy')
|
74
|
+
end
|
75
|
+
|
76
|
+
it "Should not assign anything if record does not exists for new object" do
|
77
|
+
city = City.create!(:name => 'Roma', :country_code => 'OZ')
|
78
|
+
|
79
|
+
city.country.should be_nil
|
80
|
+
city.reload
|
81
|
+
city.country.should be_nil
|
82
|
+
end
|
83
|
+
|
84
|
+
it "Should assign a correct association" do
|
85
|
+
country = Country.find_by_name('Italy')
|
86
|
+
city = City.create!(:name => 'Roma')
|
87
|
+
city.country = country
|
88
|
+
city.save
|
89
|
+
|
90
|
+
city.country.should == Country.find_by_name('Italy')
|
91
|
+
city.country_code == 'IT'
|
92
|
+
city.country_code == 'Italy'
|
93
|
+
city.reload
|
94
|
+
city.country.should == Country.find_by_name('Italy')
|
95
|
+
city.country_code == 'IT'
|
96
|
+
city.country_code == 'Italy'
|
97
|
+
end
|
98
|
+
|
99
|
+
it "Should be overwritten by new object assigement" do
|
100
|
+
country_1 = Country.find_by_name('Italy')
|
101
|
+
city = City.create!(:name => 'Paris', :country_id => country_1.id)
|
102
|
+
|
103
|
+
country_2 = Country.find_by_name('France')
|
104
|
+
|
105
|
+
city.country = country_2
|
106
|
+
city.country_code == 'FR'
|
107
|
+
city.country_name == 'France'
|
108
|
+
city.save
|
109
|
+
city.reload
|
110
|
+
city.country_code == 'FR'
|
111
|
+
city.country_name == 'France'
|
112
|
+
end
|
113
|
+
|
114
|
+
it "Should react on object nullification" do
|
115
|
+
country_1 = Country.find_by_name('Italy')
|
116
|
+
city = City.create!(:name => 'Paris', :country_id => country_1.id)
|
117
|
+
|
118
|
+
city.country = nil
|
119
|
+
city.country_code == nil
|
120
|
+
city.country_name == nil
|
121
|
+
end
|
122
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
require 'logger'
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
|
6
|
+
require 'active_record'
|
7
|
+
require 'a_a_n'
|
8
|
+
require 'rspec'
|
9
|
+
require 'ruby-debug'
|
10
|
+
|
11
|
+
ActiveRecord::Base.establish_connection(
|
12
|
+
:adapter => "sqlite3",
|
13
|
+
:database => ':memory:'
|
14
|
+
)
|
15
|
+
|
16
|
+
#ActiveRecord::Base.logger = Logger.new(STDOUT)
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
config.before(:each) do
|
20
|
+
ActiveRecord::Base.connection.increment_open_transactions
|
21
|
+
ActiveRecord::Base.connection.begin_db_transaction
|
22
|
+
load File.join(File.dirname(__FILE__),'..', 'db', 'seeds.rb')
|
23
|
+
end
|
24
|
+
|
25
|
+
config.after(:each) do
|
26
|
+
ActiveRecord::Base.connection.rollback_db_transaction
|
27
|
+
ActiveRecord::Base.connection.decrement_open_transactions
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,42 +1,52 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: a_a_n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- E-Max
|
9
|
-
- shell
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2012-
|
12
|
+
date: 2012-10-27 00:00:00.000000000Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
requirement: &
|
15
|
+
name: rake
|
16
|
+
requirement: &86410520 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.9.2
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *86410520
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &86410160 !ruby/object:Gem::Requirement
|
18
28
|
none: false
|
19
29
|
requirements:
|
20
30
|
- - ! '>='
|
21
31
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
23
|
-
type: :
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
24
34
|
prerelease: false
|
25
|
-
version_requirements: *
|
35
|
+
version_requirements: *86410160
|
26
36
|
- !ruby/object:Gem::Dependency
|
27
37
|
name: activerecord
|
28
|
-
requirement: &
|
38
|
+
requirement: &86409840 !ruby/object:Gem::Requirement
|
29
39
|
none: false
|
30
40
|
requirements:
|
31
41
|
- - ! '>='
|
32
42
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
34
|
-
type: :
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
35
45
|
prerelease: false
|
36
|
-
version_requirements: *
|
46
|
+
version_requirements: *86409840
|
37
47
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
39
|
-
requirement: &
|
48
|
+
name: activesupport
|
49
|
+
requirement: &86409520 !ruby/object:Gem::Requirement
|
40
50
|
none: false
|
41
51
|
requirements:
|
42
52
|
- - ! '>='
|
@@ -44,10 +54,32 @@ dependencies:
|
|
44
54
|
version: '0'
|
45
55
|
type: :development
|
46
56
|
prerelease: false
|
47
|
-
version_requirements: *
|
57
|
+
version_requirements: *86409520
|
48
58
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
50
|
-
requirement: &
|
59
|
+
name: yard
|
60
|
+
requirement: &86409160 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.6.0
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *86409160
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jeweler
|
71
|
+
requirement: &86408810 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.6.4
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *86408810
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: shoulda-context
|
82
|
+
requirement: &86408480 !ruby/object:Gem::Requirement
|
51
83
|
none: false
|
52
84
|
requirements:
|
53
85
|
- - ! '>='
|
@@ -55,10 +87,10 @@ dependencies:
|
|
55
87
|
version: '0'
|
56
88
|
type: :development
|
57
89
|
prerelease: false
|
58
|
-
version_requirements: *
|
90
|
+
version_requirements: *86408480
|
59
91
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
61
|
-
requirement: &
|
92
|
+
name: mocha
|
93
|
+
requirement: &86408140 !ruby/object:Gem::Requirement
|
62
94
|
none: false
|
63
95
|
requirements:
|
64
96
|
- - ! '>='
|
@@ -66,10 +98,43 @@ dependencies:
|
|
66
98
|
version: '0'
|
67
99
|
type: :development
|
68
100
|
prerelease: false
|
69
|
-
version_requirements: *
|
101
|
+
version_requirements: *86408140
|
70
102
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
72
|
-
requirement: &
|
103
|
+
name: simplecov
|
104
|
+
requirement: &86407850 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.6.4
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *86407850
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rcov
|
115
|
+
requirement: &86407520 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 1.0.0
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: *86407520
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: debugger
|
126
|
+
requirement: &86407210 !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ~>
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.1.3
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *86407210
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: ruby-debug
|
137
|
+
requirement: &86406960 !ruby/object:Gem::Requirement
|
73
138
|
none: false
|
74
139
|
requirements:
|
75
140
|
- - ! '>='
|
@@ -77,10 +142,10 @@ dependencies:
|
|
77
142
|
version: '0'
|
78
143
|
type: :development
|
79
144
|
prerelease: false
|
80
|
-
version_requirements: *
|
145
|
+
version_requirements: *86406960
|
81
146
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
83
|
-
requirement: &
|
147
|
+
name: database_cleaner
|
148
|
+
requirement: &86406650 !ruby/object:Gem::Requirement
|
84
149
|
none: false
|
85
150
|
requirements:
|
86
151
|
- - ! '>='
|
@@ -88,25 +153,45 @@ dependencies:
|
|
88
153
|
version: '0'
|
89
154
|
type: :development
|
90
155
|
prerelease: false
|
91
|
-
version_requirements: *
|
156
|
+
version_requirements: *86406650
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: sqlite3
|
159
|
+
requirement: &86406310 !ruby/object:Gem::Requirement
|
160
|
+
none: false
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
type: :development
|
166
|
+
prerelease: false
|
167
|
+
version_requirements: *86406310
|
92
168
|
description: ! "Whenever you need assign an association by its attribute,\n like name,
|
93
|
-
this gem comes to
|
94
|
-
email:
|
95
|
-
- developers@studentify.nl
|
169
|
+
this gem comes to business."
|
170
|
+
email: test@example.com
|
96
171
|
executables: []
|
97
172
|
extensions: []
|
98
|
-
extra_rdoc_files:
|
99
|
-
files:
|
173
|
+
extra_rdoc_files:
|
100
174
|
- README
|
101
|
-
|
175
|
+
files:
|
176
|
+
- .rspec
|
102
177
|
- Gemfile
|
178
|
+
- Guardfile
|
179
|
+
- README
|
103
180
|
- Rakefile
|
181
|
+
- VERSION
|
182
|
+
- a_a_n.gemspec
|
183
|
+
- db/seeds.rb
|
104
184
|
- lib/a_a_n.rb
|
105
185
|
- lib/a_a_n/association_as_name.rb
|
106
186
|
- lib/a_a_n/keeper.rb
|
107
187
|
- lib/a_a_n/version.rb
|
108
|
-
|
109
|
-
|
188
|
+
- spec/aan_spec.rb
|
189
|
+
- spec/aliases_spec.rb
|
190
|
+
- spec/multiple_spec.rb
|
191
|
+
- spec/spec_helper.rb
|
192
|
+
homepage: https://github.com/kot-begemot/association_as_name
|
193
|
+
licenses:
|
194
|
+
- MIT
|
110
195
|
post_install_message:
|
111
196
|
rdoc_options: []
|
112
197
|
require_paths:
|
@@ -117,6 +202,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
202
|
- - ! '>='
|
118
203
|
- !ruby/object:Gem::Version
|
119
204
|
version: '0'
|
205
|
+
segments:
|
206
|
+
- 0
|
207
|
+
hash: 345555137
|
120
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
209
|
none: false
|
122
210
|
requirements:
|
@@ -124,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
212
|
- !ruby/object:Gem::Version
|
125
213
|
version: '0'
|
126
214
|
requirements: []
|
127
|
-
rubyforge_project:
|
215
|
+
rubyforge_project:
|
128
216
|
rubygems_version: 1.8.10
|
129
217
|
signing_key:
|
130
218
|
specification_version: 3
|