dbd4 1.0.2
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.
- data/README +0 -0
- data/bin/dbd4 +152 -0
- data/lib/dbd4/dbd4_model_file.rb +531 -0
- data/lib/dbd4/ordered_hash.rb +182 -0
- data/lib/dbd4/rails_migration_file.rb +122 -0
- data/lib/dbd4/rails_model_file.rb +279 -0
- data/lib/slurp.rb +16 -0
- data/tests/unit/test_dbd4.rb +243 -0
- data/tests/unit/test_dbd4_model_file.rb +53 -0
- metadata +79 -0
data/lib/slurp.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
class String
|
3
|
+
def readlines
|
4
|
+
@lines = Array.new
|
5
|
+
self.each_line { |l| @lines << l }
|
6
|
+
@lines
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class IO
|
11
|
+
def self.readlines_chomp(file)
|
12
|
+
@lines = Array.new
|
13
|
+
readlines(file).each { |l| @lines << l.chomp }
|
14
|
+
@lines
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "mocks")
|
2
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
|
3
|
+
require 'dbd4/dbd4_model_file'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'deep_clone'
|
6
|
+
|
7
|
+
include DeepClone
|
8
|
+
|
9
|
+
$files = {
|
10
|
+
'app/models/cat.rb' => "class Cat < ActiveRecord::Base\nend\n",
|
11
|
+
'app/models/computers_user.rb' => "class ComputersUsers < ActiveRecord::Base\nend\n",
|
12
|
+
'app/models/computer.rb' => "class Computer < ActiveRecord::Base\nend\n",
|
13
|
+
'app/models/user.rb' => "class User < ActiveRecord::Base\nend\n",
|
14
|
+
'app/models/security_number.rb' => "class SecurityNumber < ActiveRecord::Base\nend\n",
|
15
|
+
'app/models/job.rb' => "class Job < ActiveRecord::Base\nend\n",
|
16
|
+
'app/models/generic_animal.rb' => "class GenericAnimal < ActiveRecord::Base\nend\n",
|
17
|
+
'app/models/shoe.rb' => "class Shoe < ActiveRecord::Base\nend\n",
|
18
|
+
'app/models/wife.rb' => "class Wife < ActiveRecord::Base\nend\n",
|
19
|
+
'app/models/person.rb' => "class Person < ActiveRecord::Base\nend\n",
|
20
|
+
'app/models/jobs_person.rb' => "class JobsPerson < ActiveRecord::Base\nend\n",
|
21
|
+
'app/models/dog.rb' => "class Dog < ActiveRecord::Base\nend\n",
|
22
|
+
'app/models/kid.rb' => "class Kid < ActiveRecord::Base\nend\n",
|
23
|
+
'app/models/house.rb' => "class House < ActiveRecord::Base\nend\n"
|
24
|
+
}
|
25
|
+
|
26
|
+
$files_written_to = Array.new
|
27
|
+
|
28
|
+
class Dir
|
29
|
+
def initialize(dirname)
|
30
|
+
raise "Cannot open directory : #{dirname}" if dirname != File.join("db", "migrate")
|
31
|
+
end
|
32
|
+
|
33
|
+
def entries
|
34
|
+
[
|
35
|
+
'001_create_cats.rb',
|
36
|
+
'002_create_computers_users.rb',
|
37
|
+
'003_create_computers.rb',
|
38
|
+
'004_create_people.rb',
|
39
|
+
'005_create_users.rb',
|
40
|
+
'006_create_security_numbers.rb',
|
41
|
+
'007_create_jobs.rb',
|
42
|
+
'008_create_jobs_people.rb',
|
43
|
+
'009_create_generic_animals.rb',
|
44
|
+
'010_create_shoes.rb',
|
45
|
+
'011_create_wives.rb',
|
46
|
+
'012_create_dogs.rb',
|
47
|
+
'013_create_kids.rb',
|
48
|
+
'014_create_houses.rb'
|
49
|
+
]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class MyFile
|
54
|
+
def initialize(pathname)
|
55
|
+
$files_written_to << self
|
56
|
+
@pathname = pathname
|
57
|
+
@content = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def puts(arg)
|
61
|
+
@content = arg.to_s
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_s
|
65
|
+
"#{@pathname}:\n#{@content}\n"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module NewFile
|
70
|
+
def self.included(base)
|
71
|
+
base.extend(ClassMethods)
|
72
|
+
base.class_eval do
|
73
|
+
class << self
|
74
|
+
alias_method :original_open, :open unless method_defined?(:original_open)
|
75
|
+
alias_method :open, :new_open
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
module ClassMethods
|
81
|
+
def new_open(filename, mode = nil)
|
82
|
+
if filename =~ /\.rb$/
|
83
|
+
MyFile.new(filename)
|
84
|
+
else
|
85
|
+
original_open(filename, mode)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
File.send(:include, NewFile )
|
92
|
+
|
93
|
+
module NewIO
|
94
|
+
def self.included(base)
|
95
|
+
base.extend(ClassMethods)
|
96
|
+
base.class_eval do
|
97
|
+
class << self
|
98
|
+
alias_method :original_read, :read unless method_defined?(:original_read)
|
99
|
+
alias_method :read, :new_read
|
100
|
+
alias_method :original_readlines, :readlines unless method_defined?(:original_readlines)
|
101
|
+
alias_method :readlines, :new_readlines
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
module ClassMethods
|
107
|
+
def new_read(filename)
|
108
|
+
if $files[filename]
|
109
|
+
$files[filename]
|
110
|
+
else
|
111
|
+
original_read(filename)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def new_readlines(filename)
|
116
|
+
if $files[filename]
|
117
|
+
lines = Array.new
|
118
|
+
$files[filename].each_line { |l| lines << l }
|
119
|
+
lines
|
120
|
+
else
|
121
|
+
original_readlines(filename)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
IO.send(:include, NewIO )
|
128
|
+
|
129
|
+
class Assertions
|
130
|
+
def assert_equal(s1, s2)
|
131
|
+
raise "Gotcha!"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
class Dbd4Test < Test::Unit::TestCase
|
136
|
+
def setup
|
137
|
+
$silent = true
|
138
|
+
@b = DBD4::DBD4ModelFile.new(File.join(File.dirname(__FILE__), '..', 'data', 'good_example.xml'))
|
139
|
+
@t = @b.tables['2082']
|
140
|
+
@m = DBD4::RailsModelFile.new()
|
141
|
+
@m.modelfile = "person.rb"
|
142
|
+
@m.modelname = "person"
|
143
|
+
end
|
144
|
+
|
145
|
+
def teardown
|
146
|
+
end
|
147
|
+
|
148
|
+
def r(string)
|
149
|
+
string.gsub!(/\r/, '')
|
150
|
+
string
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_run_all_tests
|
154
|
+
methods.each do |m|
|
155
|
+
if m =~ /^_test/
|
156
|
+
send(m)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def _test_no_class
|
162
|
+
begin
|
163
|
+
@m.setContent(<<"INPUT")
|
164
|
+
#This is a test file to try out the replacements
|
165
|
+
#
|
166
|
+
def no_class_name
|
167
|
+
set_table_name 'toto'
|
168
|
+
set_table_name 'toto'
|
169
|
+
end
|
170
|
+
INPUT
|
171
|
+
flunk "Test should of failed"
|
172
|
+
rescue RuntimeError
|
173
|
+
#Great!
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
def _test_generate
|
178
|
+
$files = {
|
179
|
+
'app/models/cat.rb' => "class Cat < ActiveRecord::Base\nend\n",
|
180
|
+
'app/models/computers_user.rb' => "class ComputersUsers < ActiveRecord::Base\nend\n",
|
181
|
+
'app/models/computer.rb' => "class Computer < ActiveRecord::Base\nend\n",
|
182
|
+
'app/models/user.rb' => "class User < ActiveRecord::Base\nend\n",
|
183
|
+
'app/models/security_number.rb' => "class SecurityNumber < ActiveRecord::Base\nend\n",
|
184
|
+
'app/models/job.rb' => "class Job < ActiveRecord::Base\nend\n",
|
185
|
+
'app/models/generic_animal.rb' => "class GenericAnimal < ActiveRecord::Base\nend\n",
|
186
|
+
'app/models/shoe.rb' => "class Shoe < ActiveRecord::Base\nend\n",
|
187
|
+
'app/models/wife.rb' => "class Wife < ActiveRecord::Base\nend\n",
|
188
|
+
'app/models/person.rb' => "class Person < ActiveRecord::Base\nend\n",
|
189
|
+
'app/models/jobs_person.rb' => "class JobsPerson < ActiveRecord::Base\nend\n",
|
190
|
+
'app/models/dog.rb' => "class Dog < ActiveRecord::Base\nend\n",
|
191
|
+
'app/models/kid.rb' => "class Kid < ActiveRecord::Base\nend\n",
|
192
|
+
'app/models/house.rb' => "class House < ActiveRecord::Base\nend\n"
|
193
|
+
}
|
194
|
+
@b.generateModelFiles
|
195
|
+
#puts $files_written_to
|
196
|
+
run_info = Rails::Generator::Scripts::Generate.new.run_info
|
197
|
+
assert_equal(14, run_info.size)
|
198
|
+
assert_equal(1, run_info['model computer'])
|
199
|
+
assert_equal(1, run_info['model wife'])
|
200
|
+
assert_equal(1, run_info['model shoe'])
|
201
|
+
assert_equal(1, run_info['model computers_user'])
|
202
|
+
assert_equal(1, run_info['model cat'])
|
203
|
+
assert_equal(1, run_info['model person'])
|
204
|
+
assert_equal(1, run_info['model security_number'])
|
205
|
+
assert_equal(1, run_info['model user'])
|
206
|
+
assert_equal(1, run_info['model jobs_person'])
|
207
|
+
assert_equal(1, run_info['model kid'])
|
208
|
+
assert_equal(1, run_info['model generic_animal'])
|
209
|
+
assert_equal(1, run_info['model house'])
|
210
|
+
assert_equal(1, run_info['model dog'])
|
211
|
+
assert_equal(1, run_info['model job'])
|
212
|
+
end
|
213
|
+
|
214
|
+
def _test_comment
|
215
|
+
$files = {
|
216
|
+
'app/models/cat.rb' => "class Cat < ActiveRecord::Base\n belongs_to :kid, :polymorphic => true\n belongs_to :nobody\nend\n",
|
217
|
+
'app/models/computers_user.rb' => "class ComputersUsers < ActiveRecord::Base\nend\n",
|
218
|
+
'app/models/computer.rb' => "class Computer < ActiveRecord::Base\nend\n",
|
219
|
+
'app/models/user.rb' => "class User < ActiveRecord::Base\nend\n",
|
220
|
+
'app/models/security_number.rb' => "class SecurityNumber < ActiveRecord::Base\nend\n",
|
221
|
+
'app/models/job.rb' => "class Job < ActiveRecord::Base\nend\n",
|
222
|
+
'app/models/generic_animal.rb' => "class GenericAnimal < ActiveRecord::Base\n belongs_to :animal\nend\n",
|
223
|
+
'app/models/shoe.rb' => "class Shoe < ActiveRecord::Base\nend\n",
|
224
|
+
'app/models/wife.rb' => "class Wife < ActiveRecord::Base\nend\n",
|
225
|
+
'app/models/person.rb' => "class Person < ActiveRecord::Base\n has_many :dogs, :as => tigers\nend\n",
|
226
|
+
'app/models/jobs_person.rb' => "class JobsPerson < ActiveRecord::Base\nend\n",
|
227
|
+
'app/models/dog.rb' => "class Dog < ActiveRecord::Base\n has_many :generic_animals, :as => gogole\nend\n",
|
228
|
+
'app/models/kid.rb' => "class Kid < ActiveRecord::Base\nend\n",
|
229
|
+
'app/models/house.rb' => "class House < ActiveRecord::Base\nend\n"
|
230
|
+
}
|
231
|
+
|
232
|
+
$files_written_to = Array.new
|
233
|
+
@b.generateModelFiles
|
234
|
+
a = $files_written_to.to_s.readlines.zip(IO.readlines(File.join("tests", "data", "test_comment_result.txt")))
|
235
|
+
a.each do |w|
|
236
|
+
assert_equal(w[1].chomp, w[0].chomp)
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def _test_example_printout
|
241
|
+
@b.to_str
|
242
|
+
end
|
243
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "mocks")
|
2
|
+
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "..", "..", "lib")
|
3
|
+
require 'dbd4/dbd4_model_file'
|
4
|
+
require 'slurp'
|
5
|
+
require 'test/unit'
|
6
|
+
|
7
|
+
|
8
|
+
class Dbd4Test < Test::Unit::TestCase
|
9
|
+
def r(string)
|
10
|
+
string.gsub!(/\r/, '')
|
11
|
+
string
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_run_all_tests
|
15
|
+
methods.each do |m|
|
16
|
+
if m =~ /^_test/
|
17
|
+
send(m)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def _test_all_possible_bad_cases
|
23
|
+
b = DBD4::DBD4ModelFile.new(File.join(File.dirname(__FILE__), '..', 'data', 'bad_example.xml'))
|
24
|
+
assert_equal(0, b.messages[:errors].size)
|
25
|
+
a = b.to_str.readlines.zip(IO.readlines(File.join(File.dirname(__FILE__), '..', 'data', 'bad_example.output')))
|
26
|
+
a.each do |w|
|
27
|
+
assert_equal(w[1].chomp, w[0].chomp)
|
28
|
+
end
|
29
|
+
a = b.messages[:warnings].zip(IO.readlines_chomp(File.join(File.dirname(__FILE__), '..', 'data', 'bad_example.warnings')))
|
30
|
+
a.each do |w|
|
31
|
+
assert_equal(w[1], w[0])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def _test_with_all_errors_corrected
|
36
|
+
b = DBD4::DBD4ModelFile.new(File.join(File.dirname(__FILE__), '..', 'data', 'good_example.xml'))
|
37
|
+
assert_equal(0, b.messages[:errors].size)
|
38
|
+
assert_equal(0, b.messages[:warnings].size)
|
39
|
+
a = b.to_str.readlines.zip(IO.readlines(File.join(File.dirname(__FILE__), '..', 'data', 'good_example.output')))
|
40
|
+
a.each do |w|
|
41
|
+
assert_equal(w[1].chomp, w[0].chomp)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def _test_critical_error
|
46
|
+
begin
|
47
|
+
b = DBD4::DBD4ModelFile.new(File.join(File.dirname(__FILE__), '..', 'data', 'critical_error.xml'))
|
48
|
+
flunk
|
49
|
+
rescue DBD4::DBD4Error => e
|
50
|
+
assert_equal(e.message, "Error : table Table_01 has no primary keys, you need at least 1")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: dbd4
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 1.0.2
|
7
|
+
date: 2006-08-23 00:00:00 -04:00
|
8
|
+
summary: A package for importing DB Designer 4 xml models in rails.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: lachinois@hotmail.com
|
12
|
+
homepage:
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire: dbd4/dbd4_model_file
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Daniel Shane
|
31
|
+
files:
|
32
|
+
- lib/slurp.rb
|
33
|
+
- lib/dbd4/dbd4_model_file.rb
|
34
|
+
- lib/dbd4/ordered_hash.rb
|
35
|
+
- lib/dbd4/rails_migration_file.rb
|
36
|
+
- lib/dbd4/rails_model_file.rb
|
37
|
+
- bin/dbd4
|
38
|
+
- README
|
39
|
+
test_files:
|
40
|
+
- tests/unit/test_dbd4.rb
|
41
|
+
- tests/unit/test_dbd4_model_file.rb
|
42
|
+
rdoc_options: []
|
43
|
+
|
44
|
+
extra_rdoc_files:
|
45
|
+
- README
|
46
|
+
executables:
|
47
|
+
- dbd4
|
48
|
+
extensions: []
|
49
|
+
|
50
|
+
requirements: []
|
51
|
+
|
52
|
+
dependencies:
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rake
|
55
|
+
version_requirement:
|
56
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.7.0
|
61
|
+
version:
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: activerecord
|
64
|
+
version_requirement:
|
65
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 1.14.3
|
70
|
+
version:
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: activesupport
|
73
|
+
version_requirement:
|
74
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 1.3.1
|
79
|
+
version:
|