obfusk 0.1.2 → 0.1.3
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 +47 -3
- data/Rakefile +6 -1
- data/lib/obfusk.rb +1 -0
- data/lib/obfusk/data.rb +85 -0
- data/lib/obfusk/lazy.rb +3 -1
- data/lib/obfusk/version.rb +1 -1
- data/obfusk.gemspec +1 -0
- metadata +16 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f4396e13f93674f41f52a609ececa143d3e23d7
|
4
|
+
data.tar.gz: f4ecb55606714316e9cc945a275bf03a764ba2e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 167666500dd24a71c3191c0f9f5564c532e89833426beb37a6d27d2d20b78e1a0d942c88b41a172ebfc896d5cb9d3288f666adeee8b6ab02491ae885b80d22c0
|
7
|
+
data.tar.gz: 295e1599275dfef6e1b9e32957e58584ff5b27a28b8a0054824acbf74c8dd373f682710fd3d8cbfa45d2d1a24e10ee295726c57826fda1310249ab16e9173ce5
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
Date : 2014-06-18
|
6
6
|
|
7
7
|
Copyright : Copyright (C) 2014 Felix C. Stegerman
|
8
|
-
Version : v0.1.
|
8
|
+
Version : v0.1.3
|
9
9
|
|
10
10
|
[]: }}}1
|
11
11
|
|
@@ -16,6 +16,7 @@
|
|
16
16
|
obfusk.rb - functional programming library for ruby
|
17
17
|
|
18
18
|
## Examples
|
19
|
+
|
19
20
|
[]: {{{1
|
20
21
|
|
21
22
|
```ruby
|
@@ -37,6 +38,10 @@ x.match Bar: -> (_) { "it's a bar!" },
|
|
37
38
|
# => "it's a bar!"
|
38
39
|
```
|
39
40
|
|
41
|
+
[]: }}}1
|
42
|
+
|
43
|
+
[]: {{{1
|
44
|
+
|
40
45
|
```ruby
|
41
46
|
require 'obfusk/atom'
|
42
47
|
|
@@ -46,6 +51,32 @@ x._ # => 42
|
|
46
51
|
x._ # => 53
|
47
52
|
```
|
48
53
|
|
54
|
+
[]: }}}1
|
55
|
+
|
56
|
+
[]: {{{1
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
require 'obfusk/data'
|
60
|
+
|
61
|
+
Obfusk.merge([1,2,3], 1 => 99)
|
62
|
+
# => [1,99,3]
|
63
|
+
|
64
|
+
x = { x: { y: 0 }, z: [1,2,3] }
|
65
|
+
|
66
|
+
Obfusk.get_in x, :x, :y
|
67
|
+
# => 0
|
68
|
+
|
69
|
+
Obfusk.modify_in(x, :x, :y) { |v| v + 1 }
|
70
|
+
# => { x: { y: 1 }, z: [1,2,3] }
|
71
|
+
|
72
|
+
Obfusk.set_in(x, :z, 1, 99)
|
73
|
+
# => { x: { y: 0 }, z: [1,99,3] }
|
74
|
+
```
|
75
|
+
|
76
|
+
[]: }}}1
|
77
|
+
|
78
|
+
[]: {{{1
|
79
|
+
|
49
80
|
```ruby
|
50
81
|
require 'obfusk/lazy'
|
51
82
|
|
@@ -60,6 +91,10 @@ z._ # => 42 (.new and .value not run until now)
|
|
60
91
|
Obfusk.eager(lazy_or_not) # => value
|
61
92
|
```
|
62
93
|
|
94
|
+
[]: }}}1
|
95
|
+
|
96
|
+
[]: {{{1
|
97
|
+
|
63
98
|
```ruby
|
64
99
|
require 'obfusk/list'
|
65
100
|
|
@@ -75,6 +110,10 @@ fibs.map { |x| x*x } .take(10).to_a
|
|
75
110
|
# => [0, 1, 1, 4, 9, 25, 64, 169, 441, 1156]
|
76
111
|
```
|
77
112
|
|
113
|
+
[]: }}}1
|
114
|
+
|
115
|
+
[]: {{{1
|
116
|
+
|
78
117
|
```ruby
|
79
118
|
require 'obfusk/monad'
|
80
119
|
|
@@ -94,6 +133,10 @@ g = -> y { '...' }
|
|
94
133
|
Foo.new('...').pipeline f, g
|
95
134
|
```
|
96
135
|
|
136
|
+
[]: }}}1
|
137
|
+
|
138
|
+
[]: {{{1
|
139
|
+
|
97
140
|
```ruby
|
98
141
|
require 'obfusk/monads'
|
99
142
|
ms = Obfusk::Monads
|
@@ -108,14 +151,15 @@ ms.Left "oops"
|
|
108
151
|
ms.Right 37
|
109
152
|
```
|
110
153
|
|
111
|
-
...
|
112
|
-
|
113
154
|
[]: }}}1
|
114
155
|
|
156
|
+
...
|
157
|
+
|
115
158
|
## Specs & Docs
|
116
159
|
|
117
160
|
```bash
|
118
161
|
$ rake spec
|
162
|
+
$ rake coverage
|
119
163
|
$ rake docs
|
120
164
|
```
|
121
165
|
|
data/Rakefile
CHANGED
@@ -13,6 +13,11 @@ task 'spec:less' do
|
|
13
13
|
sh 'rspec -cfd --tty | less -R'
|
14
14
|
end
|
15
15
|
|
16
|
+
desc 'Run specs w/ coverage'
|
17
|
+
task :coverage do
|
18
|
+
ENV['COVERAGE'] = 'yes'; Rake::Task['spec'].execute
|
19
|
+
end
|
20
|
+
|
16
21
|
desc 'Check for warnings'
|
17
22
|
task :warn do
|
18
23
|
sh 'ruby -w -I lib -r obfusk -e ""' # TODO
|
@@ -41,7 +46,7 @@ end
|
|
41
46
|
|
42
47
|
desc 'Cleanup'
|
43
48
|
task :clean do
|
44
|
-
sh 'rm -rf .yardoc/ doc/ *.gem'
|
49
|
+
sh 'rm -rf .yardoc/ coverage/ doc/ *.gem'
|
45
50
|
end
|
46
51
|
|
47
52
|
desc 'Build SNAPSHOT gem'
|
data/lib/obfusk.rb
CHANGED
data/lib/obfusk/data.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# -- ; {{{1
|
2
|
+
#
|
3
|
+
# File : obfusk/data.rb
|
4
|
+
# Maintainer : Felix C. Stegerman <flx@obfusk.net>
|
5
|
+
# Date : 2014-06-18
|
6
|
+
#
|
7
|
+
# Copyright : Copyright (C) 2014 Felix C. Stegerman
|
8
|
+
# Licence : LGPLv3+
|
9
|
+
#
|
10
|
+
# -- ; }}}1
|
11
|
+
|
12
|
+
nil
|
13
|
+
|
14
|
+
class Array
|
15
|
+
# merge array; see Obfusk.merge
|
16
|
+
def __obfusk_merge__(h = {})
|
17
|
+
dup.__obfusk_merge__! h
|
18
|
+
end
|
19
|
+
|
20
|
+
# merge! array; see Obfusk.merge
|
21
|
+
def __obfusk_merge__!(h = {})
|
22
|
+
h.each_pair { |k,v| self[k] = v }; self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module Obfusk
|
27
|
+
# -- data structures --
|
28
|
+
|
29
|
+
# merge anything that responds to `.__obfusk_merge__` or `.merge`
|
30
|
+
def self.merge(x, h = {})
|
31
|
+
x.respond_to?(:__obfusk_merge__) ? x.__obfusk_merge__(h) : x.merge(h)
|
32
|
+
end
|
33
|
+
|
34
|
+
# merge anything that responds to `.__obfusk_merge__!` or `.merge!`
|
35
|
+
def self.merge!(x, h = {})
|
36
|
+
x.respond_to?(:__obfusk_merge__!) ? x.__obfusk_merge__!(h) : x.merge!(h)
|
37
|
+
end
|
38
|
+
|
39
|
+
# -- nested data structures --
|
40
|
+
|
41
|
+
# get nested key in nested datastructure
|
42
|
+
def self.get_in(o, *ks, &b)
|
43
|
+
ks.each { |k| o = o.fetch(k) { return b ? b[] : nil } }; o
|
44
|
+
end
|
45
|
+
|
46
|
+
# swap value for nested key in nested datastructure; autovivifies
|
47
|
+
# missing keys as hashes
|
48
|
+
# @return a new datastructure
|
49
|
+
def self.modify_in(o, k, *ks, &b)
|
50
|
+
ks_ = [k] + ks; os = nested_objects o, *ks_; o_ = b[os.pop]
|
51
|
+
ks_.reverse.each { |k| o_ = merge(os.pop, k => o_) }; o_
|
52
|
+
end
|
53
|
+
|
54
|
+
# swap value for nested key in nested datastructure; autovivifies
|
55
|
+
# missing keys as hashes
|
56
|
+
# @return modified datastructure
|
57
|
+
def self.modify_in!(o, k, *ks, &b)
|
58
|
+
ks_ = [k] + ks; os = nested_objects o, *ks_; o_ = b[os.pop]
|
59
|
+
ks_.reverse.each { |k| o_ = merge!(os.pop, k => o_) }; o_
|
60
|
+
end
|
61
|
+
|
62
|
+
# get stack of objects for nested key in nested datastructure;
|
63
|
+
# autovivifies missing keys as hashes
|
64
|
+
def self.nested_objects(o, *ks)
|
65
|
+
[o] + ks.map { |k| o = o.fetch(k) { {} } }
|
66
|
+
end
|
67
|
+
|
68
|
+
# set value for nested key in nested datastructure
|
69
|
+
# @return a new datastructure
|
70
|
+
def self.set_in(o, *ks, v)
|
71
|
+
modify_in(o, *ks) { |_| v }
|
72
|
+
end
|
73
|
+
|
74
|
+
# set value for nested key in nested datastructure
|
75
|
+
# @return modified datastructure
|
76
|
+
def self.set_in!(o, *ks, v)
|
77
|
+
modify_in!(o, *ks) { |_| v }
|
78
|
+
end
|
79
|
+
|
80
|
+
# -- ... --
|
81
|
+
|
82
|
+
# ...
|
83
|
+
end
|
84
|
+
|
85
|
+
# vim: set tw=70 sw=2 sts=2 et fdm=marker :
|
data/lib/obfusk/lazy.rb
CHANGED
@@ -2,13 +2,15 @@
|
|
2
2
|
#
|
3
3
|
# File : obfusk/lazy.rb
|
4
4
|
# Maintainer : Felix C. Stegerman <flx@obfusk.net>
|
5
|
-
# Date : 2014-06-
|
5
|
+
# Date : 2014-06-18
|
6
6
|
#
|
7
7
|
# Copyright : Copyright (C) 2014 Felix C. Stegerman
|
8
8
|
# Licence : LGPLv3+
|
9
9
|
#
|
10
10
|
# -- ; }}}1
|
11
11
|
|
12
|
+
nil
|
13
|
+
|
12
14
|
module Obfusk
|
13
15
|
# lazy evaluation (thunk)
|
14
16
|
def self.lazy(x = nil, &b)
|
data/lib/obfusk/version.rb
CHANGED
data/obfusk.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: obfusk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix C. Stegerman
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.7.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.7.1
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: yard
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,7 @@ files:
|
|
66
80
|
- lib/obfusk.rb
|
67
81
|
- lib/obfusk/adt.rb
|
68
82
|
- lib/obfusk/atom.rb
|
83
|
+
- lib/obfusk/data.rb
|
69
84
|
- lib/obfusk/lazy.rb
|
70
85
|
- lib/obfusk/list.rb
|
71
86
|
- lib/obfusk/monad.rb
|