church 0.0.6 → 0.0.7

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.
@@ -0,0 +1,33 @@
1
+ module Church
2
+ KEYS = -> hash { MAP[[*hash], &:first] }
3
+
4
+ VALUES = -> hash { MAP[[*hash], &:last] }
5
+
6
+ INVERT = -> hash {
7
+ ks, vs = KEYS[hash], VALUES[hash]
8
+ sz = SIZE[ks]
9
+ ret = {}
10
+ i = 0
11
+
12
+ (inverter = -> {
13
+ ret[vs[i]] = ks[i]
14
+ (i += 1) == sz ? ret : inverter[]
15
+ })[]
16
+ }
17
+
18
+ MERGE = -> a, b {
19
+ all = [*a] + [*b]
20
+ sz = SIZE[all]
21
+ ret = {}
22
+ i = 0
23
+
24
+ (merger = -> {
25
+ ret[all[i][0]] = all[i][1]
26
+ (i += 1) == sz ? ret : merger[]
27
+ })[]
28
+ }
29
+ end
30
+
31
+ include Church
32
+
33
+ p INVERT[{a: 1, b: 2, c: 3}]
@@ -1,3 +1,3 @@
1
1
  module Church
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/church.rb CHANGED
@@ -1,4 +1,5 @@
1
- require 'church/version'
2
1
  require 'church/array'
2
+ require 'church/hash'
3
3
  require 'church/io'
4
4
  require 'church/math'
5
+ require 'church/version'
data/spec/hash_spec.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ include Church
4
+
5
+ describe 'KEYS' do
6
+ it "should return the hash's keys" do
7
+ expect(KEYS[{a: 1, b: 2, c: 3}]).to eq [:a, :b, :c]
8
+ end
9
+ end
10
+
11
+ describe 'VALUES' do
12
+ it "should return the hash's values" do
13
+ expect(VALUES[{a: 1, b: 2, c: 3}]).to eq [1, 2, 3]
14
+ end
15
+ end
16
+
17
+ describe 'INVERT' do
18
+ it "should invert the hash's keys and values" do
19
+ expect(INVERT[{a: 1, b: 2, c: 3}]).to eq({1 => :a, 2 => :b, 3 => :c})
20
+ end
21
+ end
22
+
23
+ describe 'MERGE' do
24
+ it "should merge two hashes" do
25
+ expect(MERGE[{a: 1, b: 2}, {c: 3, d: 4}]).to eq({a: 1, b: 2, c: 3, d: 4})
26
+ end
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: church
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -58,10 +58,12 @@ files:
58
58
  - church.gemspec
59
59
  - lib/church.rb
60
60
  - lib/church/array.rb
61
+ - lib/church/hash.rb
61
62
  - lib/church/io.rb
62
63
  - lib/church/math.rb
63
64
  - lib/church/version.rb
64
65
  - spec/array_spec.rb
66
+ - spec/hash_spec.rb
65
67
  - spec/io_spec.rb
66
68
  - spec/math_spec.rb
67
69
  - spec/spec_helper.rb
@@ -93,6 +95,7 @@ summary: Church provides top-level constant Procs to do various and sundry kinds
93
95
  functional programming.
94
96
  test_files:
95
97
  - spec/array_spec.rb
98
+ - spec/hash_spec.rb
96
99
  - spec/io_spec.rb
97
100
  - spec/math_spec.rb
98
101
  - spec/spec_helper.rb