tbpgr_utils 0.0.85 → 0.0.86
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/README.md +26 -0
- data/lib/familyable/family.rb +11 -0
- data/lib/familyable/familynize.rb +42 -0
- data/lib/familyable/person.rb +14 -0
- data/lib/familyable.rb +8 -0
- data/lib/tbpgr_utils/version.rb +1 -1
- data/spec/familyable/familyable_spec.rb +149 -0
- metadata +19 -18
data/README.md
CHANGED
@@ -74,6 +74,7 @@ Or install it yourself as:
|
|
74
74
|
|[EvalHelper#ternary_operator](#evalhelperternary_operator) |create ternary operator strings, for eval |
|
75
75
|
|[EvalHelper#unless_code](#evalhelperunless_code) |create unless strings, for eval |
|
76
76
|
|[EvalHelper#unless_code_after](#evalhelperunless_code_after) |create after-unless strings, for eval |
|
77
|
+
|[Familyable](#familyable) |user family model(family, person, parents, children, brothers) |
|
77
78
|
|[TbpgrUtils File.insert_bom](#fileinsert_bom) |insert BOM to UTF-8 File |
|
78
79
|
|[TbpgrUtils Fixnum to_fixnum_table](#fixnum-to_fixnum_table) |return value is fixnum table |
|
79
80
|
|[Ghostable module](#ghostable) |help to create ghost method(dynamic method define by ussing method_missing + pattern-method-name) |
|
@@ -1162,6 +1163,30 @@ hige=@hige@
|
|
1162
1163
|
|
1163
1164
|
[back to list](#list)
|
1164
1165
|
|
1166
|
+
### Familyable
|
1167
|
+
5 person case
|
1168
|
+
|
1169
|
+
~~~ruby
|
1170
|
+
require 'familyable'
|
1171
|
+
persons = [
|
1172
|
+
a = Familyable::Person.new(id: 1, parent_ids: [2, 3]),
|
1173
|
+
b = Familyable::Person.new(id: 2, parent_ids: []),
|
1174
|
+
c = Familyable::Person.new(id: 3, parent_ids: [4],),
|
1175
|
+
d = Familyable::Person.new(id: 4, parent_ids: [3]),
|
1176
|
+
e = Familyable::Person.new(id: 5, parent_ids: [2]),
|
1177
|
+
]
|
1178
|
+
|
1179
|
+
family = Familyable::Family.new(family: persons)
|
1180
|
+
family.get_parents a # => return person [b, c]
|
1181
|
+
family.get_children b # => return person [a, e]
|
1182
|
+
family.get_brothers a # => return person [d, e]
|
1183
|
+
~~~
|
1184
|
+
|
1185
|
+
If you want to use other model instead of person,
|
1186
|
+
Create model that has two fileds that are 'id' and 'parent_ids'.
|
1187
|
+
|
1188
|
+
[back to list](#list)
|
1189
|
+
|
1165
1190
|
### File.insert_bom
|
1166
1191
|
* this method's main purpose is 'UTF-8 Excel CSV File'.
|
1167
1192
|
|
@@ -2900,6 +2925,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
|
|
2900
2925
|
https://github.com/tbpgr/tbpgr_utils_snippets
|
2901
2926
|
|
2902
2927
|
## History
|
2928
|
+
* version 0.0.86 : add Familyable
|
2903
2929
|
* version 0.0.85 : add String#table_to_array
|
2904
2930
|
* version 0.0.84 : add Fixnum to_fixnum_table
|
2905
2931
|
* version 0.0.83 : add Numeric to_digit_table
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Familyable
|
4
|
+
# Familynize
|
5
|
+
#
|
6
|
+
# this module require id, parent_ids fileds.
|
7
|
+
module Familynize
|
8
|
+
def get_parents(person)
|
9
|
+
ret = []
|
10
|
+
tmp_family = family.dup
|
11
|
+
person.parent_ids.each do |parent_id|
|
12
|
+
tmp_family.each do |v|
|
13
|
+
next unless v.id == parent_id
|
14
|
+
ret << v
|
15
|
+
tmp_family.delete(v)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
ret
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_children(person)
|
22
|
+
family.reduce([]) do |ret, v|
|
23
|
+
ret << v if v.parent_ids.include?(person.id)
|
24
|
+
ret
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_brothers(person)
|
29
|
+
ret = []
|
30
|
+
tmp_family = family.dup
|
31
|
+
person.parent_ids.each do |parent_id|
|
32
|
+
tmp_family.each do |v|
|
33
|
+
next if v == person
|
34
|
+
next unless v.parent_ids.include?(parent_id)
|
35
|
+
ret << v
|
36
|
+
tmp_family.delete(v)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
ret
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'familyable/familynize'
|
3
|
+
require 'attributes_initializable'
|
4
|
+
|
5
|
+
module Familyable
|
6
|
+
class Person
|
7
|
+
include AttributesInitializable
|
8
|
+
attr_accessor_init :id, :parent_ids
|
9
|
+
|
10
|
+
def <=>(other)
|
11
|
+
id <=> other.id
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/familyable.rb
ADDED
data/lib/tbpgr_utils/version.rb
CHANGED
@@ -0,0 +1,149 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'familyable'
|
4
|
+
|
5
|
+
describe Familyable::Family do
|
6
|
+
context :get_parents do
|
7
|
+
cases = [
|
8
|
+
{
|
9
|
+
case_no: 1,
|
10
|
+
case_title: 'have 2 parents case',
|
11
|
+
persons: [
|
12
|
+
a = Familyable::Person.new(id: 1, parent_ids: [2, 3]),
|
13
|
+
b = Familyable::Person.new(id: 2, parent_ids: []),
|
14
|
+
c = Familyable::Person.new(id: 3, parent_ids: [4], ),
|
15
|
+
d = Familyable::Person.new(id: 4, parent_ids: []),
|
16
|
+
e = Familyable::Person.new(id: 5, parent_ids: [2]),
|
17
|
+
],
|
18
|
+
index: 0,
|
19
|
+
expected: [1, 2]
|
20
|
+
},
|
21
|
+
]
|
22
|
+
|
23
|
+
cases.each do |c|
|
24
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
25
|
+
begin
|
26
|
+
case_before c
|
27
|
+
|
28
|
+
# -- given --
|
29
|
+
family = Familyable::Family.new(family: c[:persons])
|
30
|
+
|
31
|
+
# -- when --
|
32
|
+
actuals = family.get_parents c[:persons][c[:index]]
|
33
|
+
|
34
|
+
# -- then --
|
35
|
+
expect(actuals.size).to eq(c[:expected].size)
|
36
|
+
actuals.each_with_index do |actual_person, i|
|
37
|
+
expect(actual_person).to eq(c[:persons][c[:expected][i]])
|
38
|
+
end
|
39
|
+
ensure
|
40
|
+
case_after c
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def case_before(c)
|
45
|
+
# implement each case before
|
46
|
+
end
|
47
|
+
|
48
|
+
def case_after(c)
|
49
|
+
# implement each case after
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context :get_children do
|
55
|
+
cases = [
|
56
|
+
{
|
57
|
+
case_no: 1,
|
58
|
+
case_title: 'have 2 children case',
|
59
|
+
persons: [
|
60
|
+
a = Familyable::Person.new(id: 1, parent_ids: [2, 3]),
|
61
|
+
b = Familyable::Person.new(id: 2, parent_ids: []),
|
62
|
+
c = Familyable::Person.new(id: 3, parent_ids: [4], ),
|
63
|
+
d = Familyable::Person.new(id: 4, parent_ids: []),
|
64
|
+
e = Familyable::Person.new(id: 5, parent_ids: [2]),
|
65
|
+
],
|
66
|
+
index: 1,
|
67
|
+
expected: [0, 4]
|
68
|
+
},
|
69
|
+
]
|
70
|
+
|
71
|
+
cases.each do |c|
|
72
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
73
|
+
begin
|
74
|
+
case_before c
|
75
|
+
|
76
|
+
# -- given --
|
77
|
+
family = Familyable::Family.new(family: c[:persons])
|
78
|
+
|
79
|
+
# -- when --
|
80
|
+
actuals = family.get_children c[:persons][c[:index]]
|
81
|
+
|
82
|
+
# -- then --
|
83
|
+
expect(actuals.size).to eq(c[:expected].size)
|
84
|
+
actuals.each_with_index do |actual_person, i|
|
85
|
+
expect(actual_person).to eq(c[:persons][c[:expected][i]])
|
86
|
+
end
|
87
|
+
ensure
|
88
|
+
case_after c
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def case_before(c)
|
93
|
+
# implement each case before
|
94
|
+
end
|
95
|
+
|
96
|
+
def case_after(c)
|
97
|
+
# implement each case after
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context :get_brothers do
|
103
|
+
cases = [
|
104
|
+
{
|
105
|
+
case_no: 1,
|
106
|
+
case_title: 'have 2 brothers case',
|
107
|
+
persons: [
|
108
|
+
a = Familyable::Person.new(id: 1, parent_ids: [2, 3]),
|
109
|
+
b = Familyable::Person.new(id: 2, parent_ids: []),
|
110
|
+
c = Familyable::Person.new(id: 3, parent_ids: [4], ),
|
111
|
+
d = Familyable::Person.new(id: 4, parent_ids: [3]),
|
112
|
+
e = Familyable::Person.new(id: 5, parent_ids: [2]),
|
113
|
+
],
|
114
|
+
index: 0,
|
115
|
+
expected: [3, 4]
|
116
|
+
},
|
117
|
+
]
|
118
|
+
|
119
|
+
cases.each do |c|
|
120
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
121
|
+
begin
|
122
|
+
case_before c
|
123
|
+
|
124
|
+
# -- given --
|
125
|
+
family = Familyable::Family.new(family: c[:persons])
|
126
|
+
|
127
|
+
# -- when --
|
128
|
+
actuals = family.get_brothers c[:persons][c[:index]]
|
129
|
+
|
130
|
+
# -- then --
|
131
|
+
expect(actuals.size).to eq(c[:expected].size)
|
132
|
+
actuals.sort.each_with_index do |actual_person, i|
|
133
|
+
expect(actual_person).to eq(c[:persons][c[:expected][i]])
|
134
|
+
end
|
135
|
+
ensure
|
136
|
+
case_after c
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def case_before(c)
|
141
|
+
# implement each case before
|
142
|
+
end
|
143
|
+
|
144
|
+
def case_after(c)
|
145
|
+
# implement each case after
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tbpgr_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.86
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &23535444 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 4.0.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *23535444
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &23535156 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.3'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *23535156
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &23534928 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *23534928
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rspec
|
49
|
-
requirement: &
|
49
|
+
requirement: &23534604 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 2.14.1
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *23534604
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: simplecov
|
60
|
-
requirement: &
|
60
|
+
requirement: &23534304 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: 0.8.2
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *23534304
|
69
69
|
description: Utilities
|
70
70
|
email:
|
71
71
|
- tbpgr@tbpgr.jp
|
@@ -103,6 +103,10 @@ files:
|
|
103
103
|
- lib/eval_helper/unless_code.rb
|
104
104
|
- lib/eval_helper/unless_code_after.rb
|
105
105
|
- lib/eval_helper_object.rb
|
106
|
+
- lib/familyable.rb
|
107
|
+
- lib/familyable/family.rb
|
108
|
+
- lib/familyable/familynize.rb
|
109
|
+
- lib/familyable/person.rb
|
106
110
|
- lib/ghostable.rb
|
107
111
|
- lib/metasyntactic_variable.rb
|
108
112
|
- lib/open_classes/array.rb
|
@@ -206,6 +210,7 @@ files:
|
|
206
210
|
- spec/eval_helper/times_code_spec.rb
|
207
211
|
- spec/eval_helper/unless_code_after_spec.rb
|
208
212
|
- spec/eval_helper/unless_code_spec.rb
|
213
|
+
- spec/familyable/familyable_spec.rb
|
209
214
|
- spec/ghostable_spec.rb
|
210
215
|
- spec/metasyntactic_variable_spec.rb
|
211
216
|
- spec/open_classes/array/to_table_spec.rb
|
@@ -296,18 +301,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
296
301
|
- - ! '>='
|
297
302
|
- !ruby/object:Gem::Version
|
298
303
|
version: '0'
|
299
|
-
segments:
|
300
|
-
- 0
|
301
|
-
hash: -333289357
|
302
304
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
303
305
|
none: false
|
304
306
|
requirements:
|
305
307
|
- - ! '>='
|
306
308
|
- !ruby/object:Gem::Version
|
307
309
|
version: '0'
|
308
|
-
segments:
|
309
|
-
- 0
|
310
|
-
hash: -333289357
|
311
310
|
requirements: []
|
312
311
|
rubyforge_project:
|
313
312
|
rubygems_version: 1.8.11
|
@@ -332,6 +331,7 @@ test_files:
|
|
332
331
|
- spec/eval_helper/times_code_spec.rb
|
333
332
|
- spec/eval_helper/unless_code_after_spec.rb
|
334
333
|
- spec/eval_helper/unless_code_spec.rb
|
334
|
+
- spec/familyable/familyable_spec.rb
|
335
335
|
- spec/ghostable_spec.rb
|
336
336
|
- spec/metasyntactic_variable_spec.rb
|
337
337
|
- spec/open_classes/array/to_table_spec.rb
|
@@ -408,3 +408,4 @@ test_files:
|
|
408
408
|
- spec/templatable_spec.rb
|
409
409
|
- spec/template_methodable_spec.rb
|
410
410
|
- spec/test_toolbox/kernel_spec.rb
|
411
|
+
has_rdoc:
|