Module: Spider::Model::Storage

Defined in:
lib/spiderfw/model/storage.rb,
lib/spiderfw/model/storage/db/db.rb,
lib/spiderfw/model/storage/schema.rb,
lib/spiderfw/model/storage/base_storage.rb,
lib/spiderfw/model/storage/db/db_schema.rb,
lib/spiderfw/model/storage/db/reflector.rb,
lib/spiderfw/model/storage/null_storage.rb,
lib/spiderfw/model/storage/db/db_storage.rb,
lib/spiderfw/model/storage/connection_pool.rb,
lib/spiderfw/model/storage/db/db_connector.rb,
lib/spiderfw/model/storage/db/adapters/mssql.rb,
lib/spiderfw/model/storage/db/adapters/mysql.rb,
lib/spiderfw/model/storage/document/document.rb,
lib/spiderfw/model/storage/db/adapters/oracle.rb,
lib/spiderfw/model/storage/db/adapters/sqlite.rb,
lib/spiderfw/model/storage/db/connectors/jdbc.rb,
lib/spiderfw/model/storage/db/connectors/oci8.rb,
lib/spiderfw/model/storage/db/connectors/odbc.rb,
lib/spiderfw/model/storage/db/connectors/jdbc_oracle.rb,
lib/spiderfw/model/storage/db/dialects/no_total_rows.rb,
lib/spiderfw/model/storage/document/adapters/mongodb.rb,
lib/spiderfw/model/storage/document/document_storage.rb

Overview

The namespace for classes related to storage.

See BaseStorage.

Defined Under Namespace

Modules: Db, Document, StorageResult Classes: BaseStorage, ConnectionPool, DuplicateKey, NullStorage, Schema, SchemaException, StorageException

Class Method Summary collapse

Class Method Details

.get_storage(type, url) ⇒ Object

Returns an instance of a BaseStorage subclass, according to type and type-specific url

Parameters:

  • type (String)

    The type of storage. Can be ‘db’ (for DataBase storages), ‘doc’ (for Document storages), or ‘stub’ (for a Test stub).

  • url (String)

    A connection url, specific to the storage.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/spiderfw/model/storage.rb', line 15

def self.get_storage(type, url)
    Thread.current[:storages] ||= {}
    Thread.current[:storages][type] ||= {}
    return Thread.current[:storages][type][url] if Thread.current[:storages][type][url]
    klass = nil
    begin
        matches = url.match(/^(.+?):\/\/(.+)/)
        adapter = matches[1]
        rest = matches[2]
    rescue => exc
        Spider.output _("The connection string %s is not correct") % url, :error
    end
    if adapter =~ /(.+):(.+)/
        connector = $1
        adapter = $2
        url = "#{adapter}://#{rest}"
    end
    case type
    when 'db' 
        class_name = case adapter
        when 'sqlite'
            :SQLite
        when 'oci8', 'oracle'
            :Oracle
        when 'mysql'
            :Mysql
        when 'mssql'
            :MSSQL
        end
        klass = Db.const_get(class_name)
        unless connector
            connector = case adapter
            when 'oci8', 'oracle'
                RUBY_PLATFORM =~ /java/ ? 'jdbc' : 'oci8'
            end
        end
        if connector
            conn_mod_name = case connector
            when 'odbc'
                :ODBC
            when 'jdbc'
                :JDBC
            when 'oci8'
                :OCI8
            end
            full_name = "#{conn_mod_name}#{class_name}"
            if Db.const_defined?(full_name)
                klass = Db.const_get(full_name)
            else
                conn_mod = Db::Connectors.const_defined?(full_name) ? Db::Connectors.const_get(full_name) : Db::Connectors.const_get(conn_mod_name)
                klass = Db.const_set(full_name, Class.new(klass))
                klass.instance_eval{ include conn_mod }
            end
        end
    when 'doc'
        class_name = case adapter
        when 'mongodb'
            :Mongodb
        end
        klass = Spider::Model::Storage::Document.const_get(class_name)
    when 'stub'
        require 'spiderfw/test/stubs/storage_stub'
        klass = Spider::Test::StorageStub
    end
    return nil unless klass
    Thread.current[:storages][type][url] = klass.new(url)
    return Thread.current[:storages][type][url]
end