jorahood-ar-extensions 0.9.2.3

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 (71) hide show
  1. data/ChangeLog +145 -0
  2. data/README +167 -0
  3. data/Rakefile +79 -0
  4. data/config/database.yml +7 -0
  5. data/config/database.yml.template +7 -0
  6. data/config/mysql.schema +72 -0
  7. data/config/postgresql.schema +39 -0
  8. data/db/migrate/generic_schema.rb +96 -0
  9. data/db/migrate/mysql_schema.rb +31 -0
  10. data/db/migrate/oracle_schema.rb +5 -0
  11. data/db/migrate/version.rb +4 -0
  12. data/init.rb +31 -0
  13. data/lib/ar-extensions/create_and_update.rb +509 -0
  14. data/lib/ar-extensions/csv.rb +309 -0
  15. data/lib/ar-extensions/delete.rb +143 -0
  16. data/lib/ar-extensions/extensions.rb +506 -0
  17. data/lib/ar-extensions/finder_options.rb +275 -0
  18. data/lib/ar-extensions/finders.rb +94 -0
  19. data/lib/ar-extensions/foreign_keys.rb +70 -0
  20. data/lib/ar-extensions/fulltext.rb +62 -0
  21. data/lib/ar-extensions/import.rb +352 -0
  22. data/lib/ar-extensions/insert_select.rb +178 -0
  23. data/lib/ar-extensions/synchronize.rb +30 -0
  24. data/lib/ar-extensions/temporary_table.rb +124 -0
  25. data/lib/ar-extensions/union.rb +204 -0
  26. data/lib/ar-extensions/version.rb +9 -0
  27. data/tests/connections/native_mysql/connection.rb +16 -0
  28. data/tests/connections/native_oracle/connection.rb +16 -0
  29. data/tests/connections/native_postgresql/connection.rb +19 -0
  30. data/tests/connections/native_sqlite/connection.rb +14 -0
  31. data/tests/connections/native_sqlite3/connection.rb +14 -0
  32. data/tests/fixtures/addresses.yml +25 -0
  33. data/tests/fixtures/books.yml +46 -0
  34. data/tests/fixtures/developers.yml +20 -0
  35. data/tests/fixtures/unit/active_record_base_finders/addresses.yml +25 -0
  36. data/tests/fixtures/unit/active_record_base_finders/books.yml +64 -0
  37. data/tests/fixtures/unit/active_record_base_finders/developers.yml +20 -0
  38. data/tests/fixtures/unit/synchronize/books.yml +16 -0
  39. data/tests/fixtures/unit/to_csv_headers/addresses.yml +8 -0
  40. data/tests/fixtures/unit/to_csv_headers/developers.yml +6 -0
  41. data/tests/fixtures/unit/to_csv_with_common_options/addresses.yml +40 -0
  42. data/tests/fixtures/unit/to_csv_with_common_options/developers.yml +13 -0
  43. data/tests/fixtures/unit/to_csv_with_common_options/languages.yml +29 -0
  44. data/tests/fixtures/unit/to_csv_with_common_options/teams.yml +3 -0
  45. data/tests/fixtures/unit/to_csv_with_default_options/developers.yml +7 -0
  46. data/tests/models/address.rb +4 -0
  47. data/tests/models/animal.rb +2 -0
  48. data/tests/models/book.rb +3 -0
  49. data/tests/models/cart_item.rb +4 -0
  50. data/tests/models/developer.rb +8 -0
  51. data/tests/models/group.rb +3 -0
  52. data/tests/models/language.rb +5 -0
  53. data/tests/models/mysql/book.rb +3 -0
  54. data/tests/models/mysql/test_innodb.rb +3 -0
  55. data/tests/models/mysql/test_memory.rb +3 -0
  56. data/tests/models/mysql/test_myisam.rb +3 -0
  57. data/tests/models/project.rb +2 -0
  58. data/tests/models/shopping_cart.rb +4 -0
  59. data/tests/models/team.rb +4 -0
  60. data/tests/models/topic.rb +13 -0
  61. data/tests/mysql/test_create_and_update.rb +290 -0
  62. data/tests/mysql/test_delete.rb +142 -0
  63. data/tests/mysql/test_finder_options.rb +121 -0
  64. data/tests/mysql/test_finders.rb +29 -0
  65. data/tests/mysql/test_import.rb +354 -0
  66. data/tests/mysql/test_insert_select.rb +173 -0
  67. data/tests/mysql/test_mysql_adapter.rb +45 -0
  68. data/tests/mysql/test_union.rb +81 -0
  69. data/tests/oracle/test_adapter.rb +14 -0
  70. data/tests/postgresql/test_adapter.rb +14 -0
  71. metadata +147 -0
@@ -0,0 +1,45 @@
1
+ class MysqlAdapterTest< TestCaseSuperClass
2
+ include ActiveRecord::ConnectionAdapters
3
+
4
+ def setup
5
+ @connection = ActiveRecord::Base.connection
6
+ end
7
+
8
+ def test_get_insert_value_sets
9
+ values = [
10
+ "('1','2','3')",
11
+ "('4','5','6')",
12
+ "('7','8','9')" ]
13
+
14
+ values_size_in_bytes = MysqlAdapter.sum_sizes( *values )
15
+ base_sql_size_in_bytes = 15
16
+ max_bytes = 30
17
+
18
+ value_sets = MysqlAdapter.get_insert_value_sets( values, base_sql_size_in_bytes, max_bytes )
19
+ assert_equal 3, value_sets.size, 'Three value sets were expected!'
20
+
21
+ # Each element in the value_sets array must be an array
22
+ value_sets.each_with_index { |e,i|
23
+ assert_kind_of Array, e, "Element #{i} was expected to be an Array!" }
24
+
25
+ # Each element in the values array should have a 1:1 correlation to the elements
26
+ # in the returned value_sets arrays
27
+ assert_equal values[0], value_sets[0].first
28
+ assert_equal values[1], value_sets[1].first
29
+ assert_equal values[2], value_sets[2].first
30
+ end
31
+
32
+ def test_insert_many
33
+ base_sql = "INSERT INTO #{Topic.table_name} (`title`,`author_name`) VALUES "
34
+ values = [
35
+ "('Morgawr','Brooks, Terry')",
36
+ "('Antrax', 'Brooks, Terry')",
37
+ "('Jarka Ruus', 'Brooks, Terry')" ]
38
+
39
+ expected_count = Topic.count + values.size
40
+ @connection.insert_many( base_sql, values )
41
+ assert_equal expected_count, Topic.count, "Incorrect number of records in the database!"
42
+ Topic.destroy_all
43
+ end
44
+
45
+ end
@@ -0,0 +1,81 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), '../test_helper') )
2
+
3
+ class UnionTest < TestCaseSuperClass
4
+ fixtures 'books'
5
+
6
+ def test_union_should_query_five_records
7
+ books = Book.find_union({:conditions => ['author_name = ?', 'Terry Brooks']},
8
+ {:conditions => 'id > 3 and id < 6'})
9
+
10
+
11
+ assert_equal(5, books.length)
12
+ books.each {|book|
13
+ assert(book.author_name == 'Terry Brooks' || (book.id > 3 && book.id < 6))
14
+ }
15
+ end
16
+
17
+ def test_union_with_unused_include_should_query_five_records
18
+ books = Book.find_union({:conditions => ['author_name = ?', 'Terry Brooks']},
19
+ {:conditions => 'books.id > 3 and books.id < 6', :include => :topic})
20
+
21
+
22
+ assert_equal(5, books.length)
23
+ books.each {|book|
24
+ assert(book.author_name == 'Terry Brooks' || (book.id > 3 && book.id < 6))
25
+ }
26
+ end
27
+
28
+
29
+ def test_union_with_include_should_load_5_books
30
+ @topic = Topic.create!(:title => 'funtimes', :author_name => 'giraffe')
31
+ Book.update_all(['topic_id = ? ', @topic.id], ['books.id > 3 and books.id < 6'])
32
+
33
+
34
+ books = Book.find_union({:conditions => ['author_name = ?', 'Terry Brooks']},
35
+ {:conditions => ['topics.title = :name',{:name => @topic.title}],
36
+ :include => ['topic']})
37
+
38
+
39
+ assert_equal(5, books.length)
40
+
41
+ books.each {|book|
42
+ assert(book.author_name == 'Terry Brooks' || (book.id > 3 && book.id < 6))
43
+ }
44
+ end
45
+
46
+ def test_union_with_limit_should_query_four_records
47
+ books = Book.find_union({:conditions => ['author_name = ?', 'Terry Brooks']},
48
+ {:conditions => 'id > 3 and id < 6', :limit => 1})
49
+
50
+ assert_equal(4, books.length)
51
+ books.each {|book|
52
+ assert(book.author_name == 'Terry Brooks' || (book.id > 3 && book.id < 6))
53
+ }
54
+ end
55
+
56
+ def test_count_union_should_query_five_records_for_id
57
+ count = Book.count_union(:id, {:conditions => ['author_name = ?', 'Terry Brooks']},
58
+ {:conditions => 'id > 3 and id < 6'})
59
+
60
+ assert_equal(5, count)
61
+ end
62
+
63
+ def test_union_should_query_four_records_using_limit
64
+ count = Book.count_union(:all,
65
+ {:conditions => ['author_name = ?', 'Terry Brooks']},
66
+ {:conditions => 'id > 3 and id < 6', :limit => 1})
67
+
68
+ assert_equal(4, count)
69
+ end
70
+
71
+ def test_count_union_should_count_two_authors
72
+ count = Book.count_union(:author_name, {:conditions => ['author_name = ?', 'Terry Brooks']},
73
+ {:conditions => 'id > 3 and id < 6'})
74
+
75
+ assert_equal(2, count)
76
+ end
77
+
78
+
79
+ end
80
+
81
+
@@ -0,0 +1,14 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), '..', 'test_helper' ) )
2
+
3
+ class OracleAdapterTest< TestCaseSuperClass
4
+
5
+ def setup
6
+ @target = ActiveRecord::ConnectionAdapters::OracleAdapter.allocate
7
+ end
8
+
9
+ def test_should_generate_the_correct_next_value_for_sequence
10
+ result = @target.next_value_for_sequence("blah")
11
+ assert_equal 'blah.nextval', result, "wrong next value sequence identifier"
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), '..', 'test_helper' ) )
2
+
3
+ class PostgreSQLAdapterTest< TestCaseSuperClass
4
+
5
+ def setup
6
+ @target = ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.allocate
7
+ end
8
+
9
+ def test_should_generate_the_correct_next_value_for_sequence
10
+ result = @target.next_value_for_sequence("blah")
11
+ assert_equal %{nextval('blah')}, result, "wrong next value sequence identifier"
12
+ end
13
+
14
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jorahood-ar-extensions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Zach Dennis
8
+ - Mark Van Holstyn
9
+ - Blythe Dunham
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2009-06-16 00:00:00 -07:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: activerecord
19
+ type: :runtime
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.1.2
26
+ version:
27
+ description: Extends ActiveRecord functionality by adding better finder/query support, as well as supporting mass data import, foreign key, CSV and temporary tables
28
+ email: zach.dennis@gmail.com
29
+ executables: []
30
+
31
+ extensions: []
32
+
33
+ extra_rdoc_files:
34
+ - README
35
+ files:
36
+ - init.rb
37
+ - Rakefile
38
+ - ChangeLog
39
+ - README
40
+ - db/migrate
41
+ - db/migrate/generic_schema.rb
42
+ - db/migrate/mysql_schema.rb
43
+ - db/migrate/oracle_schema.rb
44
+ - db/migrate/version.rb
45
+ - config/database.yml
46
+ - config/database.yml.template
47
+ - config/mysql.schema
48
+ - config/postgresql.schema
49
+ - lib/ar-extensions/create_and_update.rb
50
+ - lib/ar-extensions/csv.rb
51
+ - lib/ar-extensions/delete.rb
52
+ - lib/ar-extensions/extensions.rb
53
+ - lib/ar-extensions/finder_options.rb
54
+ - lib/ar-extensions/finders.rb
55
+ - lib/ar-extensions/foreign_keys.rb
56
+ - lib/ar-extensions/fulltext.rb
57
+ - lib/ar-extensions/import.rb
58
+ - lib/ar-extensions/insert_select.rb
59
+ - lib/ar-extensions/synchronize.rb
60
+ - lib/ar-extensions/temporary_table.rb
61
+ - lib/ar-extensions/union.rb
62
+ - lib/ar-extensions/version.rb
63
+ - tests/connections/native_mysql
64
+ - tests/connections/native_mysql/connection.rb
65
+ - tests/connections/native_oracle
66
+ - tests/connections/native_oracle/connection.rb
67
+ - tests/connections/native_postgresql
68
+ - tests/connections/native_postgresql/connection.rb
69
+ - tests/connections/native_sqlite
70
+ - tests/connections/native_sqlite/connection.rb
71
+ - tests/connections/native_sqlite3
72
+ - tests/connections/native_sqlite3/connection.rb
73
+ - tests/fixtures/addresses.yml
74
+ - tests/fixtures/books.yml
75
+ - tests/fixtures/developers.yml
76
+ - tests/fixtures/unit
77
+ - tests/fixtures/unit/active_record_base_finders
78
+ - tests/fixtures/unit/active_record_base_finders/addresses.yml
79
+ - tests/fixtures/unit/active_record_base_finders/books.yml
80
+ - tests/fixtures/unit/active_record_base_finders/developers.yml
81
+ - tests/fixtures/unit/synchronize
82
+ - tests/fixtures/unit/synchronize/books.yml
83
+ - tests/fixtures/unit/to_csv_headers
84
+ - tests/fixtures/unit/to_csv_headers/addresses.yml
85
+ - tests/fixtures/unit/to_csv_headers/developers.yml
86
+ - tests/fixtures/unit/to_csv_with_common_options
87
+ - tests/fixtures/unit/to_csv_with_common_options/addresses.yml
88
+ - tests/fixtures/unit/to_csv_with_common_options/developers.yml
89
+ - tests/fixtures/unit/to_csv_with_common_options/languages.yml
90
+ - tests/fixtures/unit/to_csv_with_common_options/teams.yml
91
+ - tests/fixtures/unit/to_csv_with_default_options
92
+ - tests/fixtures/unit/to_csv_with_default_options/developers.yml
93
+ - tests/models/address.rb
94
+ - tests/models/animal.rb
95
+ - tests/models/book.rb
96
+ - tests/models/cart_item.rb
97
+ - tests/models/developer.rb
98
+ - tests/models/group.rb
99
+ - tests/models/language.rb
100
+ - tests/models/mysql
101
+ - tests/models/mysql/book.rb
102
+ - tests/models/mysql/test_innodb.rb
103
+ - tests/models/mysql/test_memory.rb
104
+ - tests/models/mysql/test_myisam.rb
105
+ - tests/models/project.rb
106
+ - tests/models/shopping_cart.rb
107
+ - tests/models/team.rb
108
+ - tests/models/topic.rb
109
+ - tests/mysql/test_create_and_update.rb
110
+ - tests/mysql/test_delete.rb
111
+ - tests/mysql/test_finder_options.rb
112
+ - tests/mysql/test_finders.rb
113
+ - tests/mysql/test_import.rb
114
+ - tests/mysql/test_insert_select.rb
115
+ - tests/mysql/test_mysql_adapter.rb
116
+ - tests/mysql/test_union.rb
117
+ - tests/oracle/test_adapter.rb
118
+ - tests/postgresql/test_adapter.rb
119
+ has_rdoc: true
120
+ homepage: http://www.continuousthinking.com/tags/arext
121
+ post_install_message:
122
+ rdoc_options:
123
+ - --main
124
+ - README
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: "0"
132
+ version:
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: "0"
138
+ version:
139
+ requirements: []
140
+
141
+ rubyforge_project: arext
142
+ rubygems_version: 1.2.0
143
+ signing_key:
144
+ specification_version: 2
145
+ summary: Extends ActiveRecord functionality. Added compatibility with composite-primary-keys
146
+ test_files: []
147
+