eventful.rb 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3b9a8e5622060297424496b78fc52312d8cb0acf7d62d67571a8990c75cb8580
4
+ data.tar.gz: 85aaf96637073d8e8aff7375e4977e74bd20ca9834535b7635ed936d4ae1db2a
5
+ SHA512:
6
+ metadata.gz: 531ffe23a894e0337cf48d29c2f96415986771cf90523f0d3d3d2e8167868443b2538fbab98e30790baeb5dc445c8ad400b3d36a0afcd18817001fe23d492fd5
7
+ data.tar.gz: 6edb8b51096c9e2addc3ddbd8d6aab373d9fa4f0b4df97a28fd5d35c3878930b2351ba1f886887553717b286ea2f49f050154d4fe9141a454c7bd82adec54d41
@@ -0,0 +1,16 @@
1
+ # Eventful/ActiveRecord/ClassMethods.rb
2
+ # Eventful::ActiveRecord::ClassMethods
3
+
4
+ module Eventful
5
+ module ActiveRecord
6
+ module ClassMethods
7
+
8
+ def active
9
+ final_state_names = stateful_states.final_states.collect(&:name).collect(&:to_s)
10
+ final_state_names_with_empty = (final_state_names.empty? ? '' : final_state_names)
11
+ where('current_state NOT IN (?)', final_state_names_with_empty).all
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ # Eventful/ActiveRecord.rb
2
+ # Eventful::ActiveRecord
3
+
4
+ require_relative File.join('ActiveRecord', 'ClassMethods')
@@ -0,0 +1,39 @@
1
+ # Eventful/ClassMethods.rb
2
+ # Eventful::ClassMethods
3
+
4
+ module Eventful
5
+ module ClassMethods
6
+
7
+ # memory resident
8
+ def memory_run(frequency_in_seconds = 1, runtime_in_seconds = nil)
9
+ if runtime_in_seconds
10
+ expiry_time = Time.now + runtime_in_seconds
11
+ end
12
+ loop do
13
+ break if runtime_in_seconds && Time.now >= expiry_time
14
+ scheduled_run
15
+ sleep frequency_in_seconds
16
+ end
17
+ end
18
+
19
+ # scheduled
20
+ def scheduled_run
21
+ self.active.each do |instance|
22
+ instance.transitions.each do |transition|
23
+ if instance.send("#{transition.event_name}?")
24
+ instance.send("#{transition.event_name}")
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ def run(frequency_in_seconds = nil, runtime_in_seconds = nil)
31
+ if frequency_in_seconds
32
+ memory_run(frequency_in_seconds, runtime_in_seconds)
33
+ else
34
+ scheduled_run
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ # Eventful/Poro/ClassMethods.rb
2
+ # Eventful::Poro::ClassMethods
3
+
4
+ require_relative File.join('..', '..', 'ObjectSpace', 'self.select_objects')
5
+
6
+ module Eventful
7
+ module Poro
8
+ module ClassMethods
9
+
10
+ def active
11
+ ObjectSpace.select_objects(self){|o| o.active?}
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ # Eventful/Poro.rb
2
+ # Eventful::Poro
3
+
4
+ require_relative File.join('Poro', 'ClassMethods')
data/lib/Eventful.rb ADDED
@@ -0,0 +1,33 @@
1
+ # Eventful.rb
2
+ # Eventful
3
+
4
+ # 20141121, 20150112, 13
5
+ # 0.7.0
6
+
7
+ require 'Stateful'
8
+ require_relative File.join('Eventful', 'ClassMethods')
9
+
10
+ module Eventful
11
+
12
+ class << self
13
+
14
+ def load_persistence_class_methods(klass)
15
+ if defined?(ActiveRecord::Base) && klass < ActiveRecord::Base
16
+ require_relative File.join('Eventful', 'ActiveRecord')
17
+ klass.extend(Eventful::ActiveRecord::ClassMethods)
18
+ else
19
+ require_relative File.join('Eventful', 'Poro')
20
+ klass.extend(Eventful::Poro::ClassMethods)
21
+ end
22
+ end
23
+
24
+ def extended(klass)
25
+ klass.extend(Stateful)
26
+ klass.extend(Eventful::ClassMethods)
27
+ load_persistence_class_methods(klass)
28
+ end
29
+ alias_method :included, :extended
30
+
31
+ end # class << self
32
+
33
+ end
@@ -0,0 +1,15 @@
1
+ # ObjectSpace/self.select_objects
2
+ # ObjectSpace.select_objects
3
+
4
+ # 20111117
5
+ # 0.0.1
6
+
7
+ module ObjectSpace
8
+
9
+ def self.select_objects(klass = Object, &block)
10
+ selected_objects = []
11
+ each_object(klass){|o| selected_objects << o if block.call(o)}
12
+ selected_objects
13
+ end
14
+
15
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eventful.rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - thoran
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-08-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: By defining predicate methods which except for the addition of '?' matches
14
+ a state machine event and then configuring an in memory or cron-based event loop,
15
+ the state machine will be able to change state automatically.
16
+ email: code@thoran.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/Eventful.rb
22
+ - lib/Eventful/ActiveRecord.rb
23
+ - lib/Eventful/ActiveRecord/ClassMethods.rb
24
+ - lib/Eventful/ClassMethods.rb
25
+ - lib/Eventful/Poro.rb
26
+ - lib/Eventful/Poro/ClassMethods.rb
27
+ - lib/ObjectSpace/self.select_objects.rb
28
+ homepage: http://github.com/thoran/Eventful
29
+ licenses:
30
+ - MIT
31
+ metadata: {}
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.6
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubygems_version: 3.0.3
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: Automatically change state with Stateful state machines.
51
+ test_files: []