necklace 0.0.1 → 0.1.1

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: 55f8bb4fe12f5436ceed69e294e00383353c72e4
4
- data.tar.gz: 30c503d917f93039cbd2cfdefed3209c10163811
3
+ metadata.gz: 42d78b275452d45057290c0bb525c304e46428b7
4
+ data.tar.gz: 1388c97707c10185cc6bd724bf461a00ef9e44f9
5
5
  SHA512:
6
- metadata.gz: cb43fb6ab10775f0003e57910859615fa7d7e62b1075ac39f939b63d88cfcc75b7608197cc02dbe3291e2da57bc21d5a1f6e142cdcbe37e4d9bb72bc1e8b9e15
7
- data.tar.gz: d38e77087e6ead1b1257cd0579e8f0dc8666ee73afdd4fd36f7a2ddff2210917dce1ac35c17b35ccd751417a26798059de2c700f86b924c2c06db3ff87a6999c
6
+ metadata.gz: 09063d5fcad8a4d3095f1735a5c5777ba4a5a8ed4faf87ae65d3f532b250969a690c6f20cd2e4bd5ac2b5cd0d1a87bf2894cd44a88cebc16fd5e70cc9066fefa
7
+ data.tar.gz: 5a19b9271081505502783c4aa90d5afb25f04e3ef8f08768a8c7c612281156417540ec74d9b2b9b527f33d592b6cf10bce58d98b279de67b0ad62d675cc0e9fa
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- necklace (0.0.0)
4
+ necklace (0.0.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -96,6 +96,42 @@ through([1, 3, 5, 7, 9],
96
96
  )
97
97
  ```
98
98
 
99
+ For methods that have multiple arguments, both a `through_first` and
100
+ `through_last` method are provided. These thread the enumerable as the first or
101
+ last argument of the method calls respectively. Methods with arguments in
102
+ addition to the enumerable have the method and it's additional arguments
103
+ packaged in an array:
104
+
105
+ ```ruby
106
+ through_first([1, 3, 5, 7, 9],
107
+ [[:add_to_each, 3]
108
+ :double
109
+ ]
110
+ )
111
+ ```
112
+
113
+ will call
114
+
115
+ ```ruby
116
+ add_to_each([1, 3, 5, 7, 9], 3)
117
+ ```
118
+
119
+ and
120
+
121
+ ```ruby
122
+ through_last([1, 3, 5, 7, 9],
123
+ [[:add_to_each, 3]
124
+ :double
125
+ ]
126
+ )
127
+ ```
128
+
129
+ will call
130
+
131
+ ```ruby
132
+ add_to_each(3, [1, 3, 5, 7, 9])
133
+ ```
134
+
99
135
  ## License
100
136
  ### MIT
101
137
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.1
@@ -1,7 +1,25 @@
1
1
  module Necklace
2
+ ARG_INSERTION_ORDER = { first: 1, last: -1 }
3
+
2
4
  def through(enumerable, methods)
5
+ through_last(enumerable, methods)
6
+ end
7
+
8
+ def through_first(enumerable, methods)
3
9
  methods.reduce(enumerable) do |result, method|
4
- send(method, result)
10
+ _call(method, result, :first)
5
11
  end
6
12
  end
13
+
14
+ def through_last(enumerable, methods)
15
+ methods.reduce(enumerable) do |result, method|
16
+ _call(method, result, :last)
17
+ end
18
+ end
19
+
20
+ def _call(method, result, order)
21
+ method = [method].flatten
22
+ args = method.insert(ARG_INSERTION_ORDER[order], result)
23
+ send(*args)
24
+ end
7
25
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'necklace'
3
- s.version = '0.0.1'
3
+ s.version = '0.1.1'
4
4
  s.date = '2010-04-28'
5
5
  s.summary = "Clojures -> macro for ruby"
6
6
  s.description = "Implements Clojures threading macros for Ruby Enumerable methods"
@@ -15,8 +15,8 @@ Gem::Specification.new do |s|
15
15
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
16
16
  s.require_paths = ['lib']
17
17
 
18
- s.add_development_dependency('rake')
19
- s.add_development_dependency('rspec')
20
- s.add_development_dependency('simplecov')
21
- s.add_development_dependency('pry')
18
+ s.add_development_dependency('rake', '~> 10.4')
19
+ s.add_development_dependency('rspec', '~> 3.2')
20
+ s.add_development_dependency('simplecov', '~> 0.9')
21
+ s.add_development_dependency('pry', '~> 0.10')
22
22
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'threading enumerable as first argument through methods with multiple arguments' do
4
+ it 'puts the enumerable first in the argument list of a method that takes multiple arguments' do
5
+ class Test
6
+ include Necklace
7
+
8
+ def add_to_each(numbers, number)
9
+ numbers.map { |n| n + number }
10
+ end
11
+
12
+ def test_add_to_each
13
+ through_first([1, 3, 5, 7, 9],
14
+ [[:add_to_each, 3]]
15
+ )
16
+ end
17
+ end
18
+
19
+ test = Test.new
20
+
21
+ expect(test.test_add_to_each).to eq([4, 6, 8, 10, 12])
22
+ end
23
+
24
+ it 'accepts a mix of methods which take multiple arguments and methods which take only one' do
25
+ class Test
26
+ include Necklace
27
+
28
+ def add_to_each(numbers, number)
29
+ numbers.map { |n| n + number }
30
+ end
31
+
32
+ def double(numbers)
33
+ numbers.map { |n| n * 2 }
34
+ end
35
+
36
+ def test_add_to_each_double
37
+ through_first([1, 3, 5, 7, 9],
38
+ [[:add_to_each, 3],
39
+ :double
40
+ ]
41
+ )
42
+ end
43
+ end
44
+
45
+ test = Test.new
46
+
47
+ expect(test.test_add_to_each_double).to eq([8, 12, 16, 20, 24])
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Threading enumerable as the last argument through a function that takes multiple arguments' do
4
+ it 'uses the enumerable as the last argument of a method that takes multiple arguments' do
5
+ class Test
6
+ include Necklace
7
+
8
+ def add_to_each(number, numbers)
9
+ numbers.map { |n| n + number }
10
+ end
11
+
12
+ def test_add_to_each
13
+ through_last([1, 3, 5, 7, 9],
14
+ [[:add_to_each, 3]]
15
+ )
16
+ end
17
+ end
18
+
19
+ test = Test.new
20
+
21
+ expect(test.test_add_to_each).to eq([4, 6, 8, 10, 12])
22
+ end
23
+
24
+ it 'mixes methods that require multiple arguments with those that take only one' do
25
+ class Test
26
+ include Necklace
27
+
28
+ def add_to_each(number, numbers)
29
+ numbers.map { |n| n + number }
30
+ end
31
+
32
+ def double(numbers)
33
+ numbers.map { |n| n * 2 }
34
+ end
35
+
36
+ def test_double_add_to_each
37
+ through_last([1, 3, 5, 7, 9],
38
+ [[:add_to_each, 3],
39
+ :double
40
+ ]
41
+ )
42
+ end
43
+ end
44
+
45
+ test = Test.new
46
+
47
+ expect(test.test_double_add_to_each).to eq([8, 12, 16, 20, 24])
48
+ end
49
+ end
@@ -12,7 +12,7 @@ describe 'Threading enumerable as argument' do
12
12
  def test_increment
13
13
  through([1, 3, 5, 7, 9],
14
14
  [:increment]
15
- )
15
+ )
16
16
  end
17
17
  end
18
18
 
@@ -37,7 +37,7 @@ describe 'Threading enumerable as argument' do
37
37
  [:increment,
38
38
  :double
39
39
  ]
40
- )
40
+ )
41
41
  end
42
42
 
43
43
  def test_double_increment
@@ -54,4 +54,30 @@ describe 'Threading enumerable as argument' do
54
54
  expect(test.test_increment_double).to eq([4, 8, 12, 16, 20])
55
55
  expect(test.test_double_increment).to eq([3, 7, 11, 15, 19])
56
56
  end
57
+
58
+ it 'handles data that has been reduced from an enumerable to a value' do
59
+ class Test
60
+ include Necklace
61
+
62
+ def sum(numbers)
63
+ numbers.reduce(&:+)
64
+ end
65
+
66
+ def double(number)
67
+ number * 2
68
+ end
69
+
70
+ def test_sum_double
71
+ through([1, 2, 3, 4, 5],
72
+ [:sum,
73
+ :double
74
+ ]
75
+ )
76
+ end
77
+ end
78
+
79
+ test = Test.new
80
+
81
+ expect(test.test_sum_double).to eq 30
82
+ end
57
83
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: necklace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stuart Terrett
@@ -14,58 +14,58 @@ dependencies:
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '10.4'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '10.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '3.2'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '3.2'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: simplecov
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '0.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '0.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.10'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '0.10'
69
69
  description: Implements Clojures threading macros for Ruby Enumerable methods
70
70
  email: shterrett@gmail.com
71
71
  executables: []
@@ -81,7 +81,9 @@ files:
81
81
  - lib/necklace.rb
82
82
  - necklace.gemspec
83
83
  - spec/spec_helper.rb
84
- - spec/threading_arguments_spec.rb
84
+ - spec/through_first_spec.rb
85
+ - spec/through_last_spec.rb
86
+ - spec/through_spec.rb
85
87
  homepage: http://github.com/shterrett/necklace
86
88
  licenses:
87
89
  - MIT
@@ -108,4 +110,6 @@ specification_version: 4
108
110
  summary: Clojures -> macro for ruby
109
111
  test_files:
110
112
  - spec/spec_helper.rb
111
- - spec/threading_arguments_spec.rb
113
+ - spec/through_first_spec.rb
114
+ - spec/through_last_spec.rb
115
+ - spec/through_spec.rb