Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class BasicEntity
- # Advanced metaprogramming code for nice, clean properties
- def self.properties( *arr )
- # 1. Set up accessors for each variable
- arr.each do |name|
- name = name.to_s
- unless is_a_question? name
- attr_accessor name
- else
- define_method(name) do
- instance_variable_get("@#{name.chop}")
- end
- define_method(name.chop + "=") do
- instance_variable_set("@#{name.chop}")
- end
- end
- end
- # 2. For each property, the `initialize' method
- # should set its value.
- class_eval do
- define_method( :initialize ) do |*args|
- arr.each_with_index do |name, i|
- value = args[i]
- value = value.to_i unless (value =~ /^\d+$/).nil?
- name = name.to_s
- if is_a_question? name
- name.chop! and value = value == 1
- end
- instance_variable_set("@#{name}", value)
- end
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment