a_a_n 0.2.3 → 0.2.5
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 +1 -9
- data/a_a_n.gemspec +7 -3
- data/lib/a_a_n/association_as_name.rb +6 -29
- data/lib/a_a_n/keeper.rb +10 -9
- data/lib/a_a_n/version.rb +1 -1
- metadata +63 -7
data/Gemfile
CHANGED
data/a_a_n.gemspec
CHANGED
@@ -5,8 +5,8 @@ require "a_a_n/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "a_a_n"
|
7
7
|
s.version = AAN::VERSION
|
8
|
-
s.authors = ["E-Max"]
|
9
|
-
s.email = ["
|
8
|
+
s.authors = ["E-Max","shell"]
|
9
|
+
s.email = ["developers@studentify.nl"]
|
10
10
|
s.homepage = "https://github.com/Studentify/association_as_name"
|
11
11
|
s.summary = %q{Association as name}
|
12
12
|
s.description = %q{Whenever you need assign an association by its attribute,
|
@@ -23,9 +23,13 @@ Gem::Specification.new do |s|
|
|
23
23
|
"lib/a_a_n/keeper.rb",
|
24
24
|
"lib/a_a_n/version.rb"]
|
25
25
|
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
26
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
27
26
|
s.require_paths = ["lib"]
|
28
27
|
|
29
28
|
s.add_dependency("activesupport", ">= 3.0.0")
|
30
29
|
s.add_dependency("activerecord", ">= 3.0.0")
|
30
|
+
s.add_development_dependency('sqlite3')
|
31
|
+
s.add_development_dependency('rspec')
|
32
|
+
s.add_development_dependency('guard')
|
33
|
+
s.add_development_dependency('guard-rspec')
|
34
|
+
s.add_development_dependency('ruby-debug19')
|
31
35
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
#
|
2
2
|
# Module that allows assing attributes by <tt>name</tt>(or any other method)
|
3
3
|
#
|
4
4
|
# Example:
|
@@ -17,9 +17,7 @@
|
|
17
17
|
# end
|
18
18
|
module AAN
|
19
19
|
module AssociationAsName
|
20
|
-
|
21
|
-
base.extend(ClassMethods)
|
22
|
-
end
|
20
|
+
extend ActiveSupport::Concern
|
23
21
|
|
24
22
|
module ClassMethods
|
25
23
|
def acts_as_aan &block
|
@@ -30,34 +28,13 @@ module AAN
|
|
30
28
|
attribute = structure.first
|
31
29
|
aliased_method = structure.last
|
32
30
|
class_eval <<EOF
|
33
|
-
|
34
|
-
before_validation :aan_set_#{association}
|
35
|
-
after_initialize :aan_set_#{aliased_method}
|
36
|
-
|
31
|
+
# Could not use delegate for that, since attribute and aliased method could have different names
|
37
32
|
def #{aliased_method}
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def #{association}_with_aan_assigment=(new_object)
|
42
|
-
#{AAN::Keeper.nullify_aliased_methods_for self, association}
|
43
|
-
association(:#{association}).replace(new_object)
|
44
|
-
end
|
45
|
-
alias_method_chain :#{association}=, :aan_assigment
|
46
|
-
|
47
|
-
protected
|
48
|
-
|
49
|
-
def aan_set_#{association}
|
50
|
-
unless #{aliased_method}.blank?
|
51
|
-
obj = association(:#{association}).klass.find_by_#{attribute} #{aliased_method}
|
52
|
-
self.#{association} = obj unless obj.nil?
|
53
|
-
end
|
33
|
+
self.send(:#{association}).try(:#{attribute})
|
54
34
|
end
|
55
35
|
|
56
|
-
def
|
57
|
-
|
58
|
-
obj = association(:#{association}).klass.find_by_#{attribute} #{aliased_method}
|
59
|
-
self.#{association} = obj unless obj.nil?
|
60
|
-
end
|
36
|
+
def #{aliased_method}=(value)
|
37
|
+
self.send(:#{association}_id=, association(:#{association}).klass.find_by_#{attribute}(value).try(:id))
|
61
38
|
end
|
62
39
|
EOF
|
63
40
|
end
|
data/lib/a_a_n/keeper.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module AAN
|
2
|
-
|
3
|
-
|
2
|
+
module Keeper
|
3
|
+
mattr_reader :current_model
|
4
4
|
|
5
|
-
|
5
|
+
extend self
|
6
|
+
|
7
|
+
def nullify_aliased_methods_for model, assoc
|
6
8
|
aliased_methods = []
|
7
9
|
AAN::Keeper.aliases_for(model, assoc).each do |aliased_method|
|
8
10
|
aliased_methods << "@#{aliased_method} = nil"
|
@@ -10,20 +12,20 @@ module AAN
|
|
10
12
|
aliased_methods.join("\n")
|
11
13
|
end
|
12
14
|
|
13
|
-
def
|
15
|
+
def structure
|
14
16
|
@@structures ||= {}
|
15
17
|
end
|
16
18
|
|
17
|
-
def
|
19
|
+
def [](*args)
|
18
20
|
(structure[args.first] ||= {})
|
19
21
|
end
|
20
22
|
|
21
|
-
def
|
23
|
+
def associations model, &block
|
22
24
|
@@current_model = model
|
23
25
|
instance_eval &block
|
24
26
|
end
|
25
27
|
|
26
|
-
def
|
28
|
+
def association(name, &block)
|
27
29
|
sub_structure = block.call
|
28
30
|
sub_structure.each do |element|
|
29
31
|
if element.is_a? Hash
|
@@ -38,11 +40,10 @@ module AAN
|
|
38
40
|
|
39
41
|
protected
|
40
42
|
|
41
|
-
def
|
43
|
+
def aliases_for model, assoc
|
42
44
|
structure[model][assoc].collect do |params|
|
43
45
|
params.last
|
44
46
|
end
|
45
47
|
end
|
46
|
-
|
47
48
|
end
|
48
49
|
end
|
data/lib/a_a_n/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
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.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- E-Max
|
9
|
+
- shell
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
+
date: 2012-02-07 00:00:00.000000000Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: activesupport
|
16
|
-
requirement: &
|
17
|
+
requirement: &85815950 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ! '>='
|
@@ -21,10 +22,10 @@ dependencies:
|
|
21
22
|
version: 3.0.0
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
+
version_requirements: *85815950
|
25
26
|
- !ruby/object:Gem::Dependency
|
26
27
|
name: activerecord
|
27
|
-
requirement: &
|
28
|
+
requirement: &85815570 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
30
|
requirements:
|
30
31
|
- - ! '>='
|
@@ -32,11 +33,66 @@ dependencies:
|
|
32
33
|
version: 3.0.0
|
33
34
|
type: :runtime
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
+
version_requirements: *85815570
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: sqlite3
|
39
|
+
requirement: &85815250 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *85815250
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
requirement: &85815020 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *85815020
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: guard
|
61
|
+
requirement: &85771780 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *85771780
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: guard-rspec
|
72
|
+
requirement: &85771560 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *85771560
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: ruby-debug19
|
83
|
+
requirement: &85771220 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *85771220
|
36
92
|
description: ! "Whenever you need assign an association by its attribute,\n like name,
|
37
93
|
this gem comes to busines."
|
38
94
|
email:
|
39
|
-
-
|
95
|
+
- developers@studentify.nl
|
40
96
|
executables: []
|
41
97
|
extensions: []
|
42
98
|
extra_rdoc_files: []
|