atome 0.5.6.2.0 → 0.5.6.2.3

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
  SHA256:
3
- metadata.gz: cc8ade696d1fa0d4ebc29a7ffbb336e1537d1f2b5c83c7772a6651f2b4558d0d
4
- data.tar.gz: 0b849380beee8851a6e3571bb4f9df756524b0dab2746e146c5f35dc1b545ea3
3
+ metadata.gz: 02c478a58bfcce998a040779efdc8970c38a1d5286f8ca942231132493707f7d
4
+ data.tar.gz: 930ebabe49f5824c66e03b3b1b8b53e1def6ad0ce26ff40f2110c07461970f8b
5
5
  SHA512:
6
- metadata.gz: 16319a956d2d2221eeb0b19ad60c305e811ae2fdec974e99ec33db58f6d1a11e3d71ea08bd73c1cfae4fb19c81aa3170c39ba64435fa155054bdea212e9bc908
7
- data.tar.gz: 01df5f2b3923c04e05028ba711b9c83fdf431755685507dab92072eba959b1ee37e50a14dfe0c373f55f277def9c349e41fe76727f4b9828fcda389cc345b4f9
6
+ metadata.gz: 9161e9c2364dd6eb8e85d44d93872ea43f52e241a19aac7f1f4697890b1d638faa0891a94e85d917a2f8e4e75e5e322170e1bbfab1223ea0d26c1ee32ee33797
7
+ data.tar.gz: 2136de3b80e45cff68ad2c0345baf11d2565473f591c27261c6f2942414ca5d4442338597ee4d29936bb306e707846da991337cd915535a2dce705fd6dc1756a
@@ -10,10 +10,12 @@ new({ particle: :message, category: :communication, type: :hash }) do |params, b
10
10
  params = { data: params } unless params.instance_of? Hash
11
11
  params[:user] = 'dfghg4df5gdfgh654'
12
12
  params[:pass] = 'gfhkzrhgzr4h98948'
13
- instance_variable_set('@message_code', {}) unless instance_variable_get('@message_code')
14
- store_proc= instance_variable_get('@message_code')
15
- mmessage_id= "msg_#{store_proc.length}"
16
- store_proc[mmessage_id]=bloc
13
+ # instance_variable_set('@message_code', {}) unless instance_variable_get('@message_code')
14
+ # store_proc= instance_variable_get('@message_code')
15
+ message_id= "msg_#{Universe.messages.length}"
16
+ params[:message_id]=message_id
17
+ # store_proc[mmessage_id]=bloc
18
+ Universe.store_messages({msg_nb:message_id, proc: bloc })
17
19
  html.send_message(params)
18
20
 
19
21
  end
@@ -141,7 +141,9 @@ end
141
141
  def atome_genesis
142
142
  atome_infos
143
143
  A.server({ address: 'localhost:9292', type: 'ws' })
144
- A.init_websocket
144
+ A.init_websocket do |msg|
145
+ puts "-3 #{msg}"
146
+ end
145
147
  end
146
148
 
147
149
  def init_database # this method is call from JS (atome/communication)
@@ -149,6 +151,7 @@ def init_database # this method is call from JS (atome/communication)
149
151
  particles = Universe.particle_list
150
152
  categories = Universe.categories
151
153
  atomes = Universe.atomes
154
+ puts "we are here!!"
152
155
  # particles.each do |particle, value|
153
156
  # value[:category] = :undefined if value[:category].nil?
154
157
  # A.message({ action: :init_db, particle: particle, type: value[:type], category: value[:category] })
@@ -156,8 +159,12 @@ def init_database # this method is call from JS (atome/communication)
156
159
  end
157
160
 
158
161
  def user_login
159
- user = Universe.current_user
160
- pass = Black_matter.password
161
- message({ action: :login, value: user })
162
- message({ action: :pass, value: pass })
162
+ # user = Universe.current_user
163
+ password = Black_matter.password
164
+ message({ action: :authentication, data: { email: 'jeezs@atome.one' } }) do |email|
165
+ puts "email received : #{email}"
166
+ end
167
+ message({ action: :authorization, data: { password: password } }) do |p|
168
+ puts "2 : #{p}"
169
+ end
163
170
  end
@@ -177,13 +177,13 @@ class Atome
177
177
  new_atome
178
178
  end
179
179
 
180
- def store(params)
181
- params.each do |particle_to_save, data|
182
- # @!atome[particle_to_save]=data
183
- # instance_variable_set(particle_to_save,data)
184
- end
185
-
186
- end
180
+ # def store(params)
181
+ # params.each do |particle_to_save, data|
182
+ # # @!atome[particle_to_save]=data
183
+ # # instance_variable_set(particle_to_save,data)
184
+ # end
185
+ #
186
+ # end
187
187
 
188
188
  def history(filter = {})
189
189
  filter[:id] = @id
@@ -210,7 +210,7 @@ class Atome
210
210
  # option_found = params.values[0]
211
211
  # instance_variable_get(elem_code)["#{option_found}_code"] = user_proc
212
212
  # else
213
- instance_variable_get(elem_code)[element] = user_proc
213
+ instance_variable_get(elem_code)[element] = user_proc
214
214
  # end
215
215
  end
216
216
 
@@ -251,9 +251,9 @@ class Atome
251
251
  else
252
252
  instance_variable_get("@#{element}_code")[element]
253
253
  # instance_exec(@callback[element], proc_found)if proc_found.is_a? Proc
254
- end
254
+ end
255
255
  # array_of_proc_found.each do |proc_found|
256
- proc_found.call(return_params) if proc_found.is_a? Proc
256
+ proc_found.call(return_params) if proc_found.is_a? Proc
257
257
  # end if array_of_proc_found
258
258
 
259
259
  # if array_of_proc_found
@@ -381,26 +381,14 @@ class Atome
381
381
  end
382
382
 
383
383
  def server_receiver(params)
384
- # alert params
385
- # alert message_code
386
- calllbacks_found= instance_variable_get('@message_code')
387
- # we delete the default message created by atome
388
- calllbacks_found.delete(:message)
389
- # we get the oldest available callback, to treat it
390
- oldest_callback = calllbacks_found.delete(calllbacks_found.keys.first)
391
- params=params[:return] #TODO : format retrun data correctly instead of this line
392
- oldest_callback.call(params) if oldest_callback.is_a? Proc
393
- # callback(:message, params)
384
+ callback_found = Universe.messages[params[:message_id]]
385
+ callback_found.call(params) if callback_found.is_a? Proc
394
386
  end
395
387
 
396
388
  def init_websocket
397
- instance_variable_set('@message_code', {})
398
- # connection is particle (communication.rb)
399
389
  connection(@current_server)
400
390
  end
401
391
 
402
-
403
-
404
392
  def encrypt(string)
405
393
  # if RUBY_ENGINE.downcase == 'opal' || 'wasm32-wasi'
406
394
  # `sha256(#{string})`
@@ -9,6 +9,7 @@ class Universe
9
9
  @renderer_list = %i[html browser headless server log]
10
10
  @sanitizers = {}
11
11
  @specificities = {}
12
+ @messages = {}
12
13
 
13
14
  @categories = %w[ communication effect event geometry hierarchy identity material
14
15
  property security spatial time utility ]
@@ -20,6 +21,18 @@ class Universe
20
21
  class << self
21
22
  attr_reader :atomes, :renderer_list, :atome_list, :particle_list, :classes, :counter, :atomes_specificities
22
23
 
24
+ def messages
25
+ @messages
26
+ end
27
+
28
+ def store_messages(new_msg)
29
+ @messages[new_msg[:msg_nb]] = new_msg[:proc]
30
+ end
31
+
32
+ def delete_messages(msg_to_del)
33
+ @messages.delete(msg_to_del)
34
+ end
35
+
23
36
  def set_help(particle, &doc)
24
37
  @help[particle] = doc
25
38
  end
data/lib/atome/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  # return atome version
4
4
  class Atome
5
- VERSION = '0.5.6.2.0'
5
+ VERSION = '0.5.6.2.3'
6
6
  end
7
7
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # The class Universe is used to retrieve some data needed for the atome framework
3
+ # The class Universe is used to retrieve some data needed for the atome framework
4
4
  # per example you can retrieve the list of all available particles
5
5
  puts Universe.particle_list
6
6
  # this give at the date 14/11/2023 :
@@ -1,23 +1,39 @@
1
- # # frozen_string_literal: true
2
- #
3
- A.message({ action: :insert, data: { table: :security, particle: :password, data: 'my_pass'} })
1
+ # frozen_string_literal: true
2
+
3
+ A.message({ action: :insert, data: { table: :security, particle: :password, data: 'my_pass'} }) do |datas|
4
+ puts "0 data received: #{datas}"
5
+ end
4
6
 
5
7
  A.message({ action: :insert, data: { table: :identity, particle: :name, data: 'jeezs' } }) do |data_received_from_server|
6
- puts "my first insert #{data_received_from_server}"
8
+ puts "1 my first insert #{data_received_from_server}"
7
9
  end
8
10
 
11
+ A.message({ action: :insert, data: { table: :identity, particle: :name, data: 'jeezs2' } })
12
+
9
13
  A.message({ action: :query, data: { table: :identity } }) do |data_received_from_server|
10
- puts "another insert : #{data_received_from_server}"
14
+ puts "2 another insert : #{data_received_from_server}"
11
15
  end
12
16
 
13
17
  A.message({ action: :query, data: { table: :identity } }) do |data_received|
14
- puts "received : #{data_received}"
18
+ puts "3 received : #{data_received}"
19
+ end
20
+
21
+ A.message({ action: :insert, data: { table: :identity, particle: :name, data: 'jeezs3' } }) do |result|
22
+ puts "4 insert done : #{result}"
23
+ end
24
+
25
+ A.message({ action: :insert, data: { table: :identity, particle: :name, data: 'jeezs4' } }) do |result|
26
+ puts "5 last message received: #{result}"
15
27
  end
16
28
 
17
- A.message({ action: :insert, data: { table: :identity, particle: :name, data: 'jeezs' } }) do |result|
18
- puts "insert done : #{result}"
29
+ A.message({ action: :insert, data: { table: :security, particle: :name, data: 'john doe' } }) do |data_received_from_server|
30
+ puts "6 test 1 : #{data_received_from_server}"
19
31
  end
20
32
 
21
- A.message({ action: :insert, data: { table: :identity, particle: :name, data: 'jeezs' } }) do |result|
22
- puts "last message received: #{result}"
33
+ A.message({ action: :insert, data: { table: :identity, particle: :tit, data: 'dummy' } }) do |data_received_from_server|
34
+ puts "7 test 2 : #{data_received_from_server}"
23
35
  end
36
+
37
+ A.message({ action: :insert, data: { table: :unknown, particle: :name, data: 'dummy2' } }) do |data_received_from_server|
38
+ puts "test 3 : #{data_received_from_server}"
39
+ end
@@ -4,18 +4,21 @@ user_password = {global: :all_star, read: { atome: :all_star }, write: { atome:
4
4
 
5
5
  human({ id: :jeezs, login: true, password: user_password, data: { birthday: '10/05/2016' },selection: [], tag: { system: true } , attach: :user_view })
6
6
 
7
-
8
-
9
-
10
-
11
-
12
7
  c = box({ color: :yellow, left: 333 })
13
-
14
8
  c.touch(true) do
15
- c.message({message: 'cd ..;cd server;ls; pwd', action: :terminal })
16
- c.message({message: 'capture.rb', action: :file, option: :read })
17
- c.message({message: 'tototo.rb', action: :file, option: :write, value: :hello })
18
- # b.message({message: 'cd ..;cd server;ls; pwd'})
19
- # c = box({ color: :red, left: 333 })
9
+ c.message({data: 'cd ..;cd server;ls; pwd', action: :terminal }) do |result|
10
+ puts "shell command return: #{result}"
11
+ end
12
+ c.message({data: {source: 'capture.rb',operation: :read }, action: :file}) do |result|
13
+
14
+ puts "file read encoded_content: #{result[:data].gsub('\x23', '#')}"
15
+ end
16
+ c.message({ action: :file,data: {source: 'user_created_file.rb', operation: :write, value: :hello }})do |result|
17
+ puts "file creation result : #{result}"
18
+ end
19
+
20
+ A.message({ action: :terminal , data: 'cd ..;cd server;ls; pwd'}) do |result|
21
+ puts "result : #{result}"
22
+ end
20
23
  end
21
-
24
+ #
@@ -1,27 +1,6 @@
1
- # frozen_string_literal: true
1
+ # frozen_string_literal: true
2
2
 
3
- # If you need to specify another address for the server use A.server_adress
4
- A.server({ address: 'localhost:9292' , type: 'ws'})
5
- user_password = {global: :all_star, read: { atome: :all_star }, write: { atome: :all_star } }
6
-
7
- human({ id: :jeezs, login: true, password: user_password, data: { birthday: '10/05/2016' },selection: [], tag: { system: true } , attach: :user_view })
8
-
9
-
10
- #
11
- # b = box({ color: :red, id: :my_box })
12
- #
13
- # b.touch(true) do
14
- # b.connection('localhost:9292') do |params|
15
- # alert " the connection is : #{params}"
16
- # end
17
- # end
18
-
19
- b = box({ color: :yellow, left: 333 })
20
-
21
- b.touch(true) do
22
- b.message({message: 'cd ..;cd server;ls; pwd', action: :terminal })
23
- b.message({message: 'capture.rb', action: :file, option: :read })
24
- b.message({message: 'tototo.rb', action: :file, option: :write, value: :hello })
25
- # b.message({message: 'cd ..;cd server;ls; pwd'})
26
- # c = box({ color: :red, left: 333 })
27
- end
3
+ my_pass = Black_matter.encode('hell')
4
+ puts my_pass
5
+ checker = Black_matter.check_password('hello,', my_pass)
6
+ puts checker
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # atome server
4
+
4
5
  require 'em/pure_ruby' if RUBY_PLATFORM == 'x64-mingw32'
5
6
  require 'fileutils'
6
7
  require '../src/utilities/aui'
@@ -14,341 +15,13 @@ require 'roda'
14
15
  require 'rufus-scheduler'
15
16
  require 'securerandom'
16
17
  require 'sequel'
17
-
18
- class EDen
19
-
20
- def self.db_access
21
- Database.connect_database
22
- end
23
-
24
- def self.terminal(cmd, option, ws, value, user, pass)
25
- { return: `#{cmd}` }
26
- end
27
-
28
- def self.pass(cmd, option, ws, value, user, pass)
29
- { return: 'pass received' }
30
- end
31
-
32
- def self.init_db(cmd, option, ws, value, user, pass)
33
- # Database.
34
- { return: 'database initialised' }
35
- end
36
-
37
- def self.query(cmd, option, ws, value, user, pass)
38
- identity_table = db_access[cmd['table'].to_sym]
39
- result = identity_table.send(:all).send(:select)
40
- { action: :query, data: cmd['table'], return: result }
41
- end
42
-
43
- # def self.insert(cmd, option, ws, value, user, pass)
44
- # identity_table = db_access[:identity]
45
- # identity_table.insert(email: 'tre@tre')
46
- # { action: :insert, data: cmd, return: { email: 'tre@tre' } }
47
- # end
48
-
49
- def self.insert(params, option, ws, value, user, pass)
50
- table = params['table']
51
- particle = params['particle']
52
- data = params['data']
53
- identity_table = db_access[table.to_sym]
54
- # identity_table = db_access[:identity]
55
- #######
56
- identity_table.insert(particle => data )
57
- # identity_table.insert(email: 'tre@tre')
58
- #
59
- { return: "column : #{particle}, in table : #{table}, updated with : #{data}" }
60
- end
61
-
62
- # def self.authentification(cmd, option, ws, value, user, pass)
63
- # db = Database.connect_database
64
- # identity_items = db[:identity]
65
- # security_items = db[:security]
66
- #
67
- # identity_items.insert(email: 'tre@tre')
68
- # security_items.insert(password: 'poipoi')
69
- # # testtest= "Mails count: #{identity_items.count}"
70
- #
71
- # user_email = value["mail"]
72
- # user_password = value["pass"]
73
- #
74
- # # user_exists = identity_items.all.select{|item| item[:email]==user_email}
75
- # user_exists = identity_items.send(:all).send(:select) do |item|
76
- # item[:email] == user_email
77
- # end
78
- #
79
- # if user_exists.empty?
80
- # # "Mails count: #{identity_items.count}"
81
- # # "Mails count: #{identity_items.all}"
82
- # "Email non trouvé, erreur"
83
- # # Ask to the user if he wants to subscribe
84
- # # Send the basic template
85
- # else
86
- # "Email trouvé, cherche mdp"
87
- # # Verify password
88
- # # If password isn't ok, send error
89
- # # If the password is ok, send the user account template
90
- # end
91
- # end
92
-
93
- def self.file(source, operation, ws, value, user, pass)
94
- file_content = File.send(operation, source, value).to_s
95
- file_content = file_content.gsub("'", "\"")
96
- { return: "=> operation: #{operation}, source: #{source} , content : #{file_content}" }
97
- end
98
-
99
- # return_message = EDen.safe_send(action_requested, data,option, current_user, user_pass)
100
-
101
- def self.safe_send(method_name, *args)
102
- method_sym = method_name.to_sym
103
- eden_methods = EDen.singleton_methods(false) - Object.singleton_methods
104
- if eden_methods.include?(method_sym)
105
- send(method_sym, *args)
106
- else
107
- { return: "forbidden action: #{method_name}" }
108
- end
109
- end
110
- end
18
+ require './eDen'
19
+ require './database'
20
+ require './extensions'
111
21
 
112
22
  Faye::WebSocket.load_adapter('puma')
113
23
 
114
- class String
115
- def is_json?
116
- begin
117
- !JSON.parse(self).nil?
118
- rescue
119
- false
120
- end
121
- end
122
- end
123
-
124
- class Database
125
-
126
- def self.table_exists?(table_name)
127
- eden = Sequel.connect("sqlite://eden.sqlite3")
128
- if eden.table_exists?(table_name)
129
- puts "La table #{table_name} existe dans la base de données."
130
- else
131
- puts "La table suivante : #{table_name} n'existe pas dans la base de données."
132
- end
133
-
134
- end
135
-
136
- # def self.create_table(table_name)
137
- def self.connect_database
138
- if File.exist?("eden.sqlite3")
139
- eden = Sequel.connect("sqlite://eden.sqlite3")
140
- # now we test if the table exist
141
- table_exists?(:table_name)
142
- else
143
- eden = Sequel.connect("sqlite://eden.sqlite3")
144
- eden.create_table :atome do
145
- primary_key :atome_id
146
- String :creator
147
- end
148
-
149
- eden.create_table :communication do
150
- primary_key :communication_id
151
- String :connection
152
- JSON :data
153
- JSON :controller
154
- end
155
-
156
- ###################
157
-
158
- Sequel.extension :migration
159
-
160
- Sequel.migration do
161
- change do
162
- add_column :communication, :jesaispas, String
163
- end
164
- end.apply(eden, :up)
165
-
166
- ###################
167
-
168
- eden.create_table :effect do
169
- primary_key :effect_id
170
- Int :smooth
171
- Int :blur
172
- end
173
-
174
- eden.create_table :event do
175
- primary_key :event_id
176
- JSON :touch
177
- Boolean :play
178
- Boolean :pause
179
- Int :time
180
- Boolean :on
181
- Boolean :fullscreen
182
- Boolean :mute
183
- Boolean :drag
184
- Boolean :drop
185
- Boolean :over
186
- String :targets
187
- Boolean :start
188
- Boolean :stop
189
- Time :begin
190
- Time :end
191
- Int :duration
192
- Int :mass
193
- Int :damping
194
- Int :stiffness
195
- Int :velocity
196
- Boolean :repeat
197
- Boolean :ease
198
- Boolean :keyboard
199
- Boolean :resize
200
- Boolean :overflow
201
- end
202
-
203
- eden.create_table :geometry do
204
- primary_key :geometry_id
205
- Int :width
206
- Int :height
207
- Int :size
208
- end
209
-
210
- eden.create_table :hierarchy do
211
- primary_key :hierarchy_id
212
- String :attach
213
- String :attached
214
- String :apply
215
- String :affect
216
- String :detached
217
- String :collect
218
- end
219
-
220
- eden.create_table :identity do
221
- primary_key :identity_id
222
- String :real
223
- String :type
224
- Int :id
225
- String :name
226
- String :firstname
227
- String :email
228
- String :nickname
229
- Boolean :active
230
- String :markup
231
- String :bundle
232
- String :data
233
- String :category
234
- String :selection
235
- Boolean :selected
236
- String :format
237
- String :alien
238
- end
239
-
240
- eden.create_table :material do
241
- primary_key :material_id
242
- String :component
243
- Boolean :edit
244
- String :style
245
- Boolean :hide
246
- Boolean :remove
247
- JSON :classes
248
- Boolean :remove_classes
249
- Int :opacity
250
- String :definition
251
- Int :gradient
252
- Int :border
253
- end
254
-
255
- eden.create_table :property do
256
- primary_key :property_id
257
- String :red
258
- String :green
259
- String :blue
260
- String :alpha
261
- String :diffusion
262
- Boolean :clean
263
- String :insert
264
- Boolean :remove
265
- Int :sort
266
- end
267
-
268
- eden.create_table :security do
269
- primary_key :security_id
270
- String :password
271
- end
272
-
273
- eden.create_table :spatial do
274
- primary_key :spatial_id
275
- Int :left
276
- Int :right
277
- Int :top
278
- Int :bottom
279
- Int :rotate
280
- String :direction
281
- String :center
282
- Int :depth
283
- Int :position
284
- String :organise
285
- String :spacing
286
- Boolean :display
287
- String :layout
288
- end
289
-
290
- eden.create_table :time do
291
- primary_key :time_id
292
- JSON :markers
293
- end
294
-
295
- eden.create_table :utility do
296
- primary_key :utility_id
297
- String :renderers
298
- String :code
299
- Boolean :run
300
- Boolean :delete
301
- Boolean :clear
302
- String :path
303
- String :schedule
304
- String :read
305
- String :cursor
306
- String :preset
307
- JSON :relations
308
- JSON :tag
309
- String :web
310
- JSON :unit
311
- String :initialize
312
- String :login
313
- String :hypertext
314
- String :hyperedit
315
- String :terminal
316
- String :browse
317
- String :copies
318
- Int :temporary
319
- String :atomes
320
- String :match
321
- Boolean :invert
322
- String :option
323
- String :duplicate
324
- String :copy
325
- String :paste
326
- String :backup
327
- String :import
328
- String :compute
329
- String :get
330
- end
331
-
332
- end
333
- eden
334
- end
335
-
336
- end
337
-
338
24
  class App < Roda
339
-
340
- # comment below when test will be done
341
- # File.delete("./eden.sqlite3") if File.exist?("./eden.sqlite3")
342
- eden = Database.connect_database
343
- items = eden[:atome]
344
-
345
- # populate the table
346
- items.insert(creator: 'moi')
347
- items.insert(creator: 'toi')
348
- items.insert(creator: 'vous')
349
- puts "Item count: #{items.count}"
350
- test = "Item count: #{items.count}"
351
- # puts "My name is: #{items(:creator)}"
352
25
  index_content = File.read("../src/index_server.html")
353
26
  opts[:root] = '../src'
354
27
  plugin :static, %w[/css /js /medias], root: '../src'
@@ -356,34 +29,25 @@ class App < Roda
356
29
  r.root do
357
30
  if Faye::WebSocket.websocket?(r.env)
358
31
  ws = Faye::WebSocket.new(r.env)
359
- ws.on :open do |event|
32
+ ws.on :open do |_event|
360
33
  ws.send({ return: 'server ready' }.to_json)
361
- # ws.send('asking for synchro data'.to_json)
362
34
  end
363
-
364
35
  ws.on(:message) do |event|
365
36
  json_string = event.data.gsub(/(\w+):/) { "\"#{$1}\":" }.gsub('=>', ':')
366
37
  full_data = JSON.parse(json_string)
367
38
  data = full_data['data']
368
39
  action_requested = full_data['action']
369
- value = full_data['value']
370
- option = full_data['option']
371
- current_user = full_data['user']
372
- user_pass = full_data['pass']['global']
373
- # return_message = EDen.safe_send(action_requested, data, option, ws, value, current_user, user_pass)
374
- return_message = EDen.safe_send(action_requested, data, option, ws, value, current_user, user_pass)
40
+ message_id = full_data['message_id']
41
+ return_message = EDen.safe_send(action_requested, data, message_id)
375
42
  ws.send(return_message.to_json)
376
43
  end
377
-
378
44
  ws.on(:close) do |event|
379
45
  puts "server closed with status #{event.code}"
380
46
  end
381
47
  ws.rack_response
382
48
  end
383
-
384
49
  index_content
385
50
  end
386
-
387
51
  end
388
52
 
389
- end
53
+ end
@@ -0,0 +1,217 @@
1
+ # frozen_string_literal: true
2
+
3
+ # database handling for eDen Db
4
+
5
+ class Database
6
+
7
+ def self.table_exists?(table_name)
8
+ eden = Sequel.connect("sqlite://eden.sqlite3")
9
+ if eden.table_exists?(table_name)
10
+ puts "La table #{table_name} existe dans la base de données."
11
+ else
12
+ puts "La table suivante : #{table_name} n'existe pas dans la base de données."
13
+ end
14
+
15
+ end
16
+
17
+ # def self.create_table(table_name)
18
+ def self.connect_database
19
+ if File.exist?("eden.sqlite3")
20
+ eden = Sequel.connect("sqlite://eden.sqlite3")
21
+ # now we test if the table exist
22
+ table_exists?(:table_name)
23
+ else
24
+ eden = Sequel.connect("sqlite://eden.sqlite3")
25
+ eden.create_table :atome do
26
+ primary_key :atome_id
27
+ String :creator
28
+ end
29
+
30
+ eden.create_table :communication do
31
+ primary_key :communication_id
32
+ String :connection
33
+ JSON :data
34
+ JSON :controller
35
+ end
36
+
37
+ ###################
38
+
39
+ Sequel.extension :migration
40
+
41
+ Sequel.migration do
42
+ change do
43
+ add_column :communication, :jesaispas, String
44
+ end
45
+ end.apply(eden, :up)
46
+
47
+ ###################
48
+
49
+ eden.create_table :effect do
50
+ primary_key :effect_id
51
+ Int :smooth
52
+ Int :blur
53
+ end
54
+
55
+ eden.create_table :event do
56
+ primary_key :event_id
57
+ JSON :touch
58
+ Boolean :play
59
+ Boolean :pause
60
+ Int :time
61
+ Boolean :on
62
+ Boolean :fullscreen
63
+ Boolean :mute
64
+ Boolean :drag
65
+ Boolean :drop
66
+ Boolean :over
67
+ String :targets
68
+ Boolean :start
69
+ Boolean :stop
70
+ Time :begin
71
+ Time :end
72
+ Int :duration
73
+ Int :mass
74
+ Int :damping
75
+ Int :stiffness
76
+ Int :velocity
77
+ Boolean :repeat
78
+ Boolean :ease
79
+ Boolean :keyboard
80
+ Boolean :resize
81
+ Boolean :overflow
82
+ end
83
+
84
+ eden.create_table :geometry do
85
+ primary_key :geometry_id
86
+ Int :width
87
+ Int :height
88
+ Int :size
89
+ end
90
+
91
+ eden.create_table :hierarchy do
92
+ primary_key :hierarchy_id
93
+ String :attach
94
+ String :attached
95
+ String :apply
96
+ String :affect
97
+ String :detached
98
+ String :collect
99
+ end
100
+
101
+ eden.create_table :identity do
102
+ primary_key :identity_id
103
+ String :real
104
+ String :type
105
+ Int :id
106
+ String :name
107
+ String :firstname
108
+ String :email
109
+ String :nickname
110
+ Boolean :active
111
+ String :markup
112
+ String :bundle
113
+ String :data
114
+ String :category
115
+ String :selection
116
+ Boolean :selected
117
+ String :format
118
+ String :alien
119
+ end
120
+
121
+ eden.create_table :material do
122
+ primary_key :material_id
123
+ String :component
124
+ Boolean :edit
125
+ String :style
126
+ Boolean :hide
127
+ Boolean :remove
128
+ JSON :classes
129
+ Boolean :remove_classes
130
+ Int :opacity
131
+ String :definition
132
+ Int :gradient
133
+ Int :border
134
+ end
135
+
136
+ eden.create_table :property do
137
+ primary_key :property_id
138
+ String :red
139
+ String :green
140
+ String :blue
141
+ String :alpha
142
+ String :diffusion
143
+ Boolean :clean
144
+ String :insert
145
+ Boolean :remove
146
+ Int :sort
147
+ end
148
+
149
+ eden.create_table :security do
150
+ primary_key :security_id
151
+ String :password
152
+ end
153
+
154
+ eden.create_table :spatial do
155
+ primary_key :spatial_id
156
+ Int :left
157
+ Int :right
158
+ Int :top
159
+ Int :bottom
160
+ Int :rotate
161
+ String :direction
162
+ String :center
163
+ Int :depth
164
+ Int :position
165
+ String :organise
166
+ String :spacing
167
+ Boolean :display
168
+ String :layout
169
+ end
170
+
171
+ eden.create_table :time do
172
+ primary_key :time_id
173
+ JSON :markers
174
+ end
175
+
176
+ eden.create_table :utility do
177
+ primary_key :utility_id
178
+ String :renderers
179
+ String :code
180
+ Boolean :run
181
+ Boolean :delete
182
+ Boolean :clear
183
+ String :path
184
+ String :schedule
185
+ String :read
186
+ String :cursor
187
+ String :preset
188
+ JSON :relations
189
+ JSON :tag
190
+ String :web
191
+ JSON :unit
192
+ String :initialize
193
+ String :login
194
+ String :hypertext
195
+ String :hyperedit
196
+ String :terminal
197
+ String :browse
198
+ String :copies
199
+ Int :temporary
200
+ String :atomes
201
+ String :match
202
+ Boolean :invert
203
+ String :option
204
+ String :duplicate
205
+ String :copy
206
+ String :paste
207
+ String :backup
208
+ String :import
209
+ String :compute
210
+ String :get
211
+ end
212
+
213
+ end
214
+ eden
215
+ end
216
+
217
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ # server utils to handle eDen Db
4
+
5
+ class EDen
6
+
7
+ def self.db_access
8
+ Database.connect_database
9
+ end
10
+
11
+ def self.terminal(data, message_id)
12
+ { data: { message: `#{data}` }, message_id: message_id }
13
+ end
14
+
15
+ def self.authorization(_data, message_id)
16
+ { data: { message: 'password received'}, message_id: message_id }
17
+ end
18
+
19
+ def self.authentication(_data, message_id)
20
+ { data: { message: 'login received' }, message_id: message_id }
21
+ end
22
+
23
+ def self.init_db(_data, message_id)
24
+ { data: { message: 'database initialised' }, message_id: message_id }
25
+ end
26
+
27
+ def self.query(data, message_id)
28
+ identity_table = db_access[data['table'].to_sym]
29
+ result = identity_table.send(:all).send(:select)
30
+ { data: { table: data['table'], infos: result }, message_id: message_id }
31
+ end
32
+
33
+ def self.insert(data, message_id)
34
+ table = data['table'].to_sym
35
+ particle = data['particle'].to_sym
36
+ data = data['data']
37
+ if db_access.table_exists?(table)
38
+ schema = db_access.schema(table)
39
+ if schema.any? { |col_def| col_def.first == particle }
40
+ identity_table = db_access[table.to_sym]
41
+ identity_table.insert(particle => data)
42
+ { data: { message: "column : #{particle}, in table : #{table}, updated with : #{data}"}, message_id: message_id }
43
+ else
44
+ { data: { message: "column not found: #{particle.class}" }, message_id: message_id }
45
+ end
46
+ else
47
+ { data: { message: "table not found: #{table.class}" }, message_id: message_id }
48
+
49
+ end
50
+ end
51
+
52
+ def self.file(data, message_id)
53
+
54
+ file_content = File.send(data['operation'], data['source'], data['value']).to_s
55
+ file_content = file_content.gsub("'", "\"")
56
+
57
+ file_content = file_content.gsub('#', '\x23')
58
+ { data: "=> operation: #{data['operation']}, source: #{data['source']}, content: #{file_content}", message_id: message_id }
59
+ end
60
+
61
+ def self.safe_send(method_name, data, message_id)
62
+ method_sym = method_name.to_sym
63
+ send(method_sym, data, message_id)
64
+ end
65
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Object extensions for atome
4
+
5
+ class String
6
+ def is_json?
7
+ begin
8
+ !JSON.parse(self).nil?
9
+ rescue
10
+ false
11
+ end
12
+ end
13
+ end
@@ -1,5 +1,4 @@
1
1
  const communication = {
2
- // websocket: new WebSocket('ws://localhost:9292'),
3
2
  websocket: null,
4
3
  initialize: function () {
5
4
  this.websocket = new WebSocket('ws://localhost:9292')
@@ -10,9 +9,7 @@ const communication = {
10
9
  };
11
10
 
12
11
  this.websocket.onmessage = function (event) {
13
- rubyVMCallback('message', "('" + event.data + "')")
14
-
15
- // rubyVMCallback("puts 'object ruby callback : " + event.data + "'")
12
+ rubyVMCallback('message', "('" + event.data + "')")
16
13
  };
17
14
 
18
15
  this.websocket.onclose = function (event) {
@@ -65,22 +62,16 @@ const communication = {
65
62
  }
66
63
  },
67
64
  connect: function (type, server, user, pass, atomes, particles) {
68
- this.websocket = new WebSocket(type+'://'+server);
65
+ this.websocket = new WebSocket(type + '://' + server);
69
66
  this.websocket.onopen = function (event) {
70
67
 
71
- // Opal.eval('A.init_database');
72
- // now new can exec user code : loadApplicationJs in index.html
73
- // rubyVMCallback("A.init_database");
68
+ // now new can exec user code : loadApplicationJs in index.html
74
69
  loadApplicationJs();
75
70
  rubyVMCallback("A.user_login");
76
- // rubyVMCallback("A.init_database");
77
71
  };
78
72
  this.websocket.onmessage = function (event) {
79
- // rubyVMCallback("puts 'object ruby callback : " + event.data + "'")
80
- // rubyVMCallback('message', "('" + event.data + "')")
81
- // rubyVMCallback("A.callback({ touch: '" + event.data + "' })");
82
- rubyVMCallback("A.server_receiver(" + event.data + ")");
83
- // alert(event.data)
73
+ // console.log(event.data)
74
+ rubyVMCallback("A.server_receiver(" + event.data + ")");
84
75
  };
85
76
 
86
77
  this.websocket.onclose = function (event) {
@@ -97,6 +88,7 @@ const communication = {
97
88
  },
98
89
  ws_sender: function (message) {
99
90
  // now we send the data to the server
91
+ // puts "--> message : #{message}"
100
92
  this.websocket.send(message)
101
93
  },
102
94
  }
@@ -130,8 +122,7 @@ const communication = {
130
122
  // }
131
123
 
132
124
 
133
-
134
- function controller_message(msg){
125
+ function controller_message(msg) {
135
126
  // message receiver from controller (Vie)
136
127
  console.log(msg)
137
128
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6.2.0
4
+ version: 0.5.6.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Eric Godard
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-12 00:00:00.000000000 Z
11
+ date: 2024-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: artoo
@@ -622,6 +622,9 @@ files:
622
622
  - vendor/assets/server/atome_server_wasm.rb
623
623
  - vendor/assets/server/capture.rb
624
624
  - vendor/assets/server/config.ru
625
+ - vendor/assets/server/database.rb
626
+ - vendor/assets/server/eDen.rb
627
+ - vendor/assets/server/extensions.rb
625
628
  - vendor/assets/src-tauri/.gitignore
626
629
  - vendor/assets/src-tauri/Cargo.toml
627
630
  - vendor/assets/src-tauri/build.rs