a_a_n 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/Gemfile +11 -0
- data/README +25 -0
- data/Rakefile +1 -0
- data/a_a_n.gemspec +30 -0
- data/lib/a_a_n.rb +7 -0
- data/lib/a_a_n/association_as_name.rb +64 -0
- data/lib/a_a_n/version.rb +3 -0
- metadata +75 -0
data/Gemfile
ADDED
data/README
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
Structure:
|
2
|
+
|
3
|
+
class UserProfile < ActiveRecord::Base
|
4
|
+
|
5
|
+
belongs_to :home_country, :class_name => 'Country'
|
6
|
+
belongs_to :current_university, :class_name => 'University'
|
7
|
+
|
8
|
+
acts_as_aan do
|
9
|
+
[ [:current_university, 'University', :name],
|
10
|
+
[:home_country, 'Country', :name]]
|
11
|
+
end
|
12
|
+
|
13
|
+
validates :home_country_name, :presence => true
|
14
|
+
validates :current_university_name, :presence => true
|
15
|
+
end
|
16
|
+
|
17
|
+
Usage:
|
18
|
+
|
19
|
+
u = UserProfile.new
|
20
|
+
u.home_country_name = 'Netherlands'
|
21
|
+
u.current_university_name = 'University Of Amsterdam'
|
22
|
+
u.save # => true
|
23
|
+
|
24
|
+
u.home_country # => #<Country id: 12, name: "Netherlands"
|
25
|
+
u.home_country_name # => "Netherlands"
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/a_a_n.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "a_a_n/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "a_a_n"
|
7
|
+
s.version = AAN::VERSION
|
8
|
+
s.authors = ["E-Max"]
|
9
|
+
s.email = ["max@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.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "a_a_n"
|
16
|
+
|
17
|
+
s.files = ["README",
|
18
|
+
"a_a_n.gemspec",
|
19
|
+
"Gemfile",
|
20
|
+
"Rakefile",
|
21
|
+
"lib/a_a_n.rb",
|
22
|
+
"lib/a_a_n/association_as_name.rb",
|
23
|
+
"lib/a_a_n/version.rb"]
|
24
|
+
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
|
28
|
+
s.add_dependency("activesupport", ">= 3.0.0")
|
29
|
+
s.add_dependency("activerecord", ">= 3.0.0")
|
30
|
+
end
|
data/lib/a_a_n.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
###
|
2
|
+
# Module that allows assing attributes by <tt>name</tt>(or any other method)
|
3
|
+
#
|
4
|
+
# Example:
|
5
|
+
#
|
6
|
+
# class UserProfile < ActiveRecord::StudetifyBase
|
7
|
+
|
8
|
+
# acts_as_aan do
|
9
|
+
# [ [:current_university, 'University', :name],
|
10
|
+
# [:home_country, 'Country', :name]]
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# attr_accessible :home_country_name, :current_university_name
|
14
|
+
#
|
15
|
+
# validates :home_country_name, :presence => true
|
16
|
+
# validates :current_university_name, :presence => true
|
17
|
+
# end
|
18
|
+
module AAN
|
19
|
+
module AssociationAsName
|
20
|
+
def self.included(base)
|
21
|
+
base.extend(ClassMethods)
|
22
|
+
end
|
23
|
+
|
24
|
+
module ClassMethods
|
25
|
+
def acts_as_aan &block
|
26
|
+
aan_structure = block.call
|
27
|
+
|
28
|
+
aan_structure.each do |aos|
|
29
|
+
class_eval <<EOF
|
30
|
+
attr_accessor :#{aos.first}_#{aos.last}
|
31
|
+
before_validation :aan_set_#{aos.first}
|
32
|
+
after_initialize :aan_set_#{aos.first}_#{aos.last}
|
33
|
+
|
34
|
+
def #{aos.first}_#{aos.last}
|
35
|
+
@#{aos.first}_#{aos.last} ||= #{aos.first}.try(:#{aos.last})
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def aan_set_#{aos.first}
|
41
|
+
unless #{aos.first}_#{aos.last}.blank?
|
42
|
+
obj = #{aos[1]}.find_by_#{aos.last} #{aos.first}_#{aos.last}
|
43
|
+
self.#{aos.first} = obj unless obj.nil?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def aan_set_#{aos.first}_#{aos.last}
|
48
|
+
unless #{aos.first}_#{aos.last}.blank?
|
49
|
+
obj = #{aos[1]}.find_by_#{aos.last} #{aos.first}_#{aos.last}
|
50
|
+
self.#{aos.first} = obj unless obj.nil?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
EOF
|
54
|
+
end
|
55
|
+
|
56
|
+
class_eval <<EOF
|
57
|
+
|
58
|
+
cattr_accessor :aan_structure
|
59
|
+
@@aan_structure = #{aan_structure}
|
60
|
+
EOF
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: a_a_n
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- E-Max
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-19 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: &73043240 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *73043240
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activerecord
|
27
|
+
requirement: &73042980 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.0.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *73042980
|
36
|
+
description: ! "Whenever you need assign an association by its attribute,\n like name,
|
37
|
+
this gem comes to busines."
|
38
|
+
email:
|
39
|
+
- max@studentify.nl
|
40
|
+
executables: []
|
41
|
+
extensions: []
|
42
|
+
extra_rdoc_files: []
|
43
|
+
files:
|
44
|
+
- README
|
45
|
+
- a_a_n.gemspec
|
46
|
+
- Gemfile
|
47
|
+
- Rakefile
|
48
|
+
- lib/a_a_n.rb
|
49
|
+
- lib/a_a_n/association_as_name.rb
|
50
|
+
- lib/a_a_n/version.rb
|
51
|
+
homepage: https://github.com/Studentify/association_as_name
|
52
|
+
licenses: []
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project: a_a_n
|
71
|
+
rubygems_version: 1.8.10
|
72
|
+
signing_key:
|
73
|
+
specification_version: 3
|
74
|
+
summary: Association as name
|
75
|
+
test_files: []
|