my_ancestry 0.0.1
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/LICENSE +14 -0
- data/README.md +57 -0
- data/lib/my_ancestry.rb +89 -0
- data/my_ancestry.gemspec +22 -0
- metadata +50 -0
data/LICENSE
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Copyright (c) 2013 Thiago Coutinho
|
2
|
+
|
3
|
+
Written by
|
4
|
+
|
5
|
+
- Thiago Coutinho <thiago@osfeio.com>
|
6
|
+
|
7
|
+
Version: 0.0.1 stable
|
8
|
+
|
9
|
+
"THE BEER-WARE LICENSE" (Revision 42):
|
10
|
+
<thiago@osfeio.com> wrote this file based on the other descriptions. As long as
|
11
|
+
you retain this notice you can do whatever you want with this stuff. If we meet
|
12
|
+
some day, and you think this stuff is worth it, you can buy me a beer in return.
|
13
|
+
|
14
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# MyAncestry
|
2
|
+
|
3
|
+
Make search of objects parents/childrem/brothers .....
|
4
|
+
|
5
|
+
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
9
|
+
|
10
|
+
gem 'my_ancestry'
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
|
14
|
+
$ bundle
|
15
|
+
|
16
|
+
Or install it yourself as:
|
17
|
+
|
18
|
+
$ gem install my_ancestry
|
19
|
+
|
20
|
+
## Usage
|
21
|
+
|
22
|
+
list = [
|
23
|
+
{
|
24
|
+
id:1,
|
25
|
+
name: "couto",
|
26
|
+
ancestry:nil
|
27
|
+
},
|
28
|
+
{
|
29
|
+
id:2,
|
30
|
+
name: "teste",
|
31
|
+
ancestry:"000001"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
id:3,
|
35
|
+
name: "teste2",
|
36
|
+
ancestry:"0001"
|
37
|
+
}
|
38
|
+
]
|
39
|
+
|
40
|
+
result = MyAncestry.new(list,{:id=> :id, :ancestry_id => :ancestry})
|
41
|
+
|
42
|
+
brothers = result.brothers_of(2)
|
43
|
+
|
44
|
+
childrem = result.childrem_of(1)
|
45
|
+
|
46
|
+
parent = result.parent_of(3)
|
47
|
+
.....
|
48
|
+
|
49
|
+
|
50
|
+
## Contributing
|
51
|
+
|
52
|
+
1. Fork it
|
53
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
54
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
55
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
56
|
+
5. Create new Pull Request
|
57
|
+
6. Execure the "THE BEER-WARE LICENSE".
|
data/lib/my_ancestry.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
class TypeException < Exception ;end
|
2
|
+
class MyAncestry
|
3
|
+
|
4
|
+
def initialize(objs, options={})
|
5
|
+
validate_objs(objs)
|
6
|
+
@objs = objs
|
7
|
+
load_default_options(options)
|
8
|
+
end
|
9
|
+
|
10
|
+
def load_default_options(options)
|
11
|
+
@id = options[:id] || "id"
|
12
|
+
@ancestry_id = options[:ancestry_id] || "ancestry_id"
|
13
|
+
@objects_type = @objs.first.class.name
|
14
|
+
@comparision_type = options[:comparision_type] || "to_i"
|
15
|
+
end
|
16
|
+
|
17
|
+
def all
|
18
|
+
@objs
|
19
|
+
end
|
20
|
+
|
21
|
+
def search
|
22
|
+
@objs.select do
|
23
|
+
yield
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
#Search parent by id of child
|
28
|
+
def parent_of(id)
|
29
|
+
item = find_by_id(id)
|
30
|
+
find_by_id(eval(comparision_childrem_value("item")))
|
31
|
+
end
|
32
|
+
|
33
|
+
#Search all childrem by ancestry_id
|
34
|
+
def childrem_of(id)
|
35
|
+
@objs.select do |obj|
|
36
|
+
eval(comparision_childrem_value("obj")).to_i == id.to_i
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
#Search all brothers of id
|
41
|
+
def brothers_of(id)
|
42
|
+
parent = parent_of(id)
|
43
|
+
childrem_of(eval(comparision_obj_value("parent")))
|
44
|
+
end
|
45
|
+
|
46
|
+
#Search a object by id
|
47
|
+
def find_by_id(id)
|
48
|
+
@objs.select {|obj| eval(comparision_obj_value("obj")).to_i == id.to_i}.first
|
49
|
+
end
|
50
|
+
|
51
|
+
def validate_objs(objs)
|
52
|
+
first_class_name = objs.first.class.name
|
53
|
+
objs.each do |obj|
|
54
|
+
raise TypeException.new "The list of objets must be a single type" unless first_class_name == obj.class.name
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def comparision_childrem_value(var)
|
61
|
+
comparision_value(var,@ancestry_id)
|
62
|
+
end
|
63
|
+
|
64
|
+
def comparision_obj_value(var)
|
65
|
+
comparision_value(var,@id)
|
66
|
+
end
|
67
|
+
|
68
|
+
def comparision_value(var,id)
|
69
|
+
items = {
|
70
|
+
"Array" => "#{var}[#{id}]",
|
71
|
+
"Hash" => "#{var}[ #{type_value(id)} ]",
|
72
|
+
"Symbol" => "#{var}[#{type_value(id)}]",
|
73
|
+
}
|
74
|
+
if items.key?(@objects_type)
|
75
|
+
items[@objects_type]
|
76
|
+
else
|
77
|
+
"#{var}.#{id}"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def type_value(var)
|
82
|
+
items ={
|
83
|
+
"String" => var,
|
84
|
+
"Symbol" => ":#{var}",
|
85
|
+
}
|
86
|
+
items[var.class.name]
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
data/my_ancestry.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
Gem::Specification.new do |gem|
|
3
|
+
gem.authors = ["Thiago Coutinho"]
|
4
|
+
gem.email = ["thiago@osfeio.com"]
|
5
|
+
gem.description = %q{
|
6
|
+
Make search of objects parents/childrem/brothers}
|
7
|
+
gem.summary = %q{ Make search of objects parents/childrem/brothers }
|
8
|
+
gem.homepage = "http://github.com/selialkile/myancestry"
|
9
|
+
|
10
|
+
gem.files = [
|
11
|
+
"LICENSE",
|
12
|
+
"README.md",
|
13
|
+
"my_ancestry.gemspec",
|
14
|
+
"lib/my_ancestry.rb",
|
15
|
+
]
|
16
|
+
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.name = "my_ancestry"
|
20
|
+
gem.require_paths = ["lib"]
|
21
|
+
gem.version = "0.0.1"
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: my_ancestry
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Thiago Coutinho
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-22 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: ! "\n Make search of objects parents/childrem/brothers"
|
15
|
+
email:
|
16
|
+
- thiago@osfeio.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- LICENSE
|
22
|
+
- README.md
|
23
|
+
- my_ancestry.gemspec
|
24
|
+
- lib/my_ancestry.rb
|
25
|
+
homepage: http://github.com/selialkile/myancestry
|
26
|
+
licenses: []
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
33
|
+
requirements:
|
34
|
+
- - ! '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0'
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ! '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
requirements: []
|
44
|
+
rubyforge_project:
|
45
|
+
rubygems_version: 1.8.15
|
46
|
+
signing_key:
|
47
|
+
specification_version: 3
|
48
|
+
summary: Make search of objects parents/childrem/brothers
|
49
|
+
test_files: []
|
50
|
+
has_rdoc:
|