ar-extensions 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,97 @@
1
+ 2007-03-13 zdennis <zdennis@elijah>
2
+
3
+ * Added :datetime searching support for better finder support.
4
+
5
+ 2007-02-11 zdennis <zdennis@admin.aries>
6
+
7
+ * Updated to_csv and import functionality to work with Sqlite, Sqlite3, PostgreSQL and MySQL
8
+
9
+ * Updated RDOC for import, to_csv, better finders, temporary tables and foreign key support
10
+
11
+ 2007-01-29 zdennis <zdennis@mktec.com>
12
+
13
+ * Added initial support for temporary tables and permanent like tables.
14
+
15
+ 2007-01-24 zdennis <zdennis@mktec.com>
16
+
17
+ * Added dependency for Mocha 0.4.0 or higher for testing
18
+
19
+ * Fixed bug for import functionality where it was never actually splitting up values correctly (thx to Mark Van Holstyn!!)
20
+
21
+ 2007-01-09 zdennis <zdennis@aries>
22
+
23
+ * Added support for embedded to_csv includes
24
+
25
+ 2007-01-07 zdennis <zdennis@aries>
26
+
27
+ * Added fix to init.rb to only load CSV functionality if FasterCSV
28
+ is available, otherwise print a message to STDERR and continue.
29
+
30
+ * Added fix to tests/boot.rb which solves fixture_path issues in
31
+ ActiveRecord 1.14.4 and earlier. The fix is included Rails trunk
32
+ and will be available in Rails 1.2.
33
+
34
+ 2007-01-05 zdennis <zdennis@aries>
35
+
36
+ * Added ActiveRecord::Extensions::VERSION module which has the following constants: MAJOR, MINOR, REVISION
37
+
38
+ * Running rake tests are now smart enough to rebuild the database if they are required based on schema_info table.
39
+
40
+ * Added schema_info table for test database schemas.
41
+
42
+ 2006-12-29 zdennis <zdennis@aries>
43
+
44
+ * Updated the Rakefile to run an external ruby process when running test files rather then in the same ruby process that runs the Rakefile
45
+
46
+ * Updated the directory structure of lib/ to solve namespace issues.
47
+
48
+ 2006-12-22 Zach Dennis <zdennis@silver.dennis.network>
49
+
50
+ * Added rake tasks for sqlite and sqlite3 databases
51
+
52
+ * Added "does_not_match" as a suffix to better finders when working with Regular Expressions
53
+
54
+ * Added "not_between" suffix to better finders when working with Ranges
55
+
56
+ 2006-12-17 zdennis <zdennis@aries>
57
+
58
+ * Added :only and :except options to to_csv method. Forcing
59
+ compatibility with http://blog.integralimpressions.com/articles/2006/09/01/tocsv-plugin
60
+
61
+ * Changed to_csv option :headers take a boolean rather then an
62
+ array of column names.
63
+
64
+ * Added rake task db:prepare_<adapter_name> to build test
65
+ database.
66
+
67
+ 2006-12-16 Zach Dennis <zdennis@silver.dennis.network>
68
+
69
+ * Added more tests for better finder support
70
+
71
+ * Added to_csv support for Arrays returned by ActiveRecord::Base.find
72
+
73
+ * Refactored ActiveRecord::Extensions::Registry to use an Array instead of hash
74
+
75
+ 2006-12-06 Zach Dennis <zdennis@silver.dennis.network>
76
+
77
+ * PostgreSQL has tested support for everything MySQL has except for Full Text Searching. This is not implemented.
78
+
79
+ * Refactored how import and full text searching implementation is handled, this is largely handled by duck typing certain method calls.
80
+
81
+ * Added generic import support for any adapter that doesn't support multi-value insert statements. This provides generic support which is guaranteed to be no slower then ActiveRecord#create.
82
+
83
+ 2006-11-23 Zach Dennis <zdennis@silver.dennis.network>
84
+
85
+ * Added finder support for PostgreSQL including Regexp Searching. (No full text searching though)
86
+
87
+ * Fixed bug in finders.rb where NULL searches were not correctly being translated into IS NULL when doing { :column => nil }
88
+
89
+ 2006-11-20 Zach Dennis <zach.dennis@gmail.com>
90
+
91
+ * Refactored core finder components out into ActiveRecord extensions
92
+
93
+ * Duck typing support for any object that is passed in to a conditions hash. ie: MyModel.find( :all, :conditions=>{ :name=>NameSearchObject.new } )
94
+
95
+ * Duck typing support for any object that is passed in as a condition. ie: MyModel.find( :all, :conditions=>SearchObject.new )
96
+
97
+
data/README ADDED
@@ -0,0 +1,123 @@
1
+ LICENSE
2
+ ----------
3
+ This is licensed under the ruby license.
4
+
5
+ Author: Zach Dennis
6
+ Web Site: http://www.continuousthinking.com/tags/arext
7
+ Email: zach.dennis@gmail.com
8
+
9
+ - For How-To information see http://www.continuousthinking.com/tags/arext
10
+ - For project information and feedback please consult http://rubyforge.org/projects/arext/
11
+ - For release information please see below
12
+
13
+ ActiveRecord::Extensions 0.5.0
14
+ ------------------------------
15
+ March 13th, 2007
16
+ - Added Time based query support which works on ActiveRecord columns which match a type supported by :datetime
17
+
18
+ ActiveRecord::Extensions 0.4.0
19
+ ------------------------------
20
+ February 11th, 2007
21
+ - Added to_csv functionality
22
+ - Added temporary table support (MySQL)
23
+ - Added foreign key support (MySQL)
24
+ - Updated tests to keep schema information. Test database will automatically rebuild themselves if they are out of sync
25
+ - Added dependency for Mocha 0.4.0 or higher for tests
26
+
27
+ ActiveRecord::Extensions 0.3.0
28
+ ------------------------------
29
+ December 29th, 2006
30
+ - Updates to the lib/ directory structure to avoid namespace issues.
31
+ - Updates to the Rakefile to run an external ruby process for tests rather then the same
32
+ ruby process that runs the rake tasks
33
+
34
+ ActiveRecord::Extensions 0.2.0
35
+ ------------------------------
36
+ December 22nd, 2006
37
+ - Updates to_csv method for arrays returned by ActiveRecord::Base.find
38
+ - Adds does_not_match suffix for regular expression based conditions, ie: :field_does_not_match => /regex/
39
+ - Adds not_between suffix for ange based conditions, ie: :id_not_between => ( 0 .. 1 )
40
+ - Adds SQLite and SQLite3 support for better finders.
41
+ - Updates rake tasks for sqlite and sqlite3.
42
+ - Added rake tasks to use database migrations rather then raw SQL schema files.
43
+
44
+ ActiveRecord::Extensions 0.1.0
45
+ -------------------------------
46
+ December 16th, 2006
47
+ - Adds to_csv method to arrays returned by ActiveRecord::Base.find.
48
+ - Fixes bug in ActiveRecord::Extensions::Registry when processing key/value pairs where
49
+ the order of certain Extensions was not handled correctly due to Hash usage.
50
+ - Refactoring of ActiveRecord::Extensions::Registry
51
+ - Added more tests for better finder support
52
+
53
+ ActiveRecord::Extensions 0.0.6
54
+ ------------------------------
55
+ December 5th, 2006
56
+ - Added generic support for import functionality for all adapters
57
+ - Includes rake testing tasks for postgresql
58
+ - Includes postgresql support for all extensions except for full text searching (which is only mysql)
59
+ - Refactored directory structure of tests, import functionality and fulltext functionality
60
+
61
+
62
+ ActiveRecord::Extensions 0.0.5
63
+ ------------------------------
64
+ October 20th, 2006.
65
+ - Fixes two bugs which broke normal ActiveRecord behavior
66
+ - Fully complaint with Rails 1.1.0 thru 1.1.6 (and all ActiveRecord versions released with those)
67
+ - Inlcudes new Rakefile
68
+ - Includes rake task "test:mysql" which allows ActiveRecord::Extensions to be tested with mysql
69
+ - Includes rake test "test:activerecord:mysql" which allows ActiveRecord's tests to be tested with the
70
+ ActiveRecord::Extensions library
71
+
72
+
73
+ ActiveRecord::Extensions 0.0.4
74
+ -------------------------------
75
+ August 26th, 2006. Released at RubyConf*MI.
76
+ September 24th, 2006, Rubyforge release.
77
+ - Inlcudes "Better Finder" support for ActiveRecord
78
+ http://blogs.mktec.com/zdennis/pages/ARE_finders
79
+
80
+
81
+ ActiveRecord::Extensions 0.0.3
82
+ -------------------------------
83
+ Released.... ????
84
+ - the project has been named ActiveRecord::Extensions.
85
+
86
+
87
+ ActiveRecord::Optimizations 0.0.2
88
+ ---------------------------------
89
+ July 20th, 11:27pm, Zach Dennis
90
+
91
+ This includes some of the optimizations for the ActiveRecord::Base. This release only supports the MysqlAdapter, although other adapters will be supported in upcoming releases.
92
+
93
+ HOW-TO USAGE
94
+ ------------
95
+ Require the two files in the lib/ directory and then create records using:
96
+ Model.create array_of_hashes
97
+
98
+ Example:
99
+ class LogEntry < ActiveRecord::Base ; end
100
+ LogEntry.import [ { :log_entry_name=>"Name" }, {:log_entry_name=>"Name2"}, ... ], :optimize=>true
101
+
102
+ Using the optimized create method will return the number of inserts performed, rather then an array of LogEntry objects. This currently skips model validation.
103
+
104
+
105
+ CHANGELOG
106
+ ----------
107
+ 0.0.2
108
+ - add some documentation to the updated methods for ActiveRecord and MysqlAdapter
109
+ - renamed the create optimizatin to import. Multi-value inserts can be obtained using ActiveRecord::Base.import
110
+ 0.0.1
111
+ - introduced updates to ActiveRecord::Base.create to support multi-value inserts
112
+
113
+
114
+ UPCOMING
115
+ ----------
116
+ - model validation on imports
117
+ - postgresql support for imports
118
+ - ability to use regular expressions for db searches
119
+ - ability to use db functions
120
+ - temporary table support
121
+ - memory table support
122
+ - complex update with on duplicate key update support
123
+
data/Rakefile ADDED
@@ -0,0 +1,97 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/testtask'
4
+
5
+ DIR = File.dirname( __FILE__ )
6
+
7
+ task :default => [ "test:mysql" ]
8
+
9
+ task :boot do
10
+ require File.join( DIR, 'lib', 'ar-extensions' )
11
+ require File.join( DIR, 'tests', 'connections', "native_#{ENV['ARE_DB']}", 'connection' )
12
+ require File.join( DIR, 'db/migrate/version' )
13
+ end
14
+
15
+ ADAPTERS = %w( mysql postgresql sqlite sqlite3 )
16
+
17
+ namespace :db do
18
+
19
+ namespace :test do
20
+ ADAPTERS.each do |adapter|
21
+ desc "builds test database for #{adapter}"
22
+ task "prepare_#{adapter}" do |t|
23
+ file2run = File.join( DIR, 'tests/prepare.rb' )
24
+ system( "ruby #{file2run} #{adapter}" )
25
+ end
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ namespace :test do
32
+
33
+ ADAPTERS.each do |adapter|
34
+ desc "test base extensions for #{adapter}"
35
+ task adapter do |t|
36
+ ENV['ARE_DB'] = adapter
37
+ Rake::Task[ 'boot' ].invoke
38
+
39
+ task = Rake::Task[ "db:test:prepare_#{adapter}" ]
40
+ begin
41
+ task = false if SchemaInfo::VERSION == SchemaInfo.find( :first ).version
42
+ rescue Exception => ex
43
+ end
44
+ task.invoke if task
45
+
46
+ system "ruby #{File.join( DIR, 'tests/run.rb ' )} #{adapter}"
47
+ end
48
+ end
49
+
50
+ namespace :activerecord do
51
+
52
+ ADAPTERS.each do |adapter|
53
+ desc "runs ActiveRecord unit tests for #{adapter} with ActiveRecord::Extensions"
54
+ task adapter.to_sym do |t|
55
+ activerecord_dir = ARGV[1]
56
+ if activerecord_dir.nil? or ! File.directory?( activerecord_dir )
57
+ STDERR.puts "ERROR: Pass in the path to ActiveRecord. Eg: /home/zdennis/rails_trunk/activerecord"
58
+ exit
59
+ end
60
+
61
+ old_dir, old_env = Dir.pwd, ENV['RUBYOPT']
62
+ Dir.chdir( activerecord_dir )
63
+ ENV['RUBYOPT'] = "-r#{File.join(old_dir,'init.rb')}"
64
+
65
+ load "Rakefile"
66
+ Rake::Task[ "test_#{adapter}" ].invoke
67
+ Dir.chdir( old_dir )
68
+ ENV['RUBYOPT'] = old_env
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ namespace :gem do
76
+
77
+ ADAPTERS.each do |adapter|
78
+ desc "load ar-extensions from rubygems and test base extensions for #{adapter}"
79
+ task adapter do |t|
80
+ ENV['ARE_DB'] = adapter
81
+ Rake::Task[ 'boot' ].invoke
82
+
83
+ task = Rake::Task[ "db:test:prepare_#{adapter}" ]
84
+ begin
85
+ task = false if SchemaInfo::VERSION == SchemaInfo.find( :first ).version
86
+ rescue Exception => ex
87
+ end
88
+ task.invoke if task
89
+
90
+ system "ruby #{File.join( DIR, 'tests/run_from_gem.rb ' )} #{adapter}"
91
+ end
92
+
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -0,0 +1,7 @@
1
+ development:
2
+ adapter: mysql
3
+ database: aroptests
4
+ username: rails
5
+ password:
6
+ port: 3306
7
+ host: localhost
@@ -0,0 +1,7 @@
1
+ development:
2
+ adapter: mysql
3
+ database: aroptests
4
+ username: rails
5
+ password:
6
+ port: 3306
7
+ host: localhost
@@ -0,0 +1,72 @@
1
+
2
+ create table test_myisam(
3
+ id int(11) unsigned not null auto_increment,
4
+ my_name varchar(20) not null,
5
+ description varchar(255) default '',
6
+ primary key (id)
7
+ )ENGINE=MyISAM;
8
+
9
+
10
+ create table test_innodb(
11
+ id int(11) unsigned not null auto_increment,
12
+ my_name varchar(20) not null,
13
+ description varchar(255) default '',
14
+ primary key (id)
15
+ )ENGINE=InnoDb;
16
+
17
+
18
+ create table test_memory(
19
+ id int(11) unsigned not null auto_increment,
20
+ my_name varchar(20) not null,
21
+ description varchar(255) default '',
22
+ primary key (id)
23
+ )ENGINE=memory;
24
+
25
+
26
+ create temporary table test_temp(
27
+ id int(11) unsigned not null auto_increment,
28
+ my_name varchar(20) not null,
29
+ description varchar(255) default '',
30
+ primary key (id)
31
+ );
32
+
33
+ CREATE TABLE `topics` (
34
+ `id` int(11) NOT NULL auto_increment,
35
+ `title` varchar(255) default NULL,
36
+ `author_name` varchar(255) default NULL,
37
+ `author_email_address` varchar(255) default NULL,
38
+ `written_on` datetime default NULL,
39
+ `bonus_time` time default NULL,
40
+ `last_read` date default NULL,
41
+ `content` text,
42
+ `approved` tinyint(1) default '1',
43
+ `replies_count` int(11) default '0',
44
+ `parent_id` int(11) default NULL,
45
+ `type` varchar(50) default NULL,
46
+ PRIMARY KEY (`id`)
47
+ ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
48
+
49
+ CREATE TABLE `projects` (
50
+ `id` int(11) NOT NULL auto_increment,
51
+ `name` varchar(100) default NULL,
52
+ `type` varchar(255) NOT NULL,
53
+ PRIMARY KEY (`id`)
54
+ ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
55
+
56
+ CREATE TABLE `developers` (
57
+ `id` int(11) NOT NULL auto_increment,
58
+ `name` varchar(100) default NULL,
59
+ `salary` int(11) default '70000',
60
+ `created_at` datetime default NULL,
61
+ `updated_at` datetime default NULL,
62
+ PRIMARY KEY (`id`)
63
+ ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
64
+
65
+ CREATE TABLE `books` (
66
+ `id` int(11) NOT NULL auto_increment,
67
+ `title` varchar(255) NOT NULL,
68
+ `publisher` varchar(255) NOT NULL,
69
+ `author_name` varchar(255) NOT NULL,
70
+ PRIMARY KEY (`id`),
71
+ FULLTEXT( `title`, `publisher`, `author_name` )
72
+ ) ENGINE=MyISAM;
@@ -0,0 +1,39 @@
1
+ CREATE TABLE topics (
2
+ id serial NOT NULL,
3
+ title character varying(255) default NULL,
4
+ author_name character varying(255) default NULL,
5
+ author_email_address character varying(255) default NULL,
6
+ written_on timestamp default NULL,
7
+ bonus_time time default NULL,
8
+ last_read date default NULL,
9
+ content text,
10
+ approved bool default TRUE,
11
+ replies_count integer default 0,
12
+ parent_id serial default NULL,
13
+ type character varying(50) default NULL,
14
+ PRIMARY KEY (id)
15
+ );
16
+
17
+ CREATE TABLE projects (
18
+ id serial NOT NULL,
19
+ name character varying(100) default NULL,
20
+ type character varying(255) NOT NULL,
21
+ PRIMARY KEY (id)
22
+ );
23
+
24
+ CREATE TABLE developers (
25
+ id serial NOT NULL,
26
+ name character varying(100) default NULL,
27
+ salary integer default 70000,
28
+ created_at timestamp default NULL,
29
+ updated_at timestamp default NULL,
30
+ PRIMARY KEY (id)
31
+ );
32
+
33
+ CREATE TABLE books (
34
+ id serial NOT NULL,
35
+ title character varying(255) NOT NULL,
36
+ publisher character varying(255) NOT NULL,
37
+ author_name character varying(255) NOT NULL,
38
+ PRIMARY KEY (id)
39
+ );