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 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: []