knjrbfw 0.0.86 → 0.0.87

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.86
1
+ 0.0.87
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.86"
8
+ s.version = "0.0.87"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-08-17}
12
+ s.date = %q{2012-08-19}
13
13
  s.description = %q{Including stuff for HTTP, SSH and much more.}
14
14
  s.email = %q{k@spernj.org}
15
15
  s.extra_rdoc_files = [
@@ -240,7 +240,6 @@ Gem::Specification.new do |s|
240
240
  "lib/knj/thread.rb",
241
241
  "lib/knj/thread2.rb",
242
242
  "lib/knj/threadhandler.rb",
243
- "lib/knj/threadpool.rb",
244
243
  "lib/knj/translations.rb",
245
244
  "lib/knj/unix_proc.rb",
246
245
  "lib/knj/web.rb",
@@ -760,17 +760,32 @@ class Knj::Datarow
760
760
  #Various methods to define methods based on the columns for the datarow.
761
761
  def self.define_translation_methods(args)
762
762
  define_method("#{args[:val_dc]}=") do |newtransval|
763
- _kas.trans_set(self, {
764
- args[:val] => newtransval
765
- })
763
+ begin
764
+ _hb.trans_set(self, {
765
+ args[:val] => newtransval
766
+ })
767
+ rescue NameError
768
+ _kas.trans_set(self, {
769
+ args[:val] => newtransval
770
+ })
771
+ end
766
772
  end
767
773
 
768
774
  define_method("#{args[:val_dc]}") do
769
- return _kas.trans(self, args[:val])
775
+ begin
776
+ return _hb.trans(self, args[:val])
777
+ rescue NameError
778
+ return _kas.trans(self, args[:val])
779
+ end
770
780
  end
771
781
 
772
782
  define_method("#{args[:val_dc]}_html") do
773
- str = _kas.trans(self, args[:val])
783
+ begin
784
+ str = _hb.trans(self, args[:val])
785
+ rescue NameError
786
+ str = _kas.trans(self, args[:val])
787
+ end
788
+
774
789
  if str.to_s.strip.length <= 0
775
790
  return "[no translation for #{args[:val]}]"
776
791
  end
@@ -1,4 +1,4 @@
1
- #Requires the 'wref'-gem.
1
+ #Require the 'wref'-gem if it hasnt already been.
2
2
  require "wref" if !Kernel.const_defined?(:Wref)
3
3
 
4
4
  #This class handels various stuff regarding Unix-processes.
@@ -35,7 +35,12 @@ class Knj::Unix_proc
35
35
 
36
36
  MUTEX.synchronize do
37
37
  ret = [] unless block_given?
38
- res = Knj::Os.shellcmd(cmdstr)
38
+
39
+ if args["psaux_str"]
40
+ res = args["psaux_str"]
41
+ else
42
+ res = Knj::Os.shellcmd(cmdstr)
43
+ end
39
44
 
40
45
  res.scan(/^(\S+)\s+([0-9]+)\s+([0-9.]+)\s+([0-9.]+)\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+\s+\S+ (.+)($|\n)/) do |match|
41
46
  pid = match[1]
@@ -64,12 +69,16 @@ class Knj::Unix_proc
64
69
  next if !found
65
70
  end
66
71
 
67
- proc_obj = Knj::Unix_proc.spawn(data)
68
-
69
- if block_given?
70
- yield(proc_obj)
72
+ if args["yield_data"]
73
+ yield(data)
71
74
  else
72
- ret << proc_obj
75
+ proc_obj = Knj::Unix_proc.spawn(data)
76
+
77
+ if block_given?
78
+ yield(proc_obj)
79
+ else
80
+ ret << proc_obj
81
+ end
73
82
  end
74
83
  end
75
84
 
@@ -1,4 +1,11 @@
1
1
  <%
2
+ #Register appserver.
3
+ begin
4
+ appsrv = _hb
5
+ rescue NameError
6
+ appsrv = _kas
7
+ end
8
+
2
9
  #Support for the PHP-version... Comes handy when converting PHP to Ruby...
3
10
  if !_get["path"]
4
11
  trans = {
@@ -171,12 +178,12 @@
171
178
  end
172
179
 
173
180
  if tmp_use and !force
174
- _kas.header("Last-Modified", "#{time_orig.httpdate} GMT") if time_orig
175
- _kas.header("Content-Type", "image/png")
181
+ appsrv.header("Last-Modified", "#{time_orig.httpdate} GMT") if time_orig
182
+ appsrv.header("Content-Type", "image/png")
176
183
  _httpsession.force_content(File.read(tmp_path))
177
184
  else
178
- _kas.header("Last-Modified", "#{time_orig.httpdate} GMT") if time_orig
179
- _kas.header("Content-Type", "image/png")
185
+ appsrv.header("Last-Modified", "#{time_orig.httpdate} GMT") if time_orig
186
+ appsrv.header("Content-Type", "image/png")
180
187
  _httpsession.force_content(blob_cont)
181
188
  end
182
189
  %>
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.86
5
+ version: 0.0.87
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kasper Johansen
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-08-17 00:00:00 +02:00
13
+ date: 2012-08-19 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -356,7 +356,6 @@ files:
356
356
  - lib/knj/thread.rb
357
357
  - lib/knj/thread2.rb
358
358
  - lib/knj/threadhandler.rb
359
- - lib/knj/threadpool.rb
360
359
  - lib/knj/translations.rb
361
360
  - lib/knj/unix_proc.rb
362
361
  - lib/knj/web.rb
@@ -395,7 +394,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
395
394
  requirements:
396
395
  - - ">="
397
396
  - !ruby/object:Gem::Version
398
- hash: 1505749877110619661
397
+ hash: -398379275512532928
399
398
  segments:
400
399
  - 0
401
400
  version: "0"
@@ -1,264 +0,0 @@
1
- #A small threadpool framework.
2
- class Knj::Threadpool
3
- def self.worker_data
4
- raise "This thread is not running via the threadpool." if !Thread.current[:knj_threadpool]
5
- return Thread.current[:knj_threadpool]
6
- end
7
-
8
- attr_reader :workers, :blocks, :mutex, :args, :events
9
-
10
- #Constructor.
11
- #===Examples
12
- # tp = Knj::Threadpool.new(:threads => 5)
13
- def initialize(args = {})
14
- @args = args
15
- @args[:sleep] = 0.2 if !@args.key?(:sleep)
16
-
17
- raise "Invalid number of threads: '#{@args[:threads]}'." if !@args[:threads] or @args[:threads].to_i <= 0
18
-
19
- @workers = []
20
- @blocks = []
21
- @mutex = Mutex.new
22
- @events = Knj::Event_handler.new
23
- @events.add_event(:name => :on_error)
24
-
25
- self.start
26
- end
27
-
28
- #Starts the threadpool. This is automatically called from the constructor.
29
- def start
30
- @mutex.synchronize do
31
- if !@running
32
- @workers.length.upto(@args[:threads]) do |count|
33
- @workers << Knj::Threadpool::Worker.new(:threadpool => self, :id => count)
34
- end
35
-
36
- @running = true
37
- end
38
- end
39
- end
40
-
41
- #Stops the threadpool.
42
- def stop
43
- if @running
44
- @workers.each do |worker|
45
- if !worker.running
46
- worker.kill
47
- @workers.delete(worker)
48
- end
49
- end
50
-
51
- @running = false
52
- end
53
- end
54
-
55
- #Runs the given block, waits for the result and returns the result.
56
- def run(*args, &block)
57
- raise "No block given." if !block_given?
58
- blockdata = {:block => block, :result => nil, :running => false, :runned => false, :args => args}
59
- @blocks << blockdata
60
-
61
- loop do
62
- sleep @args[:sleep]
63
-
64
- if blockdata[:runned]
65
- begin
66
- res = blockdata[:result]
67
- raise blockdata[:error] if blockdata.key?(:error)
68
- ensure
69
- @mutex.synchronize do
70
- blockdata.clear
71
- @blocks.delete(blockdata)
72
- end
73
- end
74
-
75
- return res
76
- end
77
- end
78
- end
79
-
80
- #Runs the given block in the threadpool asynced. Returns a 'Knj::Threadpool::Asynced'-object that can be used to get the result and more.
81
- def run_async(*args, &block)
82
- raise "No block given." if !block_given?
83
-
84
- @mutex.synchronize do
85
- blockdata = {:block => block, :running => false, :runned => false, :args => args}
86
- @blocks << blockdata
87
- return Knj::Threadpool::Asynced.new(blockdata)
88
- end
89
- end
90
-
91
- #Returns a new block to be runned if there is one. Otherwise false.
92
- def get_block
93
- return false if !@running
94
-
95
- @mutex.synchronize do
96
- @blocks.each do |blockdata|
97
- if blockdata and !blockdata[:running] and !blockdata[:runned]
98
- blockdata[:running] = true
99
- return blockdata
100
- end
101
- end
102
-
103
- return false
104
- end
105
- end
106
- end
107
-
108
- #This is the threadpool worker-object. No need to spawn this manually.
109
- class Knj::Threadpool::Worker
110
- attr_reader :running
111
-
112
- #Constructor. Should not be called manually.
113
- def initialize(args)
114
- @args = args
115
- @tp = @args[:threadpool]
116
- @mutex_tp = @tp.mutex
117
- @sleep = @tp.args[:sleep]
118
- @running = false
119
- self.spawn_thread
120
- end
121
-
122
- #Starts the workers thread.
123
- def spawn_thread
124
- @thread = Knj::Thread.new do
125
- loop do
126
- break if !@sleep or !@tp
127
-
128
- if !@blockdata
129
- sleep @sleep
130
- @blockdata = @tp.get_block if !@blockdata
131
- end
132
-
133
- next if !@blockdata
134
-
135
- res = nil
136
- raise "No block in blockdata?" if !@blockdata[:block]
137
- @blockdata[:worker] = self
138
- Thread.current[:knj_threadpool] = {
139
- :worker => self,
140
- :blockdata => @blockdata
141
- }
142
-
143
- begin
144
- @running = true
145
- res = @blockdata[:block].call(*@blockdata[:args])
146
- rescue => e
147
- @mutex_tp.synchronize do
148
- @blockdata[:error] = e
149
- end
150
- ensure
151
- #Reset thread.
152
- Thread.current[:knj_threadpool] = nil
153
-
154
- #Set running-status on worker.
155
- @running = false
156
-
157
- #Update block-data.
158
- @mutex_tp.synchronize do
159
- @blockdata[:result] = res if res
160
- @blockdata[:runned] = true
161
- @blockdata[:running] = false
162
- end
163
-
164
- #Try to avoid slowdown of sleep by checking if there is a new block right away.
165
- @blockdata = @tp.get_block
166
- end
167
- end
168
- end
169
- end
170
-
171
- #Returns true if the worker is currently working with a block.
172
- def busy?
173
- return true if @blockdata
174
- end
175
-
176
- #Returns the ID of the worker.
177
- def id
178
- return @args[:id]
179
- end
180
-
181
- #Kills the current thread and restarts the worker.
182
- def restart
183
- @mutex_tp.synchronize do
184
- @thread.kill
185
-
186
- if @blockdata
187
- @blockdata[:runned] = true
188
- @blockdata[:running] = false
189
-
190
- begin
191
- sleep 0.1
192
- raise "The worker was stopped during execution of the block."
193
- rescue => e
194
- @blockdata[:error] = e
195
- end
196
- end
197
-
198
- #Dont run the job again - remove it from the queue.
199
- @tp.blocks.delete(@blockdata)
200
- @blockdata = nil
201
- @running = false
202
-
203
- #Spawn a new thread - we killed the previous.
204
- self.spawn_thread
205
- end
206
- end
207
-
208
- #Kills the thread.
209
- def kill
210
- @mutex_tp.synchronize do
211
- @thread.kill
212
- end
213
- end
214
- end
215
-
216
- #An object of this class will be returned when calling 'run_async'.
217
- class Knj::Threadpool::Asynced
218
- #Constructor. Should not be called manually.
219
- def initialize(args)
220
- @args = args
221
- end
222
-
223
- #Returns true if the asynced job is still running.
224
- def running?
225
- return true if @args[:running]
226
- return false
227
- end
228
-
229
- #Returns true if the asynced job is done running.
230
- def done?
231
- return true if @args[:runned] or @args.empty? or @args[:error]
232
- return false
233
- end
234
-
235
- #Returns true if the asynced job is still waiting to run.
236
- def waiting?
237
- return true if !@args.empty? and !@args[:running] and !@args[:runned]
238
- return false
239
- end
240
-
241
- #Raises error if one has happened in the asynced job.
242
- def error!
243
- raise @args[:error] if @args.key?(:error)
244
- end
245
-
246
- #Sleeps until the asynced job is done. If an error occurred in the job, that error will be raised when calling the method.
247
- def join
248
- loop do
249
- self.error!
250
- break if self.done?
251
- sleep 0.1
252
- end
253
-
254
- self.error!
255
- end
256
-
257
- #Returns the result of the job. If an error occurred in the job, that error will be raised when calling the method.
258
- def result(args = nil)
259
- self.join if args and args[:wait]
260
- raise "Not done yet." unless self.done?
261
- self.error!
262
- return @args[:result]
263
- end
264
- end