genealogy 1.2.1 → 1.3.0
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.
- checksums.yaml +8 -8
- data/lib/genealogy/alter_methods.rb +5 -1
- data/lib/genealogy/genealogy.rb +4 -4
- data/lib/genealogy/query_methods.rb +9 -26
- data/lib/genealogy/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
NjI4ZDczNzRkODlkNzBhM2JmYTMwMjEzZmU4ODQ4NTA1MTRhMDRjOQ==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
MmQyMGQ1NGE3NGI4M2I1OGQyYTM1ZGUyN2E1OGMxYWZlZWMyMTQ5Mw==
|
|
7
7
|
SHA512:
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
MGY5NWYwZGJkMDQ1YmM4YzU2ZTc0YmYyN2RmMTQ1ZGZmYmUwMDNiMDEzOGQ3
|
|
10
|
+
YjQ4YmU1YjU0MzdiMTliMTE5NjA5ODQ0MWZhYjY4ODA1ZGU3MjIzYTg3MjBk
|
|
11
|
+
NDc3NGIzNDkyMTZhNThiNTY5NWI4ZDhmM2E3NmFiZGU5ZjE2NGU=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
MmFhOWI1OTk5YjU3NWRhNGNiNjIwMGFmNDVkMzFkYzM0YzkxOGFkOWU3YTg5
|
|
14
|
+
MjQ0MzQ4NzhjZWU2MWRkNmI3ZDAyYWVmOTQ2YTEzMWEzMzVkNWNiZmE1MmRh
|
|
15
|
+
NWI2YWMxNDI2YjRiZGNmOWQ1OTBkNzYzN2UwN2Q1YTg0YzYzNDY=
|
|
@@ -9,7 +9,7 @@ module Genealogy
|
|
|
9
9
|
define_method "add_#{parent}" do |relative|
|
|
10
10
|
unless relative.nil?
|
|
11
11
|
raise IncompatibleObjectException, "Both linked objects must be instances of class with genealogy enabled. Got classes #{relative.class} and #{self.genealogy_class}" unless relative.class.respond_to?(:genealogy_enabled)
|
|
12
|
-
incompatible_parents = self.offspring | self.siblings
|
|
12
|
+
incompatible_parents = self.offspring | self.siblings | [self]
|
|
13
13
|
raise IncompatibleRelationshipException, "#{relative} can't be #{parent} of #{self}" if incompatible_parents.include? relative
|
|
14
14
|
raise WrongSexException, "Can't add a #{relative.sex} #{parent}" unless (parent == :father and relative.is_male?) or (parent == :mother and relative.is_female?)
|
|
15
15
|
end
|
|
@@ -208,6 +208,8 @@ module Genealogy
|
|
|
208
208
|
when sex_female_value
|
|
209
209
|
child.add_father(options[:spouse]) if options[:spouse]
|
|
210
210
|
child.add_mother(self)
|
|
211
|
+
else
|
|
212
|
+
raise WrongSexException, "Sex value not valid for #{self}"
|
|
211
213
|
end
|
|
212
214
|
end
|
|
213
215
|
end
|
|
@@ -238,6 +240,8 @@ module Genealogy
|
|
|
238
240
|
child.remove_father
|
|
239
241
|
when sex_female_value
|
|
240
242
|
child.remove_mother
|
|
243
|
+
else
|
|
244
|
+
raise WrongSexException, "Sex value not valid for #{self}"
|
|
241
245
|
end
|
|
242
246
|
end
|
|
243
247
|
end
|
data/lib/genealogy/genealogy.rb
CHANGED
|
@@ -22,7 +22,7 @@ module Genealogy
|
|
|
22
22
|
admitted_keys = [:sex_column, :sex_values, :father_column, :mother_column, :current_spouse_column, :current_spouse, :perform_validation]
|
|
23
23
|
check_options(options, admitted_keys) do |key, value|
|
|
24
24
|
if key == :sex_values
|
|
25
|
-
raise WrongOptionException, ":sex_values option must be an array
|
|
25
|
+
raise WrongOptionException, ":sex_values option must be an array of length 2: first for male sex symbol an last for female" unless value.is_a?(Array) and value.size == 2
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -38,12 +38,12 @@ module Genealogy
|
|
|
38
38
|
## sex
|
|
39
39
|
# class attributes
|
|
40
40
|
class_attribute :sex_column, :sex_values, :sex_male_value, :sex_female_value
|
|
41
|
-
self.sex_column = options[:sex_column] ||
|
|
42
|
-
self.sex_values =
|
|
41
|
+
self.sex_column = options[:sex_column] || 'sex'
|
|
42
|
+
self.sex_values = options[:sex_values] || ['M','F']
|
|
43
43
|
self.sex_male_value = self.sex_values.first
|
|
44
44
|
self.sex_female_value = self.sex_values.last
|
|
45
45
|
# instance attribute
|
|
46
|
-
alias_attribute :sex, sex_column if self.sex_column !=
|
|
46
|
+
alias_attribute :sex, sex_column if self.sex_column != 'sex'
|
|
47
47
|
# validation
|
|
48
48
|
validates_presence_of sex_column
|
|
49
49
|
validates_format_of sex_column, :with => /[#{sex_values.join}]/
|
|
@@ -61,7 +61,7 @@ module Genealogy
|
|
|
61
61
|
if spouse = options[:spouse]
|
|
62
62
|
raise WrongSexException, "Problems while looking for #{self}'s offspring made with spouse #{spouse} who should not be a #{spouse.sex}." if spouse.sex == sex
|
|
63
63
|
end
|
|
64
|
-
case sex
|
|
64
|
+
result = case sex
|
|
65
65
|
when sex_male_value
|
|
66
66
|
if options.keys.include?(:spouse)
|
|
67
67
|
children_as_father.with(spouse.try(:id))
|
|
@@ -74,32 +74,13 @@ module Genealogy
|
|
|
74
74
|
else
|
|
75
75
|
children_as_mother
|
|
76
76
|
end
|
|
77
|
+
else
|
|
78
|
+
raise WrongSexException, "Sex value not valid for #{self}"
|
|
77
79
|
end
|
|
80
|
+
result.to_a
|
|
78
81
|
end
|
|
79
82
|
alias_method :children, :offspring
|
|
80
83
|
|
|
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
|
-
|
|
103
84
|
def eligible_offspring
|
|
104
85
|
self.genealogy_class.all - ancestors - offspring - siblings - [self]
|
|
105
86
|
end
|
|
@@ -162,10 +143,10 @@ module Genealogy
|
|
|
162
143
|
# ancestors
|
|
163
144
|
def ancestors
|
|
164
145
|
result = []
|
|
165
|
-
remaining = parents.
|
|
146
|
+
remaining = parents.compact
|
|
166
147
|
until remaining.empty?
|
|
167
148
|
result << remaining.shift
|
|
168
|
-
remaining += result.last.parents.
|
|
149
|
+
remaining += result.last.parents.compact
|
|
169
150
|
end
|
|
170
151
|
result.uniq
|
|
171
152
|
end
|
|
@@ -252,15 +233,17 @@ module Genealogy
|
|
|
252
233
|
when sex_female_value
|
|
253
234
|
'female'
|
|
254
235
|
else
|
|
255
|
-
raise "
|
|
236
|
+
raise WrongSexException, "Sex value not valid for #{self}"
|
|
256
237
|
end
|
|
257
238
|
end
|
|
258
239
|
|
|
259
240
|
def is_female?
|
|
241
|
+
return female? if respond_to?(:female?)
|
|
260
242
|
sex == sex_female_value
|
|
261
243
|
end
|
|
262
244
|
|
|
263
245
|
def is_male?
|
|
246
|
+
return male? if respond_to?(:male?)
|
|
264
247
|
sex == sex_male_value
|
|
265
248
|
end
|
|
266
249
|
|
data/lib/genealogy/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: genealogy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- masciugo
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-
|
|
11
|
+
date: 2014-08-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -81,7 +81,7 @@ dependencies:
|
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: 2.99.0
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: rspec-its
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - ! '>='
|
|
@@ -144,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
144
144
|
version: '0'
|
|
145
145
|
requirements: []
|
|
146
146
|
rubyforge_project: ! '[none]'
|
|
147
|
-
rubygems_version: 2.
|
|
147
|
+
rubygems_version: 2.1.10
|
|
148
148
|
signing_key:
|
|
149
149
|
specification_version: 4
|
|
150
150
|
summary: Organise ActiveRecord models into a genealogical tree structure
|