tbpgr_utils 0.0.144 → 0.0.145
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.
- checksums.yaml +4 -4
- data/README.md +32 -0
- data/lib/attr_enumerable/attr_enumerable_helper.rb +2 -1
- data/lib/attr_enumerable/map_attr.rb +15 -0
- data/lib/tbpgr_utils/version.rb +1 -1
- data/spec/attr_enumerable/map_attr_spec.rb +93 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 01e73372a4d221e097a77fc4d92791b6cc30acd8
|
4
|
+
data.tar.gz: e7e16a2c4a9eeca587a0670754500f70eef7a63a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98cd83a93c3cff1d5a7987b98de0341668e931ab35b902819c964fd466b41d4d1cd66f4fed9204696e32876542bbd151eadec3e48f2693ca14f790e7c5ac05cf
|
7
|
+
data.tar.gz: c2ee42b6e795f343b183b3725d896f1ef1cf070d4fa6971fb0bf2f0ab91b61eaf2746ec1b06ea792c0a25aafc3d5718ee0dc1744de9a1bd2db74b5397d8325a9
|
data/README.md
CHANGED
@@ -70,6 +70,7 @@ Or install it yourself as:
|
|
70
70
|
|[AttrEnumerable.include_attr?](#attrenumerableinclude_attr) |define include_xxx?. it returns Class attributes(collection)'s attribute include value |
|
71
71
|
|[AttrEnumerable.last_attr](#attrenumerablelast_attr) |define last_xxx. it returns Class attributes(collection) last N elementt |
|
72
72
|
|[AttrEnumerable.reverse_attr](#attrenumerablereverse_attr) |define reverse_xxx. it returns Class attributes(collection)'s reverse Array |
|
73
|
+
|[AttrEnumerable.map_attr](#attrenumerablemap_attr) |define map_xxx. it returns Class attributes(collection)'s Array map each value |
|
73
74
|
|[AttributesHashable.to_hash](#attributeshashableto_hash) |define to_hash method for get instance_values |
|
74
75
|
|[AttributesInitializable::ClassMethods.attr_accessor_init](#attributesinitializableclassmethodsattr_accessor_init) |generate attr_accessor + initializer |
|
75
76
|
|[AttributesInitializable::ClassMethods.attr_reader_init](#attributesinitializableclassmethodsattr_reader_init) |generate attr_reader + initializer |
|
@@ -1438,6 +1439,36 @@ print persons.reverse_age # => [103, 84]
|
|
1438
1439
|
|
1439
1440
|
[back to list](#list)
|
1440
1441
|
|
1442
|
+
### AttrEnumerable.map_attr
|
1443
|
+
~~~ruby
|
1444
|
+
require 'attr_enumerable'
|
1445
|
+
|
1446
|
+
class Person
|
1447
|
+
attr_reader :name, :age
|
1448
|
+
def initialize(name, age)
|
1449
|
+
@name, @age = name, age
|
1450
|
+
end
|
1451
|
+
end
|
1452
|
+
|
1453
|
+
class Persons
|
1454
|
+
attr_reader :persons
|
1455
|
+
include AttrEnumerable
|
1456
|
+
def initialize(persons = [])
|
1457
|
+
@persons = persons
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
def <<(person)
|
1461
|
+
@persons << person
|
1462
|
+
end
|
1463
|
+
end
|
1464
|
+
|
1465
|
+
persons = Persons.new([Person.new("tanaka", 84), Person.new("suzuki", 103)])
|
1466
|
+
print persons.map_name { |v|v.upcase } # => ['TANAKA', 'SUZUKI']
|
1467
|
+
print persons.map_age { |v|v += 1 } # => [85, 104]
|
1468
|
+
~~~
|
1469
|
+
|
1470
|
+
[back to list](#list)
|
1471
|
+
|
1441
1472
|
### AttributesHashable.to_hash
|
1442
1473
|
~~~ruby
|
1443
1474
|
require 'attributes_initializable'
|
@@ -4140,6 +4171,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
|
|
4140
4171
|
https://github.com/tbpgr/tbpgr_utils_snippets
|
4141
4172
|
|
4142
4173
|
## History
|
4174
|
+
* version 0.0.145 : add AttrEnumerable.map_attr
|
4143
4175
|
* version 0.0.144 : add AttrEnumerable.last_attr
|
4144
4176
|
* version 0.0.143 : add AttrEnumerable.include_attr?
|
4145
4177
|
* version 0.0.142 : add AttrEnumerable.first_attr
|
@@ -13,7 +13,8 @@ module AttrEnumerable
|
|
13
13
|
{ regexp: /^delete_(.*)$/, call_method: :delete_attr },
|
14
14
|
{ regexp: /^first_(.*)$/, call_method: :first_attr },
|
15
15
|
{ regexp: /^include_(.*)\?$/, call_method: :include_attribute? },
|
16
|
-
{ regexp: /^last_(.*)$/, call_method: :last_attr }
|
16
|
+
{ regexp: /^last_(.*)$/, call_method: :last_attr },
|
17
|
+
{ regexp: /^map_(.*)$/, call_method: :map_attr }
|
17
18
|
]
|
18
19
|
|
19
20
|
# call attr enumerable method.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'attr_enumerable/attr_enumerable_helper'
|
3
|
+
|
4
|
+
# AttrEnumerable
|
5
|
+
module AttrEnumerable
|
6
|
+
private
|
7
|
+
def map_attr(attribute, method_name, *args, &block)
|
8
|
+
col = collection
|
9
|
+
return [] if col.empty?
|
10
|
+
first_size = args.size == 0 ? nil : Integer(args.first)
|
11
|
+
fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute)
|
12
|
+
attrs = col.map { |v|v.send(attribute) }
|
13
|
+
attrs.reduce([]) { |r, v|r << yield(v); r }
|
14
|
+
end
|
15
|
+
end
|
data/lib/tbpgr_utils/version.rb
CHANGED
@@ -0,0 +1,93 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'attr_enumerable'
|
4
|
+
|
5
|
+
describe AttrEnumerable do
|
6
|
+
context :map_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('tanaka', 20),
|
34
|
+
AttrEnumerablePerson.new('suzuki', 20)
|
35
|
+
]
|
36
|
+
),
|
37
|
+
method: :map_name,
|
38
|
+
block: lambda { |x|x.upcase },
|
39
|
+
expected: ['TANAKA' , 'TANAKA', 'SUZUKI'],
|
40
|
+
},
|
41
|
+
{
|
42
|
+
case_no: 2,
|
43
|
+
case_title: 'age case',
|
44
|
+
klass: AttrEnumerablePersons.new(
|
45
|
+
[
|
46
|
+
AttrEnumerablePerson.new('tanaka', 84),
|
47
|
+
AttrEnumerablePerson.new('tanaka', 20),
|
48
|
+
AttrEnumerablePerson.new('suzuki', 20)
|
49
|
+
]
|
50
|
+
),
|
51
|
+
method: :map_age,
|
52
|
+
block: lambda { |x|x += 1 },
|
53
|
+
expected: [85, 21, 21],
|
54
|
+
},
|
55
|
+
{
|
56
|
+
case_no: 3,
|
57
|
+
case_title: 'empty case',
|
58
|
+
klass: AttrEnumerablePersons.new([]),
|
59
|
+
method: :map_name,
|
60
|
+
block: lambda { |x|x += 1 },
|
61
|
+
expected: [],
|
62
|
+
}
|
63
|
+
]
|
64
|
+
|
65
|
+
cases.each do |c|
|
66
|
+
it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
|
67
|
+
begin
|
68
|
+
case_before c
|
69
|
+
|
70
|
+
# -- given --
|
71
|
+
# nothing
|
72
|
+
ary = c[:klass]
|
73
|
+
|
74
|
+
# -- when --
|
75
|
+
actual = ary.send(c[:method]) { |x|c[:block].call(x) }
|
76
|
+
|
77
|
+
# -- then --
|
78
|
+
expect(Array(actual)).to match_array(c[:expected])
|
79
|
+
ensure
|
80
|
+
case_after c
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def case_before(c)
|
85
|
+
# implement each case before
|
86
|
+
end
|
87
|
+
|
88
|
+
def case_after(c)
|
89
|
+
# implement each case after
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
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.
|
4
|
+
version: 0.0.145
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tbpgr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/attr_enumerable/first_attr.rb
|
108
108
|
- lib/attr_enumerable/include_attr.rb
|
109
109
|
- lib/attr_enumerable/last_attr.rb
|
110
|
+
- lib/attr_enumerable/map_attr.rb
|
110
111
|
- lib/attr_enumerable/reverse_attr.rb
|
111
112
|
- lib/attributes_hashable.rb
|
112
113
|
- lib/attributes_initializable.rb
|
@@ -273,6 +274,7 @@ files:
|
|
273
274
|
- spec/attr_enumerable/first_attr_spec.rb
|
274
275
|
- spec/attr_enumerable/include_attr_spec.rb
|
275
276
|
- spec/attr_enumerable/last_attr_spec.rb
|
277
|
+
- spec/attr_enumerable/map_attr_spec.rb
|
276
278
|
- spec/attr_enumerable/reverse_attr_spec.rb
|
277
279
|
- spec/attributes_hashable_spec.rb
|
278
280
|
- spec/attributes_initializable_spec.rb
|
@@ -446,6 +448,7 @@ test_files:
|
|
446
448
|
- spec/attr_enumerable/first_attr_spec.rb
|
447
449
|
- spec/attr_enumerable/include_attr_spec.rb
|
448
450
|
- spec/attr_enumerable/last_attr_spec.rb
|
451
|
+
- spec/attr_enumerable/map_attr_spec.rb
|
449
452
|
- spec/attr_enumerable/reverse_attr_spec.rb
|
450
453
|
- spec/attributes_hashable_spec.rb
|
451
454
|
- spec/attributes_initializable_spec.rb
|