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 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: