wires 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 358d9d6b0b4094ed729bc94b80a5af81d2b6db25
4
- data.tar.gz: 33eb37077d42bb24312b0a56ad910b4360396ee7
3
+ metadata.gz: b89018baa293cf418580c299f57c87efc111ff84
4
+ data.tar.gz: f99305a8263a8697bc87479f5abef918091182c4
5
5
  SHA512:
6
- metadata.gz: ffd7d42fa653093a03c07528487629192a1a8007733e300a8aac1eafb52746beccb10362b9ef215af400f81e538e5768a49bf8b17af07659d98ef73f10e53d0d
7
- data.tar.gz: e99e2c37b935818c4641a2a381e19d9774846563b5f57adfd1f6baff51d87462c3363f36a365588a25cf9b6a1e3a25e2d96baafd9a0792d3acc5346032f84342
6
+ metadata.gz: 0a6b46c0f31c127d9b80221ba099c6f9f8252d2e442a33828a48a0514c0f95743f6ecb03893d26497b1073c41fd12e52d9fd3bb43cce99bb031a85d08321dd4f
7
+ data.tar.gz: 700abbf49b2e3de5bd1396b89a7eef600100bcc865a649f3b0eb8274850fc7f7ae20205b11aa2a7b397111066a51b2f72e1ab09315f04b29e4548e4a55d4e7fe
data/lib/wires/channel.rb CHANGED
@@ -5,11 +5,9 @@ module Wires
5
5
 
6
6
  attr_reader :name
7
7
  attr_reader :target_list
8
+ attr_reader :relevant_channels
8
9
 
9
- def initialize(name)
10
- @name = name
11
- @target_list = Set.new
12
- nil end
10
+ def inspect; "Channel(#{name.inspect})"; end
13
11
 
14
12
  # Redefine this class method to use an alternate Hub
15
13
  def self.hub; Hub; end
@@ -33,6 +31,20 @@ module Wires
33
31
  end
34
32
  end
35
33
 
34
+ def initialize(name)
35
+ @name = name
36
+ @target_list = Set.new
37
+ unless @@channel_hash.empty?
38
+ _relevant_init
39
+ @@channel_hash.values.each do |c|
40
+ c.send(:_test_relevance, self)
41
+ _test_relevance c
42
+ end
43
+ else
44
+ @relevant_channels = []
45
+ end
46
+ end
47
+
36
48
  # Register a proc to be triggered by an event on this channel
37
49
  def register(events, proc)
38
50
 
@@ -77,6 +89,8 @@ module Wires
77
89
  # Fire an event on this channel
78
90
  def fire(event, blocking:false)
79
91
 
92
+ raise *@not_firable if @not_firable
93
+
80
94
  backtrace = caller
81
95
 
82
96
  # Create an instance object from one of several acceptable input forms
@@ -99,38 +113,41 @@ module Wires
99
113
 
100
114
  nil end
101
115
 
102
- def relevant_channels
103
- return @@channel_hash.values if self==channel_star
104
-
105
- relevant = [channel_star]
106
- my_names = (self.name.is_a? Array) ? self.name : [self.name]
107
- my_names.map {|o| (o.respond_to? :channel_name) ? o.channel_name : o.to_s}
116
+ def _relevant_init
117
+ @relevant_channels = [@@channel_star]
118
+ @my_names = (self.name.is_a? Array) ? self.name : [self.name]
119
+ @my_names.map {|o| (o.respond_to? :channel_name) ? o.channel_name : o.to_s}
108
120
  .flatten(1)
121
+ _test_relevance self
122
+ end
123
+
124
+ def _test_relevance(other_chan)
125
+ if self==@@channel_star
126
+ @relevant_channels << other_chan
127
+ return
128
+ end
109
129
 
110
- for my_name in my_names
130
+ for my_name in @my_names
111
131
 
112
- if my_name.is_a?(Regexp) then raise TypeError,
132
+ if my_name.is_a?(Regexp) then
133
+ @not_firable = [TypeError,
113
134
  "Cannot fire on Regexp channel: #{self.name}."\
114
- " Regexp channels can only used in event handlers." end
115
-
116
- for other_chan in @@channel_hash.values
117
-
118
- other_name = other_chan.name
119
- other_name = (other_name.respond_to? :channel_name) ? \
120
- other_name.channel_name : other_name
121
-
122
- relevant << other_chan if \
123
- if other_name.is_a?(Regexp)
124
- my_name =~ other_name
125
- else
126
- my_name.to_s == other_name.to_s
127
- end
128
-
135
+ " Regexp channels can only used in event handlers."]
136
+ return
129
137
  end
130
138
 
139
+ other_name = other_chan.name
140
+ other_name = (other_name.respond_to? :channel_name) ? \
141
+ other_name.channel_name : other_name
142
+
143
+ @relevant_channels << other_chan if \
144
+ !@relevant_channels.include?(other_chan) and \
145
+ if other_name.is_a?(Regexp)
146
+ my_name =~ other_name
147
+ else
148
+ my_name.to_s == other_name.to_s
149
+ end
131
150
  end
132
-
133
- return relevant.uniq
134
151
  end
135
152
 
136
153
  # Compare matching with another Channel
data/lib/wires/event.rb CHANGED
@@ -42,9 +42,10 @@ module Wires
42
42
 
43
43
  # Convert class <ClassNameEvent> to string "class_name"
44
44
  def codestring(cls=self)
45
- File.basename cls.to_s
46
- .underscore
47
- .gsub(/_event$/, "")
45
+ @codestring ||= \
46
+ File.basename cls.to_s
47
+ .underscore
48
+ .gsub(/_event$/, "")
48
49
  end
49
50
 
50
51
  # List of codestrings associated with this event and ancestors
data/lib/wires/time.rb CHANGED
@@ -40,7 +40,7 @@ module Wires
40
40
  def active?; @active end
41
41
  def inactive?; not @active end
42
42
 
43
- def ready?(at_time=Time.now); @active and (at_time >= @time) end
43
+ def ready?(at_time=Time.now); @active and at_time and (at_time>=@time) end
44
44
 
45
45
  def time_until; (@active ? [(Time.now - @time), 0].max : nil) end
46
46
 
@@ -92,6 +92,8 @@ module Wires
92
92
  # Operate on the metaclass as a type of singleton pattern
93
93
  class << self
94
94
 
95
+ attr_accessor :grain
96
+
95
97
  # Add an event to the schedule
96
98
  def add(*args)
97
99
  new_item = (args.first.is_a? TimeSchedulerItem) ?
@@ -121,18 +123,20 @@ module Wires
121
123
 
122
124
  def schedule_add(new_item)
123
125
 
124
- if new_item.ready?
125
- loop do
126
- new_item.fire
127
- break unless new_item.ready?
128
- end
129
- end
130
-
131
- if new_item.ready?(@next_pass)
132
- Thread.new do
126
+ if @keepgoing
127
+ if new_item.ready?
133
128
  loop do
134
- new_item.fire_when_ready(blocking:true)
135
- break unless new_item.ready?(@next_pass)
129
+ new_item.fire
130
+ break unless new_item.ready?
131
+ end
132
+ end
133
+
134
+ if new_item.ready?(@next_pass)
135
+ Thread.new do
136
+ loop do
137
+ new_item.fire_when_ready(blocking:true)
138
+ break unless new_item.ready?(@next_pass)
139
+ end
136
140
  end
137
141
  end
138
142
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wires
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe McIlvain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-11 00:00:00.000000000 Z
11
+ date: 2013-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport-core-ext