ruby-lambdas 0.2.0 → 0.3.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/README.md +71 -4
- data/lib/ruby/lambdas.rb +1 -0
- data/lib/ruby/lambdas/import.rb +23 -0
- data/lib/ruby/lambdas/objects.rb +6 -0
- data/lib/ruby/lambdas/objects/to_export.rb +11 -0
- data/lib/ruby/lambdas/strings.rb +2 -17
- data/lib/ruby/lambdas/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdd09393827cb1cfa7166f4c9390c500b45cb6e374ea1e7fff85d6e8d1023444
|
4
|
+
data.tar.gz: ea9faa37417a2abf246d9049e40f09247faacf1908550e84b7bb98d3b342f404
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 72b50b42fcebeb42306809114066e946783bc6bfd33e23eea1acd256adc70634de56de2d9fe83bbd0a63c1116733c2db13a3887fa9163352176d8643c05ef62f
|
7
|
+
data.tar.gz: b06bea15c208280081a98fa62bb3d2d9521e41e94e359ba4d05bdad09ac0ff922fc5179a3215265e26c043d34df6964dabe53686d7e457f32838d7a1f2bbe4e4
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ TODO: Delete this and the text above, and describe your gem
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
10
|
|
11
11
|
```ruby
|
12
|
-
gem 'ruby-lambdas',
|
12
|
+
gem 'ruby-lambdas', require: 'ruby/lambdas'
|
13
13
|
```
|
14
14
|
|
15
15
|
And then execute:
|
@@ -30,6 +30,73 @@ Strings::Strip.call(" hello ") # => "hello"
|
|
30
30
|
|
31
31
|
# Strings::Trim is an alias to the Strings::Strip function
|
32
32
|
Strings::Trim.call(" hello ") # => "hello"
|
33
|
+
|
34
|
+
# Other ways to call a lambda (function):
|
35
|
+
Strings::Trim[" hello "]
|
36
|
+
Strings::Trim.(" hello ") # Syntactic sugar to hide “call”.
|
37
|
+
Strings::Trim.===(" hello ") # This allows a proc object to be the target of a when clause in a case statement.
|
38
|
+
Strings::Trim.yield(" hello ")
|
39
|
+
```
|
40
|
+
|
41
|
+
**Partial application (curried functions):**
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
require "ruby/lambdas"
|
45
|
+
|
46
|
+
# We call a function with fewer arguments than it expects and It returns a
|
47
|
+
# function that takes the remaining arguments.
|
48
|
+
# And this is called Partial Application of Functions. e.g:
|
49
|
+
|
50
|
+
Strings::GSub.call(/[aeiou]/, "hello", "*") # => "h*ll*"
|
51
|
+
Strings::GSub.call(/[aeiou]/).call("hello", "*") # => "h*ll*"
|
52
|
+
Strings::GSub.call(/[aeiou]/).call("hello").call("*") # => "h*ll*"
|
53
|
+
|
54
|
+
# Last example with an alternative syntax:
|
55
|
+
Strings::GSub.(/[aeiou]/).("hello").("*") # => "h*ll*"
|
56
|
+
|
57
|
+
# ---
|
58
|
+
|
59
|
+
replace_vowels = Strings::GSub.call(/[aeiou]/)
|
60
|
+
|
61
|
+
replace_vowels.call("_", "banana") # => "b_n_n_"
|
62
|
+
|
63
|
+
# ---
|
64
|
+
|
65
|
+
hide_vowels = replace_vowels.call("*")
|
66
|
+
|
67
|
+
hide_vowels.call("hello") # => "h*ll*"
|
68
|
+
```
|
69
|
+
|
70
|
+
**Pipelines:**
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
require "ruby/lambdas"
|
74
|
+
|
75
|
+
###########################
|
76
|
+
# RUBY_VERSION >= '2.6.0' #
|
77
|
+
###########################
|
78
|
+
|
79
|
+
value = ' I WILL be a url slug '
|
80
|
+
|
81
|
+
value
|
82
|
+
.then(&Strings::Strip)
|
83
|
+
.then(&Strings::Downcase)
|
84
|
+
.then(&Strings::GSub[' ', '-'])
|
85
|
+
|
86
|
+
# => "i-will-be-a-url-slug"
|
87
|
+
|
88
|
+
###########################
|
89
|
+
# RUBY_VERSION >= '2.5.0' #
|
90
|
+
###########################
|
91
|
+
|
92
|
+
value = ' I WILL be a url slug '
|
93
|
+
|
94
|
+
value
|
95
|
+
.yield_self(&Strings::Strip)
|
96
|
+
.yield_self(&Strings::Downcase)
|
97
|
+
.yield_self(&Strings::GSub[' ', '-'])
|
98
|
+
|
99
|
+
# => "i-will-be-a-url-slug"
|
33
100
|
```
|
34
101
|
|
35
102
|
**Composing functions (`RUBY_VERSION >= '2.6.0'`):**
|
@@ -39,7 +106,7 @@ require "ruby/lambdas"
|
|
39
106
|
Slugify = # Slugify =
|
40
107
|
Strings::FromObject # Strings::String
|
41
108
|
.>> Strings::Strip # >> Strings::Trim \
|
42
|
-
.>> Strings::
|
109
|
+
.>> Strings::Downcase # >> Strings::LowerCase \
|
43
110
|
.>> Strings::GSub[' ', '-'] # >> Strings::ReplaceAll[' ', '-']
|
44
111
|
|
45
112
|
# Reading the previous composition (Step by step)
|
@@ -64,7 +131,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
64
131
|
|
65
132
|
## Contributing
|
66
133
|
|
67
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
134
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/serradura/ruby-lambdas. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
68
135
|
|
69
136
|
## License
|
70
137
|
|
@@ -72,4 +139,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
72
139
|
|
73
140
|
## Code of Conduct
|
74
141
|
|
75
|
-
Everyone interacting in the RubyLambdas project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
142
|
+
Everyone interacting in the RubyLambdas project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/serradura/ruby-lambdas/blob/master/CODE_OF_CONDUCT.md).
|
data/lib/ruby/lambdas.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module RubyLambdas
|
2
|
+
class Import
|
3
|
+
def self.call(from:, to:)
|
4
|
+
to_export = from::ToExport
|
5
|
+
|
6
|
+
to_export.constants.each do |function_name|
|
7
|
+
function = to_export.const_get(function_name)
|
8
|
+
|
9
|
+
to.const_set(
|
10
|
+
function_name,
|
11
|
+
function.arity == 1 ? function : function.curry
|
12
|
+
)
|
13
|
+
end
|
14
|
+
|
15
|
+
return unless from.const_defined?(:ALIASES)
|
16
|
+
|
17
|
+
from::ALIASES.each do |name, new_names|
|
18
|
+
Array(new_names)
|
19
|
+
.each { |new_name| to.const_set(new_name, to.const_get(name)) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/ruby/lambdas/strings.rb
CHANGED
@@ -1,21 +1,6 @@
|
|
1
1
|
module Strings
|
2
|
+
require_relative "import"
|
2
3
|
require_relative "strings/to_export"
|
3
4
|
|
4
|
-
RubyLambdas::
|
5
|
-
to_export
|
6
|
-
.constants
|
7
|
-
.each do |function_name|
|
8
|
-
function = to_export.const_get(function_name)
|
9
|
-
|
10
|
-
const_set(
|
11
|
-
function_name,
|
12
|
-
function.arity == 1 ? function : function.curry
|
13
|
-
)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
RubyLambdas::Strings::ALIASES
|
18
|
-
.each do |name, new_names|
|
19
|
-
Array(new_names).each { |new_name| const_set(new_name, const_get(name)) }
|
20
|
-
end
|
5
|
+
RubyLambdas::Import.(from: RubyLambdas::Strings, to: self)
|
21
6
|
end
|
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.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Serradura
|
@@ -69,6 +69,9 @@ files:
|
|
69
69
|
- bin/console
|
70
70
|
- bin/setup
|
71
71
|
- lib/ruby/lambdas.rb
|
72
|
+
- lib/ruby/lambdas/import.rb
|
73
|
+
- lib/ruby/lambdas/objects.rb
|
74
|
+
- lib/ruby/lambdas/objects/to_export.rb
|
72
75
|
- lib/ruby/lambdas/strings.rb
|
73
76
|
- lib/ruby/lambdas/strings/to_export.rb
|
74
77
|
- lib/ruby/lambdas/version.rb
|