# Swiss Model
# An ActiveRecord like Model for RubyMotion Android
class SwissModel
# meh? .. won't work for now in java... created classes become java packages
# name will become the namespace of the package...
# def self.inherited(subclass)
# puts "New subclass: #{subclass.class.name.to_s}"
# end
# attr_accessor :table_name
def self.store
context = DataStore.context
@store ||= DataStore.new(context)
@store
end
def self.set_class_name(class_name) # hack, class.name not functioning in RM Android...
set_table_name(class_name.tableize)
end
def self.set_table_name(table_name)
@table_name = table_name
end
def self.table_name
@table_name
end
def self.set_primary_key(primary_key)
@primary_key = primary_key
end
def self.primary_key
@primary_key.nil? ? "id" : @primary_key
end
def self.all
# select_all
cursor = store.select_all(@table_name, self)
cursor
end
def self.where(values)
# select
where =
cursor = store.select(@table_name, values, self)
cursor
end
def self.first
# select all and get first
cursor = all.first
cursor
end
def self.last
# select all and get last
cursor = all.last
cursor
end
def self.create(obj)
# create a row
result = store.insert(@table_name, obj)
if result == -1
puts "An error occured inserting values into #{@table_name}"
else
return result
end
end
# def destroy
# # destroy this row
# end
def self.destroy_all!
# destroy all of this kind (empty table)
store.destroy_all(@table_name)
end
# borrowed from rails
private
def underscore(camel_cased_word)
return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
word = camel_cased_word.to_s.gsub(/::/, '/')
word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)(#{inflections.acronym_regex})(?=\b|[^a-z])/) { "#{$1 && '_'}#{$2.downcase}" }
word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
word.gsub!("-", "_")
word.downcase!
word
end
end