{"id":20290616,"url":"https://github.com/gocardless/statesman-events","last_synced_at":"2025-04-11T11:02:13.221Z","repository":{"id":43671696,"uuid":"47459822","full_name":"gocardless/statesman-events","owner":"gocardless","description":"Event support for Statesman (UNMAINTAINED)","archived":false,"fork":false,"pushed_at":"2020-01-28T16:10:57.000Z","size":9,"stargazers_count":23,"open_issues_count":1,"forks_count":11,"subscribers_count":53,"default_branch":"master","last_synced_at":"2024-10-13T11:59:55.883Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gocardless.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-12-05T14:53:49.000Z","updated_at":"2020-04-30T20:51:36.000Z","dependencies_parsed_at":"2022-09-01T13:43:07.122Z","dependency_job_id":null,"html_url":"https://github.com/gocardless/statesman-events","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocardless%2Fstatesman-events","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocardless%2Fstatesman-events/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocardless%2Fstatesman-events/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gocardless%2Fstatesman-events/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gocardless","download_url":"https://codeload.github.com/gocardless/statesman-events/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224641681,"owners_count":17345366,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T15:08:29.259Z","updated_at":"2024-11-14T15:08:29.920Z","avatar_url":"https://github.com/gocardless.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Statesman Events (UNMAINTAINED)\n\nEvent support for [Statesman](https://github.com/gocardless/statesman).\n\n[![Gem Version](https://badge.fury.io/rb/statesman-events.png)](http://badge.fury.io/rb/statesman-events)\n[![Build Status](https://travis-ci.org/gocardless/statesman-events.svg?branch=master)](https://travis-ci.org/gocardless/statesman-events)\n\n\n# THIS REPO IS UNMAINTAINED. PLEASE DO NOT USE IT.\n---\n\n## Installation\n\n```ruby\ngem install statesman-events\n```\n\n## TL;DR Usage\n\n```ruby\nclass TaskStateMachine\n  include Statesman::Machine\n  include Statesman::Events\n\n  state :unstarted, initial: true\n  state :started\n  state :finished\n  state :cancelled\n\n  event :start do\n    transition from: :unstarted,  to: :started\n  end\n\n  event :finish do\n    transition from: :started,    to: :finished\n  end\n\n  event :cancel do\n    transition from: :unstarted,  to: :cancelled\n    transition from: :started,    to: :cancelled\n  end\n\n  event :restart do\n    transition from: :finished,   to: :started\n    transition from: :cancelled,  to: :started\n  end\nend\n\nclass Task \u003c ActiveRecord::Base\n  delegate :current_state, :trigger, :available_events, to: :state_machine\n\n  def state_machine\n    @state_machine ||= TaskStateMachine.new(self)\n  end\nend\n\ntask = Task.new\n\ntask.current_state          # =\u003e \"unstarted\"\ntask.trigger(:start)        # =\u003e true/false\ntask.current_state          # =\u003e \"started\"\ntask.available_events       # =\u003e [:finish, :cancel]\n```\n\n## Class methods\n\n#### `Events.event`\n```ruby\nExampleMachine.event(:some_event) do\n  transition from: :some_state,       to: :another_state\n  transition from: :some_other_state, to: :yet_another_state\nend\n```\nDefine an event rule. When triggered, the first available transition from the\ncurrent state will be called.\n\n## Instance methods\n\n#### `Event#trigger`\n```ruby\ninstance.trigger(:some_event)\n```\nTriggers the passed event, returning `true` on success. Returns false on\nfailure.\n\n#### `Event#trigger!`\n```ruby\ninstance.trigger!(:some_event)\n```\nTriggers the passed event, returning `true` on success. Raises\n`Statesman::GuardFailedError` or `Statesman::InvalidTransitionError` on failure.\n\n#### `Event#available_events`\n```ruby\ninstance.available_events\n```\nReturns an array of events you can `trigger` from the current state.\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgocardless%2Fstatesman-events","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgocardless%2Fstatesman-events","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgocardless%2Fstatesman-events/lists"}