tbpgr_utils 0.0.149 → 0.0.150

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 616e1df4f4e621ef26207d843e83b1384cd99dfe
4
- data.tar.gz: ec71527866a6ec6bc5cc78f7212d39de370e0bf6
3
+ metadata.gz: 3d165c8e6eae4e8aa717f9612ec4f7a4c13ea08a
4
+ data.tar.gz: a95c7052c530172f9a0b479f16458688e86164e5
5
5
  SHA512:
6
- metadata.gz: c31d0c5e28ae6f3040b664b3b6b9ef0e757d17535105819164a2466f0d6128065b5b54be719b8cb44550e67bd1e8b7a684df8f2289e8f335c865971717028f31
7
- data.tar.gz: 8e825b4c53958f9f22cf6f586dc2aeabb692a8fca0bb7e8127c23801749691d914d13b7315ba6fd86d6fcb8b29e87af26d6893f92c57d634454f00fc319a29fc
6
+ metadata.gz: 29056a1ab6cab8ae286796b2526c3ba65f0b4abf33940f3dca0dc2bbf1d0f141c8b172c0099308d72384a9c756a9d60488574f370bfaef3a0443477ba4d86551
7
+ data.tar.gz: 8858c022a42c2d39171121f843e7631d419d5f7eade87857c6dc8b4638e8ac3772b6bbfc5a7298ecf7896253fbd9e85f29b6fe11f2b6c09b70eb0e887173a3fe
data/README.md CHANGED
@@ -75,6 +75,7 @@ Or install it yourself as:
75
75
  |[AttrEnumerable.sample_attr](#attrenumerablesample_attr) |define sample_xxx. it returns Class attributes(collection)'s Array sample value |
76
76
  |[AttrEnumerable.select_attr](#attrenumerableselect_attr) |define select_xxx. it returns Class attributes(collection)'s Array select value |
77
77
  |[AttrEnumerable.shuffle_attr](#attrenumerableshuffle_attr) |define shuffle_xxx. it returns Class attributes(collection)'s Array shuffle value |
78
+ |[AttrEnumerable.slice_attr](#attrenumerableslice_attr) |define slice_xxx. it returns Class attributes(collection)'s Array slice value |
78
79
  |[AttributesHashable.to_hash](#attributeshashableto_hash) |define to_hash method for get instance_values |
79
80
  |[AttributesInitializable::ClassMethods.attr_accessor_init](#attributesinitializableclassmethodsattr_accessor_init) |generate attr_accessor + initializer |
80
81
  |[AttributesInitializable::ClassMethods.attr_reader_init](#attributesinitializableclassmethodsattr_reader_init) |generate attr_reader + initializer |
@@ -1592,6 +1593,38 @@ print persons.shuffle_name # => ['tanaka', 'suzuki'] or['suzuki', 'tanaka']
1592
1593
  print persons.shuffle_age # => [84, 103] or [103, 84]
1593
1594
  ~~~
1594
1595
 
1596
+
1597
+ [back to list](#list)
1598
+
1599
+ ### AttrEnumerable.slice_attr
1600
+ ~~~ruby
1601
+ require 'attr_enumerable'
1602
+
1603
+ class Person
1604
+ attr_reader :name, :age
1605
+ def initialize(name, age)
1606
+ @name, @age = name, age
1607
+ end
1608
+ end
1609
+
1610
+ class Persons
1611
+ attr_reader :persons
1612
+ include AttrEnumerable
1613
+ def initialize(persons = [])
1614
+ @persons = persons
1615
+ end
1616
+
1617
+ def <<(person)
1618
+ @persons << person
1619
+ end
1620
+ end
1621
+
1622
+ persons = Persons.new([Person.new("tanaka", 84), Person.new("suzuki", 33), Person.new("suzuki", 103)])
1623
+ print persons.slice_name(1) # => 'suzuki'
1624
+ print persons.slice_age(0, 2) # => [84, 33]
1625
+ print persons.slice_age(1..2) # => [33, 103]
1626
+ ~~~
1627
+
1595
1628
  [back to list](#list)
1596
1629
 
1597
1630
  ### AttributesHashable.to_hash
@@ -4296,6 +4329,7 @@ if you are Sublime Text2 user, you can use snippet for TbpgrUtils.
4296
4329
  https://github.com/tbpgr/tbpgr_utils_snippets
4297
4330
 
4298
4331
  ## History
4332
+ * version 0.0.150 : add AttrEnumerable.slice_attr
4299
4333
  * version 0.0.149 : add AttrEnumerable.shuffle_attr
4300
4334
  * version 0.0.148 : add AttrEnumerable.select_attr
4301
4335
  * version 0.0.147 : add AttrEnumerable.sample_attr
@@ -18,7 +18,8 @@ module AttrEnumerable
18
18
  { regexp: /^reduce_(.*)$/, call_method: :reduce_attr },
19
19
  { regexp: /^sample_(.*)$/, call_method: :sample_attr },
20
20
  { regexp: /^select_(.*)$/, call_method: :select_attr },
21
- { regexp: /^shuffle_(.*)$/, call_method: :shuffle_attr }
21
+ { regexp: /^shuffle_(.*)$/, call_method: :shuffle_attr },
22
+ { regexp: /^slice_(.*)$/, call_method: :slice_attr }
22
23
  ]
23
24
 
24
25
  # call attr enumerable method.
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ require 'attr_enumerable/attr_enumerable_helper'
3
+
4
+ # AttrEnumerable
5
+ module AttrEnumerable
6
+ private
7
+ def slice_attr(attribute, method_name, *args, &block)
8
+ check_argument_length(*args)
9
+ col = collection
10
+ index_or_range = args.first
11
+ length = args.size > 1 ? args[1] : nil
12
+ fail ArgumentError, "invalid attribute #{attribute}" unless include_attr?(col.first, attribute)
13
+ attrs = col.map { |e|e.send(attribute) }
14
+ length ? attrs.slice(index_or_range, length) : attrs.slice(index_or_range)
15
+ end
16
+
17
+ def check_argument_length(*args)
18
+ return if args.size > 0
19
+ fail ArgumentError, 'wrong number of arguments (0 for 1..2) (ArgumentError)'
20
+ end
21
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Tbpgr Utilities
4
4
  module TbpgrUtils
5
- VERSION = '0.0.149'
5
+ VERSION = '0.0.150'
6
6
  end
@@ -0,0 +1,108 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'attr_enumerable'
4
+
5
+ describe AttrEnumerable do
6
+ context :slice_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: :slice_name,
38
+ index_or_range: 2,
39
+ length: nil,
40
+ expected_array: ['suzuki']
41
+ },
42
+ {
43
+ case_no: 2,
44
+ case_title: 'age case',
45
+ klass: AttrEnumerablePersons.new(
46
+ [
47
+ AttrEnumerablePerson.new('tanaka', 84),
48
+ AttrEnumerablePerson.new('tanaka', 20),
49
+ AttrEnumerablePerson.new('suzuki', 20)
50
+ ]
51
+ ),
52
+ method: :slice_age,
53
+ index_or_range: 0,
54
+ length: 2,
55
+ expected_array: [84, 20]
56
+ },
57
+ {
58
+ case_no: 3,
59
+ case_title: 'name case',
60
+ klass: AttrEnumerablePersons.new(
61
+ [
62
+ AttrEnumerablePerson.new('tanaka', 84),
63
+ AttrEnumerablePerson.new('tanaka', 20),
64
+ AttrEnumerablePerson.new('suzuki', 20)
65
+ ]
66
+ ),
67
+ method: :slice_name,
68
+ index_or_range: 1..2,
69
+ length: nil,
70
+ expected_array: ['tanaka', 'suzuki']
71
+ },
72
+ ]
73
+
74
+ cases.each do |c|
75
+ it "|case_no=#{c[:case_no]}|case_title=#{c[:case_title]}" do
76
+ begin
77
+ case_before c
78
+
79
+ # -- given --
80
+ # nothing
81
+ ary = c[:klass]
82
+
83
+ # -- when --
84
+ actual =
85
+ if c[:length]
86
+ ary.send(c[:method], c[:index_or_range], c[:length])
87
+ else
88
+ ary.send(c[:method], c[:index_or_range])
89
+ end
90
+ actual = Array(actual)
91
+
92
+ # -- then --
93
+ expect(actual).to match_array(c[:expected_array])
94
+ ensure
95
+ case_after c
96
+ end
97
+ end
98
+
99
+ def case_before(c)
100
+ # implement each case before
101
+ end
102
+
103
+ def case_after(c)
104
+ # implement each case after
105
+ end
106
+ end
107
+ end
108
+ 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.149
4
+ version: 0.0.150
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-06 00:00:00.000000000 Z
11
+ date: 2014-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -113,6 +113,7 @@ files:
113
113
  - lib/attr_enumerable/sample_attr.rb
114
114
  - lib/attr_enumerable/select_attr.rb
115
115
  - lib/attr_enumerable/shuffle_attr.rb
116
+ - lib/attr_enumerable/slice_attr.rb
116
117
  - lib/attributes_hashable.rb
117
118
  - lib/attributes_initializable.rb
118
119
  - lib/end_erb.rb
@@ -284,6 +285,7 @@ files:
284
285
  - spec/attr_enumerable/sample_attr_spec.rb
285
286
  - spec/attr_enumerable/select_attr_spec.rb
286
287
  - spec/attr_enumerable/shuffle_attr_spec.rb
288
+ - spec/attr_enumerable/slice_attr_spec.rb
287
289
  - spec/attributes_hashable_spec.rb
288
290
  - spec/attributes_initializable_spec.rb
289
291
  - spec/eval_helper/attr_accessor_init_code_spec.rb
@@ -462,6 +464,7 @@ test_files:
462
464
  - spec/attr_enumerable/sample_attr_spec.rb
463
465
  - spec/attr_enumerable/select_attr_spec.rb
464
466
  - spec/attr_enumerable/shuffle_attr_spec.rb
467
+ - spec/attr_enumerable/slice_attr_spec.rb
465
468
  - spec/attributes_hashable_spec.rb
466
469
  - spec/attributes_initializable_spec.rb
467
470
  - spec/eval_helper/attr_accessor_init_code_spec.rb