Dynamic method calling support for Crystal Language. Created to be used with Kreal on Kemal.
Add this to your application's shard.yml
:
dependencies:
dyncall:
github: f/dyncall
require "dyncall"
class User
# Use `share_instance_methods` or `share_class_methods` macro to share methods.
share_class_methods :name, :surname
# Shared methods has to have just one parameter as hash.
def self.name(args)
"Hi #{args[:name]}!"
end
def self.surname(args)
"Hello, Mr. #{args[:surname]}"
end
# Dyncall allows you to call instance methods.
share_instance_methods :name, :surname
def initialize(@n, @s)
end
def name(args)
@name.capitalize
end
def surname(args)
@name.upcase
end
end
# Getting Shared Methods
User.shared # => [:name, :surname]
# Checking if method is shared
User.shared? :name # => true
# Calling shared method
User.call :name, {name: "Fatih"} # => "Hi Fatih!"
User.call :surname, {surname: "Fatih"} # => "Hello, Mr. Fatih"
# Calling shared instance method
user = User.new("fatih, "akin")
user.call :name # => Fatih
user.call :surname # => AKIN
- Fork it ( https://github.com/f/dyncall/fork )
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create a new Pull Request
- f Fatih Kadir Akın - creator, maintainer