dm-is-reflective 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.travis.yml +15 -0
- data/CHANGES.md +8 -0
- data/Gemfile +5 -1
- data/README.md +103 -86
- data/Rakefile +1 -14
- data/bin/dm-is-reflective +4 -0
- data/dm-is-reflective.gemspec +24 -12
- data/lib/dm-is-reflective.rb +4 -5
- data/lib/dm-is-reflective/adapters/data_objects_adapter.rb +136 -0
- data/lib/dm-is-reflective/adapters/mysql_adapter.rb +63 -0
- data/lib/dm-is-reflective/adapters/postgres_adapter.rb +80 -0
- data/lib/dm-is-reflective/adapters/sqlite_adapter.rb +57 -0
- data/lib/dm-is-reflective/{is/reflective.rb → reflective.rb} +18 -7
- data/lib/dm-is-reflective/runner.rb +87 -0
- data/lib/dm-is-reflective/test.rb +279 -0
- data/lib/dm-is-reflective/version.rb +2 -6
- data/task/gemgem.rb +7 -6
- data/test/test_mysql.rb +23 -0
- data/test/test_postgres.rb +23 -0
- data/test/test_sqlite.rb +10 -0
- data/test/test_to_source.rb +55 -0
- metadata +43 -46
- data/lib/dm-is-reflective/is/adapters/data_objects_adapter.rb +0 -138
- data/lib/dm-is-reflective/is/adapters/mysql_adapter.rb +0 -64
- data/lib/dm-is-reflective/is/adapters/postgres_adapter.rb +0 -82
- data/lib/dm-is-reflective/is/adapters/sqlite_adapter.rb +0 -61
- data/test/abstract.rb +0 -252
- data/test/test_dm-is-reflective.rb +0 -53
data/task/gemgem.rb
CHANGED
@@ -14,6 +14,7 @@ module Gemgem
|
|
14
14
|
|
15
15
|
s.description = description.join
|
16
16
|
s.summary = description.first
|
17
|
+
s.license = readme['LICENSE'].sub(/.+\n\n/, '').lines.first.strip
|
17
18
|
|
18
19
|
s.rubygems_version = Gem::VERSION
|
19
20
|
s.date = Time.now.strftime('%Y-%m-%d')
|
@@ -33,8 +34,8 @@ module Gemgem
|
|
33
34
|
@readme ||=
|
34
35
|
if path
|
35
36
|
ps = "##{File.read(path)}".
|
36
|
-
scan(/((#+)[^\n]+\n\n.+?(
|
37
|
-
ps.inject(
|
37
|
+
scan(/((#+)[^\n]+\n\n.+?(?=(\n\n\2[^#\n]+\n)|\Z))/m).map(&:first)
|
38
|
+
ps.inject('HEADER' => ps.first){ |r, s, i|
|
38
39
|
r[s[/\w+/]] = s
|
39
40
|
r
|
40
41
|
}
|
@@ -44,7 +45,7 @@ module Gemgem
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def description
|
47
|
-
@description ||= (readme['DESCRIPTION']||'').sub(/.+\n\n/, '').lines
|
48
|
+
@description ||= (readme['DESCRIPTION']||'').sub(/.+\n\n/, '').lines
|
48
49
|
end
|
49
50
|
|
50
51
|
def changes
|
@@ -104,9 +105,9 @@ module Gemgem
|
|
104
105
|
end
|
105
106
|
|
106
107
|
def split_lines ruby
|
107
|
-
ruby.gsub(/(.+?)\[(.+?)\]/){ |s|
|
108
|
+
ruby.gsub(/(.+?)\s*=\s*\[(.+?)\]/){ |s|
|
108
109
|
if $2.index(',')
|
109
|
-
"#{$1}[\n #{$2.split(',').map(&:strip).join(",\n ")}]"
|
110
|
+
"#{$1} = [\n #{$2.split(',').map(&:strip).join(",\n ")}]"
|
110
111
|
else
|
111
112
|
s
|
112
113
|
end
|
@@ -179,7 +180,7 @@ namespace :gem do
|
|
179
180
|
|
180
181
|
desc 'Install gem'
|
181
182
|
task :install => [:build] do
|
182
|
-
sh("#{Gem.ruby} -S gem install pkg/#{Gemgem.gem_tag}")
|
183
|
+
sh("#{Gem.ruby} -S gem install pkg/#{Gemgem.gem_tag}.gem")
|
183
184
|
end
|
184
185
|
|
185
186
|
desc 'Build gem'
|
data/test/test_mysql.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
require 'dm-is-reflective/test'
|
3
|
+
require_adapter 'mysql'
|
4
|
+
|
5
|
+
describe 'mysql' do
|
6
|
+
if ENV['TRAVIS']
|
7
|
+
def setup_data_mapper
|
8
|
+
DataMapper.setup(:default, :adapter => 'mysql' ,
|
9
|
+
:username => 'root' ,
|
10
|
+
:host => 'localhost' ,
|
11
|
+
:database => 'myapp_test')
|
12
|
+
end
|
13
|
+
else
|
14
|
+
def setup_data_mapper
|
15
|
+
DataMapper.setup(:default, :adapter => 'mysql' ,
|
16
|
+
:username => 'dm_is_reflective',
|
17
|
+
:password => 'godfat' ,
|
18
|
+
:host => 'localhost' ,
|
19
|
+
:database => 'dm_is_reflective')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
behaves_like :reflective
|
23
|
+
end if defined?(DataMapper::Adapters::MysqlAdapter)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
require 'dm-is-reflective/test'
|
3
|
+
require_adapter 'postgres'
|
4
|
+
|
5
|
+
describe 'postgres' do
|
6
|
+
if ENV['TRAVIS']
|
7
|
+
def setup_data_mapper
|
8
|
+
DataMapper.setup(:default, :adapter => 'postgres' ,
|
9
|
+
:username => 'postgres' ,
|
10
|
+
:host => 'localhost' ,
|
11
|
+
:database => 'myapp_test')
|
12
|
+
end
|
13
|
+
else
|
14
|
+
def setup_data_mapper
|
15
|
+
DataMapper.setup(:default, :adapter => 'postgres' ,
|
16
|
+
:username => 'dm_is_reflective',
|
17
|
+
:password => 'godfat' ,
|
18
|
+
:host => 'localhost' ,
|
19
|
+
:database => 'dm_is_reflective')
|
20
|
+
end
|
21
|
+
end
|
22
|
+
behaves_like :reflective
|
23
|
+
end if defined?(DataMapper::Adapters::PostgresAdapter)
|
data/test/test_sqlite.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
|
2
|
+
require 'dm-is-reflective/test'
|
3
|
+
require_adapter 'sqlite'
|
4
|
+
|
5
|
+
describe 'sqlite' do
|
6
|
+
def setup_data_mapper
|
7
|
+
DataMapper.setup(:default, :adapter => 'sqlite', :database => ':memory:')
|
8
|
+
end
|
9
|
+
behaves_like :reflective
|
10
|
+
end if defined?(DataMapper::Adapters::SqliteAdapter)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
require 'dm-is-reflective/test'
|
3
|
+
|
4
|
+
describe 'DataMapper::Resource#to_source' do
|
5
|
+
DataMapper.setup(:default, :adapter => 'in_memory')
|
6
|
+
Comment.create # enforce Comment#user_id generated
|
7
|
+
|
8
|
+
should 'match Abstract::User' do
|
9
|
+
Abstract::User.to_source.should.eq <<-RUBY
|
10
|
+
class ::Abstract::User < Object
|
11
|
+
include DataMapper::Resource
|
12
|
+
property :id, DataMapper::Property::Serial, {:primitive=>Integer, :min=>1, :serial=>true}
|
13
|
+
property :login, DataMapper::Property::String, {:primitive=>String, :length=>70}
|
14
|
+
property :sig, DataMapper::Property::Text, {:primitive=>String, :lazy=>true, :length=>65535}
|
15
|
+
property :created_at, DataMapper::Property::DateTime, {:primitive=>DateTime}
|
16
|
+
end
|
17
|
+
RUBY
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'match Abstract::Comment' do
|
21
|
+
Abstract::Comment.to_source.should.eq <<-RUBY
|
22
|
+
class ::Abstract::Comment < Object
|
23
|
+
include DataMapper::Resource
|
24
|
+
property :id, DataMapper::Property::Serial, {:primitive=>Integer, :min=>1, :serial=>true}
|
25
|
+
property :title, DataMapper::Property::String, {:primitive=>String, :length=>50, :default=>"default title", :allow_nil=>false}
|
26
|
+
property :body, DataMapper::Property::Text, {:primitive=>String, :lazy=>true, :length=>65535}
|
27
|
+
property :user_id, DataMapper::Property::Integer, {:primitive=>Integer, :index=>:user, :required=>false, :key=>false, :unique=>false, :min=>1, :max=>2147483647}
|
28
|
+
end
|
29
|
+
RUBY
|
30
|
+
end
|
31
|
+
|
32
|
+
should 'match Abstract::Comment::Abstract::Comment' do
|
33
|
+
Abstract::Comment.to_source(Abstract::Comment).should.eq <<-RUBY
|
34
|
+
class Abstract::Comment::Abstract::Comment < Object
|
35
|
+
include DataMapper::Resource
|
36
|
+
property :id, DataMapper::Property::Serial, {:primitive=>Integer, :min=>1, :serial=>true}
|
37
|
+
property :title, DataMapper::Property::String, {:primitive=>String, :length=>50, :default=>"default title", :allow_nil=>false}
|
38
|
+
property :body, DataMapper::Property::Text, {:primitive=>String, :lazy=>true, :length=>65535}
|
39
|
+
property :user_id, DataMapper::Property::Integer, {:primitive=>Integer, :index=>:user, :required=>false, :key=>false, :unique=>false, :min=>1, :max=>2147483647}
|
40
|
+
end
|
41
|
+
RUBY
|
42
|
+
end
|
43
|
+
|
44
|
+
should 'match Abstract::Comment::Abstract::User' do
|
45
|
+
Abstract::User.to_source('Abstract::Comment').should.eq <<-RUBY
|
46
|
+
class Abstract::Comment::Abstract::User < Object
|
47
|
+
include DataMapper::Resource
|
48
|
+
property :id, DataMapper::Property::Serial, {:primitive=>Integer, :min=>1, :serial=>true}
|
49
|
+
property :login, DataMapper::Property::String, {:primitive=>String, :length=>70}
|
50
|
+
property :sig, DataMapper::Property::Text, {:primitive=>String, :lazy=>true, :length=>65535}
|
51
|
+
property :created_at, DataMapper::Property::DateTime, {:primitive=>DateTime}
|
52
|
+
end
|
53
|
+
RUBY
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,165 +1,162 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-is-reflective
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Lin Jen-Shin (godfat)
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-14 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: dm-core
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: dm-do-adapter
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: dm-migrations
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: dm-sqlite-adapter
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: dm-mysql-adapter
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: dm-postgres-adapter
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
|
-
description:
|
111
|
-
|
112
|
-
It creates mappings between existing columns and model'
|
97
|
+
description: |-
|
98
|
+
DataMapper plugin that helps you manipulate an existing database.
|
99
|
+
It creates mappings between existing columns and model's properties.
|
113
100
|
email:
|
114
101
|
- godfat (XD) godfat.org
|
115
|
-
executables:
|
102
|
+
executables:
|
103
|
+
- dm-is-reflective
|
116
104
|
extensions: []
|
117
105
|
extra_rdoc_files: []
|
118
106
|
files:
|
119
107
|
- .gitignore
|
120
108
|
- .gitmodules
|
109
|
+
- .travis.yml
|
121
110
|
- CHANGES.md
|
122
111
|
- Gemfile
|
123
112
|
- LICENSE
|
124
113
|
- README.md
|
125
114
|
- Rakefile
|
126
115
|
- TODO.md
|
116
|
+
- bin/dm-is-reflective
|
127
117
|
- dm-is-reflective.gemspec
|
128
118
|
- lib/dm-is-reflective.rb
|
129
|
-
- lib/dm-is-reflective/
|
130
|
-
- lib/dm-is-reflective/
|
131
|
-
- lib/dm-is-reflective/
|
132
|
-
- lib/dm-is-reflective/
|
133
|
-
- lib/dm-is-reflective/
|
119
|
+
- lib/dm-is-reflective/adapters/data_objects_adapter.rb
|
120
|
+
- lib/dm-is-reflective/adapters/mysql_adapter.rb
|
121
|
+
- lib/dm-is-reflective/adapters/postgres_adapter.rb
|
122
|
+
- lib/dm-is-reflective/adapters/sqlite_adapter.rb
|
123
|
+
- lib/dm-is-reflective/reflective.rb
|
124
|
+
- lib/dm-is-reflective/runner.rb
|
125
|
+
- lib/dm-is-reflective/test.rb
|
134
126
|
- lib/dm-is-reflective/version.rb
|
135
127
|
- task/.gitignore
|
136
128
|
- task/gemgem.rb
|
137
|
-
- test/abstract.rb
|
138
129
|
- test/setup_db.sh
|
139
|
-
- test/
|
130
|
+
- test/test_mysql.rb
|
131
|
+
- test/test_postgres.rb
|
132
|
+
- test/test_sqlite.rb
|
133
|
+
- test/test_to_source.rb
|
140
134
|
homepage: https://github.com/godfat/dm-is-reflective
|
141
|
-
licenses:
|
135
|
+
licenses:
|
136
|
+
- Apache License 2.0
|
137
|
+
metadata: {}
|
142
138
|
post_install_message:
|
143
139
|
rdoc_options: []
|
144
140
|
require_paths:
|
145
141
|
- lib
|
146
142
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
143
|
requirements:
|
149
|
-
- -
|
144
|
+
- - '>='
|
150
145
|
- !ruby/object:Gem::Version
|
151
146
|
version: '0'
|
152
147
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
148
|
requirements:
|
155
|
-
- -
|
149
|
+
- - '>='
|
156
150
|
- !ruby/object:Gem::Version
|
157
151
|
version: '0'
|
158
152
|
requirements: []
|
159
153
|
rubyforge_project:
|
160
|
-
rubygems_version:
|
154
|
+
rubygems_version: 2.0.3
|
161
155
|
signing_key:
|
162
|
-
specification_version:
|
156
|
+
specification_version: 4
|
163
157
|
summary: DataMapper plugin that helps you manipulate an existing database.
|
164
158
|
test_files:
|
165
|
-
- test/
|
159
|
+
- test/test_mysql.rb
|
160
|
+
- test/test_postgres.rb
|
161
|
+
- test/test_sqlite.rb
|
162
|
+
- test/test_to_source.rb
|
@@ -1,138 +0,0 @@
|
|
1
|
-
|
2
|
-
module DataMapper
|
3
|
-
module Is::Reflective
|
4
|
-
module DataObjectsAdapter
|
5
|
-
include DataMapper
|
6
|
-
|
7
|
-
# returns all tables' name in the repository.
|
8
|
-
# e.g.
|
9
|
-
# ['comments', 'users']
|
10
|
-
def storages
|
11
|
-
reflective_auto_load_adapter_extension
|
12
|
-
storages # call the overrided method
|
13
|
-
end
|
14
|
-
|
15
|
-
# returns all fields, with format [[name, type, attrs]]
|
16
|
-
# e.g.
|
17
|
-
# [[:created_at, DateTime, {:required => false}],
|
18
|
-
# [:email, String, {:required => false, :size => 255,
|
19
|
-
# :default => 'nospam@nospam.tw'}],
|
20
|
-
# [:id, DataMapper::Property::Serial, {:required => true, :serial => true,
|
21
|
-
# :key => true}],
|
22
|
-
# [:salt_first, String, {:required => false, :size => 50}],
|
23
|
-
# [:salt_second, String, {:required => false, :size => 50}]]
|
24
|
-
def fields storage
|
25
|
-
reflective_query_storage(storage).map{ |field|
|
26
|
-
attr = reflective_attributes(field)
|
27
|
-
type = reflective_lookup_primitive(reflective_primitive(field))
|
28
|
-
pick = if attr[:serial] && type == Integer
|
29
|
-
Property::Serial
|
30
|
-
else
|
31
|
-
type
|
32
|
-
end
|
33
|
-
[reflective_field_name(field).to_sym, pick, attr]
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
# returns a hash with storage names in keys and
|
38
|
-
# corresponded fields in values. e.g.
|
39
|
-
# {'users' => [[:id, Integer, {:required => true,
|
40
|
-
# :serial => true,
|
41
|
-
# :key => true}],
|
42
|
-
# [:email, String, {:required => false,
|
43
|
-
# :default => 'nospam@nospam.tw'}],
|
44
|
-
# [:created_at, DateTime, {:required => false}],
|
45
|
-
# [:salt_first, String, {:required => false, :size => 50}],
|
46
|
-
# [:salt_second, String, {:required => false, :size => 50}]]}
|
47
|
-
# see AbstractAdapter#storages and AbstractAdapter#fields for detail
|
48
|
-
def storages_and_fields
|
49
|
-
storages.inject({}){ |result, storage|
|
50
|
-
result[storage] = fields(storage)
|
51
|
-
result
|
52
|
-
}
|
53
|
-
end
|
54
|
-
|
55
|
-
# automaticly generate model class(es) and reflect
|
56
|
-
# all fields with reflect /.*/ for you.
|
57
|
-
# e.g.
|
58
|
-
# dm.auto_genclass!
|
59
|
-
# # => [DataMapper::Is::Reflective::User,
|
60
|
-
# # DataMapper::Is::Reflective::SchemaInfo,
|
61
|
-
# # DataMapper::Is::Reflective::Session]
|
62
|
-
#
|
63
|
-
# you can change the scope of generated models:
|
64
|
-
# e.g.
|
65
|
-
# dm.auto_genclass! :scope => Object
|
66
|
-
# # => [User, SchemaInfo, Session]
|
67
|
-
#
|
68
|
-
# you can generate classes for tables you specified only:
|
69
|
-
# e.g.
|
70
|
-
# dm.auto_genclass! :scope => Object, :storages => /^phpbb_/
|
71
|
-
# # => [PhpbbUser, PhpbbPost, PhpbbConfig]
|
72
|
-
#
|
73
|
-
# you can generate classes with String too:
|
74
|
-
# e.g.
|
75
|
-
# dm.auto_genclass! :storages => ['users', 'config'], :scope => Object
|
76
|
-
# # => [User, Config]
|
77
|
-
#
|
78
|
-
# you can generate a class only:
|
79
|
-
# e.g.
|
80
|
-
# dm.auto_genclass! :storages => 'users'
|
81
|
-
# # => [DataMapper::Is::Reflective::User]
|
82
|
-
def auto_genclass! opts = {}
|
83
|
-
opts[:scope] ||= Is::Reflective
|
84
|
-
opts[:storages] ||= /.*/
|
85
|
-
opts[:storages] = [opts[:storages]].flatten
|
86
|
-
|
87
|
-
storages.map{ |storage|
|
88
|
-
|
89
|
-
mapped = opts[:storages].each{ |target|
|
90
|
-
case target
|
91
|
-
when Regexp;
|
92
|
-
break storage if storage =~ target
|
93
|
-
|
94
|
-
when Symbol, String;
|
95
|
-
break storage if storage == target.to_s
|
96
|
-
|
97
|
-
else
|
98
|
-
raise ArgumentError.new("invalid argument: #{target.inspect}")
|
99
|
-
end
|
100
|
-
}
|
101
|
-
|
102
|
-
reflective_genclass(mapped, opts[:scope]) if mapped.kind_of?(String)
|
103
|
-
}.compact
|
104
|
-
end
|
105
|
-
|
106
|
-
private
|
107
|
-
def reflective_query_storage storage
|
108
|
-
reflective_auto_load_adapter_extension
|
109
|
-
reflective_query_storage(storage) # call the overrided method
|
110
|
-
end
|
111
|
-
|
112
|
-
def reflective_genclass storage, scope
|
113
|
-
model = Class.new
|
114
|
-
model.__send__(:include, Resource)
|
115
|
-
model.is(:reflective)
|
116
|
-
model.storage_names[:default] = storage
|
117
|
-
scope.const_set(Inflector.classify(storage), model)
|
118
|
-
model.__send__(:reflect, /.*/)
|
119
|
-
model.finalize if model.respond_to?(:finalize)
|
120
|
-
model
|
121
|
-
end
|
122
|
-
|
123
|
-
def reflective_lookup_primitive primitive
|
124
|
-
raise TypeError.new("#{primitive} not found for #{self.class}")
|
125
|
-
end
|
126
|
-
|
127
|
-
def reflective_auto_load_adapter_extension
|
128
|
-
# TODO: can we fix this adapter name in dm-sqlite-adapter?
|
129
|
-
adapter = options[:adapter].sub(/\Asqlite3\Z/, 'sqlite')
|
130
|
-
|
131
|
-
require "dm-is-reflective/is/adapters/#{adapter}_adapter"
|
132
|
-
class_name = "#{Inflector.camelize(adapter)}Adapter"
|
133
|
-
Adapters.const_get(class_name).__send__(:include,
|
134
|
-
Is::Reflective.const_get(class_name))
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|