atome 0.5.3.8.1 → 0.5.4.0.9

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 (112) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +52 -17
  3. data/app_builder_helpers/Rakefile +20 -3
  4. data/exe/atome +33 -1
  5. data/lib/atome/atome.rb +64 -75
  6. data/lib/atome/extensions/atome.rb +82 -52
  7. data/lib/atome/extensions/mathematic.rb +8 -12
  8. data/lib/atome/extensions/matrix.rb +141 -202
  9. data/lib/atome/genesis/generators/atome.rb +13 -96
  10. data/lib/atome/genesis/generators/communication.rb +0 -1
  11. data/lib/atome/genesis/generators/effect.rb +0 -6
  12. data/lib/atome/genesis/generators/event.rb +64 -77
  13. data/lib/atome/genesis/generators/geometry.rb +0 -18
  14. data/lib/atome/genesis/generators/identity.rb +56 -52
  15. data/lib/atome/genesis/generators/material.rb +3 -54
  16. data/lib/atome/genesis/generators/spatial.rb +8 -8
  17. data/lib/atome/genesis/generators/utility.rb +82 -68
  18. data/lib/atome/genesis/genesis.rb +15 -4
  19. data/lib/atome/genesis/sparkle.rb +38 -19
  20. data/lib/atome/helpers/callbacks.rb +47 -1
  21. data/lib/atome/helpers/essentials.rb +21 -18
  22. data/lib/atome/helpers/sanitizer.rb +0 -10
  23. data/lib/atome/helpers/utilities.rb +143 -45
  24. data/lib/atome/kernel/batch.rb +13 -36
  25. data/lib/atome/kernel/universe.rb +3 -1
  26. data/lib/atome/presets/atome.rb +14 -23
  27. data/lib/atome/renderers/browser/atome.rb +2 -1
  28. data/lib/atome/renderers/browser/browser.rb +2 -0
  29. data/lib/atome/renderers/browser/event.rb +18 -0
  30. data/lib/atome/renderers/browser/helpers/browser_helper.rb +17 -0
  31. data/lib/atome/renderers/browser/helpers/drag_helper.rb +13 -0
  32. data/lib/atome/renderers/browser/helpers/drop_helper.rb +13 -0
  33. data/lib/atome/renderers/browser/helpers/event_helper.rb +16 -11
  34. data/lib/atome/renderers/browser/helpers/over_helper.rb +13 -0
  35. data/lib/atome/renderers/browser/helpers/text_helper.rb +14 -2
  36. data/lib/atome/renderers/browser/identity.rb +23 -5
  37. data/lib/atome/renderers/browser/spatial.rb +3 -2
  38. data/lib/atome/renderers/browser/utility.rb +7 -6
  39. data/lib/atome/renderers/renderer.rb +1 -0
  40. data/lib/atome/version.rb +2 -2
  41. data/lib/atome.rb +1 -0
  42. data/sig/atome.rbs +36 -0
  43. data/sig/batch.rbs +7 -0
  44. data/sig/browser_helper.rbs +14 -0
  45. data/sig/essentials.rbs +11 -0
  46. data/sig/matrix.rbs +5 -0
  47. data/sig/object.rbs +3 -0
  48. data/vendor/assets/aui.rb +5 -0
  49. data/vendor/assets/src/index.html +15 -3
  50. data/vendor/assets/src/js/atome/atome.js +1 -1
  51. data/vendor/assets/src/js/atome/atome_helpers/atome_animate.js +1 -1
  52. data/vendor/assets/src/js/atome/atome_helpers/atome_communication.js +40 -0
  53. data/vendor/assets/src/js/atome/atome_helpers/atome_drag.js +40 -3
  54. data/vendor/assets/src/js/atome/atome_helpers/atome_drop.js +12 -0
  55. data/vendor/assets/src/js/atome/atome_helpers/atome_events.js +166 -0
  56. data/vendor/assets/src/js/atome/atome_helpers/atome_file.js +6 -1
  57. data/vendor/assets/src/js/atome/atome_helpers/atome_over.js +43 -0
  58. data/vendor/assets/src/medias/images/icons/email.svg +12 -12
  59. data/vendor/assets/src/medias/rubies/demos.rb +63 -0
  60. data/vendor/assets/src/medias/rubies/examples/add.rb +3 -4
  61. data/vendor/assets/src/medias/rubies/examples/animation.rb +2 -2
  62. data/vendor/assets/src/medias/rubies/examples/atome_new.rb +18 -6
  63. data/vendor/assets/src/medias/rubies/examples/attach.rb +15 -0
  64. data/vendor/assets/src/medias/rubies/examples/attached.rb +5 -6
  65. data/vendor/assets/src/medias/rubies/examples/batch.rb +17 -0
  66. data/vendor/assets/src/medias/rubies/examples/blur.rb +2 -2
  67. data/vendor/assets/src/medias/rubies/examples/box.rb +2 -2
  68. data/vendor/assets/src/medias/rubies/examples/code.rb +1 -1
  69. data/vendor/assets/src/medias/rubies/examples/color.rb +20 -4
  70. data/vendor/assets/src/medias/rubies/examples/delete.rb +18 -2
  71. data/vendor/assets/src/medias/rubies/examples/detached.rb +3 -3
  72. data/vendor/assets/src/medias/rubies/examples/drag.rb +53 -2
  73. data/vendor/assets/src/medias/rubies/examples/drop.rb +26 -0
  74. data/vendor/assets/src/medias/rubies/examples/fullscreen.rb +2 -2
  75. data/vendor/assets/src/medias/rubies/examples/image.rb +2 -2
  76. data/vendor/assets/src/medias/rubies/examples/link.rb +7 -5
  77. data/vendor/assets/src/medias/rubies/examples/markers.rb +2 -2
  78. data/vendor/assets/src/medias/rubies/examples/materials.rb +15 -0
  79. data/vendor/assets/src/medias/rubies/examples/matrix.rb +85 -41
  80. data/vendor/assets/src/medias/rubies/examples/matrix_changes.rb +483 -0
  81. data/vendor/assets/src/medias/rubies/examples/matrix_simple.rb +32 -0
  82. data/vendor/assets/src/medias/rubies/examples/monitoring.rb +44 -18
  83. data/vendor/assets/src/medias/rubies/examples/mute.rb +1 -1
  84. data/vendor/assets/src/medias/rubies/examples/on.rb +1 -1
  85. data/vendor/assets/src/medias/rubies/examples/over.rb +6 -4
  86. data/vendor/assets/src/medias/rubies/examples/pause.rb +1 -1
  87. data/vendor/assets/src/medias/rubies/examples/physical.rb +19 -0
  88. data/vendor/assets/src/medias/rubies/examples/play.rb +1 -1
  89. data/vendor/assets/src/medias/rubies/examples/read.rb +2 -2
  90. data/vendor/assets/src/medias/rubies/examples/repeat.rb +3 -2
  91. data/vendor/assets/src/medias/rubies/examples/shadow.rb +1 -1
  92. data/vendor/assets/src/medias/rubies/examples/sort.rb +3 -4
  93. data/vendor/assets/src/medias/rubies/examples/tags.rb +10 -0
  94. data/vendor/assets/src/medias/rubies/examples/text.rb +4 -4
  95. data/vendor/assets/src/medias/rubies/examples/time.rb +3 -3
  96. data/vendor/assets/src/medias/rubies/examples/video.rb +2 -2
  97. data/vendor/assets/src/medias/rubies/examples/web.rb +2 -2
  98. data/vendor/assets/src/medias/rubies/{examples → unstable}/_2_solve.rb +1 -1
  99. data/vendor/assets/src/medias/rubies/{examples → unstable}/_audio.rb +1 -1
  100. data/vendor/assets/src/medias/rubies/{examples → unstable}/_dataset.rb +4 -4
  101. data/vendor/assets/src/medias/rubies/unstable/_matrix.rb +58 -0
  102. data/vendor/assets/src/medias/rubies/{examples → unstable}/_table2.rb +2 -2
  103. data/vendor/assets/src/medias/rubies/{examples → unstable}/_vie.rb +2 -2
  104. data/vendor/assets/src/utilities/mode.rb +0 -0
  105. data/vendor/assets/src-tauri/tauri.conf.json +2 -2
  106. metadata +34 -14
  107. data/vendor/assets/src/medias/rubies/examples/parents.rb +0 -15
  108. data/vendor/assets/src/medias/rubies/examples/table.rb +0 -479
  109. /data/vendor/assets/src/medias/rubies/{examples → unstable}/!run.rb +0 -0
  110. /data/vendor/assets/src/medias/rubies/{examples → unstable}/_attach.rb +0 -0
  111. /data/vendor/assets/src/medias/rubies/{examples → unstable}/_os.rb +0 -0
  112. /data/vendor/assets/src/medias/rubies/{examples → unstable}/_test.rb +0 -0
@@ -18,64 +18,83 @@ end
18
18
  # now let's get the default render engine
19
19
  default_render = Essentials.default_params[:render_engines]
20
20
 
21
+
22
+ def atome_infos
23
+ puts "atome version: #{Atome::VERSION}"
24
+ # puts "application identity: #{Universe.app_identity}"
25
+ puts "application identity: #{Atome::aui}"
26
+ # puts "application mode: #{Atome.mode}"
27
+ puts "host framework: #{$host}"
28
+ puts "script mode: #{Universe.current_machine}"
29
+ puts "user: #{Universe.current_user}"
30
+ puts "server: #{Universe.current_server}"
31
+ end
32
+
21
33
  Universe.current_user = :jeezs
22
- puts "application identity: #{Universe.app_identity}"
23
- puts "atome version: #{Atome::VERSION}"
24
- puts "current host: #{Universe.current_machine}"
25
- puts "current user: #{Universe.current_user}"
26
- puts "current server: #{Universe.current_server}"
34
+
35
+
36
+ atome_infos
27
37
 
28
38
  Atome.new(
29
- { element: { renderers: [], id: :eDen, type: :element,
30
- parents: [], children: [] } }
39
+ { element: { renderers: [], id: :eDen, type: :element , tag: {system: true}} }
31
40
  )
32
41
 
33
42
  Atome.new(
34
- { element: { renderers: [], id: :user_view, type: :element,
35
- parents: [:eDen], children: [] } }
43
+ { element: { renderers: [], id: :user_view, type: :element, tag: {system: true},
44
+ attach: [:eDen] } }
36
45
  )
37
46
 
38
47
  # color creation
39
48
  Atome.new(
40
- { color: { renderers: default_render, id: :view_color, type: :color,
49
+ { color: { renderers: default_render, id: :view_color, type: :color,tag: ({persistent: true}),
41
50
  red: 0.15, green: 0.15, blue: 0.15, alpha: 1 } }
42
51
  )
43
52
 
44
53
  Atome.new(
45
- { color: { renderers: default_render, id: :shape_color, type: :color,
54
+ { color: { renderers: default_render, id: :shape_color, type: :color,tag: ({persistent: true}),
46
55
  red: 0.4, green: 0.4, blue: 0.4, alpha: 1 } }
47
56
  )
48
57
 
49
58
  Atome.new(
50
- { color: { renderers: default_render, id: :box_color, type: :color,
59
+ { color: { renderers: default_render, id: :box_color, type: :color,tag: ({persistent: true}),
51
60
  red: 0.5, green: 0.5, blue: 0.5, alpha: 1 } }
52
61
  )
53
62
 
54
63
  Atome.new(
55
- { color: { renderers: default_render, id: :text_color, type: :color,
64
+ { color: { renderers: default_render, id: :text_color, type: :color,tag: ({persistent: true}),
56
65
  red: 0.3, green: 0.3, blue: 0.3, alpha: 1 } }
57
66
  )
58
67
 
59
68
  Atome.new(
60
- { color: { renderers: default_render, id: :circle_color, type: :color,
69
+ { color: { renderers: default_render, id: :circle_color, type: :color,tag: ({persistent: true}),
61
70
  red: 0.6, green: 0.6, blue: 0.6, alpha: 1 } }
62
71
  )
63
72
 
64
73
  Atome.new(
65
- { color: { renderers: default_render, id: :matrix_color, type: :color,
74
+
75
+ { color: { renderers: default_render, id: :matrix_color, type: :color,tag: ({persistent: true}),
66
76
  left: 0, top: 0, red: 0.7, green: 0.7, blue: 0.7, alpha: 1, diffusion: :linear } }
67
77
  )
68
78
 
69
79
  # system object creation
70
80
  # the black_matter is used to store un materialized atomes
71
81
  Atome.new(
72
- { shape: { renderers: default_render, id: :black_matter, type: :shape, parents: [:user_view], children: [],
73
- left: 0, right: 0, top: 0, bottom: 0, width: 0, height: 0, overflow: :hidden
82
+ { shape: { renderers: default_render, id: :black_matter, type: :shape, attach: [:user_view],
83
+ left: 0, right: 0, top: 0, bottom: 0, width: 0, height: 0, overflow: :hidden, tag: {system: true}
74
84
  } })
85
+
75
86
  # view port
76
87
  Atome.new(
77
- { shape: { renderers: default_render, id: :view, type: :shape, parents: [:user_view], children: [],
78
- attached: [:view_color], left: 0, right: 0, top: 0, bottom: 0, width: :auto, height: :auto, overflow: :auto
88
+ { shape: { renderers: default_render, id: :view, type: :shape, attach: [:user_view], tag: {system: true},
89
+ attached: :view_color, left: 0, right: 0, top: 0, bottom: 0, width: :auto, height: :auto, overflow: :auto,
90
+ }
91
+ }
92
+ )
93
+
94
+ #unreal port
95
+ Atome.new(
96
+ { shape: { renderers: default_render, id: :intuition, type: :shape, attach: [:user_view], tag: {system: true},
97
+ left: 0, top: 0, width: 0, height: 0, overflow: :visible,
79
98
  }
80
99
  }
81
100
  )
@@ -5,6 +5,7 @@ class Atome
5
5
  private
6
6
 
7
7
  attr_accessor :drag_start_proc, :drag_move_proc, :drag_end_proc,
8
+ :drop_action_proc,:over_action_proc,
8
9
  :play_start_proc, :play_active_proc, :play_end_proc,
9
10
  :animation_start_proc, :animation_active_proc, :animation_stop_proc
10
11
 
@@ -15,7 +16,10 @@ class Atome
15
16
  end
16
17
 
17
18
  def read_callback(file, proc)
18
- instance_exec(file, &proc) if proc.is_a?(Proc)
19
+ file_content=file.split('</head><body>')[1].split('</body></html>')[0]
20
+ # FIXME : found why '> is converted to &gt;'
21
+ file_content=file_content.gsub("&gt;", ">")
22
+ instance_exec(file_content, &proc) if proc.is_a?(Proc)
19
23
  end
20
24
 
21
25
  def time_callback(current_time, markers)
@@ -29,6 +33,7 @@ class Atome
29
33
  end
30
34
  end
31
35
 
36
+ # drag callbacks
32
37
  def drag_start_callback(page_x, page_y, left_val, top_val)
33
38
  @atome[:left] = left_val
34
39
  @atome[:top] = top_val
@@ -46,10 +51,51 @@ class Atome
46
51
  def drag_end_callback(page_x, page_y, left_val, top_val)
47
52
  @atome[:left] = left_val
48
53
  @atome[:top] = top_val
54
+ # alert :loo
55
+ # #now we rest the position
56
+ # self.left(left_val)
57
+ # self.top(top_val)
49
58
  proc = @drag_end_proc
50
59
  instance_exec({ pageX: page_x, pageY: page_y, left: left_val, top: top_val }, &proc) if proc.is_a?(Proc)
51
60
  end
52
61
 
62
+ # drop callbacks
63
+ def drop_action_callback( data_found, _full_event)
64
+ proc = @drop_action_proc
65
+ instance_exec(data_found, &proc) if proc.is_a?(Proc)
66
+ end
67
+
68
+ # def over_action_callback( data_found, _full_event)
69
+ # proc = @enter_action_proc
70
+ # instance_exec(data_found, &proc) if proc.is_a?(Proc)
71
+ # end
72
+
73
+ # drop callbacks
74
+ def enter_action_callback( data_found, _full_event)
75
+ proc = @enter_action_proc
76
+ instance_exec( data_found,&proc) if proc.is_a?(Proc)
77
+ end
78
+
79
+ def leave_action_callback(data_found)
80
+ proc = @leave_action_proc
81
+ instance_exec( data_found,&proc) if proc.is_a?(Proc)
82
+ end
83
+
84
+
85
+ # def drag_move_callback(page_x, page_y, left_val, top_val)
86
+ # proc = @drag_move_proc
87
+ # @atome[:left] = left_val
88
+ # @atome[:top] = top_val
89
+ # instance_exec({ pageX: page_x, pageY: page_y, left: left_val, top: top_val }, &proc) if proc.is_a?(Proc)
90
+ # end
91
+ #
92
+ # def drag_end_callback(page_x, page_y, left_val, top_val)
93
+ # @atome[:left] = left_val
94
+ # @atome[:top] = top_val
95
+ # proc = @drag_end_proc
96
+ # instance_exec({ pageX: page_x, pageY: page_y, left: left_val, top: top_val }, &proc) if proc.is_a?(Proc)
97
+ # end
98
+
53
99
  # sort callbacks
54
100
  def sort_callback(atome)
55
101
  sort_proc = @sort_proc
@@ -3,28 +3,32 @@
3
3
  # use to sanitize and secure user input
4
4
  module Essentials
5
5
  @default_params = {
6
+ # Warning : type must be define first
6
7
  render_engines: [:browser],
7
- collector: { type: :element, renderers: [], children: [], parents: [:black_matter] },
8
- animation: { type: :animation, children: [] , parents: [:black_matter]},
9
- element: { type: :element, renderers: [], children: [] , parents: [:black_matter]},
10
- matrix: { renderers: [], id: '', type: :shape, width: 99, height: 99,
11
- attached: [:matrix_color], children: [],
12
- left: 100, top: 100, clones: [], preset: :matrix, parents: [:view] },
13
- box: { renderers: [], id: '', type: :shape, width: 99, height: 99,
14
- attached: [:box_color], children: [], parents: [:view],
8
+ # collector: { type: :element, attach: [:black_matter] },
9
+ image: { type: :image, attach: [:view] },
10
+ web: { type: :web, attach: [:view] },
11
+ video: { type: :video, attach: [:view] },
12
+ animation: { type: :animation, attach: [:black_matter] },
13
+ element: { type: :element, renderers: [], attach: [:black_matter] },
14
+ matrix: { type: :shape, width: 99, height: 99,
15
+ attached: :matrix_color,
16
+ left: 100, top: 100, clones: [], preset: :matrix, attach: [:view] },
17
+ box: { type: :shape, width: 99, height: 99,
18
+ attached: :box_color, attach: [:view],
15
19
  left: 100, top: 100, clones: [], preset: :box },
16
- circle: { renderers: [], id: '', type: :shape, width: 99, height: 99, smooth: '100%',
17
- attached: [:circle_color], children: [], parents: [:view],
20
+ circle: { type: :shape, width: 99, height: 99, smooth: '100%',
21
+ attached: :circle_color, attach: [:view],
18
22
  left: 100, top: 100, clones: [], preset: :circle },
19
- shape: { renderers: [], id: '', type: :shape, width: 99, height: 99,
20
- attached: [:shape_color], children: [], parents: [:view],
23
+ shape: { type: :shape, width: 99, height: 99,
24
+ attached: :shape_color, attach: [:view],
21
25
  left: 100, top: 100, clones: [] },
22
- text: { renderers: [], id: '', type: :text, visual: { size: 25 },
23
- attached: [:text_color], children: [], parents: [:view],
26
+ text: { type: :text, visual: { size: 25 },
27
+ attached: :text_color, attach: [:view],
24
28
  data: 'this is a text sample', width: 199, height: 33, clones: [] },
25
- drm: { type: :drm,parents: [:black_matter] },
26
- shadow: {parents: [:black_matter]},
27
- color: {parents: [:black_matter]}
29
+ drm: { type: :drm, attach: [:black_matter] },
30
+ shadow: { type: :shadow, attach: [:black_matter] },
31
+ color: { type: :color,attach: [:black_matter], red: 0, green: 0, blue: 0, alpha: 1 }
28
32
  }
29
33
 
30
34
  def self.default_params
@@ -32,7 +36,6 @@ module Essentials
32
36
  end
33
37
 
34
38
  def self.new_default_params(new_default)
35
- # puts "=====+====> #{new_default}, #{new_default.class}"
36
39
  @default_params.merge!(new_default)
37
40
  end
38
41
 
@@ -10,14 +10,4 @@ class Atome
10
10
  { red: split_data[0].to_f / 100, green: split_data[1].to_f / 100, blue: split_data[2].to_f / 100 }
11
11
  end
12
12
 
13
- def found_parents_and_renderers
14
- if @atome
15
- parent_found = [@atome[:id]]
16
- render_found = @atome[:renderers]
17
- else
18
- parent_found = []
19
- render_found = Essentials.default_params[:render_engines]
20
- end
21
- { parent: parent_found, renderers: render_found }
22
- end
23
13
  end
@@ -4,9 +4,40 @@
4
4
  class Atome
5
5
  private
6
6
 
7
+ # local server messaging
8
+ def self.controller_sender(message)
9
+ return if $host == :browser
10
+
11
+ json_msg = message.to_json
12
+ atome_js.JS.controller_sender(json_msg)
13
+
14
+ end
15
+
16
+ def response_listener(hashed_msg)
17
+ js_action = hashed_msg.JS[:action]
18
+ js_body = hashed_msg.JS[:body]
19
+ send(js_action, js_body)
20
+ end
21
+
22
+ def self.controller_listener
23
+
24
+ return if $host == :browser
25
+
26
+ atome_js.JS.controller_listener()
27
+
28
+ end
29
+
30
+ # def self.mode=(val)
31
+ # @atome_mode=val
32
+ # end
33
+ #
34
+ # def self.mode
35
+ # "@atome_mode"
36
+ # end
37
+
7
38
  def collapse
8
39
  @atome.each do |element, value|
9
- send(element, value) unless element == :type
40
+ send(element, value)
10
41
  end
11
42
  end
12
43
 
@@ -14,22 +45,21 @@ class Atome
14
45
  true
15
46
  end
16
47
 
17
- def sanitize(element, params,&user_proc)
48
+ def sanitize(element, params, &user_proc)
18
49
  bloc_found = Universe.get_sanitizer_method(element)
19
- params = instance_exec(params,user_proc, &bloc_found) if bloc_found.is_a?(Proc)
50
+ params = instance_exec(params, user_proc, &bloc_found) if bloc_found.is_a?(Proc)
20
51
  params
21
52
  end
22
53
 
23
-
24
54
  def history(property, value)
25
55
  "historize : #{property} #{value}"
26
56
  end
27
57
 
28
58
  def broadcasting(element)
29
- params=instance_variable_get("@#{element}")
59
+ params = instance_variable_get("@#{element}")
30
60
  @broadcast.each_value do |particle_monitored|
31
61
  if particle_monitored[:particles].include?(element)
32
- code_found=particle_monitored[:code]
62
+ code_found = particle_monitored[:code]
33
63
  instance_exec(self, element, params, &code_found) if code_found.is_a?(Proc)
34
64
  end
35
65
  end
@@ -37,14 +67,14 @@ class Atome
37
67
 
38
68
  public
39
69
 
40
- def monitor(params=nil, &proc_monitoring)
70
+ def monitor(params = nil, &proc_monitoring)
41
71
  if params
42
- monitoring=atome[:monitor] ||= {}
72
+ monitoring = atome[:monitor] ||= {}
43
73
  params[:atomes].each do |atome_id|
44
74
  target_broadcaster = grab(atome_id).instance_variable_get('@broadcast')
45
75
  monitor_id = params[:id] || "monitor#{target_broadcaster.length}"
46
- monitoring[monitor_id]=params.merge({code: proc_monitoring})
47
- target_broadcaster[monitor_id] = { particles: params[:particles], code: proc_monitoring }
76
+ monitoring[monitor_id] = params.merge({ code: proc_monitoring })
77
+ target_broadcaster[monitor_id] = { particles: params[:particles], code: proc_monitoring }
48
78
  end
49
79
  else
50
80
  atome[:monitor]
@@ -59,7 +89,6 @@ class Atome
59
89
  instance_variable_set("@#{element}_code", user_proc)
60
90
  end
61
91
 
62
-
63
92
  def particles(particles_found = nil)
64
93
  if particles_found
65
94
  particles_found.each do |particle_found, value_found|
@@ -71,11 +100,28 @@ class Atome
71
100
  end
72
101
 
73
102
  def <<(particle)
74
- value = particle.value
75
- real_atome[property] << value
103
+
104
+ real_atome[property] << particle
105
+ end
106
+
107
+ def add_to_integer(_atome_found, _particle_found, &_user_proc)
108
+ puts "there's no interest to add anything to an integer!"
109
+ end
110
+
111
+ def add_to_float(_atome_found, _particle_found, &_user_proc)
112
+ puts "there's no interest to add anything to an integer!"
113
+ end
114
+
115
+ def add_to_bignum(_atome_found, _particle_found, &_user_proc)
116
+ puts "there's no interest to add anything to an integer!"
117
+ end
118
+
119
+ def add_to_string(_atome_found, _particle_found, &_user_proc)
120
+ puts "there's no interest to add anything to an string!"
76
121
  end
77
122
 
78
123
  def add_to_hash(particle, values, &user_proc)
124
+ @atome[:add][particle] = true
79
125
  # we update the holder of any new particle if user pass a bloc
80
126
  store_code_bloc(particle, &user_proc) if user_proc
81
127
  values.each do |value_id, value|
@@ -84,36 +130,53 @@ class Atome
84
130
  end
85
131
 
86
132
  def add_to_array(particle, value, &_user_proc)
133
+ @atome[:add][particle] = true
87
134
  # we update the holder of any new particle if user pass a bloc
88
135
  @atome[particle] << value
89
136
  end
90
137
 
91
- def add_to_atome(atome_found, particle_found, &user_proc)
92
- puts "we add : #{particle_found} to #{send(atome_found)} "
93
- send(atome_found,particle_found,:adder, &user_proc)
138
+ def add_to_atome(atome_type, particle_found, &user_proc)
139
+ # puts "-----> atome_type : #{atome_type}, particle_found : #{particle_found}"
140
+ # @atome[:add] = [] unless @atome[:add]
141
+ @atome[:add][atome_type] = particle_found
142
+ send(atome_type, particle_found, &user_proc)
94
143
  end
95
144
 
96
145
  def add(particles, &user_proc)
146
+
147
+ @atome[:add] = {} unless @atome[:add]
97
148
  particles.each do |particle, value|
98
149
  particle_type = Universe.particle_list[particle] || 'atome'
99
150
  send("add_to_#{particle_type}", particle, value, &user_proc)
151
+ # now we remove systematically the added hash so next particle won't be automatically added
152
+ @atome[:add].delete(particle)
100
153
  end
101
154
  end
102
155
 
156
+ def substract(_particles, &_user_proc)
157
+ # TODO : write code here to remove add elements"
158
+ puts "write code here to remove add elements"
159
+ # @atome[:add]=:poi
160
+ # particles.each do |particle, value|
161
+ # particle_type = Universe.particle_list[particle] || 'atome'
162
+ # puts "<<<<<< this the place to b ....>>>>>>#{particles} #{particle_type}"
163
+ # send("add_to_#{particle_type}", particle, value, &user_proc)
164
+ # end
165
+ end
166
+
103
167
  def refresh
104
168
  collapse
105
169
  end
106
170
 
107
- def collector(params = {}, &bloc)
108
- atome_type = :collector
109
- generated_render = params[:renderers] || []
110
- generated_id = params[:id] || identity_generator(atome_type)
111
-
112
- generated_parents = params[:parents] || [id.value]
113
- generated_children = params[:children] || []
114
- params = atome_common(atome_type, generated_id, generated_render, generated_parents, generated_children, params)
115
- Batch.new({ atome_type => params }, &bloc)
116
- end
171
+ # def collector(params = {}, &bloc)
172
+ # atome_type = :collector
173
+ # # generated_render = params[:renderers] || []
174
+ # # generated_id = params[:id] || identity_generator(atome_type)
175
+ # #
176
+ # # generated_parents = params[:parents] || [id]
177
+ # params = atome_common(atome_type, params)
178
+ # Batch.new({ atome_type => params }, &bloc)
179
+ # end
117
180
 
118
181
  def each(&proc)
119
182
  value.each do |val|
@@ -122,35 +185,34 @@ class Atome
122
185
  end
123
186
 
124
187
  def include?(value)
125
- self.value.include?(value)
188
+ self.include?(value)
126
189
  end
127
190
 
128
-
129
-
130
- def each_with_index(*args)
131
- self.value.each_with_index do |val, index|
132
- yield(val, index)
133
- end
191
+ def each_with_index(*args, &block)
192
+ value.each_with_index(&block)
134
193
  end
135
194
 
136
195
  def [](range)
137
- if value[range].class == Atome
138
- return value[range]
139
- elsif value[range].class == Array
140
- collector_object = Object.collector({})
141
- collected_atomes = []
142
- value[range].each do |atome_found|
143
- collected_atomes << atome_found
144
- end
145
- collector_object.data(collected_atomes)
146
-
147
- return collector_object
196
+ if instance_of?(Atome)
197
+ value[range]
198
+ # elsif value[range].instance_of?(Atome)
199
+ # return value[range]
200
+ elsif value[range].instance_of?(Array)
201
+ # collector_object = Object.collector({})
202
+ # collected_atomes = []
203
+ # value[range].each do |atome_found|
204
+ # collected_atomes << atome_found
205
+ # end
206
+ # collector_object.data(collected_atomes)
207
+ Batch.new(value[range])
208
+ # return collector_object
148
209
  end
149
210
 
150
211
  end
212
+
151
213
  def []=(params, value)
152
214
  # TODO : it may miss some code, see above
153
- self.value[params] = value
215
+ self[params] = value
154
216
  end
155
217
 
156
218
  def set(params)
@@ -169,4 +231,40 @@ class Atome
169
231
  end
170
232
  end
171
233
 
234
+ def materials
235
+ # TODO: the code below need a rewrite, we must find a new algorithm to avoid all those conditions
236
+ images_found = atome[:image] || []
237
+ videos_found = atome[:video] || []
238
+ shapes_found = atome[:shape] || []
239
+ web_found = atome[:web] || []
240
+ texts_found = atome[:text] || []
241
+ images_found.concat(videos_found).concat(shapes_found).concat(web_found).concat(texts_found)
242
+ end
243
+
244
+
245
+ def physical
246
+ types=[:text, :image, :video, :shape, :web]
247
+ atomes_found=[]
248
+ types.each do |type|
249
+ ids_found = self.send(type)
250
+ next unless ids_found
251
+
252
+ ids_found.each do |id_found|
253
+ atomes_found << id_found
254
+ end
255
+ end
256
+ atomes_found
257
+ end
258
+
259
+ def detach_atome(atome_id_to_detach)
260
+ atome_to_detach = grab(atome_id_to_detach)
261
+ # TODO: remove the condition below and find why it try to detach an atome that doesn't exist
262
+ return unless atome_to_detach
263
+ atome_type_found = atome_to_detach.atome[:type]
264
+ atome_id_found = atome_to_detach.atome[:id]
265
+ @atome[atome_type_found].delete(atome_id_found)
266
+ @atome[:attached].delete(atome_id_to_detach)
267
+
268
+ end
269
+
172
270
  end
@@ -1,49 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # this class is used to allow batch treatment
3
4
  class Batch
4
-
5
5
  def each(&proc)
6
- value.each do |val|
7
- instance_exec(val, &proc) if proc.is_a?(Proc)
8
- end
9
- end
10
-
11
- def id(val = nil)
12
- if val
13
- @id = val
14
- else
15
- @id
6
+ @data.each do |val|
7
+ atome_found = grab(val)
8
+ instance_exec(atome_found, &proc) if proc.is_a?(Proc)
16
9
  end
17
10
  end
18
11
 
19
12
  def initialize(params)
20
- @id = params[:id] || identity_generator(:batch)
21
- Universe.add_to_atomes(@id, self)
22
- Universe.add_to_atomes(@id, self)
13
+ @data = params
14
+ # self
23
15
  end
24
16
 
25
- def dispatch (method, *args, &block)
17
+ def dispatch(method, args, &block)
26
18
  @data.each do |atome_found|
27
- atome_found.send(method, *args, &block)
19
+ args.each do |arg|
20
+ grab(atome_found).send(method, arg, &block)
21
+ end
28
22
  end
23
+ # we return self to allow method chaining
24
+ self
29
25
  end
30
-
31
- # TODO: automatise collector methods creation when creating a new atome type
32
- def color(args, &block)
33
-
34
- dispatch(:color, args, &block)
35
- end
36
-
37
- def shadow(args, &block)
38
- dispatch(:color, args, &block)
39
- end
40
-
41
- def method_missing(method, *args, &block)
42
- dispatch(method, args, &block)
43
- end
44
-
45
- def data(collection)
46
- @data = collection
47
- end
48
-
49
- end
26
+ end
@@ -19,7 +19,9 @@ class Universe
19
19
 
20
20
  def add_optional_method(method_name, &method_proc)
21
21
  # this method is used to add optional methods
22
+ # puts "3 => #{method_name}"
22
23
  instance_variable_get('@options').merge!({ method_name => method_proc })
24
+ # puts "====> #{instance_variable_get('@options')[method_name]}"
23
25
  end
24
26
 
25
27
  def get_optional_method(method_name)
@@ -54,7 +56,7 @@ class Universe
54
56
 
55
57
  def app_identity
56
58
  # each app hav its own identity, this allow to generate new user identities from th
57
- @app_identity = 3
59
+ @app_identity = 369
58
60
  # the identity is define as follow : parentsCreatorID_softwareInstanceID_objetID
59
61
  # in this case parents is eve so 0, Software instance number is main eVe server which is also 0,
60
62
  # and finally the object is 3 as this the third object created by the main server
@@ -5,39 +5,30 @@
5
5
  # TODO: Factorise codes below
6
6
  # TODO we must clarified/unified the usage of presets and sanitizer it is not clear
7
7
 
8
-
9
8
  class Atome
10
- def atome_common(atome_type, generated_id, generated_render, generated_parents, generated_children, params)
11
- temp_default = Essentials.default_params[atome_type] || {}
12
- temp_default[:id] = generated_id
13
- temp_default[:parents] = generated_parents
14
- temp_default[:clones] = []
15
- temp_default[:renderers] = generated_render
16
- temp_default[:children] = generated_children.concat(temp_default[:children])
17
- temp_default.merge(params)
9
+ def atome_common(atome_type, params)
10
+ # TODO : optimise the whole code below and make it rubocop friendly
11
+ essential_params = Essentials.default_params[atome_type] || {}
12
+ essential_params[:type] = essential_params[:type] || :element
13
+ essential_params[:renderers] = essential_params[:renderers] || @atome[:renderers]
14
+ essential_params[:id] = params[:id] || identity_generator(atome_type)
15
+ essential_params[:attach] = params[:attach] || [@atome[:id]] || [:view]
16
+ essential_params.merge(params)
18
17
  end
19
18
 
20
19
  def box(params = {}, &bloc)
21
- default_renderer = Essentials.default_params[:render_engines]
22
20
  atome_type = :box
23
- generated_render = params[:renderers] || default_renderer
24
- generated_id = params[:id] || identity_generator(:box)
25
- generated_parents = params[:parents] || [id.value]
26
- generated_children = params[:children] || []
27
-
28
- params = atome_common(atome_type, generated_id, generated_render, generated_parents, generated_children, params)
29
-
21
+ params = atome_common(atome_type, params)
30
22
  Atome.new({ atome_type => params }, &bloc)
31
23
  end
32
24
 
33
25
  def circle(params = {}, &bloc)
34
- default_renderer = Essentials.default_params[:render_engines]
35
26
  atome_type = :circle
36
- generated_render = params[:renderers] || default_renderer
37
- generated_id = params[:id] || identity_generator(:circle)
38
- generated_parents = params[:parents] || [id.value]
39
- generated_children = params[:children] || []
40
- params = atome_common(atome_type, generated_id, generated_render, generated_parents, generated_children, params)
27
+ # puts "counter#{Universe.counter}"
28
+
29
+ params = atome_common(atome_type, params)
30
+ # puts "params ==> #{params} : #{Universe.counter}"
31
+
41
32
  Atome.new({ atome_type => params }, &bloc)
42
33
  end
43
34