tbpgr_utils 0.0.138 → 0.0.139

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c45387fe37df5872e279a11c7cbce12626f8fe90
4
- data.tar.gz: 393ee517fb8167901c950b29e81d64ff1bedfffb
3
+ metadata.gz: 2eb75c4b5853cf7c53add6ef52f538786b6d6dea
4
+ data.tar.gz: 6975b29af92ace33c6a5535c140bb8dd27d325e4
5
5
  SHA512:
6
- metadata.gz: 8110c1a9c47b53c74dbd78db50b7a65bbc4b29c0c42d4e41c39cc0f8f385e62564184cbc33d3abd2ad0ef573de49b839835827533518a933cf8e5644ac19f0ef
7
- data.tar.gz: 9beef52ccfd63e1d3dfb78c26f3bd55c909cfeab607b6edbc14d46f43bb77ce742b3aa98909da28a11621782d223788fc4cbe1440ea6c157c648598eec86d9ba
6
+ metadata.gz: 5f1fa6a0334cf5c0d84ba404ad3de34601aabbd51ac37465a9c874f070a56b8cfa4b9021e108541f87a6dc4d1a7fae4d1c90452cebe5ee6ce41ee5a875ed00e2
7
+ data.tar.gz: 9378cbebade247ad277beddf19b487c2b01750ea4141e0e8d6fb3bfb85a48a430e2846306124ca7d391f65d36e0e328c35118c99c4ab06e77a5ddd2bee147883
data/README.md CHANGED
@@ -61,6 +61,7 @@ Or install it yourself as:
61
61
  |[TbpgrUtils Array#together_with_index](#arraytogether_with_index) |loop all arrays by block with index |
62
62
  |[TbpgrUtils Array#uniq_size](#arrayuniq_size) |return uniq size |
63
63
  |[AttrEnumerable.at_attr](#attrenumerableat_attr) |define at_xxx. it returns Class attributes(collection)'s at result. |
64
+ |[AttrEnumerable.compact_attr](#attrenumerablecompact_attr) |define compact_xxx. it returns Class attributes(collection)'s that exclude nil elements. |
64
65
  |[AttrEnumerable.each_attr](#attrenumerableeach_attr) |define each_xxx. it call Class attributes(collection)'s attribute iterator |
65
66
  |[AttrEnumerable.each_attr_with_index](#attrenumerableeach_attr_with_index) |define each_xxx_with_index. it call Class attributes(collection)'s attribute iterator with index |
66
67
  |[AttrEnumerable.reverse_attr](#attrenumerablereverse_attr) |define reverse_xxx. it returns Class attributes(collection)'s reverse Array |
@@ -1139,6 +1140,38 @@ persons.at_name 0 # => nil
1139
1140
 
1140
1141
  [back to list](#list)
1141
1142
 
1143
+ ### AttrEnumerable.compact_attr
1144
+ ~~~ruby
1145
+ require 'attr_enumerable'
1146
+ class Person
1147
+ attr_reader :name, :age
1148
+ def initialize(name, age)
1149
+ @name, @age = name, age
1150
+ end
1151
+ end
1152
+
1153
+ class Persons
1154
+ attr_reader :persons
1155
+ include AttrEnumerable
1156
+ def initialize(persons = [])
1157
+ @persons = persons
1158
+ end
1159
+
1160
+ def <<(person)
1161
+ @persons << person
1162
+ end
1163
+ end
1164
+
1165
+ persons = Persons.new([Person.new("tanaka", 84), Person.new(nil, 99), Person.new("suzuki", nil)])
1166
+ persons.compact_name # => ['tanaka', 'suzuki']
1167
+ persons.compact_age # => [84, 99]
1168
+
1169
+ persons = Persons.new([])
1170
+ persons.compact_name 0 # => []
1171
+ ~~~
1172
+
1173
+ [back to list](#list)
1174
+
1142
1175
  ### AttrEnumerable.each_attr
1143
1176
  ~~~ruby
1144
1177
  require 'attr_enumerable'
@@ -3940,6 +3973,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
3940
3973
  https://github.com/tbpgr/tbpgr_utils_snippets
3941
3974
 
3942
3975
  ## History
3976
+ * version 0.0.139 : add AttrEnumerable.compact_attr
3943
3977
  * version 0.0.138 : add AttrEnumerable.at_attr
3944
3978
  * version 0.0.137 : add AttrEnumerable.reverse_attr
3945
3979
  * version 0.0.136 : add AttrEnumerable.each_attr_with_index
@@ -3,6 +3,7 @@
3
3
  # AttrEnumerable
4
4
  module AttrEnumerable
5
5
  require 'attr_enumerable/at_attr'
6
+ require 'attr_enumerable/compact_attr'
6
7
  require 'attr_enumerable/each_attr'
7
8
  require 'attr_enumerable/each_attr_with_index'
8
9
  require 'attr_enumerable/reverse_attr'
@@ -1,40 +1,41 @@
1
- # encoding: utf-8
2
- require 'active_support/inflector'
3
-
4
- # AttrEnumerable
5
- module AttrEnumerable
6
- ATTR_METHODS = [
7
- { regexp: /^each_(.*)_with_index$/, call_method: :each_attr_with_index },
8
- { regexp: /^each_(.*)$/, call_method: :each_attr },
9
- { regexp: /^reverse_(.*)$/, call_method: :reverse_attr },
10
- { regexp: /^at_(.*)$/, call_method: :at_attr }
11
- ]
12
-
13
- # call attr enumerable method.
14
- def method_missing(method_name, *args, &block)
15
- attr_method = detect(method_name)
16
- send(attr_method[:call_method], attr_method[:attribute], method_name, *args, &block)
17
- rescue
18
- super(method_name, *args, &block)
19
- end
20
-
21
- private
22
- def detect(method_name)
23
- ATTR_METHODS.each do |attr_method|
24
- regexp = attr_method[:regexp]
25
- if method_name.to_s =~ regexp
26
- attribute = method_name.to_s.scan(regexp).first.first
27
- return { call_method: attr_method[:call_method], attribute: attribute }
28
- end
29
- end
30
- fail NoMethodError, "method is not exists #{method_name}"
31
- end
32
-
33
- def include_attr?(element, attribute)
34
- element.instance_variables.include? :"@#{attribute}"
35
- end
36
-
37
- def collection
38
- instance_variable_get("@#{self.class.name.underscore}")
39
- end
40
- end
1
+ # encoding: utf-8
2
+ require 'active_support/inflector'
3
+
4
+ # AttrEnumerable
5
+ module AttrEnumerable
6
+ ATTR_METHODS = [
7
+ { regexp: /^each_(.*)_with_index$/, call_method: :each_attr_with_index },
8
+ { regexp: /^each_(.*)$/, call_method: :each_attr },
9
+ { regexp: /^reverse_(.*)$/, call_method: :reverse_attr },
10
+ { regexp: /^at_(.*)$/, call_method: :at_attr },
11
+ { regexp: /^compact_(.*)$/, call_method: :compact_attr }
12
+ ]
13
+
14
+ # call attr enumerable method.
15
+ def method_missing(method_name, *args, &block)
16
+ attr_method = detect(method_name)
17
+ send(attr_method[:call_method], attr_method[:attribute], method_name, *args, &block)
18
+ rescue
19
+ super(method_name, *args, &block)
20
+ end
21
+
22
+ private
23
+ def detect(method_name)
24
+ ATTR_METHODS.each do |attr_method|
25
+ regexp = attr_method[:regexp]
26
+ if method_name.to_s =~ regexp
27
+ attribute = method_name.to_s.scan(regexp).first.first
28
+ return { call_method: attr_method[:call_method], attribute: attribute }
29
+ end
30
+ end
31
+ fail NoMethodError, "method is not exists #{method_name}"
32
+ end
33
+
34
+ def include_attr?(element, attribute)
35
+ element.instance_variables.include? :"@#{attribute}"
36
+ end
37
+
38
+ def collection
39
+ instance_variable_get("@#{self.class.name.underscore}")
40
+ end
41
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ require 'attr_enumerable/attr_enumerable_helper'
3
+
4
+ # AttrEnumerable
5
+ module AttrEnumerable
6
+ private
7
+ def compact_attr(attribute, method_name, *args, &block)
8
+ return [] if collection.empty?
9
+ super(method_name, *args) unless include_attr?(collection.first, attribute)
10
+ collection.map(&attribute.to_sym).compact
11
+ end
12
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.138'
5
+ VERSION = '0.0.139'
6
6
  end
@@ -0,0 +1,89 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'attr_enumerable'
4
+
5
+ describe AttrEnumerable do
6
+ context :compact_attr do
7
+ class AttrEnumerablePerson
8
+ attr_reader :name, :age
9
+ def initialize(name, age)
10
+ @name, @age = name, age
11
+ end
12
+ end
13
+
14
+ class AttrEnumerablePersons
15
+ attr_reader :attr_enumerable_persons
16
+ include AttrEnumerable
17
+ def initialize(attr_enumerable_persons = [])
18
+ @attr_enumerable_persons = attr_enumerable_persons
19
+ end
20
+
21
+ def <<(person)
22
+ @attr_enumerable_persons << attr_enumerable_persons
23
+ end
24
+ end
25
+
26
+ cases = [
27
+ {
28
+ case_no: 1,
29
+ case_title: 'name case',
30
+ klass: AttrEnumerablePersons.new(
31
+ [
32
+ AttrEnumerablePerson.new('tanaka', 84),
33
+ AttrEnumerablePerson.new(nil, 99),
34
+ AttrEnumerablePerson.new('suzuki', nil)
35
+ ]
36
+ ),
37
+ method: :compact_name,
38
+ expected: ['tanaka', 'suzuki']
39
+ },
40
+ {
41
+ case_no: 2,
42
+ case_title: 'age case',
43
+ klass: AttrEnumerablePersons.new(
44
+ [
45
+ AttrEnumerablePerson.new('tanaka', 84),
46
+ AttrEnumerablePerson.new(nil, 99),
47
+ AttrEnumerablePerson.new('suzuki', nil)
48
+ ]
49
+ ),
50
+ method: :compact_age,
51
+ expected: [84, 99]
52
+ },
53
+ {
54
+ case_no: 3,
55
+ case_title: 'empty case',
56
+ klass: AttrEnumerablePersons.new([]),
57
+ method: :compact_name,
58
+ expected: []
59
+ }
60
+ ]
61
+
62
+ cases.each do |c|
63
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
64
+ begin
65
+ case_before c
66
+
67
+ # -- given --
68
+ # nothing
69
+
70
+ # -- when --
71
+ actual = c[:klass].send c[:method]
72
+
73
+ # -- then --
74
+ expect(actual).to eq(c[:expected])
75
+ ensure
76
+ case_after c
77
+ end
78
+ end
79
+
80
+ def case_before(c)
81
+ # implement each case before
82
+ end
83
+
84
+ def case_after(c)
85
+ # implement each case after
86
+ end
87
+ end
88
+ end
89
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tbpgr_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.138
4
+ version: 0.0.139
5
5
  platform: ruby
6
6
  authors:
7
7
  - tbpgr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-26 00:00:00.000000000 Z
11
+ date: 2014-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -99,6 +99,7 @@ files:
99
99
  - lib/attr_enumerable.rb
100
100
  - lib/attr_enumerable/at_attr.rb
101
101
  - lib/attr_enumerable/attr_enumerable_helper.rb
102
+ - lib/attr_enumerable/compact_attr.rb
102
103
  - lib/attr_enumerable/each_attr.rb
103
104
  - lib/attr_enumerable/each_attr_with_index.rb
104
105
  - lib/attr_enumerable/reverse_attr.rb
@@ -259,6 +260,7 @@ files:
259
260
  - lib/test_toolbox/kernel.rb
260
261
  - rubocop-todo.yml
261
262
  - spec/attr_enumerable/at_attr_spec.rb
263
+ - spec/attr_enumerable/compact_attr_spec.rb
262
264
  - spec/attr_enumerable/each_attr_spec.rb
263
265
  - spec/attr_enumerable/each_attr_with_index_spec.rb
264
266
  - spec/attr_enumerable/reverse_attr_spec.rb
@@ -426,6 +428,7 @@ specification_version: 4
426
428
  summary: Utilities
427
429
  test_files:
428
430
  - spec/attr_enumerable/at_attr_spec.rb
431
+ - spec/attr_enumerable/compact_attr_spec.rb
429
432
  - spec/attr_enumerable/each_attr_spec.rb
430
433
  - spec/attr_enumerable/each_attr_with_index_spec.rb
431
434
  - spec/attr_enumerable/reverse_attr_spec.rb