dm-is-reflective 1.0.1.rc → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.md ADDED
@@ -0,0 +1,226 @@
1
+ # CHANGES
2
+
3
+ ## dm-is-reflective 1.0.1, 2012-05-16
4
+
5
+ * allow_nil is more close to db's semantics, not required. Thanks miaout17.
6
+ `:allow_nil` allows empty value, but `:required` does not. So here we
7
+ always use `:allow_nil` to match db's semantics.
8
+
9
+ ## dm-is-reflective 1.0.0, 2011-06-16
10
+
11
+ * updated against dm-core 1.1.0
12
+
13
+ ## dm-is-reflective 0.9.0, 2010-07-05
14
+
15
+ * adapted to dm-core 1.0.0
16
+ * reanmed AbstractAdapter to DataObjectsAdapter
17
+
18
+ ## dm-is-reflective 0.8.0, 2009-09-16
19
+
20
+ * require dm-core 0.10.0 and above now
21
+ * Serial would map to Serial not Integer now
22
+ * no more type_map now
23
+ * no more Extlib::Hook to load adapter
24
+
25
+ ## dm-mapping 0.7.1, never released as a gem
26
+
27
+ don't open module Migration and edit it, instead, use include, more see:
28
+
29
+ * added DataMapper::Mapping::AbstractAdapter
30
+ * added DataMapper::Mapping::Sqlite3Adapter
31
+ * added DataMapper::Mapping::MysqlAdapter
32
+ * added DataMapper::Mapping::PostgresAdapter
33
+ * each adapter was included in related adapter in DataMapper.
34
+ * Model#fields now accept repository name as argument
35
+
36
+ there's differences between adapters,
37
+ Sqlite3 added default => 'UL' in Boolean type,
38
+ Mysql can't tell whether it's a Boolean or Tinyint,
39
+ and Postgres is fine. see test/abstract.rb: super_user_fields for detail.
40
+
41
+ ## dm-mapping 0.7.0, 2008-09-01
42
+
43
+ * feature added
44
+
45
+ - added postgres support.
46
+
47
+ * bug fixed
48
+
49
+ - fixed key mapping in mysql adapter. PRI and MUL are all keys.
50
+ - use DM::Text.size as default text size in sqlite3.
51
+
52
+ ## dm-mapping 0.6.2, 2008-08-30
53
+
54
+ * mapping more data types for mysql.
55
+ * don't map TINYINT to TrueClass with mysql, skip it in type_map.
56
+
57
+ ## dm-mapping 0.6.1, 2008-08-22
58
+
59
+ * gem 'dm-core', '>=0.9.3' instead of '=0.9.3'
60
+
61
+ ## dm-mapping 0.6.0, 2008-08-16
62
+
63
+ * mapping returns an array of properties indicating fields it mapped.
64
+ * performance boosted by refactored mapping implementation.
65
+ * changed the way using auto_genclass!, now accepts args like mapping!
66
+ * changed fields to return field name with Symbol instead of String.
67
+ this would make it be more consistent with DataMapper.
68
+ * storage names remain String.
69
+ * added more mysql data type to map
70
+ * use Extlib::Hook to setup dm-mapping instead of stupid alias_method.
71
+ * removed ensure_require in model. always setup DataMapper before define model.
72
+
73
+ ## dm-mapping 0.5.0, 2008-08-14
74
+
75
+ * feature added
76
+
77
+ - added mysql support.
78
+ - reflect size 65535 in TEXT for sqlite3.
79
+
80
+ * bug fixed
81
+
82
+ - reflect VARCHAR(size) instead of default size in sqlite3.
83
+
84
+ * misc
85
+
86
+ - renamed sqlite3adapter to sqlite3_adapter.
87
+
88
+ ## dm-mapping 0.4.1, 2008-08-14
89
+
90
+ * removed type hack, replaced with rejecting special type to lookup.
91
+
92
+ ## dm-mapping 0.4.0, 2008-08-04
93
+
94
+ * added Migration#auto_genclass!.
95
+ * updated README.
96
+ * added more rdoc.
97
+
98
+ ## dm-mapping 0.3.0, 2008-08-04
99
+
100
+ * added support of mapping Integer, DateTime, etc.
101
+ * renamed some internals.
102
+ * changed the way requiring adapter. no more setup first.
103
+ * added Migration#storages_and_fields
104
+ * added mapping :serial => true for primary key.
105
+ * added mapping :default, and :nullable.
106
+ * added support of mapping name. (through passing symbol or string)
107
+ * added support of multiple arguments.
108
+ * removed Mapping::All, use /.*/ instead.
109
+
110
+ ## dm-mapping 0.2.1, 2008-08-03
111
+
112
+ * fixed a bug that type map should lookup for parent.
113
+ * fixed a bug that sql type could be lower case.
114
+ fixed by calling upcase.
115
+
116
+ ## dm-mapping 0.2.0, 2008-08-02
117
+
118
+ * added Sqlite3Adapter::Migration#fields
119
+ * added DataMapper::Model#mapping
120
+ * added DataMapper::Model#fields
121
+ * added DataMapper::TypeMap#find_primitive for reversed lookup.
122
+ mapping SQL type back to Ruby type.
123
+ * added corresponded test.
124
+
125
+ ## dm-mapping 0.1.0, 2008-07-27
126
+
127
+ * birthday!
128
+ * added DataMapper.repository.storages for sqlite3.
129
+ * please refer:
130
+ <http://groups.google.com/group/datamapper/browse_thread/thread/b9ca41120c5c9389>
131
+
132
+ original message:
133
+
134
+ from Lin Jen-Shin
135
+ to DataMapper
136
+ cc godfat
137
+ date Sun, Jul 27, 2008 at 5:40 PM
138
+ subject Manipulate an existing database.
139
+ mailed-by gmail.com
140
+
141
+ Greetings,
142
+
143
+ DataMapper looks very promising for me, so I am thinking of
144
+ using it in the near future. I hate separate my domain objects into
145
+ two parts in Rails, writing migration and switching to ActiveRecord,
146
+ vice versa, is very annoying to me.
147
+
148
+ But there's a very convenient feature to me in ActiveRecord,
149
+ that is ActiveRecord automatically mapping all fields in a table.
150
+ It makes me easily control an existing database without any domain object.
151
+
152
+ For example,
153
+
154
+ require 'active_record'
155
+
156
+ ActiveRecord::Base.establish_connection(
157
+ :adapter => 'sqlite3',
158
+ :database => 'db/development.sqlite3'
159
+ )
160
+
161
+ clsas User < ActiveRecord::Base
162
+ end
163
+
164
+ User.find 1
165
+ => #<User id: 1, account: "admin", created_at: "2008-05-18 20:08:37", etc.>
166
+
167
+ Some people would use database admin such as phpMyAdmin to
168
+ accomplish this kind of task, but I prefer anything in Ruby,
169
+ calling Ruby function, manipulating data without SQL and
170
+ any domain object. (i.e. I didn't have to load up entire environment.)
171
+
172
+ In DataMapper, I didn't find an easy way to accomplish this.
173
+ I am sorry if there's one but I didn't find it, please point out,
174
+ many thanks. In short, I would like to do this in DataMapper:
175
+
176
+ class User
177
+ include DataMapper::Resource
178
+ mapping :account, :created_at
179
+ end
180
+
181
+ or
182
+
183
+ class User
184
+ include DataMapper::Resource
185
+ mapping All
186
+ end
187
+
188
+ class User
189
+ include DataMapper::ResourceAll
190
+ end
191
+
192
+ or
193
+
194
+ class User
195
+ include DataMapper::Resource
196
+ mapping *storage_fields
197
+ end
198
+
199
+ The above User.storage_fields should return an Array,
200
+ telling all the fields in the table, e.g. [:account, :created_at, :etc]
201
+ or a Hash includes data type, e.g. {:account => String,
202
+ :created_at => DateTime}
203
+ then mapping *storage_fields should change to:
204
+
205
+ mapping *storage_fields.each_key.to_a
206
+
207
+ If it's possible, a feature returning the database schema as well:
208
+
209
+ DataMapper.repository.storages
210
+ # => [:users, :posts, :etc]
211
+
212
+ DataMapper.repository.storages_and_fields
213
+ # => {:users => {:account => String},
214
+ :posts => {:title => String, :content => Text}}
215
+
216
+ or returning DataObject::Field, DataObject::Storage, etc.
217
+
218
+ DataMapper.repository.storage
219
+ # => [#<DataObject::Storage @name='users' @fields=
220
+ [#<DataObject::Field @name='account' @type=String>]>]
221
+
222
+ If you feel this kind of feature is indeed needed or not bad for
223
+ adding it, I could try to provide a patch for it. Though I didn't
224
+ read the source code deeply, not knowning it's easy or not.
225
+
226
+ sincerely,
data/README.md ADDED
@@ -0,0 +1,132 @@
1
+ # dm-is-reflective
2
+
3
+ by Lin Jen-Shin ([godfat](http://godfat.org))
4
+
5
+ ## LINKS:
6
+
7
+ * [github](https://github.com/godfat/dm-is-reflective)
8
+ * [rubygems](https://rubygems.org/gems/dm-is-reflective)
9
+ * [rdoc](http://rdoc.info/github/godfat/dm-is-reflective)
10
+
11
+ ## DESCRIPTION:
12
+
13
+ DataMapper plugin that helps you manipulate an existing database.
14
+ It creates mappings between existing columns and model's properties.
15
+
16
+ ## SYNOPSIS:
17
+
18
+ ``` ruby
19
+ require 'dm-is-reflective' # this would require 'dm-core'
20
+ dm = DataMapper.setup :default, 'sqlite:db/dev.sqlite3'
21
+
22
+ class User
23
+ include DataMapper::Resource
24
+ is :reflective
25
+
26
+ # map all, returning an array of properties indicating fields it mapped
27
+ reflect /.*/ # e.g. => [#<Property:#<Class:0x18f89b8>:id>,
28
+ # #<Property:#<Class:0x18f89b8>:title>,
29
+ # #<Property:#<Class:0x18f89b8>:body>,
30
+ # #<Property:#<Class:0x18f89b8>:user_id>]
31
+
32
+ # map all (with no argument at all)
33
+ reflect
34
+
35
+ # mapping for field name ended with _at, and started with salt_
36
+ reflect /_at$/, /^salt_/
37
+
38
+ # mapping id and email
39
+ reflect :id, :email
40
+
41
+ # mapping all fields with type String, and id
42
+ reflect String, :id
43
+
44
+ # mapping login, and all fields with type Integer
45
+ reflect :login, Integer
46
+ end
47
+
48
+ # there's no guarantee of the order in storages array
49
+ dm.storages
50
+ # => ['users']
51
+
52
+ # there's no guarantee of the order in fields array
53
+ User.fields
54
+ # => [[:created_at, DateTime, {:required => false}],
55
+ [:email, String, {:required => false, :length => 255,
56
+ :default => 'nospam@nospam.tw'}],
57
+ [:id, Serial, {:required => true, :serial => true,
58
+ :key => true}],
59
+ [:salt_first, String, {:required => false, :length => 50}],
60
+ [:salt_second, String, {:required => false, :length => 50}]]
61
+
62
+ dm.fields('users').sort_by{ |field| field.first.to_s } ==
63
+ User.fields.sort_by{ |field| field.first.to_s }
64
+ # => true
65
+
66
+ dm.storages_and_fields
67
+ # => {'users' => [[:id, Serial, {:required => true,
68
+ :serial => true,
69
+ :key => true}],
70
+ [:email, String, {:required => false,
71
+ :default =>
72
+ 'nospam@nospam.tw'}],
73
+ [:created_at, DateTime, {:required => false}],
74
+ [:salt_first, String, {:required => false,
75
+ :length => 50}],
76
+ [:salt_second, String, {:required => false,
77
+ :length => 50}]]}
78
+
79
+ # there's no guarantee of the order in returned array
80
+ dm.auto_genclass!
81
+ # => [DataMapper::Is::Reflective::User,
82
+ DataMapper::Is::Reflective::SchemaInfo,
83
+ DataMapper::Is::Reflective::Session]
84
+
85
+ # you can change the scope of generated models:
86
+ dm.auto_genclass! :scope => Object
87
+ # => [User, SchemaInfo, Session]
88
+
89
+ # you can generate classes for tables you specified only:
90
+ dm.auto_genclass! :scope => Object, :storages => /^phpbb_/
91
+ # => [PhpbbUser, PhpbbPost, PhpbbConfig]
92
+
93
+ # you can generate classes with String too:
94
+ dm.auto_genclass! :storages => ['users', 'config'], :scope => Object
95
+ # => [User, Config]
96
+
97
+ # you can generate a class only:
98
+ dm.auto_genclass! :storages => 'users'
99
+ # => [DataMapper::Is::Reflective::User]
100
+ ```
101
+
102
+ ## REQUIREMENTS:
103
+
104
+ * dm-core
105
+ * dm-do-adapter
106
+ * choose one: dm-sqlite-adapter, dm-postgres-adapter, dm-mysql-adapter
107
+
108
+ ## INSTALL:
109
+
110
+ gem install dm-is-reflective
111
+
112
+ ## CONTRIBUTORS:
113
+
114
+ * Lin Jen-Shin (@godfat)
115
+
116
+ ## LICENSE:
117
+
118
+ Apache License 2.0
119
+
120
+ Copyright (c) 2008-2012, Lin Jen-Shin (godfat)
121
+
122
+ Licensed under the Apache License, Version 2.0 (the "License");
123
+ you may not use this file except in compliance with the License.
124
+ You may obtain a copy of the License at
125
+
126
+ http://www.apache.org/licenses/LICENSE-2.0
127
+
128
+ Unless required by applicable law or agreed to in writing, software
129
+ distributed under the License is distributed on an "AS IS" BASIS,
130
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131
+ See the License for the specific language governing permissions and
132
+ limitations under the License.
data/Rakefile CHANGED
@@ -11,7 +11,6 @@ task 'gem:spec' do
11
11
  require 'dm-is-reflective/version'
12
12
  s.name = 'dm-is-reflective'
13
13
  s.version = DataMapper::Is::Reflective::VERSION
14
- # s.executables = [s.name]
15
14
 
16
15
  %w[dm-core dm-do-adapter].each{ |g| s.add_runtime_dependency(g) }
17
16
  %w[dm-migrations
data/{TODO → TODO.md} RENAMED
@@ -1,4 +1,4 @@
1
- = dm-is-reflective todo list
1
+ # TODO
2
2
 
3
3
  * use extlib to type check args, sorry that i want to sleep right now
4
4
  * deal with require order problem
@@ -1,52 +1,41 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = %q{dm-is-reflective}
5
- s.version = "1.0.1.rc"
4
+ s.name = "dm-is-reflective"
5
+ s.version = "1.0.1"
6
6
 
7
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
8
- s.authors = [%q{Lin Jen-Shin (godfat)}]
9
- s.date = %q{2011-07-19}
10
- s.description = %q{DataMapper plugin that helps you manipulate an existing database. It creates mappings between existing columns and model's properties.}
11
- s.email = [%q{godfat (XD) godfat.org}]
12
- s.extra_rdoc_files = [
13
- %q{CHANGES},
14
- %q{CONTRIBUTORS},
15
- %q{LICENSE},
16
- %q{TODO}]
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Lin Jen-Shin (godfat)"]
9
+ s.date = "2012-05-16"
10
+ s.description = "DataMapper plugin that helps you manipulate an existing database.\nIt creates mappings between existing columns and model's properties."
11
+ s.email = ["godfat (XD) godfat.org"]
17
12
  s.files = [
18
- %q{.gitignore},
19
- %q{.gitmodules},
20
- %q{CHANGES},
21
- %q{CONTRIBUTORS},
22
- %q{Gemfile},
23
- %q{LICENSE},
24
- %q{NOTICE},
25
- %q{README},
26
- %q{README.rdoc},
27
- %q{Rakefile},
28
- %q{TODO},
29
- %q{dm-is-reflective.gemspec},
30
- %q{lib/dm-is-reflective.rb},
31
- %q{lib/dm-is-reflective/is/adapters/data_objects_adapter.rb},
32
- %q{lib/dm-is-reflective/is/adapters/mysql_adapter.rb},
33
- %q{lib/dm-is-reflective/is/adapters/postgres_adapter.rb},
34
- %q{lib/dm-is-reflective/is/adapters/sqlite_adapter.rb},
35
- %q{lib/dm-is-reflective/is/reflective.rb},
36
- %q{lib/dm-is-reflective/is/version.rb},
37
- %q{lib/dm-is-reflective/version.rb},
38
- %q{task/gemgem.rb},
39
- %q{test/abstract.rb},
40
- %q{test/setup_db.sh},
41
- %q{test/test_dm-is-reflective.rb}]
42
- s.homepage = %q{https://github.com/godfat/dm-is-reflective}
43
- s.rdoc_options = [
44
- %q{--main},
45
- %q{README}]
46
- s.require_paths = [%q{lib}]
47
- s.rubygems_version = %q{1.8.5}
48
- s.summary = %q{DataMapper plugin that helps you manipulate an existing database. It creates mappings between existing columns and model's properties.}
49
- s.test_files = [%q{test/test_dm-is-reflective.rb}]
13
+ ".gitignore",
14
+ ".gitmodules",
15
+ "CHANGES.md",
16
+ "Gemfile",
17
+ "LICENSE",
18
+ "README.md",
19
+ "Rakefile",
20
+ "TODO.md",
21
+ "dm-is-reflective.gemspec",
22
+ "lib/dm-is-reflective.rb",
23
+ "lib/dm-is-reflective/is/adapters/data_objects_adapter.rb",
24
+ "lib/dm-is-reflective/is/adapters/mysql_adapter.rb",
25
+ "lib/dm-is-reflective/is/adapters/postgres_adapter.rb",
26
+ "lib/dm-is-reflective/is/adapters/sqlite_adapter.rb",
27
+ "lib/dm-is-reflective/is/reflective.rb",
28
+ "lib/dm-is-reflective/version.rb",
29
+ "task/.gitignore",
30
+ "task/gemgem.rb",
31
+ "test/abstract.rb",
32
+ "test/setup_db.sh",
33
+ "test/test_dm-is-reflective.rb"]
34
+ s.homepage = "https://github.com/godfat/dm-is-reflective"
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = "1.8.24"
37
+ s.summary = "DataMapper plugin that helps you manipulate an existing database."
38
+ s.test_files = ["test/test_dm-is-reflective.rb"]
50
39
 
51
40
  if s.respond_to? :specification_version then
52
41
  s.specification_version = 3