a_a_n 0.2.3 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,12 +1,4 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in a_a_n.gemspec
4
- gemspec
5
-
6
- group :development do
7
- gem 'rspec'
8
- end
9
-
10
- group :development, :test do
11
- gem 'sqlite3'
12
- end
4
+ gemspec
@@ -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 = ["max@studentify.nl"]
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
- def self.included(base)
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
- attr_accessor :#{aliased_method}
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
- @#{aliased_method} ||= #{association}.try(:#{attribute})
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 aan_set_#{aliased_method}
57
- unless #{aliased_method}.blank?
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
@@ -1,8 +1,10 @@
1
1
  module AAN
2
- class Keeper
3
- cattr_reader :current_model
2
+ module Keeper
3
+ mattr_reader :current_model
4
4
 
5
- def self.nullify_aliased_methods_for model, assoc
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 self.structure
15
+ def structure
14
16
  @@structures ||= {}
15
17
  end
16
18
 
17
- def self.[](*args)
19
+ def [](*args)
18
20
  (structure[args.first] ||= {})
19
21
  end
20
22
 
21
- def self.associations model, &block
23
+ def associations model, &block
22
24
  @@current_model = model
23
25
  instance_eval &block
24
26
  end
25
27
 
26
- def self.association(name, &block)
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 self.aliases_for model, assoc
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
@@ -1,3 +1,3 @@
1
1
  module AAN
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.5"
3
3
  end
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.3
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-01-30 00:00:00.000000000Z
13
+ date: 2012-02-07 00:00:00.000000000Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: activesupport
16
- requirement: &74437120 !ruby/object:Gem::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: *74437120
25
+ version_requirements: *85815950
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: activerecord
27
- requirement: &74436820 !ruby/object:Gem::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: *74436820
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
- - max@studentify.nl
95
+ - developers@studentify.nl
40
96
  executables: []
41
97
  extensions: []
42
98
  extra_rdoc_files: []