ruby-lambdas 0.4.1 → 0.5.0
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/Gemfile.lock +1 -1
- data/README.md +15 -0
- data/examples/strict_mode/01.rb +35 -0
- data/lib/ruby/lambdas/{import.rb → core/import.rb} +0 -0
- data/lib/ruby/lambdas/core/strict_mode/disable.rb +19 -0
- data/lib/ruby/lambdas/core/strict_mode/enable.rb +17 -0
- data/lib/ruby/lambdas/numerics.rb +2 -1
- data/lib/ruby/lambdas/numerics/to_export.rb +8 -8
- data/lib/ruby/lambdas/objects.rb +1 -1
- data/lib/ruby/lambdas/strict-mode.rb +1 -0
- data/lib/ruby/lambdas/strings.rb +2 -1
- data/lib/ruby/lambdas/strings/to_export.rb +10 -8
- data/lib/ruby/lambdas/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 771d6089b5f69e89e34b7596edbdf925fa5e2b4648d81da1e3b4bf72ff28f477
|
4
|
+
data.tar.gz: dfdf5062b4bdbdab2dccfa0004b503917891cb07440a6e0c8a51320d4e58749a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b97b8b83d86b626418e87b3aaa6b8a696c2e3b3e2ddc6436ef80b9c1e927475ca2383e00097d874cb51dc2616341cbdb98da36c3073ac7ade707ab041ddd2e25
|
7
|
+
data.tar.gz: beb380a94fe2a5a937227b8f7231735000b95f44f4353512cba4246e4df8cd5adf7faf371910bc01ab3acb727e9e026d910385891d81ac374f7d20474eb85681
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -122,6 +122,21 @@ Slugify.(1.0) # => "1.0"
|
|
122
122
|
Slugify.(' I WILL be a url slug ') # => "i-will-be-a-url-slug"
|
123
123
|
```
|
124
124
|
|
125
|
+
### Strict mode
|
126
|
+
|
127
|
+
By default, all functions believe in their given inputs data types. To change this behavior, you can enable the strict mode (data type checking) via `require "ruby/lambdas/strict-mode"`. e.g:
|
128
|
+
|
129
|
+
```ruby
|
130
|
+
p ["2", "4"].map(&Numerics + "1") # => ["12", "14"]
|
131
|
+
|
132
|
+
require "ruby/lambdas/strict-mode"
|
133
|
+
|
134
|
+
p ["2", "4"].map(&Numerics + "1") # => TypeError ("1" must be Numeric)
|
135
|
+
p ["2", "4"].map(&Numerics + 1) # => TypeError ("2" must be Numeric)
|
136
|
+
p [2, "4"].map(&Numerics + 1) # => TypeError ("4" must be Numeric)
|
137
|
+
p [2, 4].map(&Numerics + 1) # => [3, 5]
|
138
|
+
```
|
139
|
+
|
125
140
|
### Do you like it?
|
126
141
|
|
127
142
|
So, look in [examples folder](https://github.com/serradura/ruby-lambdas/tree/master/examples) to see more ideas and benchmarks.
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/inline'
|
4
|
+
|
5
|
+
gemfile do
|
6
|
+
source 'https://rubygems.org'
|
7
|
+
|
8
|
+
gem 'ruby-lambdas', require: 'ruby/lambdas'
|
9
|
+
end
|
10
|
+
|
11
|
+
############
|
12
|
+
# Examples #
|
13
|
+
############
|
14
|
+
|
15
|
+
p ["2", "4", "8"].map(&Numerics + "2") # => ["22", "24", "28"]
|
16
|
+
|
17
|
+
# ---
|
18
|
+
|
19
|
+
require "ruby/lambdas/strict-mode"
|
20
|
+
|
21
|
+
p [2, 4, 8].map(&Numerics + 2) # => [4, 6, 10]
|
22
|
+
|
23
|
+
begin
|
24
|
+
p ["2", "4", "8"].map(&Numerics + "2")
|
25
|
+
rescue TypeError => e
|
26
|
+
p e # => #<TypeError: "2" must be Numeric>
|
27
|
+
end
|
28
|
+
|
29
|
+
p ["2 ", " 4", "8 "].map(&Strings::Strip) # => ["2", "4", "8"]
|
30
|
+
|
31
|
+
begin
|
32
|
+
p [2, 4, 8].map(&Strings::Strip)
|
33
|
+
rescue TypeError => e
|
34
|
+
p e # => #<TypeError: 2 must be a String>
|
35
|
+
end
|
File without changes
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# These Kernel methods can be overridden by
|
3
|
+
# new ones if the strict mode was enabled. e.g:
|
4
|
+
#
|
5
|
+
# require "ruby/lambdas/strict-mode"
|
6
|
+
#
|
7
|
+
[:String!, :Numeric!].each do |name|
|
8
|
+
Kernel.remove_method(name) if Kernel.respond_to?(name)
|
9
|
+
end
|
10
|
+
|
11
|
+
module Kernel
|
12
|
+
def String!(data)
|
13
|
+
data
|
14
|
+
end
|
15
|
+
|
16
|
+
def Numeric!(data)
|
17
|
+
data
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
[:String!, :Numeric!].each do |name|
|
2
|
+
Kernel.remove_method(name) if Kernel.respond_to?(name)
|
3
|
+
end
|
4
|
+
|
5
|
+
module Kernel
|
6
|
+
def String!(data)
|
7
|
+
return data if data.is_a?(::String)
|
8
|
+
|
9
|
+
raise TypeError, "#{data.inspect} must be a String"
|
10
|
+
end
|
11
|
+
|
12
|
+
def Numeric!(data)
|
13
|
+
return data if data.is_a?(::Numeric)
|
14
|
+
|
15
|
+
raise TypeError, "#{data.inspect} must be Numeric"
|
16
|
+
end
|
17
|
+
end
|
@@ -4,24 +4,24 @@ module RubyLambdas
|
|
4
4
|
#
|
5
5
|
# Operators
|
6
6
|
#
|
7
|
-
Add = -> (a, b) { a + b }
|
7
|
+
Add = -> (a, b) { Numeric!(a) + Numeric!(b) }
|
8
8
|
|
9
|
-
Divide = -> (b, a) { a / b }
|
9
|
+
Divide = -> (b, a) { Numeric!(a) / Numeric!(b) }
|
10
10
|
|
11
|
-
Subtract = -> (b, a) { a - b }
|
11
|
+
Subtract = -> (b, a) { Numeric!(a) - Numeric!(b) }
|
12
12
|
|
13
|
-
Multiply = -> (a, b) { a * b }
|
13
|
+
Multiply = -> (a, b) { Numeric!(a) * Numeric!(b) }
|
14
14
|
|
15
15
|
#
|
16
16
|
# Comparables
|
17
17
|
#
|
18
|
-
GreaterThan = -> (b, a) { a > b }
|
18
|
+
GreaterThan = -> (b, a) { Numeric!(a) > Numeric!(b) }
|
19
19
|
|
20
|
-
GreaterThanOrEqual = -> (b, a) { a >= b }
|
20
|
+
GreaterThanOrEqual = -> (b, a) { Numeric!(a) >= Numeric!(b) }
|
21
21
|
|
22
|
-
LessThan = -> (b, a) { a < b }
|
22
|
+
LessThan = -> (b, a) { Numeric!(a) < Numeric!(b) }
|
23
23
|
|
24
|
-
LessThanOrEqual = -> (b, a) { a <= b }
|
24
|
+
LessThanOrEqual = -> (b, a) { Numeric!(a) <= Numeric!(b) }
|
25
25
|
end
|
26
26
|
|
27
27
|
ALIASES = {
|
data/lib/ruby/lambdas/objects.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative "core/strict_mode/enable"
|
data/lib/ruby/lambdas/strings.rb
CHANGED
@@ -1,23 +1,25 @@
|
|
1
1
|
module RubyLambdas
|
2
2
|
module Strings
|
3
3
|
module ToExport
|
4
|
-
Capitalize = -> data { data.capitalize }
|
4
|
+
Capitalize = -> data { String!(data).capitalize }
|
5
5
|
|
6
|
-
Center = -> (width, data) { data.center(width) }
|
6
|
+
Center = -> (width, data) { String!(data).center(width) }
|
7
7
|
|
8
|
-
CenterWith = -> (width, padstr, data)
|
8
|
+
CenterWith = -> (width, padstr, data) do
|
9
|
+
String!(data).center(width, padstr)
|
10
|
+
end
|
9
11
|
|
10
|
-
Downcase = -> data { data.downcase }
|
12
|
+
Downcase = -> data { String!(data).downcase }
|
11
13
|
|
12
14
|
FromObject = -> data { String(data) }
|
13
15
|
|
14
|
-
GSub = -> (pattern,
|
15
|
-
return data.gsub(pattern, &
|
16
|
+
GSub = -> (pattern, repl, data) do
|
17
|
+
return String!(data).gsub(pattern, &repl) if repl.is_a?(::Proc)
|
16
18
|
|
17
|
-
data.gsub(pattern,
|
19
|
+
String!(data).gsub(pattern, repl)
|
18
20
|
end
|
19
21
|
|
20
|
-
Strip = -> data { data.strip }
|
22
|
+
Strip = -> data { String!(data).strip }
|
21
23
|
end
|
22
24
|
|
23
25
|
ALIASES = {
|
data/lib/ruby/lambdas/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-lambdas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Serradura
|
@@ -73,12 +73,16 @@ files:
|
|
73
73
|
- examples/02.rb
|
74
74
|
- examples/03.rb
|
75
75
|
- examples/04.rb
|
76
|
+
- examples/strict_mode/01.rb
|
76
77
|
- lib/ruby/lambdas.rb
|
77
|
-
- lib/ruby/lambdas/import.rb
|
78
|
+
- lib/ruby/lambdas/core/import.rb
|
79
|
+
- lib/ruby/lambdas/core/strict_mode/disable.rb
|
80
|
+
- lib/ruby/lambdas/core/strict_mode/enable.rb
|
78
81
|
- lib/ruby/lambdas/numerics.rb
|
79
82
|
- lib/ruby/lambdas/numerics/to_export.rb
|
80
83
|
- lib/ruby/lambdas/objects.rb
|
81
84
|
- lib/ruby/lambdas/objects/to_export.rb
|
85
|
+
- lib/ruby/lambdas/strict-mode.rb
|
82
86
|
- lib/ruby/lambdas/strings.rb
|
83
87
|
- lib/ruby/lambdas/strings/to_export.rb
|
84
88
|
- lib/ruby/lambdas/version.rb
|