nthrecord 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/nthrecord.rb +68 -0
  2. metadata +61 -0
data/lib/nthrecord.rb ADDED
@@ -0,0 +1,68 @@
1
+ require 'active_support/core_ext/module/delegation'
2
+ require 'active_record/relation'
3
+
4
+ module Nthrecord
5
+ module ActiveRecord
6
+
7
+ module Relation
8
+
9
+ def nthrecord(input = nil)
10
+ first_record = input.nil?
11
+ input = input || 1
12
+ relation = clone
13
+
14
+ # keep these values for the scope
15
+ original_include = relation.includes_values
16
+
17
+ # purge values
18
+ relation.select_values = []
19
+ relation.includes_values = []
20
+
21
+ # query for id
22
+ id_only_relation = relation.select("#{table_name}.id")
23
+ id_results = connection.select_all(id_only_relation.to_sql)
24
+
25
+
26
+ if input == 1 && id_results.length > 0
27
+
28
+ ids = id_results.map(&:values).flatten
29
+ else
30
+
31
+ b = (input - 1).step(id_results.size - 1, input).map { |i| id_results[i] }
32
+ ids = b.map(&:values).flatten
33
+
34
+ end
35
+
36
+ # setup for final query
37
+ final_scope = klass.includes(original_include)
38
+
39
+ # query for desired ids
40
+ records = final_scope.where(:id => ids)
41
+
42
+ # return value
43
+ if first_record
44
+ records.first
45
+ else
46
+ records
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ module Base
53
+ def nthrecord(input = nil)
54
+ relation.nthrecord(input)
55
+ end
56
+ end
57
+
58
+
59
+ end
60
+ end
61
+
62
+ class ActiveRecord::Relation
63
+ include Nthrecord::ActiveRecord::Relation
64
+ end
65
+
66
+ class ActiveRecord::Base
67
+ extend Nthrecord::ActiveRecord::Base
68
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nthrecord
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Sean Harvey
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.3
30
+ description: ! '-'
31
+ email: seanharvey@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/nthrecord.rb
37
+ homepage: http://rubygems.org/gems/nthrecord
38
+ licenses: []
39
+ post_install_message:
40
+ rdoc_options: []
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 1.8.24
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: returns every nth record in a query
61
+ test_files: []