atome 0.5.3.8.1 → 0.5.4.0.9

Sign up to get free protection for your applications and to get access to all the features.
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