genealogy 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -47,19 +47,19 @@ module Genealogy
47
47
  validates_presence_of sex_column
48
48
  validates_format_of sex_column, :with => /[#{sex_values.join}]/
49
49
 
50
- ## relatives associations
51
50
  tracked_relatives.each do |key|
52
51
  # class attribute where is stored the correspondig foreign_key column name
53
52
  class_attribute_name = "#{key}_column"
54
53
  foreign_key = "#{key}_id"
55
54
  class_attribute class_attribute_name
56
55
  self.send("#{class_attribute_name}=", options[class_attribute_name.to_sym] || foreign_key)
57
-
58
- # self join association
56
+ # self join associations
59
57
  belongs_to key, class_name: self, foreign_key: foreign_key
60
-
61
58
  end
62
59
 
60
+ has_many :children_as_father, :class_name => self, :foreign_key => self.father_column, :dependent => :nullify, :extend => FatherAssociationExtension
61
+ has_many :children_as_mother, :class_name => self, :foreign_key => self.mother_column, :dependent => :nullify, :extend => MotherAssociationExtension
62
+
63
63
  # Include instance methods and class methods
64
64
  include Genealogy::QueryMethods
65
65
  include Genealogy::AlterMethods
@@ -67,4 +67,14 @@ module Genealogy
67
67
 
68
68
  end
69
69
 
70
+ module MotherAssociationExtension
71
+ def with(father_id)
72
+ where(father_id: father_id)
73
+ end
74
+ end
75
+ module FatherAssociationExtension
76
+ def with(mother_id)
77
+ where(mother_id: mother_id)
78
+ end
79
+ end
70
80
  end
@@ -64,20 +64,42 @@ module Genealogy
64
64
  case sex
65
65
  when sex_male_value
66
66
  if options.keys.include?(:spouse)
67
- self.genealogy_class.where(father_id: id, mother_id: spouse.try(:id))
67
+ children_as_father.with(spouse.try(:id))
68
68
  else
69
- self.genealogy_class.where(father_id: id)
69
+ children_as_father
70
70
  end
71
71
  when sex_female_value
72
72
  if options.keys.include?(:spouse)
73
- self.genealogy_class.where(mother_id: id, father_id: spouse.try(:id))
73
+ children_as_mother.with(spouse.try(:id))
74
74
  else
75
- self.genealogy_class.where(mother_id: id)
75
+ children_as_mother
76
76
  end
77
77
  end
78
78
  end
79
79
  alias_method :children, :offspring
80
80
 
81
+ # # offspring
82
+ # def offspring(options = {})
83
+ # if spouse = options[:spouse]
84
+ # raise WrongSexException, "Problems while looking for #{self}'s offspring made with spouse #{spouse} who should not be a #{spouse.sex}." if spouse.sex == sex
85
+ # end
86
+ # case sex
87
+ # when sex_male_value
88
+ # if options.keys.include?(:spouse)
89
+ # self.genealogy_class.where(father_id: id, mother_id: spouse.try(:id))
90
+ # else
91
+ # self.genealogy_class.where(father_id: id)
92
+ # end
93
+ # when sex_female_value
94
+ # if options.keys.include?(:spouse)
95
+ # self.genealogy_class.where(mother_id: id, father_id: spouse.try(:id))
96
+ # else
97
+ # self.genealogy_class.where(mother_id: id)
98
+ # end
99
+ # end
100
+ # end
101
+ # alias_method :children, :offspring
102
+
81
103
  def eligible_offspring
82
104
  self.genealogy_class.all - ancestors - offspring - siblings - [self]
83
105
  end
@@ -1,3 +1,3 @@
1
1
  module Genealogy
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,111 +1,126 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genealogy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - masciugo
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-12-19 00:00:00.000000000 Z
12
+ date: 2014-02-11 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activerecord
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - ~>
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
- version: '4.0'
21
+ version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - ~>
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
- version: '4.0'
29
+ version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: activesupport
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - ~>
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
- version: '4.0'
37
+ version: '0'
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - ~>
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
- version: '4.0'
45
+ version: '0'
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: sqlite3
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - '>='
51
+ - - ! '>='
46
52
  - !ruby/object:Gem::Version
47
53
  version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - '>='
59
+ - - ! '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: rake
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - '>='
67
+ - - ! '>='
60
68
  - !ruby/object:Gem::Version
61
69
  version: '0'
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0'
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: rspec
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - '>='
83
+ - - ! '>='
74
84
  - !ruby/object:Gem::Version
75
85
  version: '0'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - '>='
91
+ - - ! '>='
81
92
  - !ruby/object:Gem::Version
82
93
  version: '0'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: debugger
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - '>='
99
+ - - ! '>='
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - '>='
107
+ - - ! '>='
95
108
  - !ruby/object:Gem::Version
96
109
  version: '0'
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: gem-release
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - '>='
115
+ - - ! '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - '>='
123
+ - - ! '>='
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0'
111
126
  description: Genealogy is a ruby gem library which extend ActiveRecord::Base class
@@ -127,25 +142,26 @@ files:
127
142
  homepage: https://github.com/masciugo/genealogy
128
143
  licenses:
129
144
  - MIT
130
- metadata: {}
131
145
  post_install_message:
132
146
  rdoc_options: []
133
147
  require_paths:
134
148
  - lib
135
149
  required_ruby_version: !ruby/object:Gem::Requirement
150
+ none: false
136
151
  requirements:
137
- - - '>='
152
+ - - ! '>='
138
153
  - !ruby/object:Gem::Version
139
154
  version: '0'
140
155
  required_rubygems_version: !ruby/object:Gem::Requirement
156
+ none: false
141
157
  requirements:
142
- - - '>='
158
+ - - ! '>='
143
159
  - !ruby/object:Gem::Version
144
160
  version: '0'
145
161
  requirements: []
146
- rubyforge_project: '[none]'
147
- rubygems_version: 2.0.14
162
+ rubyforge_project: ! '[none]'
163
+ rubygems_version: 1.8.23
148
164
  signing_key:
149
- specification_version: 4
165
+ specification_version: 3
150
166
  summary: Organise ActiveRecord models into a genealogical tree structure
151
167
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: cbde6f4104df5b3eec88c5e1b2b7a089495f91d1
4
- data.tar.gz: 73479c02912fa7794b63c9e24e7a50206a8108cd
5
- SHA512:
6
- metadata.gz: 40686d98c83f2c96fc4a6733673613025ff636fc5256952d081ffda4293241df67f443be9f9ba34c7399049d7f12dd77c9f3a804b9955d30aa02bfd401d6b9eb
7
- data.tar.gz: 3fe31cb2ac85b55de1923772a642b118fe1ab10178204d758aace27ac09a0f1eb174ce64bdd8623c224f7abf64ac5305c0d8a970b878925f3ced4045f754bd98