z4app 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/z4app/version.rb +1 -1
  3. data/lib/z4app.rb +112 -13
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04efb929103f5a4edd790b1c25fc41765890630a1807754cc5e15d6110dc6984
4
- data.tar.gz: 34d1d5ede05a7c934318d285fefbc3c686d61b74599acbf4e896664493d5ebe7
3
+ metadata.gz: 1b7bc57600f4e146c9d09e6205205a4e80c0a809531a5e6eb5242029f97df53b
4
+ data.tar.gz: 7f7ab4e8799ed72cb10e82c7a6cd82174391f8b48cbf1b9ea55aed9270ec98d1
5
5
  SHA512:
6
- metadata.gz: e2f26afc4485a9cf288e4cbfed192c89ab12386df51c9e6ffaf3230ab8516e3418b3fb822804d1488cca1e1c57026e5fa6351f65fbf614ac9a1ac270584765cb
7
- data.tar.gz: 6c690217d2c9966a5a85b6c84e182d4f03ad5bf41fac7f07dfa82f97ca8ffed4cf69e3c56d57728aeae2f77cbbaf58b90fdb4cd699a0de4bd28451da37802561
6
+ metadata.gz: e04eda590cc1b8081b98e6429fb77edb28f1641c2b3e14228627847fa55657518fe85068a2cd3a1f28f939eb2ed6b38c45eaadf010cc8ffedf25cc0f9d9e0db3
7
+ data.tar.gz: 3cd906c0346dedad870d55ce8088e6c84200ed34a4d320c686610c63883f537ce71b65cbd2192e220672182552f58d103805a9ce9ec908270677023a3bfd495b
data/lib/z4app/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Z4app
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.5"
5
5
  COMMIT = `git log --format="%H" -n 1`.strip
6
6
  end
data/lib/z4app.rb CHANGED
@@ -13,6 +13,104 @@ require_relative "z4app/version"
13
13
  module Z4app
14
14
  class Error < StandardError; end
15
15
 
16
+ class Embed
17
+ def initialize script
18
+ @o = []
19
+ self.instance_eval script
20
+ end
21
+ def result params={}
22
+ a = [
23
+ %[<div id='embed'>],
24
+ @o.join(""),
25
+ %[</div>]
26
+ ]
27
+ return ERB.new(a.join("")).result(binding)
28
+ end
29
+ # insert param into embed.
30
+ def param key
31
+ return %[<%= params[:#{key}] %>]
32
+ end
33
+ # insert text input.
34
+ def input key, h={}
35
+ hh = { pattern: '.*', title: 'required.' }.merge(h)
36
+ @o << %[<h1 class='e'><input name="embed[#{key}]" pattern='#{hh[:pattern]}' title='#{hh[:title]}' placeholder="#{key}"></h1>]
37
+ end
38
+ # insert email field.
39
+ def email k
40
+ @o << %[<h1 class='e'><input type='email' name='embed[#{k}]' placeholder='#{k}' pattern='.+@.+' title='valid email.'></h1>]
41
+ end
42
+ # insert url field.
43
+ def url k
44
+ @o << %[<h1 class='e'><input type='url' name='embed[#{k}] placeholder='#{k}' pattern='https://.*' title='valid url.'></h1>]
45
+ end
46
+ # insert phone field.
47
+ def tel k
48
+ @o << %[<h1 class='e'><input type='tel' name='embed[#{k}] placeholder='#{k}' pattern='\d{10}' title='valid phone number.'></h1>]
49
+ end
50
+ # insert textarea.
51
+ def textarea key, h={}
52
+ hh = { placeholder: '', value: ''}.merge(h)
53
+ @o << %[<textarea name='embed[#{key}]' placeholder='#{hh[:placeholder]}'>#{hh[:value]}</textarea>]
54
+ end
55
+ # insert color.
56
+ def color k
57
+ @o << %[<h1 class='e'><input type='color' id='e_#{e}' name='embed[#{k}]'><label for='e_#{k}'>#{k}</label></h1>]
58
+ end
59
+ # insert date.
60
+ def date k
61
+ @o << %[<h1 class='e'><input type='date' name='embed[#{k}]'></h1>]
62
+ end
63
+ # insert time.
64
+ def time k
65
+ @o << %[<h1 class='e'><input type='datetime-local' name='embed[#{k}]'></h1>]
66
+ end
67
+ # insert radio button.
68
+ def radio k
69
+ @o << %[<h1 class='e'><input type="radio" id="e_#{k}" name="embed[#{k}]" value="true"><label for="e_#{k}">#{k}</label></h1>]
70
+ end
71
+ # insert checkbox.
72
+ def check k
73
+ @o << %[<h1 class='e'><input type="checkbox" id="e_#{k}" name="embed[#{k}]" value="true"><label for="e_#{k}">#{k}</label></h1>]
74
+ end
75
+ # insert selector.
76
+ def select k, *opts
77
+ o = []
78
+ [opts].flatten.each {|e| o << %[<option value="#{e}">#{e}</option>] }
79
+ @o << %[<h1 class='e'><select name="embed[#{k}]">#{o.join("")}</select></h1>]
80
+ end
81
+ # insert number field.
82
+ def number k, h={}
83
+ hh = { min: 0, max: 100, value: 1 }.merge(h)
84
+ @o << %[<h1 class='e'><input type="number" name="embed[#{k}]" value='#{hh[:value]}' min='#{hh[:min]}' max='#{hh[:max]}' placeholder='#{k}'></h1>]
85
+ end
86
+ # insert plain text.
87
+ def text t
88
+ @o << %[<h2 class='e'>#{t}</h2>]
89
+ end
90
+ # set goto field.
91
+ def goto g, h={}
92
+ a = []; h.each_pair { |k,v| a << %[#{k}=#{v}] }
93
+ @o << %[<input type='hidden' name='goto' value='/#{g}?#{a.join("&")}'>]
94
+ end
95
+ # add submit button.
96
+ def submit p
97
+ @o << %[<h1 class='e'><button id='send'>#{p}</button></h1>]
98
+ end
99
+ # set stack push object.
100
+ def stack c, o
101
+ @o << %[<input type='hidden' name='action' value='#{c}'>]
102
+ @o << %[<input type='hidden' name='push' value='#{o}'>]
103
+ end
104
+ end
105
+
106
+ ##
107
+ # generate html content.
108
+ def self.embed s, h={}
109
+ Embed.new(s).result(h)
110
+ end
111
+
112
+ ##
113
+ # overwrite event handlers
16
114
  def self.on t, k, &b
17
115
  @@APP[t][k] = b
18
116
  end
@@ -21,7 +119,9 @@ module Z4app
21
119
  obj: Hash.new { |h,k| h[k] = lambda { |*a| puts %[[z4app][obj] #{a}]; { time: Time.now.to_s }; } },
22
120
  get: Hash.new { |h,k| h[k] = lambda { |*a| puts %[[z4app][get] #{a}]; { time: Time.now.to_s }; } },
23
121
  post: Hash.new { |h,k| h[k] = lambda { |*a| puts %[[z4app][post] #{a}]; { time: Time.now.to_s }; } }
24
- }
122
+ }
123
+
124
+ # The web-app server
25
125
  class APP < Sinatra::Base
26
126
  include Z4app
27
127
  configure do
@@ -36,7 +136,8 @@ module Z4app
36
136
 
37
137
  # handle dumb shit
38
138
  ['robots.txt', 'favicon.ico'].each { |e| get("/#{e}") {}}
39
-
139
+
140
+ # pwa requirement
40
141
  get('/manifest.webmanifest') {
41
142
  content_type 'application/manifest+json'
42
143
  h = {
@@ -48,6 +149,7 @@ module Z4app
48
149
  return JSON.generate(h)
49
150
  }
50
151
 
152
+ # pwa requirement
51
153
  get('/service-worker.js') {
52
154
  content_type 'application/javascript'
53
155
  erb :service_worker, layout: false
@@ -70,7 +172,8 @@ module Z4app
70
172
  content_type "application/json"
71
173
  return JSON.generate(@@APP[:obj][params[:o].to_sym].call(params[:i].to_sym, request))
72
174
  }
73
-
175
+
176
+ # handle form post
74
177
  post('/:v') {
75
178
  @here = @@APP[:post][params[:v].to_sym].call(params, request)
76
179
  if params.has_key? :goto
@@ -80,24 +183,19 @@ module Z4app
80
183
  end
81
184
  }
82
185
 
83
- # handle post
186
+ # handle json post
84
187
  post('/') {
85
188
  content_type = 'application/json'
86
189
  return JSON.generate(@@APP[:post][:index].call(params, request))
87
190
  }
88
191
  end
89
-
192
+ # start server
90
193
  def self.init!
91
- @@PROC = Process.detach(fork { APP.run! { puts "[z4app][init] OK." } })
92
- end
93
- def self.proc
94
- @@PROC
95
- end
96
- def self.app
97
- @@APP
194
+ Process.detach(fork { APP.run! { puts "[z4app][init] OK." } })
98
195
  end
99
196
  end
100
197
 
198
+ # load app script if available
101
199
  if File.exist? 'app.rb'
102
200
  load 'app.rb'
103
201
  puts "[z4app][config] app."
@@ -105,4 +203,5 @@ else
105
203
  puts "[z4app][config] default."
106
204
  end
107
205
 
108
- Z4app.init!
206
+ # start app
207
+ @app = Z4app.init!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: z4app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Olson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-21 00:00:00.000000000 Z
11
+ date: 2023-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: webrick