kkantena-progress_adapter 1.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.
data/README ADDED
@@ -0,0 +1,40 @@
1
+ KANTENA Paris France
2
+ May 2009
3
+
4
+ 1 - Purpose
5
+
6
+ PROGRESS ADAPTER is for use when DBMS engine doesn't support LIMIT and OFFSET SQL instructions,
7
+ as PROGRESS DBMS don't (until v 10.2 ).
8
+ With such DBMS and rails you load all records and instantiate each object for , which can be such longer !
9
+ Tough , no pagination is possible .
10
+ With this ProgressAdapter module , you easily can !
11
+
12
+
13
+ 2 - Install
14
+
15
+ Install plugin : script/plugin git://github.com/kkantena/progress_adapter.git
16
+
17
+
18
+ 3 - Use it !
19
+
20
+ Add "include ProgressAdapter" in models where you need it.
21
+
22
+ You can use ActiveRecord::Base.find as usual , and can now pass two more keys :
23
+ :page => <number for page you need>
24
+ :per_page => < number of object instanciation records you want>
25
+
26
+ To get number of records : number_of_records method
27
+ To get number of pages : number_of_pages method
28
+
29
+ Example :
30
+ ---------
31
+ class Foo < ActiveRecord::Base
32
+ include ProgressAdapter
33
+
34
+ def list
35
+ list = find :all , :page => 4 , :per_page => 10
36
+ nb_records = number_of_records
37
+ nb_pages = number_of_pages
38
+ [nb_records,nb_pages,list]
39
+ end
40
+ end
@@ -0,0 +1,58 @@
1
+ #Author : KANTENA Paris France
2
+ #May 2009
3
+
4
+
5
+ module ProgressAdapter
6
+ class ActiveRecord::Base
7
+
8
+ PROGRESS_PAGINATE_OPTIONS=[:page,:per_page]
9
+ VALID_FIND_OPTIONS=[ :conditions, :include, :joins, :limit, :offset,:order, :select, :readonly, :group, :having, :from, :lock]
10
+
11
+ def self.validate_find_options(options)
12
+ options.assert_valid_keys(VALID_FIND_OPTIONS+PROGRESS_PAGINATE_OPTIONS)
13
+ end
14
+
15
+ def self.find_every(options)
16
+ include_associations = merge_includes(scope(:find, :include), options[:include])
17
+ if include_associations.any? && references_eager_loaded_tables?(options)
18
+ records = find_with_associations(options)
19
+ else
20
+ records = find_by_sql(construct_finder_sql(options),options[:page],options[:per_page])
21
+ if include_associations.any?
22
+ preload_associations(records, include_associations)
23
+ end
24
+ end
25
+ records.each { |record| record.readonly! } if options[:readonly]
26
+ records
27
+ end
28
+
29
+ def self.number_of_pages
30
+ @@nb_pages
31
+ end
32
+
33
+ def self.number_of_records
34
+ @@nb_records
35
+ end
36
+
37
+ def self.find_by_sql(sql,page=nil,per_page=nil)
38
+ records = connection.select_all(sanitize_sql(sql), "#{name} Load")
39
+ @@nb_records = records.length
40
+ nb_record_per_page = 15
41
+ nb_record_per_page = per_page if per_page
42
+ @@nb_pages = records.length/nb_record_per_page + 1
43
+ page = @@nb_pages if page && page > @@nb_pages
44
+ page = 1 if page && page < 1
45
+ if page
46
+ from = (page - 1) * nb_record_per_page
47
+ to = (page) * nb_record_per_page -1
48
+ else
49
+ from = 0
50
+ to = @@nb_records
51
+ end
52
+ to = records.length if to > records.length
53
+ records[from..to].collect! { |record| instantiate(record) }
54
+ end
55
+ end
56
+ end
57
+
58
+
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class ProgressAdapterTest < Test::Unit::TestCase
4
+
5
+ #We use a Progress Database for these tests and an 'Adherents''s table
6
+
7
+ def setup
8
+ @adherents = Adherent.find :all,
9
+ :select => "codaux",
10
+ :conditions => ["codsoc='CAV' and codaux <> ''"] ,
11
+ :page =>2 ,
12
+ :per_page=>10
13
+ end
14
+
15
+
16
+ def test_length_of_result
17
+ assert @adherents.length <= 10
18
+ end
19
+
20
+ def test_number_of_records
21
+ assert_equal 6352, Adherent.number_of_records
22
+ end
23
+
24
+ def test_number_of_pages
25
+ assert_equal Adherent.number_of_records/10 + 1,Adherent.number_of_pages
26
+ end
27
+
28
+
29
+ end
metadata ADDED
@@ -0,0 +1,55 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kkantena-progress_adapter
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.0"
5
+ platform: ruby
6
+ authors:
7
+ - "Cantin Philippe @ kantena "
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-01 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Gem for Rails and ActiveRecord with Progress databases which not have LIMIT and OFFSET SQL instructions
17
+ email: pca@kantena.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/progress_adapter.rb
26
+ - README
27
+ - test/progress_adapter_tests.rb
28
+ has_rdoc: false
29
+ homepage: http://github.com/kkantena/progress_adapter
30
+ post_install_message:
31
+ rdoc_options: []
32
+
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: "0"
40
+ version:
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ requirements: []
48
+
49
+ rubyforge_project: progress_adapter
50
+ rubygems_version: 1.2.0
51
+ signing_key:
52
+ specification_version: 2
53
+ summary: Gem for Rails and ActiveRecord with Progress databases which not have LIMIT and OFFSET SQL instructions
54
+ test_files: []
55
+