femtows 1.6.0 → 2.0.0

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/demo2.rb +13 -0
  3. data/lib/femtows.rb +60 -47
  4. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb91e5bf92627376e1417d32a8c897ac196510f6
4
- data.tar.gz: 5c1667b4230b70efbb72e565078765b1ccf6d0cd
3
+ metadata.gz: 7e446685cf3d269110e6758dfed9ed0ef1512c7a
4
+ data.tar.gz: 17d06da5c51fabc47474e0bc26441fbbd649377c
5
5
  SHA512:
6
- metadata.gz: f4ff73c70c9654078d76304b054662e06be080d230b64cec0c1fffdab2a425ba8c3beda4f6db170cc1c3608dd8d21ce23262c0665880154c201a96523c3e1764
7
- data.tar.gz: 77732c765e07894cfa92f266d9a8109b126dce1fbf41b9b39a8cafbf0cb59263c3e2f3cbbfa352e94061a88c630c2cb24e0fd47745551ce03d90f840916508b0
6
+ metadata.gz: 6f67a10a904e8f73d9b75adf196d6b398a8445f0498f9e0fb906d84fa9d75e26d13e1439d97bc71b1598007c258013d991b95f85d913fb21264045651ef49031
7
+ data.tar.gz: feeff779208483049174bf9d8fcadeb71563a94dd1fa2ca513664dc1d25c932e2fd2eace167fa178b1fe21cdcfb37bbd8e486701767a9424d5e62509f09ff7c4
@@ -0,0 +1,13 @@
1
+ require_relative "lib/femtows.rb"
2
+
3
+ class App < Fem
4
+ def get_app_html(p)
5
+ "<html><body><h2><center>Hello</center></h2><hr><p>#{content}</p><hr><center>[femtows]</center></body>"
6
+ end
7
+ def content
8
+ to_tableb(Dir.glob("*.rb")) {|f| [f,File.size(f),File.mtime(f)]}
9
+ end
10
+ end
11
+
12
+ App.new(ARGV[0].to_i)
13
+ sleep
@@ -38,23 +38,22 @@ class WebserverAbstract
38
38
  end ; end
39
39
  end
40
40
  def initialize(port,root,name,cadence,timeout,options)
41
- raise("tcp port illegal #{port}") unless port.to_i>=80
42
- raise("root not exist #{root}") unless File.exists?(root)
41
+ raise("tcp port illegal #{port}") unless port.to_i>=80
42
+ raise("root not exist #{root}") unless File.exists?(root)
43
43
  @cb_log= options["logg"]
44
44
  @last_mtime=File.mtime(__FILE__)
45
- @port=port.to_i
46
- @root=root
47
- @name=name
48
- @rootd=root[-1,1]=="/" ? root : root+"/"
49
- @timeout=timeout
50
- @th={}
51
- @cb={}
52
- @redirect={}
53
- info(" serveur http #{port} on #{@rootd} ready!")
54
- observe(cadence,timeout*2)
55
- pool_create
56
- @thm=Thread.new {
57
- loop {
45
+ @port=port.to_i
46
+ @root=root
47
+ @name=name
48
+ @rootd=root[-1,1]=="/" ? root : root+"/"
49
+ @timeout=timeout
50
+ @th={}
51
+ @cb={}
52
+ @redirect={}
53
+ info(" serveur http #{port} on #{@rootd} ready!")
54
+ observe(cadence,timeout*2)
55
+ pool_create
56
+ @thm=Thread.new { sleep(0.1); loop {
58
57
  nbError=0
59
58
  begin
60
59
  session=nil
@@ -71,8 +70,7 @@ class WebserverAbstract
71
70
  @server.close rescue nil
72
71
  end
73
72
  sleep(3); info("restart accept")
74
- }
75
- }
73
+ } }
76
74
  end
77
75
  def pool_create
78
76
  @queue=Queue.new
@@ -93,7 +91,8 @@ class WebserverAbstract
93
91
  end
94
92
  end
95
93
  def serve(uri,&blk)
96
- @cb[uri] = blk
94
+ @cb[uri] = blk
95
+ puts(" registered #{uri}")
97
96
  end
98
97
  def request(session)
99
98
  request = session.gets
@@ -138,34 +137,34 @@ class WebserverAbstract
138
137
  @redirect[o]=d
139
138
  end
140
139
  def do_service(session,request,service,user_passwd,params)
141
- redir=@redirect["/"+service]
142
- service=redir.gsub(/^\//,"") if @redirect[redir]
143
- aservice=to_absolute(service)
144
- if redir && ! @redirect[redir]
145
- do_service(session,request,redir.gsub(/^\//,""),user_passwd,params)
146
- elsif @cb["/"+service]
147
- begin
148
- code,type,data= @cb["/"+service].call(params)
149
- if code==0 && data != '/'+service
150
- do_service(session,request,data[1..-1],user_passwd,params)
151
- else
152
- code==200 ? sendData(session,type,data) : sendError(session,code,data)
153
- end
154
- rescue
155
- logg session.peeraddr.last,"Error in get /#{service} : #{$!}"
156
- sendError(session,501,$!.to_s)
157
- end
158
- elsif service =~ /^stop/
159
- sendData(session,".html","Stopping...");
160
- Thread.new() { sleep(0.1); stop_browser() }
161
- elsif File.directory?(aservice)
162
- sendData(session,".html",makeIndex(aservice))
163
- elsif File.exists?(aservice)
164
- sendFile(session,aservice)
165
- else
166
- info("unknown request serv=#{service} params=#{params.inspect} #{File.exists?(service)}")
167
- sendError(session,500,"unknown request serv=#{aservice} params=#{params.inspect} #{File.exists?(service)}");
168
- end
140
+ redir=@redirect["/"+service]
141
+ service=redir.gsub(/^\//,"") if @redirect[redir]
142
+ aservice=to_absolute(service)
143
+ if redir && ! @redirect[redir]
144
+ do_service(session,request,redir.gsub(/^\//,""),user_passwd,params)
145
+ elsif @cb["/"+service]
146
+ begin
147
+ code,type,data= @cb["/"+service].call(params)
148
+ if code==0 && data != '/'+service
149
+ do_service(session,request,data[1..-1],user_passwd,params)
150
+ else
151
+ code==200 ? sendData(session,type,data) : sendError(session,code,data)
152
+ end
153
+ rescue
154
+ logg session.peeraddr.last,"Error in get /#{service} : #{$!}"
155
+ sendError(session,501,"#{$!} : at #{$!.backtrace.first}")
156
+ end
157
+ elsif service =~ /^stop/
158
+ sendData(session,".html","Stopping...");
159
+ Thread.new() { sleep(0.1); stop_browser() }
160
+ elsif File.directory?(aservice)
161
+ sendData(session,".html",makeIndex(aservice))
162
+ elsif File.exists?(aservice)
163
+ sendFile(session,aservice)
164
+ else
165
+ info("unknown request serv=#{service} params=#{params.inspect} #{File.exists?(service)}")
166
+ sendError(session,500,"unknown request serv=#{aservice} params=#{params.inspect} #{File.exists?(service)}");
167
+ end
169
168
  end
170
169
  def stop_browser
171
170
  info "exit on web demand !"
@@ -226,7 +225,7 @@ class WebserverAbstract
226
225
  end
227
226
  }
228
227
  end
229
- def httpdate( aTime ); (aTime||Time.now).gmtime.strftime( "%a, %d %b %Y %H:%M:%S GMT" ); end
228
+ def httpdate( aTime=nil ); (aTime||Time.now).gmtime.strftime( "%a, %d %b %Y %H:%M:%S GMT" ); end
230
229
  def mime(string)
231
230
  MIME[string.split(/\./).last] || "application/octet-stream"
232
231
  end
@@ -261,3 +260,17 @@ def cliweb(root=Dir.getwd,port=59999)
261
260
  puts "Server root path #{root} with port #{port}"
262
261
  sleep
263
262
  end
263
+ ###################### another api
264
+ class Fem < WebserverAbstract
265
+ def initialize(port=7080,root=".",name="wwww",cadence=10,timeout=120)
266
+ super(port,root,name,cadence,timeout,{})
267
+ introspect
268
+ end
269
+ def introspect()
270
+ exp=/^(get|post)_(\w[\w\d]*)_(\w+)$/
271
+ methods.grep(exp).each { |name|
272
+ all,method,key,mime= exp.match(name).to_a
273
+ serve("/#{key}") { |par| [200,".#{mime}",self.send(all,par)] }
274
+ }
275
+ end
276
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: femtows
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glurp man
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-18 00:00:00.000000000 Z
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "a tiny web server, for local file transfert, \nembedded, http experimentations\n"
14
14
  email: regis.aubarede@gmail.com
@@ -21,6 +21,7 @@ files:
21
21
  - bin/femtows.bat
22
22
  - bin/femtows.sh
23
23
  - demo.rb
24
+ - demo2.rb
24
25
  - gitc.bat
25
26
  - guidemo.rb
26
27
  - lib/femtows.rb
@@ -28,7 +29,8 @@ homepage: http://github.com/glurp/femtows
28
29
  licenses: []
29
30
  metadata: {}
30
31
  post_install_message: "-------------------------------------------------------------------------------\nHello,
31
- welcome to Femto Web Server....\n\n$ femtows [port,[root-directory] \n\n-------------------------------------------------------------------------------\n"
32
+ welcome to Femto Web Server....\n\n$ femtows.sh [port,[root-directory] \nor\n$ femtows.bat
33
+ [port,[root-directory] \n\n-------------------------------------------------------------------------------\n"
32
34
  rdoc_options: []
33
35
  require_paths:
34
36
  - lib