dbd4 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: