Module: Funkify
- Defined in:
- lib/funkify.rb,
lib/funkify/version.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- VERSION =
"0.0.3"
Class Method Summary collapse
- ._procify(obj) ⇒ Object
- .auto_curry_all_methods(receiver) ⇒ Object
- .auto_curry_some_methods(names, receiver) ⇒ Object
- .compose(*args) ⇒ Object
- .curry(obj, *args) ⇒ Object
- .included(klass) ⇒ Object
- .pass(*xs) ⇒ Object
Instance Method Summary collapse
Class Method Details
._procify(obj) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/funkify.rb', line 48 def _procify(obj) case obj when Symbol method(obj).to_proc else obj.to_proc end end |
.auto_curry_all_methods(receiver) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/funkify.rb', line 57 def self.auto_curry_all_methods(receiver) in_use = nil receiver.define_singleton_method(:method_added) do |name| return if in_use in_use = true receiver.auto_curry name in_use = false end end |
.auto_curry_some_methods(names, receiver) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/funkify.rb', line 67 def self.auto_curry_some_methods(names, receiver) names.each do |name| m = receiver.instance_method(name) curried_method = nil receiver.class_eval do define_method(name) do |*args| curried_method ||= m.bind(self).to_proc.curry curried_method[*args] end end end end |
.compose(*args) ⇒ Object
38 39 40 41 42 43 44 45 46 |
# File 'lib/funkify.rb', line 38 def compose(*args) head, *tail = args head = _procify(head) if args.size <= 2 ->(*xs) { head.(_procify(tail[0]).(*xs)) } else ->(*xs) { head.(compose(*tail)) } end end |
.curry(obj, *args) ⇒ Object
24 25 26 27 28 29 30 31 |
# File 'lib/funkify.rb', line 24 def curry(obj, *args) case obj when Symbol method(obj).to_proc.curry[*args] else obj.curry(*args) end end |
.included(klass) ⇒ Object
4 5 6 |
# File 'lib/funkify.rb', line 4 def self.included(klass) klass.extend ClassMethods end |
.pass(*xs) ⇒ Object
33 34 35 |
# File 'lib/funkify.rb', line 33 def pass(*xs) -> { xs } end |
Instance Method Details
#pass(*xs) ⇒ Object
33 34 35 |
# File 'lib/funkify.rb', line 33 def pass(*xs) -> { xs } end |