Sha256: 65c0c58dd389261005b9e754c3355469439dcde7380591dad5ae31272b0c26c2

Contents?: true

Size: 1.86 KB

Versions: 1

Compression:

Stored size: 1.86 KB

Contents

module CDQ

  class CDQStoreManager

    attr_writer :current

    def initialize(opts = {})
      @config = opts[:config] || CDQConfig.default
      @model_manager = opts[:model_manager]
    end

    def current
      @current ||= create_store
    end

    def reset!
      NSFileManager.defaultManager.removeItemAtURL(@config.database_url, error: nil)
    end

    def invalid?
      !@current && @model_manager.invalid?
    end

    private

    def create_store
      if invalid?
        raise "No model found.  Can't create a persistent store coordinator without it."
      else
        coordinator = NSPersistentStoreCoordinator.alloc.initWithManagedObjectModel(@model_manager.current)
        error = Pointer.new(:object)
        options = { NSMigratePersistentStoresAutomaticallyOption => true,
                    NSInferMappingModelAutomaticallyOption => true }
        url = @config.database_url
        mkdir_p File.dirname(url.path)
        store = coordinator.addPersistentStoreWithType(NSSQLiteStoreType,
                                                       configuration:nil,
                                                       URL:url,
                                                       options:options,
                                                       error:error)
        if store.nil?
          error[0].userInfo['metadata'] && error[0].userInfo['metadata'].each do |key, value|
            NSLog "#{key}: #{value}"
          end
          raise error[0].userInfo['reason']
        end
        coordinator
      end
    end
    
    def mkdir_p dir
      error = Pointer.new(:object)
      m = NSFileManager.defaultManager
      r = m.createDirectoryAtPath dir, withIntermediateDirectories:true, attributes:nil, error:error
      unless r
        NSLog "#{error[0].localizedDescription}"
        raise error[0].localizedDescription
      end
    end
    
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cdq-0.1.9 motion/cdq/store.rb