CrSignals

Version, currently 0.1.01 version
  • 0.1.0latestDec 27, 2019

github.com/firejox/CrSignals

A signals/slots library in Crystal

10 stars
0 dependents
License: MIT

Installation

# Add this to your shard.yml
dependencies:
  CrSignals:
    github: firejox/CrSignals
    version: ~> 0.1.0

Then run:

shards install

shard.yml

Crystal
0.31.1
License
MIT
Author
Firejox <firejox@gmail.com>

Dependencies

This version declares no dependencies.

README

# CrSignals ![](https://github.com/firejox/CrSignals/workflows/Crystal%20CI/badge.svg?branch=master)

CrSignals is a signals/slots library. You can define your signal/slot function, wire them and emit data.

## Installation

1. Add the dependency to your `shard.yml`:

   ```yaml
   dependencies:
     CrSignals:
       github: firejox/CrSignals
   ```

2. Run `shards install`

## Usage

* Here is a basic example of CrSignals library.

```crystal
require "CrSignals"

class Foo
  include CrSignals::Generator
  
  property x : Int32 = 0

  cr_signal value_change(Int32)

  def set_x(v : Int32)
    if @x != v
      @x = v
      value_change(v)
    end
  end
end

a = Foo.new
b = Foo.new

a.connect_value_change(->b.set_x(Int32))

a.set_x(3)
puts b.x # => 3

a.disconnect_value_change(->b.set_x(Int32))

a.set_x(4)
puts b.x # => 3
```

* If you operate with incorrect type, it will report a compile error.

```crystal
require "CrSignals"

class Foo
  include CrSignals::Generator

  property x : Int32 = 0

  cr_signal value_change(Int32)

  def set_x(v : Float64); end
end

a = Foo.new
b = Foo.new

a.connect_value_change(->b.set_x(Float64)) # compile error
```

## Contributing

1. Fork it (<https://github.com/firejox/CrSignals/fork>)
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request

## Contributors

- [Firejox](https://github.com/firejox) - creator and maintainer