tbpgr_utils 0.0.85 → 0.0.86

Sign up to get free protection for your applications and to get access to all the features.
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,11 @@
1
+ # encoding: utf-8
2
+ require 'familyable/familynize'
3
+ require 'attributes_initializable'
4
+
5
+ module Familyable
6
+ class Family
7
+ include AttributesInitializable
8
+ attr_accessor_init :family
9
+ include Familynize
10
+ end
11
+ end
@@ -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
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ # Familyable
4
+ module Familyable
5
+ require 'familyable/familynize'
6
+ require 'familyable/family'
7
+ require 'familyable/person'
8
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.85'
5
+ VERSION = '0.0.86'
6
6
  end
@@ -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.85
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-02 00:00:00.000000000 Z
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: &27738144 !ruby/object:Gem::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: *27738144
24
+ version_requirements: *23535444
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &27737808 !ruby/object:Gem::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: *27737808
35
+ version_requirements: *23535156
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &27737508 !ruby/object:Gem::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: *27737508
46
+ version_requirements: *23534928
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &27737064 !ruby/object:Gem::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: *27737064
57
+ version_requirements: *23534604
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: simplecov
60
- requirement: &27736560 !ruby/object:Gem::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: *27736560
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: