lib/atome/genesis/genesis.rb in atome-0.5.7.3.9 vs lib/atome/genesis/genesis.rb in atome-0.5.7.4.2
- old
+ new
@@ -20,12 +20,10 @@
render = true if options[:render].nil?
# we add the new method to the particle's collection of methods
Universe.add_to_particle_list(particle_name, type, category)
# the line below create an empty particle method for each renderer, eg: browser_left, headless_width, ...
- # the line below create the corresponding particle method for Batch class
- # particle_method_for_batch(particle_name)
auto_render_generator(particle_name) if render
new_particle(particle_name, store, render, &particle_proc)
# the line below create all alternatives methods such as create 'method='
additional_particle_methods(particle_name, store, render, &particle_proc)
end
@@ -34,12 +32,10 @@
# we add the new method to the atome's collection of methods
Universe.add_to_atome_list(atome_name)
# the method below generate Atome method creation at Object level,
# so a syntax like : 'text(:hello)' is possible instead of the mandatory : grab(:view).text(:hello)
atome_method_for_object(atome_name)
- # the line below create the corresponding atome method for Batch class
- # atome_method_for_batch(atome_name)
unless Essentials.default_params[atome_name]
# we create default params for the new created atome, adding the hash to : module essential, @default_params
# FIXME : the hash : attach: [:view] means that newly atome will systematically be fasten to the wview instaed of the parent:
# ex : b.www will attach to view not b!
Essentials.new_default_params(atome_name => { type: atome_name })
@@ -74,54 +70,41 @@
def build_option(method_name, method_proc)
Universe.add_optional_method(method_name.to_sym, method_proc)
end
def new_particle(element, store, render, &_method_proc)
- # unless @id
- # alert self.id
- # end
Atome.define_method element do |params = nil, &user_proc|
@history[element] ||= []
if (params || params == false) && write_auth(element)
params = particle_sanitizer(element, params, &user_proc)
# the line below execute the main code when creating a new particle
# ex : new({ particle: :my_particle } do....
- # instance_exec(params, user_proc, &method_proc) if method_proc.is_a?(Proc)
Genesis.create_particle(element, store, render)
# TODO: try to optimise and find a better way wo we can remove the condition below
if @type == :group && !%i[type id collect layout].include?(element)
collect.each do |collected_found|
grab(collected_found).send(element, params, &user_proc)
end
end
computed_params = send("set_#{element}", params, &user_proc) # sent to : create_particle / Atome.define_method "set_#{element}"
- # we historicize all write action below
- # we add the changes to the stack that must be synchronised
- # Universe.historicize(@aid, :write, element, params)
computed_params
elsif params || params == false
"send a valid password to write #{element} value"
elsif read_auth(element)
# particle getter below
value_found = instance_variable_get("@#{element}")
- # uncomment below to historicize all read action
- # Universe.historicize(@id, :read, element, value_found)
- # we add the optional read plugin
value_found = particle_read(element, value_found, &user_proc)
value_found
# TODO : create a fast method to get particle: eg:
# Atome.define_method "set_#{element}" ... => send("set_#{element}"
else
"send a valid password to read #{element} value"
end
- # else
- #
- # end
end
end
def additional_particle_methods(element, store, rendering, &method_proc)
# it allow the creation of method like top=, rotate=, ...
@@ -143,40 +126,32 @@
else
# when no params passed whe assume teh user want a getter,
# as getter should give us all atome of a given within the atome
# ex : puts a.shape => return all atome with the type 'shape' in this atome
collected_atomes = []
- # fasten.each do |fasten_atome|
- # collected_atomes << fasten_atome if grab(fasten_atome).type.to_sym == element.to_sym
- # end
if Universe.applicable_atomes.include?(element)
# we do the same for apply to be able to retrieve 'color' and other atome that apply instead of being fasten
@apply.each do |fasten_atome|
collected_atomes << fasten_atome if grab(fasten_atome).type.to_sym == element.to_sym
end
else
- # collected_atomes = fasten
- # if @fasten
fasten.each do |fasten_atome|
collected_atomes << fasten_atome if grab(fasten_atome).type.to_sym == element.to_sym
end
- # end
end
# TODO/ FIXME : potential problem with group here"
- # group({ collect: collected_atomes })
collected_atomes
end
end
# the method define below is the fastest params are passed directly
Atome.define_method "set_#{element}" do |params, &user_proc|
# we generate the corresponding module here:
# Object.const_set(element, Module.new)
# we add the newly created atome to the list of "child in it's category, eg if it's a shape we add the new atome
# to the shape particles list : @!atome[:shape] << params[:id]
- # Atome.new(params, &user_proc)
if Universe.atomes[params[:id]]
# if atome id already exist we grab the previous one
# this prevent the creation of new atome if the atome already exist
previous_atome = grab(params[:id])
@@ -190,77 +165,13 @@
end
end
def new_molecule(molecule, &method_proc)
-
Molecule.define_method molecule do |params, &user_proc|
object_to_return = instance_exec(params, user_proc, &method_proc) if method_proc.is_a?(Proc)
- # new_objet = Object.new
- # # we store the molecule into an instance variable in a basic ruby object
- # new_objet.instance_variable_set(:@molecule, object_to_return)
- # new_objet
object_to_return
end
-
- # # the method define below is the slowest but params are analysed and sanitized
- # Atome.define_method element do |params = nil, &user_proc|
- # instance_exec(params, user_proc, &method_proc) if method_proc.is_a?(Proc)
- # if params
- # params = atome_sanitizer(element, params, &user_proc)
- # atome_processor(element, params, &user_proc)
- # else
- # # when no params passed whe assume teh user want a getter,
- # # as getter should give us all atome of a given within the atome
- # # ex : puts a.shape => return all atome with the type 'shape' in this atome
- # collected_atomes = []
- # # fasten.each do |fasten_atome|
- # # collected_atomes << fasten_atome if grab(fasten_atome).type.to_sym == element.to_sym
- # # end
- # # TODO : add category for atome( material/physical vs modifier : color, shadow, .. vs shape, image ..)
- # # then add condition same things fo code in presets/atome atome_common
- # if %i[color shadow paint border].include?(element)
- # # we do the same for apply to be able to retrieve 'color' and other atome that apply instead of being fasten
- # @apply.each do |fasten_atome|
- # collected_atomes << fasten_atome if grab(fasten_atome).type.to_sym == element.to_sym
- # end
- # else
- # # collected_atomes = fasten
- # # if @fasten
- # fasten.each do |fasten_atome|
- # collected_atomes << fasten_atome if grab(fasten_atome).type.to_sym == element.to_sym
- # end
- # # end
- #
- # end
- # # TODO/ FIXME : potential problem with group here"
- # # group({ collect: collected_atomes })
- # collected_atomes
- # end
- # end
- #
- # # the method define below is the fastest params are passed directly
- # Atome.define_method "set_#{element}" do |params, &user_proc|
- # # we generate the corresponding module here:
- # # Object.const_set(element, Module.new)
- # # we add the newly created atome to the list of "child in it's category, eg if it's a shape we add the new atome
- # # to the shape particles list : @!atome[:shape] << params[:id]
- # # Atome.new(params, &user_proc)
- #
- # if Universe.atomes[params[:id]]
- # # if atome id already exist we grab the previous one
- # # this prevent the creation of new atome if the atome already exist
- # previous_atome= grab(params[:id])
- # # now we must re-affect affected atomes
- # previous_atome.affect(params[:affect])
- # previous_atome
- # else
- # Atome.new(params, &user_proc)
- # end
- # # Now we return the newly created atome instead of the current atome that is the parent cf: b=box; c=b.circle
- # end
-
end
-
end
end