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/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: