@@ -1308,6 +1308,146 @@ def mock_column(name, type, options = {})
13081308 end
13091309 end
13101310 end
1311+
1312+ context 'when "with_comment_column" is specified in options' do
1313+ let :options do
1314+ { with_comment_column : 'yes' }
1315+ end
1316+
1317+ context 'when columns have comments' do
1318+ let :columns do
1319+ [
1320+ mock_column ( :id , :integer , limit : 8 , comment : 'ID' ) ,
1321+ mock_column ( :active , :boolean , limit : 1 , comment : 'Active' ) ,
1322+ mock_column ( :name , :string , limit : 50 , comment : 'Name' ) ,
1323+ mock_column ( :notes , :text , limit : 55 , comment : 'Notes' ) ,
1324+ mock_column ( :no_comment , :text , limit : 20 , comment : nil )
1325+ ]
1326+ end
1327+
1328+ let :expected_result do
1329+ <<~EOS
1330+ # Schema Info
1331+ #
1332+ # Table name: users
1333+ #
1334+ # id :integer not null, primary key ID
1335+ # active :boolean not null Active
1336+ # name :string(50) not null Name
1337+ # notes :text(55) not null Notes
1338+ # no_comment :text(20) not null
1339+ #
1340+ EOS
1341+ end
1342+
1343+ it 'works with option "with_comment_column"' do
1344+ is_expected . to eq expected_result
1345+ end
1346+ end
1347+
1348+ context 'when columns have multibyte comments' do
1349+ let :columns do
1350+ [
1351+ mock_column ( :id , :integer , limit : 8 , comment : 'ID' ) ,
1352+ mock_column ( :active , :boolean , limit : 1 , comment : 'ACTIVE' ) ,
1353+ mock_column ( :name , :string , limit : 50 , comment : 'NAME' ) ,
1354+ mock_column ( :notes , :text , limit : 55 , comment : 'NOTES' ) ,
1355+ mock_column ( :cyrillic , :text , limit : 30 , comment : 'Кириллица' ) ,
1356+ mock_column ( :japanese , :text , limit : 60 , comment : '熊本大学 イタリア 宝島' ) ,
1357+ mock_column ( :arabic , :text , limit : 20 , comment : 'لغة' ) ,
1358+ mock_column ( :no_comment , :text , limit : 20 , comment : nil ) ,
1359+ mock_column ( :location , :geometry_collection , limit : nil , comment : nil )
1360+ ]
1361+ end
1362+
1363+ let :expected_result do
1364+ <<~EOS
1365+ # Schema Info
1366+ #
1367+ # Table name: users
1368+ #
1369+ # id :integer not null, primary key ID
1370+ # active :boolean not null ACTIVE
1371+ # name :string(50) not null NAME
1372+ # notes :text(55) not null NOTES
1373+ # cyrillic :text(30) not null Кириллица
1374+ # japanese :text(60) not null 熊本大学 イタリア 宝島
1375+ # arabic :text(20) not null لغة
1376+ # no_comment :text(20) not null
1377+ # location :geometry_collect not null
1378+ #
1379+ EOS
1380+ end
1381+
1382+ it 'works with option "with_comment_column"' do
1383+ is_expected . to eq expected_result
1384+ end
1385+ end
1386+
1387+ context 'when columns have multiline comments' do
1388+ let :columns do
1389+ [
1390+ mock_column ( :id , :integer , limit : 8 , comment : 'ID' ) ,
1391+ mock_column ( :notes , :text , limit : 55 , comment : "Notes.\n May include things like notes." ) ,
1392+ mock_column ( :no_comment , :text , limit : 20 , comment : nil )
1393+ ]
1394+ end
1395+
1396+ let :expected_result do
1397+ <<~EOS
1398+ # Schema Info
1399+ #
1400+ # Table name: users
1401+ #
1402+ # id :integer not null, primary key ID
1403+ # notes :text(55) not null Notes.\\ nMay include things like notes.
1404+ # no_comment :text(20) not null
1405+ #
1406+ EOS
1407+ end
1408+
1409+ it 'works with option "with_comment_column"' do
1410+ is_expected . to eq expected_result
1411+ end
1412+ end
1413+
1414+ context 'when geometry columns are included' do
1415+ let :columns do
1416+ [
1417+ mock_column ( :id , :integer , limit : 8 ) ,
1418+ mock_column ( :active , :boolean , default : false , null : false ) ,
1419+ mock_column ( :geometry , :geometry ,
1420+ geometric_type : 'Geometry' , srid : 4326 ,
1421+ limit : { srid : 4326 , type : 'geometry' } ) ,
1422+ mock_column ( :location , :geography ,
1423+ geometric_type : 'Point' , srid : 0 ,
1424+ limit : { srid : 0 , type : 'geometry' } ) ,
1425+ mock_column ( :non_srid , :geography ,
1426+ geometric_type : 'Point' ,
1427+ limit : { type : 'geometry' } )
1428+ ]
1429+ end
1430+
1431+ let :expected_result do
1432+ <<~EOS
1433+ # Schema Info
1434+ #
1435+ # Table name: users
1436+ #
1437+ # id :integer not null, primary key
1438+ # active :boolean default(FALSE), not null
1439+ # geometry :geometry not null, geometry, 4326
1440+ # location :geography not null, point, 0
1441+ # non_srid :geography not null, point
1442+ #
1443+ EOS
1444+ end
1445+
1446+ it 'works with option "with_comment_column"' do
1447+ is_expected . to eq expected_result
1448+ end
1449+ end
1450+ end
13111451 end
13121452 end
13131453 end
0 commit comments