functional_support 0.0.6 → 0.0.7

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: a0a99393a71e9cb74719aab4fe80e375ba840c9b
4
- data.tar.gz: ec055253358caf4859274a751e6ae3e30cf904ca
3
+ metadata.gz: 140547ef87edd3b80ce133b0d8509021b7f681f7
4
+ data.tar.gz: ef99369b86653b44445ae93c03e3d4113f37798e
5
5
  SHA512:
6
- metadata.gz: 924759344b05cdf756a54c3c112715ab39ce6248b93b723a1a6d022c850e887486c7a1b6bcc991c6dbc66fe02262e972f9d6fa164dd48edd0dd7196fdd98bfe8
7
- data.tar.gz: ab175281e867eec144b5e8cfaca2c73f9b28487b59a89f917b7c0d701455561c04a3569a7e7d3521f9bca245b16db97ec913d2656f7dd29fbf924440843775d8
6
+ metadata.gz: 5d4477d492bb79cda2c64c328d0d0c0c482a9122e9b045811021a86fbdf18f4911730c7cb7bc262f9d095cb26286b2b402221ce0c847c403a965f984ff6ea96b
7
+ data.tar.gz: 83a937615e25234afebbce60b82b9c7bcbdf4ef0f3696959aa857359522592a42571b36897e5512437e4a26aa75b83e15a8a02d4a1c5835cc45e818327fec0cf
@@ -8,6 +8,34 @@ class Array
8
8
  self.take self.count - 1 unless self.count == 0
9
9
  end
10
10
 
11
+ # same as reduce, except the reduction function can have arity > 2
12
+ # with the second, third, etc. arguments being the lookahead
13
+ def reduce_with_lookahead(*parameters, &reducer)
14
+ case parameters.length
15
+ when 0
16
+ in_repeated_groups_of(reducer.arity - 1).reduce do |acc, arr|
17
+ reducer.call acc, *arr
18
+ end
19
+ when 1
20
+ init = parameters.first
21
+ in_repeated_groups_of(reducer.arity - 1).reduce(init) do |acc, arr|
22
+ reducer.call acc, *arr
23
+ end
24
+ else
25
+ raise LocalJumpError, "no block given"
26
+ end
27
+ end
28
+ alias_method :inject_with_lookahead, :reduce_with_lookahead
29
+
30
+ # Suppose n = 3, this takes something like [1,2,3,4,5]
31
+ # and splits it into something like the following:
32
+ # [[1,2,3], [2,3,4], [3,4,5]]
33
+ def in_repeated_groups_of(n=1)
34
+ return [self] if length == n
35
+ return shift(nil).in_repeated_groups_of(n) if length < n
36
+ [take(n)] + tail.in_repeated_groups_of(n)
37
+ end
38
+
11
39
  def present_unshift(element=nil)
12
40
  unshift element if element.present?
13
41
  self
@@ -1,3 +1,3 @@
1
1
  module FunctionalSupport
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: functional_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-29 00:00:00.000000000 Z
11
+ date: 2014-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler