ceml 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.6.1
data/ceml.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ceml}
8
- s.version = "0.6.0"
8
+ s.version = "0.6.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joe Edelman"]
@@ -19,8 +19,9 @@ module CEML
19
19
  end
20
20
 
21
21
  def best_role_for candidate
22
+ # puts "confluence finding best role #{object_id} #{candidate[:id]} #{star}"
22
23
  winner = @roles_to_cast.max_by{ |role| role.affinity(candidate, star) }
23
- winner unless winner[0] == -1
24
+ winner unless winner.affinity(candidate, star)[0] == -1
24
25
  end
25
26
 
26
27
  def stage_with_candidate candidate
@@ -36,6 +37,7 @@ module CEML
36
37
  best_role = best_role_for(candidate)
37
38
  candidate[:roles] = best_role.name.to_sym
38
39
  best_role.casted << candidate
40
+ @star ||= candidate
39
41
  @dirty = true
40
42
  end
41
43
 
data/lib/ceml/driver.rb CHANGED
@@ -21,21 +21,25 @@ module CEML
21
21
  end
22
22
  alias_method :start, :with_incident
23
23
 
24
+ def log(s)
25
+ # puts s
26
+ end
27
+
24
28
  LOCATIONS = Hash.new{ |h,k| h[k] = [] }
25
29
  def ping script, candidate
26
30
  return unless script.fits? candidate
27
- candidate[:ts] = Time.now.utc.to_i
31
+ candidate[:ts] = CEML.clock
28
32
  script_id = script.text_value
29
33
 
30
34
  locs = LOCATIONS[script_id].group_by{ |l| l.stage_with_candidate(candidate) }
31
35
  if locs[:joinable]
32
- # puts "joining..."
36
+ log "joining..."
33
37
  first = locs[:joinable].shift
34
38
  first.push candidate
35
39
  push first.incident_id, nil, candidate
36
40
 
37
41
  elsif locs[:launchable]
38
- # puts "launching..."
42
+ log "launching..."
39
43
  first = locs[:launchable].shift
40
44
  first.push candidate
41
45
  cast = first.cast
@@ -43,18 +47,18 @@ module CEML
43
47
  (locs[:launchable] + (locs[:listable]||[])).each{ |l| l.rm *cast }
44
48
 
45
49
  elsif locs[:listable]
46
- # puts "listing..."
50
+ log "listing..."
47
51
  locs[:listable].each{ |l| l.push candidate }
48
52
 
49
53
  else
50
54
  c = Confluence.new(script)
51
55
  case c.stage_with_candidate(candidate)
52
56
  when :launchable
53
- # puts "start-launching..."
57
+ log "start-launching..."
54
58
  c.push candidate
55
59
  push nil, script, candidate
56
60
  when :listable
57
- # puts "start-listing..."
61
+ log "start-listing..."
58
62
  c.push candidate
59
63
  LOCATIONS[script_id] << c
60
64
  else raise "what?"
data/lib/ceml/incident.rb CHANGED
@@ -95,13 +95,12 @@ module CEML
95
95
  def finish; true; end
96
96
 
97
97
  def start_delay seconds
98
- this[:continue_at] = Time.now.utc.to_i + seconds
99
- cb :delay, seconds
98
+ this[:continue_at] = CEML.clock + seconds
100
99
  true
101
100
  end
102
101
 
103
102
  def complete_delay
104
- return false unless Time.now.utc.to_i >= this[:continue_at]
103
+ return false unless CEML.clock >= this[:continue_at]
105
104
  this.delete(:continue_at)
106
105
  true
107
106
  end
data/lib/ceml/role.rb CHANGED
@@ -28,7 +28,8 @@ module CEML
28
28
  return unless c_ll.distance_to(s_ll, :meters) <= c.radius
29
29
  end
30
30
  if c.timewindow
31
- return unless star.ts - candidate.ts <= c.timewindow
31
+ # puts "checking timewindow #{c.timewindow} #{candidate[:ts] - star[:ts]}"
32
+ return unless candidate[:ts] - star[:ts] <= c.timewindow
32
33
  end
33
34
  return true
34
35
  end
data/lib/ceml/script.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  module CEML
2
2
  module Script
3
3
  extend Forwardable
4
- attr_writer :delegate
5
- def delegate; @delegate || CEML.delegate; end
6
4
 
7
5
  # ===========
8
6
  # = casting =
data/lib/ceml.rb CHANGED
@@ -16,8 +16,9 @@ require 'ceml/driver'
16
16
 
17
17
  module CEML
18
18
  extend self
19
- attr_accessor :delegate
20
- # @delegate = Delegate.new
19
+ @extra_seconds = 0
20
+ def clock; Time.now.utc.to_i + @extra_seconds; end
21
+ def incr_clock(s); @extra_seconds += s; end
21
22
  end
22
23
 
23
24
  module CEML
@@ -86,7 +86,7 @@ class TestIncident < Test::Unit::TestCase
86
86
  player :bill, :agent
87
87
  told :bill, /hello/
88
88
  silent :bill
89
- sleep 5
89
+ CEML.incr_clock 5
90
90
  roll
91
91
  told :bill, /goodbye/
92
92
  end
@@ -112,6 +112,29 @@ class TestIncident < Test::Unit::TestCase
112
112
  end
113
113
  end
114
114
 
115
+
116
+ def test_inside_timewindow
117
+ s = CEML.parse(:script, "await 2 new signups over 10s\ntell signups: thanks")
118
+ play do
119
+ ping s, :id => 'fred', :tags => ['new']
120
+ silent 'fred'
121
+ CEML.incr_clock 5
122
+ ping s, :id => 'betty', :tags => ['new']
123
+ told 'fred', /thanks/
124
+ end
125
+ end
126
+
127
+ def test_outside_timewindow
128
+ s = CEML.parse(:script, "await 2 new signups over 10s\ntell signups: thanks")
129
+ play do
130
+ ping s, :id => 'fred', :tags => ['new']
131
+ silent 'fred'
132
+ CEML.incr_clock 15
133
+ ping s, :id => 'betty', :tags => ['new']
134
+ silent 'fred'
135
+ end
136
+ end
137
+
115
138
  def test_await
116
139
  s = CEML.parse(:script, "await a,b,c\ntell a: foo\ntell b: bar\ntell c: baz")
117
140
  play do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 6
8
- - 0
9
- version: 0.6.0
8
+ - 1
9
+ version: 0.6.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Joe Edelman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-28 00:00:00 -08:00
17
+ date: 2011-01-28 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency