Skip to content

Instantly share code, notes, and snippets.

@erizye
Forked from mayfer/orm.rb
Last active August 29, 2015 14:06
Show Gist options
  • Save erizye/c4d780ade52504d2a75c to your computer and use it in GitHub Desktop.
Save erizye/c4d780ade52504d2a75c to your computer and use it in GitHub Desktop.

Revisions

  1. @mayfer mayfer created this gist Sep 17, 2014.
    64 changes: 64 additions & 0 deletions orm.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    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