class Object
Public Instance Methods
add_finites(args)
click to toggle source
# File lib/active_finite.rb, line 9 def add_finites args modify_finite args do |vs, klass, column_name| if not klass.table_exists? ActiveRecord::Schema.define do create_table klass.table_name do |t| t.string column_name, :null => false end add_index klass.table_name, column_name, :unique => true end end MasterTable.add klass.table_name vs.each do |v| obj = klass.new obj.send column_name.to_s + '=', v obj.save end end end
all_finites()
click to toggle source
# File lib/active_finite.rb, line 5 def all_finites MasterTable.all end
as_class_name(table_name)
click to toggle source
# File lib/as_class_name.rb, line 3 def as_class_name table_name table_name.to_s.singularize.capitalize.to_sym end
default_column_name(table_name)
click to toggle source
# File lib/active_finite.rb, line 84 def default_column_name table_name (table_name.to_s.singularize.downcase + '_value').to_sym end
delete_finites(args)
click to toggle source
# File lib/active_finite.rb, line 28 def delete_finites args delete_all = args[:values] == :all if delete_all args[:values] = [] end modify_finite args do |vs, klass, column_name| MasterTable.add klass.table_name if delete_all klass.all.each do |o| klass.destroy o end else vs.each do |v| objs = klass.where column_name => v objs.each do |o| klass.destroy o end end end if klass.count.eql? 0 ActiveRecord::Schema.define do drop_table klass.table_name end MasterTable.delete klass.table_name Object.send 'remove_const', klass.to_s.to_sym end end end
get_finite(sym, *args)
click to toggle source
# File lib/get_finite.rb, line 5 def get_finite sym, *args class_name = as_class_name sym class_not_defined = not(Object.const_defined? class_name) should_force = args.any? {|x| x == :force} if class_not_defined or should_force anon = Class.new ActiveRecord::Base Object.const_set class_name, anon else anon = Object.const_get class_name end if anon.respond_to? :table_exists? and anon.table_exists? anon.class_eval do method_name = anon.send(:new).attributes.keys[0] define_method(:get_value) do self.send method_name end define_method(:set_with_existing_value) do |value| result = anon.send 'find_by_' + method_name + '!', value self.send anon.primary_key + '=', result.send(anon.primary_key) self.send method_name + '=', result.send(method_name) end end end anon end
modify_finite(args) { |to_be_modified, klass, column_name| ... }
click to toggle source
# File lib/active_finite.rb, line 57 def modify_finite args table_name = args[:in_table] if table_name.nil? raise 'A table name must be specified for :in_table.' end file_name = args[:from_file] values = args[:values] column_name = args[:column_name] || default_column_name(table_name) if values.nil? and file_name.nil? raise 'Either :from_file or :values must be specified.' end to_be_modified = Array.new if not values.nil? to_be_modified = to_be_modified.concat values end if not file_name.nil? to_be_modified = to_be_modified.concat JSON.load open file_name end klass = get_finite table_name, :do_not_redefine_accessor ActiveRecord::Base.transaction do yield to_be_modified, klass, column_name end end