celluloid-fsm-0.20.5/0000755000004100000410000000000012614476361014377 5ustar www-datawww-datacelluloid-fsm-0.20.5/.env-ci0000644000004100000410000000020312614476361015554 0ustar www-datawww-dataCELLULOID_SPECS_LOG_STRATEGY=stderr CELLULOID_SPECS_LOG_LEVEL=3 CELLULOID_SPECS_LOG_FILE=log/ci.log CELLULOID_SPECS_LOG_SYNC=false celluloid-fsm-0.20.5/Rakefile0000644000004100000410000000031512614476361016043 0ustar www-datawww-datarequire "bundler/gem_tasks" Dir["tasks/**/*.rake"].each { |task| load task } default_tasks = ["spec"] default_tasks << "rubocop" unless ENV["CI"] task default: default_tasks task ci: %w(spec benchmark) celluloid-fsm-0.20.5/Gemfile0000644000004100000410000000012512614476361015670 0ustar www-datawww-datarequire File.expand_path("../culture/sync", __FILE__) Celluloid::Sync::Gemfile[self] celluloid-fsm-0.20.5/.rspec0000644000004100000410000000011712614476361015513 0ustar www-datawww-data--color --format documentation --order random --warnings --require spec_helper celluloid-fsm-0.20.5/LICENSE.txt0000644000004100000410000000206512614476361016225 0ustar www-datawww-dataThe MIT License (MIT) Copyright (c) 2015 Celluloid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. celluloid-fsm-0.20.5/.travis.yml0000644000004100000410000000172612614476361016516 0ustar www-datawww-datascript: rake ci language: ruby rvm: - rbx-2 - jruby - 2.2.2 - 2.2.0 - 2.1.4 - 2.0.0 - 1.9.3 - ruby-head - jruby-head matrix: fast_finish: true allow_failures: - rvm: 1.9.3 - rvm: ruby-head - rvm: jruby-head - env: CELLULOID_BACKPORTED=true - env: CELLULOID_BACKPORTED=false CELLULOID_TASK_CLASS=Threaded - env: CELLULOID_BACKPORTED=true CELLULOID_TASK_CLASS=Threaded env: global: - NUMBER_OF_PROCESSORS=4 CELLULOID_CONFIG_FILE=.env-ci matrix: - CELLULOID_BACKPORTED=true - CELLULOID_BACKPORTED=false - CELLULOID_BACKPORTED=false CELLULOID_TASK_CLASS=Threaded - CELLULOID_BACKPORTED=true CELLULOID_TASK_CLASS=Threaded notifications: irc: "irc.freenode.org#celluloid" before_install: # Only use 1 job until Travis fixes the rbx --jobs issue. - if [ "$TRAVIS_RUBY_VERSION" == "rbx-2" ] ; then export BUNDLE_JOBS=1 ; else export BUNDLE_JOBS=4; fi sudo: false install: bundle install --without=development celluloid-fsm-0.20.5/lib/0000755000004100000410000000000012614476361015145 5ustar www-datawww-datacelluloid-fsm-0.20.5/lib/celluloid/0000755000004100000410000000000012614476361017121 5ustar www-datawww-datacelluloid-fsm-0.20.5/lib/celluloid/fsm.rb0000644000004100000410000001213312614476361020233 0ustar www-datawww-datarequire "celluloid" unless defined? Celluloid module Celluloid # Simple finite state machines with integrated Celluloid timeout support # Inspired by Erlang's gen_fsm (http://www.erlang.org/doc/man/gen_fsm.html) # # Basic usage: # # class MyMachine # include Celluloid::FSM # NOTE: this does NOT pull in the Celluloid module # end # # Inside an actor: # # # # machine = MyMachine.new(current_actor) module FSM class UnattachedError < Celluloid::Error; end # Not attached to an actor DEFAULT_STATE = :default # Default state name unless one is explicitly set # Included hook to extend class methods def self.included(klass) klass.send :extend, ClassMethods end module ClassMethods # Obtain or set the default state # Passing a state name sets the default state def default_state(new_default = nil) if new_default @default_state = new_default.to_sym else defined?(@default_state) ? @default_state : DEFAULT_STATE end end # Obtain the valid states for this FSM def states @states ||= {} end # Declare an FSM state and optionally provide a callback block to fire # Options: # * to: a state or array of states this state can transition to def state(*args, &block) if args.last.is_a? Hash # Stringify keys :/ options = args.pop.each_with_object({}) { |(k, v), h| h[k.to_s] = v } else options = {} end args.each do |name| name = name.to_sym default_state name if options["default"] states[name] = State.new(name, options["to"], &block) end end end attr_reader :actor # Be kind and call super if you must redefine initialize def initialize(actor = nil) @state = self.class.default_state @delayed_transition = nil @actor = actor @actor ||= Celluloid.current_actor if Celluloid.actor? end # Obtain the current state of the FSM attr_reader :state # Attach this FSM to an actor. This allows FSMs to wait for and initiate # events in the context of a particular actor def attach(actor) @actor = actor end alias_method :actor=, :attach # Transition to another state # Options: # * delay: don't transition immediately, wait the given number of seconds. # This will return a Celluloid::Timer object you can use to # cancel the pending state transition. # # Note: making additional state transitions will cancel delayed transitions def transition(state_name, options = {}) new_state = validate_and_sanitize_new_state(state_name) return unless new_state if handle_delayed_transitions(new_state, options[:delay]) return @delayed_transition end transition_with_callbacks!(new_state) end # Immediate state transition with no sanity checks, or callbacks. "Dangerous!" def transition!(state_name) @state = state_name end protected def validate_and_sanitize_new_state(state_name) state_name = state_name.to_sym return if current_state_name == state_name if current_state and !current_state.valid_transition? state_name valid = current_state.transitions.map(&:to_s).join(", ") fail ArgumentError, "#{self.class} can't change state from '#{@state}' to '#{state_name}', only to: #{valid}" end new_state = states[state_name] unless new_state return if state_name == default_state fail ArgumentError, "invalid state for #{self.class}: #{state_name}" end new_state end def transition_with_callbacks!(state_name) transition! state_name.name state_name.call(self) end def states self.class.states end def default_state self.class.default_state end def current_state states[@state] end def current_state_name current_state && current_state.name || "" end def handle_delayed_transitions(new_state, delay) if delay fail UnattachedError, "can't delay unless attached" unless @actor @delayed_transition.cancel if @delayed_transition @delayed_transition = @actor.after(delay) do transition_with_callbacks!(new_state) end return @delayed_transition end return unless defined?(@delayed_transition) && @delayed_transition @delayed_transition.cancel @delayed_transition = nil end # FSM states as declared by Celluloid::FSM.state class State attr_reader :name, :transitions def initialize(name, transitions = nil, &block) @name, @block = name, block @transitions = nil @transitions = Array(transitions).map(&:to_sym) if transitions end def call(obj) obj.instance_eval(&@block) if @block end def valid_transition?(new_state) # All transitions are allowed unless expressly return true unless @transitions @transitions.include? new_state.to_sym end end end end celluloid-fsm-0.20.5/.rubocop.yml0000644000004100000410000000005512614476361016651 0ustar www-datawww-datainherit_from: - culture/rubocop/rubocop.ymlcelluloid-fsm-0.20.5/metadata.yml0000644000004100000410000001722512614476361016711 0ustar www-datawww-data--- !ruby/object:Gem::Specification name: celluloid-fsm version: !ruby/object:Gem::Version version: 0.20.5 platform: ruby authors: - Tony Arcieri - Tim Carey-Smith - Donovan Keme autorequire: bindir: bin cert_chain: [] date: 2015-09-30 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: bundler version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: nenv version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: dotenv version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: benchmark_suite version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rubocop version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: transpec version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: pry version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rake version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rspec version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: guard-rspec version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: rspec-retry version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: coveralls version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: celluloid version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 0.17.2 type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 0.17.2 - !ruby/object:Gem::Dependency name: celluloid-essentials version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: celluloid-supervision version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: celluloid-pool version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: celluloid-extras version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' type: :development prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' - !ruby/object:Gem::Dependency name: timers version_requirements: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 4.1.1 type: :runtime prerelease: false requirement: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: 4.1.1 description: Simple finite state machines with integrated Celluloid timeout support. email: - tony.arcieri@gmail.com - code@extremist.digital executables: [] extensions: [] extra_rdoc_files: [] files: - ".env-ci" - ".env-dev" - ".gitignore" - ".gitmodules" - ".rspec" - ".rubocop.yml" - ".travis.yml" - CHANGES.md - Gemfile - LICENSE.txt - README.md - Rakefile - celluloid-fsm.gemspec - lib/celluloid/fsm.rb - tasks/benchmarks.rake - tasks/rspec.rake - tasks/rubocop.rake homepage: https://github.com/celluloid/celluloid-fsm licenses: - MIT metadata: {} post_install_message: rdoc_options: [] require_paths: - lib required_ruby_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' required_rubygems_version: !ruby/object:Gem::Requirement requirements: - - ">=" - !ruby/object:Gem::Version version: '0' requirements: [] rubyforge_project: rubygems_version: 2.4.8 signing_key: specification_version: 4 summary: Celluloid Finite State Machines test_files: [] celluloid-fsm-0.20.5/.gitignore0000644000004100000410000000010012614476361016356 0ustar www-datawww-datacoverage/ rdoc/ doc/ pkg/ tmp/ .yardoc .bundle Gemfile.lock log celluloid-fsm-0.20.5/tasks/0000755000004100000410000000000012614476361015524 5ustar www-datawww-datacelluloid-fsm-0.20.5/tasks/rubocop.rake0000644000004100000410000000011312614476361020034 0ustar www-datawww-dataunless ENV["CI"] require "rubocop/rake_task" RuboCop::RakeTask.new end celluloid-fsm-0.20.5/tasks/benchmarks.rake0000644000004100000410000000071212614476361020505 0ustar www-datawww-datarequire "timeout" desc "Run Celluloid benchmarks" task :benchmark do begin Timeout.timeout(120) do glob = File.expand_path("../../benchmarks/*.rb", __FILE__) Dir[glob].each { |benchmark| load benchmark } end rescue Exception, Timeout::Error => ex puts "ERROR: Couldn't complete benchmark: #{ex.class}: #{ex}" puts " #{ex.backtrace.join("\n ")}" exit 1 unless ENV["CI"] # Hax for running benchmarks on Travis end end celluloid-fsm-0.20.5/tasks/rspec.rake0000644000004100000410000000017512614476361017507 0ustar www-datawww-datarequire "rspec/core/rake_task" RSpec::Core::RakeTask.new RSpec::Core::RakeTask.new(:rcov) do |task| task.rcov = true end celluloid-fsm-0.20.5/CHANGES.md0000644000004100000410000000067612614476361016002 0ustar www-datawww-data0.17.2 (2015-09-30) ----- * Resumed updating changelog :) This gem hasn't actually changed much, it's mostly keeping version sync with others. * Revamped test suite, using shared RSpec configuration layer provided by Celluloid itself. * Updated gem dependencies provided by Celluloid::Sync... extraneous gems removed, or marked as development dependencies. 0.8.5 (2015-04-11) ----- * Initial release of separated gem, extracted from Celluloid. celluloid-fsm-0.20.5/celluloid-fsm.gemspec0000644000004100000410000000142712614476361020507 0ustar www-datawww-data# -*- encoding: utf-8 -*- require File.expand_path("../culture/sync", __FILE__) Gem::Specification.new do |gem| gem.name = "celluloid-fsm" gem.version = "0.20.5" gem.platform = Gem::Platform::RUBY gem.summary = "Celluloid Finite State Machines" gem.description = "Simple finite state machines with integrated Celluloid timeout support." gem.licenses = ["MIT"] gem.authors = ["Tony Arcieri", "Tim Carey-Smith", "Donovan Keme"] gem.email = ["tony.arcieri@gmail.com", "code@extremist.digital"] gem.homepage = "https://github.com/celluloid/celluloid-fsm" gem.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|examples|spec|features)/}) } gem.require_path = "lib" Celluloid::Sync::Gemspec[gem] end celluloid-fsm-0.20.5/.env-dev0000644000004100000410000000020412614476361015740 0ustar www-datawww-dataCELLULOID_SPECS_LOG_STRATEGY=single CELLULOID_SPECS_LOG_FILE=log/test.log CELLULOID_SPECS_LOG_LEVEL=0 CELLULOID_SPECS_LOG_SYNC=true celluloid-fsm-0.20.5/README.md0000644000004100000410000000004712614476361015657 0ustar www-datawww-data# Celluloid::FSM --- * Prerelease gem.celluloid-fsm-0.20.5/.gitmodules0000644000004100000410000000012512614476361016552 0ustar www-datawww-data[submodule "culture"] path = culture url = http://github.com/celluloid/culture.git