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

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



8
9
10
11
12
13
14
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
# File 'lib/spiderfw/model/storage.rb', line 8

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
    matches = url.match(/^(.+?):\/\/(.+)/)
    adapter = matches[1]
    rest = matches[2]
    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