Skip to content

Instantly share code, notes, and snippets.

@mayfer
Created September 17, 2014 17:40
Show Gist options
  • Save mayfer/da2350cc166d187aa047 to your computer and use it in GitHub Desktop.
Save mayfer/da2350cc166d187aa047 to your computer and use it in GitHub Desktop.
ORM example
class ORM
def save
table_name = self.class
instance_variable_names = self.instance_variables.map do |i|
i.slice(1, i.length)
end
instance_variable_values = self.instance_variables.map do |i|
self.instance_variable_get("#{i}")
end
if self.id == nil
sql_columns = instance_variable_names.join(', ')
sql_values_arr = []
self.instance_variables.each do |i|
sql_values_arr << '"' << self.instance_variable_get("#{i}") << '"'
end
sql_values = sql_values_arr.join(", ")
sql_command = "INSERT INTO #{table_name}
(#{sql_columns})
VALUES
(#{sql_values})"
else
components = []
instance_variable_names.each do |ivn|
value = self.instance_variable_get("@#{ivn}")
component = "#{ivn}='#{value}'"
components << component
end
components_string = components.join(', ')
query = "UPDATE #{table_name} SET #{components_string}"
end
end
end
class User < ORM
attr_accessor :id, :name, :email, :phone
def initialize(name, email, phone, gender, id=nil)
@id = id
@name = name
@email = email
@phone = phone
@gender = gender
end
end
class Dog < ORM
attr_accessor :num_legs, :personality_type, :bark_pitch
end
dog = Dog.new
dog.num_legs = 3
dog.personality_type = 'evil'
dog.bark_pitch = 'high pitched'
puts dog.save
murat = User.new("murat", "[email protected]", "1234234", "doesnt matter in this day and age")
puts murat.save
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment