sequel 3.21.0 → 3.31.0

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.
Files changed (225) hide show
  1. data/CHANGELOG +485 -3
  2. data/README.rdoc +20 -6
  3. data/Rakefile +37 -19
  4. data/bin/sequel +1 -5
  5. data/doc/association_basics.rdoc +249 -43
  6. data/doc/dataset_basics.rdoc +4 -4
  7. data/doc/dataset_filtering.rdoc +8 -0
  8. data/doc/mass_assignment.rdoc +54 -0
  9. data/doc/migration.rdoc +15 -538
  10. data/doc/model_hooks.rdoc +72 -27
  11. data/doc/opening_databases.rdoc +89 -50
  12. data/doc/prepared_statements.rdoc +40 -13
  13. data/doc/reflection.rdoc +8 -2
  14. data/doc/release_notes/3.22.0.txt +39 -0
  15. data/doc/release_notes/3.23.0.txt +172 -0
  16. data/doc/release_notes/3.24.0.txt +420 -0
  17. data/doc/release_notes/3.25.0.txt +88 -0
  18. data/doc/release_notes/3.26.0.txt +88 -0
  19. data/doc/release_notes/3.27.0.txt +82 -0
  20. data/doc/release_notes/3.28.0.txt +304 -0
  21. data/doc/release_notes/3.29.0.txt +459 -0
  22. data/doc/release_notes/3.30.0.txt +135 -0
  23. data/doc/release_notes/3.31.0.txt +146 -0
  24. data/doc/schema_modification.rdoc +547 -0
  25. data/doc/sharding.rdoc +7 -1
  26. data/doc/testing.rdoc +129 -0
  27. data/doc/transactions.rdoc +137 -0
  28. data/doc/virtual_rows.rdoc +2 -2
  29. data/lib/sequel/adapters/ado/mssql.rb +18 -6
  30. data/lib/sequel/adapters/ado.rb +40 -18
  31. data/lib/sequel/adapters/amalgalite.rb +17 -9
  32. data/lib/sequel/adapters/db2.rb +175 -86
  33. data/lib/sequel/adapters/dbi.rb +15 -15
  34. data/lib/sequel/adapters/do/mysql.rb +5 -7
  35. data/lib/sequel/adapters/do/postgres.rb +0 -5
  36. data/lib/sequel/adapters/do/sqlite.rb +0 -5
  37. data/lib/sequel/adapters/do.rb +17 -36
  38. data/lib/sequel/adapters/firebird.rb +27 -208
  39. data/lib/sequel/adapters/ibmdb.rb +448 -0
  40. data/lib/sequel/adapters/informix.rb +6 -23
  41. data/lib/sequel/adapters/jdbc/as400.rb +16 -34
  42. data/lib/sequel/adapters/jdbc/db2.rb +45 -0
  43. data/lib/sequel/adapters/jdbc/derby.rb +247 -0
  44. data/lib/sequel/adapters/jdbc/firebird.rb +29 -0
  45. data/lib/sequel/adapters/jdbc/h2.rb +56 -29
  46. data/lib/sequel/adapters/jdbc/hsqldb.rb +170 -0
  47. data/lib/sequel/adapters/jdbc/informix.rb +26 -0
  48. data/lib/sequel/adapters/jdbc/jtds.rb +34 -0
  49. data/lib/sequel/adapters/jdbc/mssql.rb +3 -33
  50. data/lib/sequel/adapters/jdbc/mysql.rb +11 -11
  51. data/lib/sequel/adapters/jdbc/oracle.rb +81 -25
  52. data/lib/sequel/adapters/jdbc/postgresql.rb +9 -13
  53. data/lib/sequel/adapters/jdbc/sqlite.rb +2 -6
  54. data/lib/sequel/adapters/jdbc/sqlserver.rb +71 -0
  55. data/lib/sequel/adapters/jdbc/transactions.rb +83 -0
  56. data/lib/sequel/adapters/jdbc.rb +231 -78
  57. data/lib/sequel/adapters/mock.rb +335 -0
  58. data/lib/sequel/adapters/mysql.rb +82 -184
  59. data/lib/sequel/adapters/mysql2.rb +26 -25
  60. data/lib/sequel/adapters/odbc/db2.rb +17 -0
  61. data/lib/sequel/adapters/odbc/mssql.rb +1 -6
  62. data/lib/sequel/adapters/odbc.rb +28 -9
  63. data/lib/sequel/adapters/openbase.rb +3 -5
  64. data/lib/sequel/adapters/oracle.rb +351 -53
  65. data/lib/sequel/adapters/postgres.rb +194 -33
  66. data/lib/sequel/adapters/shared/access.rb +32 -9
  67. data/lib/sequel/adapters/shared/db2.rb +321 -0
  68. data/lib/sequel/adapters/shared/firebird.rb +221 -0
  69. data/lib/sequel/adapters/shared/informix.rb +53 -0
  70. data/lib/sequel/adapters/shared/mssql.rb +231 -106
  71. data/lib/sequel/adapters/shared/mysql.rb +181 -63
  72. data/lib/sequel/adapters/shared/mysql_prepared_statements.rb +149 -0
  73. data/lib/sequel/adapters/shared/oracle.rb +231 -41
  74. data/lib/sequel/adapters/shared/postgres.rb +214 -82
  75. data/lib/sequel/adapters/shared/progress.rb +4 -7
  76. data/lib/sequel/adapters/shared/sqlite.rb +201 -57
  77. data/lib/sequel/adapters/sqlite.rb +29 -21
  78. data/lib/sequel/adapters/swift/mysql.rb +12 -7
  79. data/lib/sequel/adapters/swift/postgres.rb +0 -5
  80. data/lib/sequel/adapters/swift/sqlite.rb +8 -6
  81. data/lib/sequel/adapters/swift.rb +5 -5
  82. data/lib/sequel/adapters/tinytds.rb +160 -19
  83. data/lib/sequel/adapters/utils/emulate_offset_with_row_number.rb +66 -0
  84. data/lib/sequel/adapters/utils/stored_procedures.rb +1 -11
  85. data/lib/sequel/ast_transformer.rb +190 -0
  86. data/lib/sequel/connection_pool/threaded.rb +3 -2
  87. data/lib/sequel/connection_pool.rb +1 -1
  88. data/lib/sequel/core.rb +46 -5
  89. data/lib/sequel/database/connecting.rb +5 -6
  90. data/lib/sequel/database/dataset.rb +4 -4
  91. data/lib/sequel/database/dataset_defaults.rb +59 -1
  92. data/lib/sequel/database/logging.rb +1 -1
  93. data/lib/sequel/database/misc.rb +104 -19
  94. data/lib/sequel/database/query.rb +153 -58
  95. data/lib/sequel/database/schema_generator.rb +17 -7
  96. data/lib/sequel/database/schema_methods.rb +59 -29
  97. data/lib/sequel/dataset/actions.rb +231 -76
  98. data/lib/sequel/dataset/features.rb +91 -8
  99. data/lib/sequel/dataset/graph.rb +38 -11
  100. data/lib/sequel/dataset/misc.rb +50 -23
  101. data/lib/sequel/dataset/mutation.rb +5 -6
  102. data/lib/sequel/dataset/prepared_statements.rb +48 -27
  103. data/lib/sequel/dataset/query.rb +236 -43
  104. data/lib/sequel/dataset/sql.rb +665 -253
  105. data/lib/sequel/dataset.rb +8 -0
  106. data/lib/sequel/exceptions.rb +4 -0
  107. data/lib/sequel/extensions/columns_introspection.rb +61 -0
  108. data/lib/sequel/extensions/migration.rb +6 -4
  109. data/lib/sequel/extensions/named_timezones.rb +5 -0
  110. data/lib/sequel/extensions/thread_local_timezones.rb +1 -1
  111. data/lib/sequel/extensions/to_dot.rb +95 -83
  112. data/lib/sequel/model/associations.rb +1020 -337
  113. data/lib/sequel/model/base.rb +414 -132
  114. data/lib/sequel/model/errors.rb +1 -1
  115. data/lib/sequel/model/exceptions.rb +5 -1
  116. data/lib/sequel/model.rb +15 -8
  117. data/lib/sequel/plugins/association_pks.rb +22 -4
  118. data/lib/sequel/plugins/class_table_inheritance.rb +4 -4
  119. data/lib/sequel/plugins/dataset_associations.rb +100 -0
  120. data/lib/sequel/plugins/defaults_setter.rb +58 -0
  121. data/lib/sequel/plugins/force_encoding.rb +6 -6
  122. data/lib/sequel/plugins/identity_map.rb +114 -7
  123. data/lib/sequel/plugins/many_through_many.rb +65 -7
  124. data/lib/sequel/plugins/prepared_statements.rb +151 -0
  125. data/lib/sequel/plugins/prepared_statements_associations.rb +84 -0
  126. data/lib/sequel/plugins/prepared_statements_safe.rb +82 -0
  127. data/lib/sequel/plugins/prepared_statements_with_pk.rb +59 -0
  128. data/lib/sequel/plugins/rcte_tree.rb +29 -15
  129. data/lib/sequel/plugins/serialization.rb +88 -44
  130. data/lib/sequel/plugins/serialization_modification_detection.rb +51 -0
  131. data/lib/sequel/plugins/sharding.rb +21 -54
  132. data/lib/sequel/plugins/single_table_inheritance.rb +3 -1
  133. data/lib/sequel/plugins/typecast_on_load.rb +9 -12
  134. data/lib/sequel/plugins/update_primary_key.rb +2 -2
  135. data/lib/sequel/plugins/xml_serializer.rb +3 -3
  136. data/lib/sequel/sql.rb +109 -52
  137. data/lib/sequel/timezones.rb +57 -38
  138. data/lib/sequel/version.rb +1 -1
  139. data/spec/adapters/db2_spec.rb +146 -0
  140. data/spec/adapters/mssql_spec.rb +111 -29
  141. data/spec/adapters/mysql_spec.rb +135 -123
  142. data/spec/adapters/oracle_spec.rb +49 -77
  143. data/spec/adapters/postgres_spec.rb +267 -78
  144. data/spec/adapters/spec_helper.rb +6 -5
  145. data/spec/adapters/sqlite_spec.rb +35 -21
  146. data/spec/core/connection_pool_spec.rb +71 -92
  147. data/spec/core/core_sql_spec.rb +21 -30
  148. data/spec/core/database_spec.rb +788 -512
  149. data/spec/core/dataset_spec.rb +1073 -1053
  150. data/spec/core/expression_filters_spec.rb +159 -42
  151. data/spec/core/mock_adapter_spec.rb +419 -0
  152. data/spec/core/object_graph_spec.rb +86 -114
  153. data/spec/core/schema_generator_spec.rb +3 -3
  154. data/spec/core/schema_spec.rb +298 -38
  155. data/spec/core/spec_helper.rb +6 -48
  156. data/spec/extensions/association_autoreloading_spec.rb +1 -10
  157. data/spec/extensions/association_dependencies_spec.rb +2 -12
  158. data/spec/extensions/association_pks_spec.rb +66 -32
  159. data/spec/extensions/caching_spec.rb +23 -50
  160. data/spec/extensions/class_table_inheritance_spec.rb +31 -83
  161. data/spec/extensions/columns_introspection_spec.rb +91 -0
  162. data/spec/extensions/composition_spec.rb +18 -13
  163. data/spec/extensions/dataset_associations_spec.rb +199 -0
  164. data/spec/extensions/defaults_setter_spec.rb +64 -0
  165. data/spec/extensions/hook_class_methods_spec.rb +65 -91
  166. data/spec/extensions/identity_map_spec.rb +114 -22
  167. data/spec/extensions/instance_filters_spec.rb +11 -21
  168. data/spec/extensions/instance_hooks_spec.rb +53 -0
  169. data/spec/extensions/json_serializer_spec.rb +4 -5
  170. data/spec/extensions/lazy_attributes_spec.rb +16 -20
  171. data/spec/extensions/list_spec.rb +17 -39
  172. data/spec/extensions/many_through_many_spec.rb +283 -250
  173. data/spec/extensions/migration_spec.rb +35 -32
  174. data/spec/extensions/named_timezones_spec.rb +23 -3
  175. data/spec/extensions/nested_attributes_spec.rb +97 -88
  176. data/spec/extensions/optimistic_locking_spec.rb +9 -20
  177. data/spec/extensions/prepared_statements_associations_spec.rb +111 -0
  178. data/spec/extensions/prepared_statements_safe_spec.rb +61 -0
  179. data/spec/extensions/prepared_statements_spec.rb +53 -0
  180. data/spec/extensions/prepared_statements_with_pk_spec.rb +31 -0
  181. data/spec/extensions/pretty_table_spec.rb +1 -6
  182. data/spec/extensions/rcte_tree_spec.rb +41 -43
  183. data/spec/extensions/schema_dumper_spec.rb +5 -8
  184. data/spec/extensions/schema_spec.rb +13 -21
  185. data/spec/extensions/serialization_modification_detection_spec.rb +37 -0
  186. data/spec/extensions/serialization_spec.rb +72 -43
  187. data/spec/extensions/sharding_spec.rb +66 -140
  188. data/spec/extensions/single_table_inheritance_spec.rb +18 -29
  189. data/spec/extensions/spec_helper.rb +13 -61
  190. data/spec/extensions/sql_expr_spec.rb +20 -60
  191. data/spec/extensions/tactical_eager_loading_spec.rb +9 -19
  192. data/spec/extensions/thread_local_timezones_spec.rb +22 -2
  193. data/spec/extensions/timestamps_spec.rb +6 -6
  194. data/spec/extensions/to_dot_spec.rb +4 -7
  195. data/spec/extensions/touch_spec.rb +13 -14
  196. data/spec/extensions/tree_spec.rb +11 -26
  197. data/spec/extensions/typecast_on_load_spec.rb +1 -6
  198. data/spec/extensions/update_primary_key_spec.rb +30 -24
  199. data/spec/extensions/validation_class_methods_spec.rb +30 -51
  200. data/spec/extensions/validation_helpers_spec.rb +16 -35
  201. data/spec/extensions/xml_serializer_spec.rb +16 -4
  202. data/spec/integration/associations_test.rb +537 -21
  203. data/spec/integration/database_test.rb +4 -2
  204. data/spec/integration/dataset_test.rb +461 -65
  205. data/spec/integration/eager_loader_test.rb +19 -21
  206. data/spec/integration/model_test.rb +80 -1
  207. data/spec/integration/plugin_test.rb +304 -116
  208. data/spec/integration/prepared_statement_test.rb +212 -122
  209. data/spec/integration/schema_test.rb +161 -30
  210. data/spec/integration/spec_helper.rb +39 -30
  211. data/spec/integration/timezone_test.rb +38 -12
  212. data/spec/integration/transaction_test.rb +172 -5
  213. data/spec/integration/type_test.rb +17 -3
  214. data/spec/model/association_reflection_spec.rb +201 -7
  215. data/spec/model/associations_spec.rb +865 -662
  216. data/spec/model/base_spec.rb +275 -95
  217. data/spec/model/dataset_methods_spec.rb +7 -27
  218. data/spec/model/eager_loading_spec.rb +677 -676
  219. data/spec/model/hooks_spec.rb +309 -67
  220. data/spec/model/model_spec.rb +222 -168
  221. data/spec/model/plugins_spec.rb +24 -13
  222. data/spec/model/record_spec.rb +381 -218
  223. data/spec/model/spec_helper.rb +13 -71
  224. data/spec/model/validations_spec.rb +11 -0
  225. metadata +115 -73
@@ -527,13 +527,8 @@ describe Sequel::Model do
527
527
  end
528
528
 
529
529
  specify "should raise an error if inclusion_of doesn't receive a valid :in option" do
530
- lambda {
531
- @c.validates_inclusion_of :value
532
- }.should raise_error(ArgumentError)
533
-
534
- lambda {
535
- @c.validates_inclusion_of :value, :in => 1
536
- }.should raise_error(ArgumentError)
530
+ lambda{@c.validates_inclusion_of :value}.should raise_error(ArgumentError)
531
+ lambda{@c.validates_inclusion_of :value, :in => 1}.should raise_error(ArgumentError)
537
532
  end
538
533
 
539
534
  specify "should raise an error if inclusion_of handles :allow_nil too" do
@@ -570,7 +565,6 @@ describe Sequel::Model do
570
565
 
571
566
  specify "should validate uniqueness_of with if => false" do
572
567
  @c.validates_uniqueness_of :value, :if => :skip
573
-
574
568
  @m.value = 'a'
575
569
  @m.should be_valid
576
570
  end
@@ -602,16 +596,11 @@ describe "Superclass validations" do
602
596
  o = @c2.new
603
597
  o.value = 'ab'
604
598
  o.valid?.should == false
605
- o.errors.full_messages.should == [
606
- 'value is too short'
607
- ]
599
+ o.errors.full_messages.should == ['value is too short']
608
600
 
609
601
  o.value = '12'
610
602
  o.valid?.should == false
611
- o.errors.full_messages.should == [
612
- 'value is too short',
613
- 'value is invalid'
614
- ]
603
+ o.errors.full_messages.should == ['value is too short', 'value is invalid']
615
604
 
616
605
  o.value = 'abcde'
617
606
  o.valid?.should be_true
@@ -626,9 +615,7 @@ describe "Superclass validations" do
626
615
 
627
616
  o.value = '12'
628
617
  o.valid?.should == false
629
- o.errors.full_messages.should == [
630
- 'value is invalid'
631
- ]
618
+ o.errors.full_messages.should == ['value is invalid']
632
619
 
633
620
  o.value = 'abcde'
634
621
  o.valid?.should be_true
@@ -824,22 +811,18 @@ describe Sequel::Model, "Validations" do
824
811
  uniqueness_of :username
825
812
  end
826
813
  end
827
- User.dataset.extend(Module.new {
828
- def fetch_rows(sql)
829
- @db << sql
830
-
831
- case sql
832
- when /COUNT.*username = '0records'/
833
- yield({:v => 0})
834
- when /COUNT.*username = '2records'/
835
- yield({:v => 2})
836
- when /COUNT.*username = '1record'/
837
- yield({:v => 1})
838
- when /username = '1record'/
839
- yield({:id => 3, :username => "1record", :password => "test"})
840
- end
814
+ User.dataset._fetch = proc do |sql|
815
+ case sql
816
+ when /COUNT.*username = '0records'/
817
+ {:v => 0}
818
+ when /COUNT.*username = '2records'/
819
+ {:v => 2}
820
+ when /COUNT.*username = '1record'/
821
+ {:v => 1}
822
+ when /username = '1record'/
823
+ {:id => 3, :username => "1record", :password => "test"}
841
824
  end
842
- })
825
+ end
843
826
 
844
827
  @user = User.new(:username => "2records", :password => "anothertest")
845
828
  @user.should_not be_valid
@@ -869,26 +852,22 @@ describe Sequel::Model, "Validations" do
869
852
  uniqueness_of [:username, :password]
870
853
  end
871
854
  end
872
- User.dataset.extend(Module.new {
873
- def fetch_rows(sql)
874
- @db << sql
875
-
876
- case sql
877
- when /COUNT.*username = '0records'/
878
- yield({:v => 0})
879
- when /COUNT.*username = '2records'/
880
- yield({:v => 2})
881
- when /COUNT.*username = '1record'/
882
- yield({:v => 1})
883
- when /username = '1record'/
884
- if sql =~ /password = 'anothertest'/
885
- yield({:id => 3, :username => "1record", :password => "anothertest"})
886
- else
887
- yield({:id => 4, :username => "1record", :password => "test"})
888
- end
855
+ User.dataset._fetch = proc do |sql|
856
+ case sql
857
+ when /COUNT.*username = '0records'/
858
+ {:v => 0}
859
+ when /COUNT.*username = '2records'/
860
+ {:v => 2}
861
+ when /COUNT.*username = '1record'/
862
+ {:v => 1}
863
+ when /username = '1record'/
864
+ if sql =~ /password = 'anothertest'/
865
+ {:id => 3, :username => "1record", :password => "anothertest"}
866
+ else
867
+ {:id => 4, :username => "1record", :password => "test"}
889
868
  end
890
869
  end
891
- })
870
+ end
892
871
 
893
872
  @user = User.new(:username => "2records", :password => "anothertest")
894
873
  @user.should_not be_valid
@@ -317,18 +317,14 @@ describe "Sequel::Plugins::ValidationHelpers" do
317
317
  @c.columns(:id, :username, :password)
318
318
  @c.set_dataset MODEL_DB[:items]
319
319
  @c.set_validations{validates_unique(:username)}
320
- @c.dataset.extend(Module.new {
321
- def fetch_rows(sql)
322
- @db << sql
323
-
324
- case sql
325
- when /COUNT.*username = '0records'/
326
- yield({:v => 0})
327
- when /COUNT.*username = '1record'/
328
- yield({:v => 1})
329
- end
320
+ @c.dataset._fetch = proc do |sql|
321
+ case sql
322
+ when /COUNT.*username = '0records'/
323
+ {:v => 0}
324
+ when /COUNT.*username = '1record'/
325
+ {:v => 1}
330
326
  end
331
- })
327
+ end
332
328
 
333
329
  @user = @c.new(:username => "0records", :password => "anothertest")
334
330
  @user.should be_valid
@@ -359,18 +355,14 @@ describe "Sequel::Plugins::ValidationHelpers" do
359
355
  @c.columns(:id, :username, :password)
360
356
  @c.set_dataset MODEL_DB[:items]
361
357
  @c.set_validations{validates_unique([:username, :password])}
362
- @c.dataset.extend(Module.new {
363
- def fetch_rows(sql)
364
- @db << sql
365
-
366
- case sql
367
- when /COUNT.*username = '0records'/
368
- yield({:v => 0})
369
- when /COUNT.*username = '1record'/
370
- yield({:v => 1})
371
- end
358
+ @c.dataset._fetch = proc do |sql|
359
+ case sql
360
+ when /COUNT.*username = '0records'/
361
+ {:v => 0}
362
+ when /COUNT.*username = '1record'/
363
+ {:v => 1}
372
364
  end
373
- })
365
+ end
374
366
 
375
367
  @user = @c.new(:username => "0records", :password => "anothertest")
376
368
  @user.should be_valid
@@ -401,12 +393,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
401
393
  @c.columns(:id, :username, :password)
402
394
  @c.set_dataset MODEL_DB[:items]
403
395
  @c.set_validations{validates_unique(:username){|ds| ds.filter(:active)}}
404
- @c.dataset.extend(Module.new {
405
- def fetch_rows (sql)
406
- @db << sql
407
- yield({:v => 0})
408
- end
409
- })
396
+ @c.dataset._fetch = {:v=>0}
410
397
 
411
398
  MODEL_DB.reset
412
399
  @c.new(:username => "0records", :password => "anothertest").should be_valid
@@ -419,13 +406,7 @@ describe "Sequel::Plugins::ValidationHelpers" do
419
406
  @c.columns(:id, :username, :password)
420
407
  @c.set_dataset MODEL_DB[:items]
421
408
  @c.set_validations{validates_unique([:username, :password], :only_if_modified=>true)}
422
-
423
- @c.dataset.extend(Module.new {
424
- def fetch_rows (sql)
425
- @db << sql
426
- yield({:v => 0})
427
- end
428
- })
409
+ @c.dataset._fetch = {:v=>0}
429
410
 
430
411
  MODEL_DB.reset
431
412
  @c.new(:username => "0records", :password => "anothertest").should be_valid
@@ -36,6 +36,18 @@ describe "Sequel::Plugins::XmlSerializer" do
36
36
  Album.from_xml(@album.to_xml).should == @album
37
37
  end
38
38
 
39
+ it "should round trip successfully for namespaced models" do
40
+ module XmlSerializerTest
41
+ class Artist < Sequel::Model
42
+ plugin :xml_serializer
43
+ columns :id, :name
44
+ @db_schema = {:id=>{:type=>:integer}, :name=>{:type=>:string}}
45
+ end
46
+ end
47
+ artist = XmlSerializerTest::Artist.load(:id=>2, :name=>'YJM')
48
+ XmlSerializerTest::Artist.from_xml(artist.to_xml).should == artist
49
+ end
50
+
39
51
  it "should round trip successfully with empty strings" do
40
52
  artist = Artist.load(:id=>2, :name=>'')
41
53
  Artist.from_xml(artist.to_xml).should == artist
@@ -106,13 +118,13 @@ describe "Sequel::Plugins::XmlSerializer" do
106
118
  end
107
119
 
108
120
  it "should support an :encoding option when serializing" do
109
- ["<?xml version=\"1.0\" encoding=\"utf-8\"?><artist><id>2</id><name>YJM</name></artist>",
110
- "<?xml version=\"1.0\" encoding=\"utf-8\"?><artist><name>YJM</name><id>2</id></artist>"].should include(@artist.to_xml(:encoding=>'utf-8').gsub(/\n */m, ''))
121
+ ["<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>",
122
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><name>YJM</name><id>2</id></artist>"].should include(@artist.to_xml(:encoding=>'UTF-8').gsub(/\n */m, ''))
111
123
  end
112
124
 
113
125
  it "should support a :builder_opts option when serializing" do
114
- ["<?xml version=\"1.0\" encoding=\"utf-8\"?><artist><id>2</id><name>YJM</name></artist>",
115
- "<?xml version=\"1.0\" encoding=\"utf-8\"?><artist><name>YJM</name><id>2</id></artist>"].should include(@artist.to_xml(:builder_opts=>{:encoding=>'utf-8'}).gsub(/\n */m, ''))
126
+ ["<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><id>2</id><name>YJM</name></artist>",
127
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><artist><name>YJM</name><id>2</id></artist>"].should include(@artist.to_xml(:builder_opts=>{:encoding=>'UTF-8'}).gsub(/\n */m, ''))
116
128
  end
117
129
 
118
130
  it "should support an :types option when serializing" do