first_after_created_at 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: '0398d361022b5ecce5f5a64fecac6388f25203fe'
4
- data.tar.gz: 0610ca088d43e0094eab5398eb0299ca9b9cfbda
3
+ metadata.gz: 1b8c08fa9cd17ebeda60296887540a6d317fd1d8
4
+ data.tar.gz: '038fe62e492e56f94e74c59a7244f0a2f024e5da'
5
5
  SHA512:
6
- metadata.gz: 4c96c29416b60027a1dc4d0d6cbe69e56e5a4b2c54a6d5862765186ce6cdbcbc72cfd42c49752877b603f16cef5d7ad16953cda3db9721d8c5a02866c6a7de52
7
- data.tar.gz: 8bd5d311b4abbff4de9c32ce8c50fede8628fa11975a731b1862e83d1ec0d444cd2fe24326daade48a443637257f5db711f6eae940ec8522e5d49b0c1e2e25bd
6
+ metadata.gz: f7a5c4b5d4513ffa44ca78c39219ae6ca2572010bbb45035419c668163947266d39ab867b1820768a2cbd1d7f310fe21d59a81fba07239053024a006dc296141
7
+ data.tar.gz: b649f119607b1c33d60d1c29991a8227b2d79141c186eb4f34a2e65047bed5c0a1da92f2f9a9fe815a14b439743a2e21f89d9012a824d8f8e8dca943b95a53cc
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3
4
+ - 2.4
@@ -0,0 +1,2 @@
1
+ # 0.0.3 - 2017-08-03
2
+ Initial functioning version
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'activerecord', '~> 4.2.9'
4
+
5
+ group :development do
6
+ gem 'sqlite3'
7
+ gem 'jeweler'
8
+ gem 'rails', '~> 4.2.9'
9
+ end
@@ -0,0 +1,144 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ actionmailer (4.2.9)
5
+ actionpack (= 4.2.9)
6
+ actionview (= 4.2.9)
7
+ activejob (= 4.2.9)
8
+ mail (~> 2.5, >= 2.5.4)
9
+ rails-dom-testing (~> 1.0, >= 1.0.5)
10
+ actionpack (4.2.9)
11
+ actionview (= 4.2.9)
12
+ activesupport (= 4.2.9)
13
+ rack (~> 1.6)
14
+ rack-test (~> 0.6.2)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
17
+ actionview (4.2.9)
18
+ activesupport (= 4.2.9)
19
+ builder (~> 3.1)
20
+ erubis (~> 2.7.0)
21
+ rails-dom-testing (~> 1.0, >= 1.0.5)
22
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
23
+ activejob (4.2.9)
24
+ activesupport (= 4.2.9)
25
+ globalid (>= 0.3.0)
26
+ activemodel (4.2.9)
27
+ activesupport (= 4.2.9)
28
+ builder (~> 3.1)
29
+ activerecord (4.2.9)
30
+ activemodel (= 4.2.9)
31
+ activesupport (= 4.2.9)
32
+ arel (~> 6.0)
33
+ activesupport (4.2.9)
34
+ i18n (~> 0.7)
35
+ minitest (~> 5.1)
36
+ thread_safe (~> 0.3, >= 0.3.4)
37
+ tzinfo (~> 1.1)
38
+ addressable (2.4.0)
39
+ arel (6.0.4)
40
+ builder (3.2.3)
41
+ concurrent-ruby (1.0.5)
42
+ descendants_tracker (0.0.4)
43
+ thread_safe (~> 0.3, >= 0.3.1)
44
+ erubis (2.7.0)
45
+ faraday (0.9.2)
46
+ multipart-post (>= 1.2, < 3)
47
+ git (1.3.0)
48
+ github_api (0.16.0)
49
+ addressable (~> 2.4.0)
50
+ descendants_tracker (~> 0.0.4)
51
+ faraday (~> 0.8, < 0.10)
52
+ hashie (>= 3.4)
53
+ mime-types (>= 1.16, < 3.0)
54
+ oauth2 (~> 1.0)
55
+ globalid (0.4.0)
56
+ activesupport (>= 4.2.0)
57
+ hashie (3.5.6)
58
+ highline (1.7.8)
59
+ i18n (0.8.6)
60
+ jeweler (2.3.7)
61
+ builder
62
+ bundler (>= 1)
63
+ git (>= 1.2.5)
64
+ github_api (~> 0.16.0)
65
+ highline (>= 1.6.15)
66
+ nokogiri (>= 1.5.10)
67
+ psych (~> 2.2)
68
+ rake
69
+ rdoc
70
+ semver2
71
+ jwt (1.5.6)
72
+ loofah (2.0.3)
73
+ nokogiri (>= 1.5.9)
74
+ mail (2.6.6)
75
+ mime-types (>= 1.16, < 4)
76
+ mime-types (2.99.3)
77
+ mini_portile2 (2.2.0)
78
+ minitest (5.10.3)
79
+ multi_json (1.12.1)
80
+ multi_xml (0.6.0)
81
+ multipart-post (2.0.0)
82
+ nokogiri (1.8.0)
83
+ mini_portile2 (~> 2.2.0)
84
+ oauth2 (1.4.0)
85
+ faraday (>= 0.8, < 0.13)
86
+ jwt (~> 1.0)
87
+ multi_json (~> 1.3)
88
+ multi_xml (~> 0.5)
89
+ rack (>= 1.2, < 3)
90
+ psych (2.2.4)
91
+ rack (1.6.8)
92
+ rack-test (0.6.3)
93
+ rack (>= 1.0)
94
+ rails (4.2.9)
95
+ actionmailer (= 4.2.9)
96
+ actionpack (= 4.2.9)
97
+ actionview (= 4.2.9)
98
+ activejob (= 4.2.9)
99
+ activemodel (= 4.2.9)
100
+ activerecord (= 4.2.9)
101
+ activesupport (= 4.2.9)
102
+ bundler (>= 1.3.0, < 2.0)
103
+ railties (= 4.2.9)
104
+ sprockets-rails
105
+ rails-deprecated_sanitizer (1.0.3)
106
+ activesupport (>= 4.2.0.alpha)
107
+ rails-dom-testing (1.0.8)
108
+ activesupport (>= 4.2.0.beta, < 5.0)
109
+ nokogiri (~> 1.6)
110
+ rails-deprecated_sanitizer (>= 1.0.1)
111
+ rails-html-sanitizer (1.0.3)
112
+ loofah (~> 2.0)
113
+ railties (4.2.9)
114
+ actionpack (= 4.2.9)
115
+ activesupport (= 4.2.9)
116
+ rake (>= 0.8.7)
117
+ thor (>= 0.18.1, < 2.0)
118
+ rake (12.0.0)
119
+ rdoc (5.1.0)
120
+ semver2 (3.4.2)
121
+ sprockets (3.7.1)
122
+ concurrent-ruby (~> 1.0)
123
+ rack (> 1, < 3)
124
+ sprockets-rails (3.2.0)
125
+ actionpack (>= 4.0)
126
+ activesupport (>= 4.0)
127
+ sprockets (>= 3.0.0)
128
+ sqlite3 (1.3.13)
129
+ thor (0.19.4)
130
+ thread_safe (0.3.6)
131
+ tzinfo (1.2.3)
132
+ thread_safe (~> 0.1)
133
+
134
+ PLATFORMS
135
+ ruby
136
+
137
+ DEPENDENCIES
138
+ activerecord (~> 4.2.9)
139
+ jeweler
140
+ rails (~> 4.2.9)
141
+ sqlite3
142
+
143
+ BUNDLED WITH
144
+ 1.15.3
@@ -0,0 +1,47 @@
1
+ # FirstAfterCreatedAt, a tool for using binary search to search by created_at.
2
+ [![Build Status](https://travis-ci.org/NoRedInk/first_after_created_at.svg?branch=master)](https://travis-ci.org/NoRedInk/first_after_created_at)
3
+
4
+ Assuming you have an autoincrimenting primary key `id` and a id-sorted `created_at` column, you can use this gem to quickly search for items by time.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```Gemfile
11
+ gem 'first_after_created_at'
12
+ ```
13
+
14
+ And then execute:
15
+ ```shell
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+
21
+ ```shell
22
+ $ gem install first_after_created_at
23
+ ```
24
+
25
+ ## Usage
26
+
27
+ ```ruby
28
+ ModelName.first_after_created_at(Time.parse('2017-01-01'))
29
+ => #<ModelName:0x007f86fe7017c8 id: 1234, created_at: Sun, 01 Jan 2017 01:23:45 +0100
30
+ ```
31
+
32
+ ## Contributing
33
+
34
+ Contributing
35
+
36
+ 1. Fork it
37
+ 2. Create your feature branch (git checkout -b my-new-feature)
38
+ 3. Commit your changes (git commit -am 'Added some feature')
39
+ - ensure you include test coverage
40
+ 4. Push to the branch (git push origin my-new-feature)
41
+ 5. Create a pull request
42
+
43
+ We'll try to get new versions pushed ASAP
44
+
45
+
46
+
47
+ This project rocks and uses MIT-LICENSE.
data/Rakefile CHANGED
@@ -1,34 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
1
5
  begin
2
- require 'bundler/setup'
3
- rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
5
11
  end
6
-
7
- require 'rdoc/task'
8
-
9
- RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'FirstAfterCreatedAt'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
17
+ gem.name = "first_after_created_at"
18
+ gem.homepage = "http://github.com/NoRedInk/first_after_created_at"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{adds a first_by_created_at class method to active record models that search by binary search through auto-ascending primary key ids}
21
+ gem.description = gem.summary
22
+ gem.email = "me@mike.is"
23
+ gem.authors = ["Michael Glass", "quelledanielle"]
15
24
  end
16
-
17
-
18
-
19
-
20
-
21
-
22
- Bundler::GemHelper.install_tasks
25
+ Jeweler::RubygemsDotOrgTasks.new
23
26
 
24
27
  require 'rake/testtask'
28
+ Rake::TestTask.new(:test) do |test|
29
+ test.libs << 'lib' << 'test'
30
+ test.pattern = 'test/**/*_test.rb'
31
+ test.verbose = true
32
+ end
25
33
 
26
- Rake::TestTask.new(:test) do |t|
27
- t.libs << 'lib'
28
- t.libs << 'test'
29
- t.pattern = 'test/**/*_test.rb'
30
- t.verbose = false
34
+ desc "Code coverage detail"
35
+ task :simplecov do
36
+ ENV['COVERAGE'] = "true"
37
+ Rake::Task['test'].execute
31
38
  end
32
39
 
40
+ task :default => :test
33
41
 
34
- task default: :test
42
+ require 'rdoc/task'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "first_after_created_at #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.4
@@ -0,0 +1,109 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+ # stub: first_after_created_at 0.0.4 ruby lib
6
+
7
+ Gem::Specification.new do |s|
8
+ s.name = "first_after_created_at".freeze
9
+ s.version = "0.0.4"
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Michael Glass".freeze, "quelledanielle".freeze]
14
+ s.date = "2017-08-16"
15
+ s.description = "adds a first_by_created_at class method to active record models that search by binary search through auto-ascending primary key ids".freeze
16
+ s.email = "me@mike.is".freeze
17
+ s.extra_rdoc_files = [
18
+ "README.md"
19
+ ]
20
+ s.files = [
21
+ ".travis.yml",
22
+ "CHANGELOG.md",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "MIT-LICENSE",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "first_after_created_at.gemspec",
30
+ "lib/first_after_created_at.rb",
31
+ "lib/first_after_created_at/version.rb",
32
+ "lib/tasks/first_after_created_at_tasks.rake",
33
+ "test/dummy/README.rdoc",
34
+ "test/dummy/Rakefile",
35
+ "test/dummy/app/assets/images/.keep",
36
+ "test/dummy/app/assets/javascripts/application.js",
37
+ "test/dummy/app/assets/stylesheets/application.css",
38
+ "test/dummy/app/controllers/application_controller.rb",
39
+ "test/dummy/app/controllers/concerns/.keep",
40
+ "test/dummy/app/helpers/application_helper.rb",
41
+ "test/dummy/app/mailers/.keep",
42
+ "test/dummy/app/models/.keep",
43
+ "test/dummy/app/models/concerns/.keep",
44
+ "test/dummy/app/models/has_timestamp.rb",
45
+ "test/dummy/app/views/layouts/application.html.erb",
46
+ "test/dummy/bin/bundle",
47
+ "test/dummy/bin/rails",
48
+ "test/dummy/bin/rake",
49
+ "test/dummy/bin/setup",
50
+ "test/dummy/config.ru",
51
+ "test/dummy/config/application.rb",
52
+ "test/dummy/config/boot.rb",
53
+ "test/dummy/config/database.yml",
54
+ "test/dummy/config/environment.rb",
55
+ "test/dummy/config/environments/development.rb",
56
+ "test/dummy/config/environments/production.rb",
57
+ "test/dummy/config/environments/test.rb",
58
+ "test/dummy/config/initializers/assets.rb",
59
+ "test/dummy/config/initializers/backtrace_silencers.rb",
60
+ "test/dummy/config/initializers/cookies_serializer.rb",
61
+ "test/dummy/config/initializers/filter_parameter_logging.rb",
62
+ "test/dummy/config/initializers/inflections.rb",
63
+ "test/dummy/config/initializers/mime_types.rb",
64
+ "test/dummy/config/initializers/session_store.rb",
65
+ "test/dummy/config/initializers/to_time_preserves_timezone.rb",
66
+ "test/dummy/config/initializers/wrap_parameters.rb",
67
+ "test/dummy/config/locales/en.yml",
68
+ "test/dummy/config/routes.rb",
69
+ "test/dummy/config/secrets.yml",
70
+ "test/dummy/db/migrate/20170802143942_create_has_timestamps.rb",
71
+ "test/dummy/db/schema.rb",
72
+ "test/dummy/lib/assets/.keep",
73
+ "test/dummy/log/.keep",
74
+ "test/dummy/public/404.html",
75
+ "test/dummy/public/422.html",
76
+ "test/dummy/public/500.html",
77
+ "test/dummy/public/favicon.ico",
78
+ "test/dummy/test/fixtures/has_timestamps.yml",
79
+ "test/dummy/test/models/has_timestamp_test.rb",
80
+ "test/first_after_created_at_test.rb",
81
+ "test/test_helper.rb"
82
+ ]
83
+ s.homepage = "http://github.com/NoRedInk/first_after_created_at".freeze
84
+ s.licenses = ["MIT".freeze]
85
+ s.rubygems_version = "2.6.11".freeze
86
+ s.summary = "adds a first_by_created_at class method to active record models that search by binary search through auto-ascending primary key ids".freeze
87
+
88
+ if s.respond_to? :specification_version then
89
+ s.specification_version = 4
90
+
91
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
92
+ s.add_runtime_dependency(%q<activerecord>.freeze, ["~> 4.2.9"])
93
+ s.add_development_dependency(%q<sqlite3>.freeze, [">= 0"])
94
+ s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
95
+ s.add_development_dependency(%q<rails>.freeze, ["~> 4.2.9"])
96
+ else
97
+ s.add_dependency(%q<activerecord>.freeze, ["~> 4.2.9"])
98
+ s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
99
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
100
+ s.add_dependency(%q<rails>.freeze, ["~> 4.2.9"])
101
+ end
102
+ else
103
+ s.add_dependency(%q<activerecord>.freeze, ["~> 4.2.9"])
104
+ s.add_dependency(%q<sqlite3>.freeze, [">= 0"])
105
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
106
+ s.add_dependency(%q<rails>.freeze, ["~> 4.2.9"])
107
+ end
108
+ end
109
+
@@ -10,7 +10,7 @@ module FirstAfterCreatedAt
10
10
  loop do
11
11
  mid_id = (min_id + max_id) / 2
12
12
  mid_obj =
13
- select(:id, :created_at).where('id >= ?', mid_id).order(:id).first
13
+ select(:id, :created_at).where("#{quoted_table_name}.#{connection.quote_column_name('id')} >= ?", mid_id).order(:id).first
14
14
 
15
15
  best = get_best(mid_obj, time, best)
16
16
  break if min_id == max_id
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -37,4 +37,10 @@ class FirstAfterCreatedAtTest < ActiveSupport::TestCase
37
37
  middle = objs[1]
38
38
  assert_equal middle, HasTimestamp.first_after_created_at(middle.created_at)
39
39
  end
40
+
41
+ test 'can join to another table' do
42
+ obj = HasTimestamp.create
43
+ found_with_join = HasTimestamp.joins('INNER JOIN has_timestamps h ON h.id = has_timestamps.id').first_after_created_at(obj.created_at)
44
+ assert_equal obj, found_with_join
45
+ end
40
46
  end