sequenced 2.0.0 → 4.0.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.
- checksums.yaml +5 -5
- data/.github/workflows/ci.yml +100 -0
- data/Appraisals +19 -0
- data/CHANGELOG.md +32 -0
- data/Gemfile +12 -3
- data/MIT-LICENSE +1 -1
- data/README.md +90 -50
- data/Rakefile +39 -15
- data/gemfiles/rails_5_2.gemfile +17 -0
- data/gemfiles/rails_5_2.gemfile.lock +193 -0
- data/gemfiles/rails_6.gemfile +17 -0
- data/gemfiles/rails_6.gemfile.lock +204 -0
- data/gemfiles/rails_6_1.gemfile +17 -0
- data/gemfiles/rails_6_1.gemfile.lock +207 -0
- data/gemfiles/rails_7.gemfile +17 -0
- data/gemfiles/rails_7.gemfile.lock +206 -0
- data/gemfiles/rails_master.gemfile +17 -0
- data/gemfiles/rails_master.gemfile.lock +215 -0
- data/lib/sequenced/acts_as_sequenced.rb +34 -8
- data/lib/sequenced/generator.rb +28 -13
- data/lib/sequenced/version.rb +1 -1
- data/lib/sequenced.rb +5 -3
- data/sequenced.gemspec +8 -10
- metadata +29 -168
- data/.travis.yml +0 -4
- data/TODO.md +0 -7
- data/test/acts_as_sequenced_test.rb +0 -132
- data/test/dummy/README.rdoc +0 -261
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/javascripts/application.js +0 -15
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/mailers/.gitkeep +0 -0
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/dummy/app/models/account.rb +0 -6
- data/test/dummy/app/models/address.rb +0 -4
- data/test/dummy/app/models/answer.rb +0 -4
- data/test/dummy/app/models/comment.rb +0 -8
- data/test/dummy/app/models/email.rb +0 -4
- data/test/dummy/app/models/invoice.rb +0 -4
- data/test/dummy/app/models/monster.rb +0 -3
- data/test/dummy/app/models/order.rb +0 -4
- data/test/dummy/app/models/policeman.rb +0 -5
- data/test/dummy/app/models/product.rb +0 -8
- data/test/dummy/app/models/question.rb +0 -4
- data/test/dummy/app/models/rating.rb +0 -3
- data/test/dummy/app/models/subscription.rb +0 -3
- data/test/dummy/app/models/user.rb +0 -4
- data/test/dummy/app/models/werewolf.rb +0 -2
- data/test/dummy/app/models/zombie.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config/application.rb +0 -56
- data/test/dummy/config/boot.rb +0 -10
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -37
- data/test/dummy/config/environments/production.rb +0 -67
- data/test/dummy/config/environments/test.rb +0 -38
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/inflections.rb +0 -15
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -58
- data/test/dummy/config.ru +0 -4
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20120219165346_create_questions.rb +0 -10
- data/test/dummy/db/migrate/20120219165548_create_answers.rb +0 -13
- data/test/dummy/db/migrate/20120219171957_create_accounts.rb +0 -9
- data/test/dummy/db/migrate/20120219172039_create_invoices.rb +0 -12
- data/test/dummy/db/migrate/20120219172922_create_orders.rb +0 -10
- data/test/dummy/db/migrate/20120219174931_create_subscriptions.rb +0 -10
- data/test/dummy/db/migrate/20120219175744_create_users.rb +0 -12
- data/test/dummy/db/migrate/20120219232323_create_addresses.rb +0 -9
- data/test/dummy/db/migrate/20120220000804_create_comments.rb +0 -12
- data/test/dummy/db/migrate/20130411225444_create_emails.rb +0 -12
- data/test/dummy/db/migrate/20130715002029_create_ratings.rb +0 -10
- data/test/dummy/db/migrate/20130730004055_create_products.rb +0 -9
- data/test/dummy/db/migrate/20131226000000_create_monsters.rb +0 -9
- data/test/dummy/db/migrate/20140404195334_create_policemen.rb +0 -9
- data/test/dummy/db/schema.rb +0 -108
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/lib/assets/.gitkeep +0 -0
- data/test/dummy/log/.gitkeep +0 -0
- data/test/dummy/log/development.log +0 -62
- data/test/dummy/log/test.log +0 -30088
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -25
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +0 -6
- data/test/test_helper.rb +0 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: ac1653ef8238785f146ca84e84e967e36d3c7606ce7a0f51bceb9d78103c2b6c
|
|
4
|
+
data.tar.gz: 57858eab7e36ca6e02ec5f823ef75873284f5841be580629665ce986d7283067
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: efc18dd491c36c4c2cc0b5057fb91b4cfde57647ada400d6a3f05bd3726eebe4cc0c62e67a24bf533618339f32a7cd149c38c9eee384a629871b58293a4e4c18
|
|
7
|
+
data.tar.gz: 3fcd11391e68b818818f76178cfdebb9fe6abac44ee104ef0b53351396497840ac5d914485f0b511ae87b0c891c0dfe9435f406e0d9c1399fe0c72f577226328
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches:
|
|
6
|
+
- '*'
|
|
7
|
+
push:
|
|
8
|
+
branches:
|
|
9
|
+
- master
|
|
10
|
+
jobs:
|
|
11
|
+
sqlite:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
ruby: ['2.7', '3.0', '3.1']
|
|
16
|
+
gemfile:
|
|
17
|
+
- rails_5_2
|
|
18
|
+
- rails_6
|
|
19
|
+
- rails_6_1
|
|
20
|
+
- rails_7
|
|
21
|
+
- rails_master
|
|
22
|
+
exclude:
|
|
23
|
+
- ruby: '3.0'
|
|
24
|
+
gemfile: 'rails_5_2'
|
|
25
|
+
- ruby: '3.1'
|
|
26
|
+
gemfile: 'rails_5_2'
|
|
27
|
+
env:
|
|
28
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
|
29
|
+
BUNDLE_PATH_RELATIVE_TO_CWD: true
|
|
30
|
+
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@master
|
|
33
|
+
|
|
34
|
+
- name: Set up Ruby
|
|
35
|
+
uses: ruby/setup-ruby@v1
|
|
36
|
+
with:
|
|
37
|
+
ruby-version: ${{ matrix.ruby }}
|
|
38
|
+
bundler: default
|
|
39
|
+
bundler-cache: true
|
|
40
|
+
|
|
41
|
+
- name: StandardRb check
|
|
42
|
+
run: bundle exec standardrb
|
|
43
|
+
|
|
44
|
+
- name: Run tests
|
|
45
|
+
env:
|
|
46
|
+
DATABASE_URL: "sqlite3:test"
|
|
47
|
+
RAILS_ENV: test
|
|
48
|
+
run: |
|
|
49
|
+
bundle exec rails db:test:prepare
|
|
50
|
+
bundle exec rails test
|
|
51
|
+
|
|
52
|
+
postgres:
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
strategy:
|
|
55
|
+
matrix:
|
|
56
|
+
ruby: ['2.7', '3.0', '3.1']
|
|
57
|
+
gemfile:
|
|
58
|
+
- rails_5_2
|
|
59
|
+
- rails_6
|
|
60
|
+
- rails_6_1
|
|
61
|
+
- rails_7
|
|
62
|
+
- rails_master
|
|
63
|
+
exclude:
|
|
64
|
+
- ruby: '3.0'
|
|
65
|
+
gemfile: 'rails_5_2'
|
|
66
|
+
- ruby: '3.1'
|
|
67
|
+
gemfile: 'rails_5_2'
|
|
68
|
+
env:
|
|
69
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
|
70
|
+
BUNDLE_PATH_RELATIVE_TO_CWD: true
|
|
71
|
+
|
|
72
|
+
services:
|
|
73
|
+
postgres:
|
|
74
|
+
image: postgres:12
|
|
75
|
+
env:
|
|
76
|
+
POSTGRES_USER: postgres
|
|
77
|
+
POSTGRES_PASSWORD: password
|
|
78
|
+
POSTGRES_DB: test
|
|
79
|
+
ports: ['5432:5432']
|
|
80
|
+
|
|
81
|
+
steps:
|
|
82
|
+
- uses: actions/checkout@master
|
|
83
|
+
|
|
84
|
+
- name: Set up Ruby
|
|
85
|
+
uses: ruby/setup-ruby@v1
|
|
86
|
+
with:
|
|
87
|
+
ruby-version: ${{ matrix.ruby }}
|
|
88
|
+
bundler: default
|
|
89
|
+
bundler-cache: true
|
|
90
|
+
|
|
91
|
+
- name: StandardRb check
|
|
92
|
+
run: bundle exec standardrb
|
|
93
|
+
|
|
94
|
+
- name: Run tests
|
|
95
|
+
env:
|
|
96
|
+
DATABASE_URL: postgres://postgres:password@localhost:5432/test
|
|
97
|
+
RAILS_ENV: test
|
|
98
|
+
run: |
|
|
99
|
+
bundle exec rails db:test:prepare
|
|
100
|
+
bundle exec rails test
|
data/Appraisals
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
appraise "rails-5-2" do
|
|
2
|
+
gem "rails", "~> 5.2.0"
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
appraise "rails-6" do
|
|
6
|
+
gem "rails", "~> 6.0.0"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
appraise "rails-6-1" do
|
|
10
|
+
gem "rails", "~> 6.1.0"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
appraise "rails-7" do
|
|
14
|
+
gem "rails", "~> 7.0.0"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
appraise "rails-master" do
|
|
18
|
+
gem "rails", github: "rails/rails", branch: "main"
|
|
19
|
+
end
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
4.0.0 (August 16, 2022)
|
|
2
|
+
------------------------
|
|
3
|
+
|
|
4
|
+
* Drop official support Ruby 2.6 or older
|
|
5
|
+
* Drop official support Rails 5.1 or older
|
|
6
|
+
* Migrate from Travis CI to GitHub Actions
|
|
7
|
+
* Include Sequenced when ActiveRecord loads ([#52](https://github.com/derrickreimer/sequenced/pull/52))
|
|
8
|
+
|
|
9
|
+
3.2.0 (January 29, 2020)
|
|
10
|
+
------------------------
|
|
11
|
+
|
|
12
|
+
* Support non-default primary key columns (set via `primary_key=`) ([#41](https://github.com/derrickreimer/sequenced/pull/41))
|
|
13
|
+
* Fix issue with Postgres adapter check when using a subclassed adapter ([#42](https://github.com/derrickreimer/sequenced/pull/42))
|
|
14
|
+
|
|
15
|
+
3.1.1 (January 30, 2016)
|
|
16
|
+
-------------------------
|
|
17
|
+
|
|
18
|
+
* Rails 3 compatibility
|
|
19
|
+
(samphilipd, [#22](https://github.com/derrickreimer/sequenced/pull/22))
|
|
20
|
+
|
|
21
|
+
3.1.0 (January 23, 2016)
|
|
22
|
+
-------------------------
|
|
23
|
+
|
|
24
|
+
* Allow multiple sequences on one record
|
|
25
|
+
(samphilipd, [#19](https://github.com/derrickreimer/sequenced/pull/19))
|
|
26
|
+
|
|
27
|
+
3.0.0 (November 28, 2015)
|
|
28
|
+
-------------------------
|
|
29
|
+
|
|
30
|
+
* Make this gem thread-safe for PostgreSQL
|
|
31
|
+
(samphilipd, [#16](https://github.com/derrickreimer/sequenced/pull/16))
|
|
32
|
+
|
|
1
33
|
2.0.0 (October 24, 2014)
|
|
2
34
|
------------------------
|
|
3
35
|
|
data/Gemfile
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
|
-
source "
|
|
1
|
+
source "https://rubygems.org"
|
|
2
2
|
|
|
3
3
|
# Declare your gem's dependencies in sequenced.gemspec.
|
|
4
4
|
# Bundler will treat runtime dependencies like base dependencies, and
|
|
5
5
|
# development dependencies will be added by default to the :development group.
|
|
6
6
|
gemspec
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
gem "
|
|
8
|
+
gem "appraisal"
|
|
9
|
+
gem "standardrb"
|
|
10
|
+
|
|
11
|
+
group :development, :test do
|
|
12
|
+
gem "sqlite3", "~> 1.4.4"
|
|
13
|
+
# gem 'mysql2'
|
|
14
|
+
gem "pg"
|
|
15
|
+
gem "net-imap"
|
|
16
|
+
gem "net-pop"
|
|
17
|
+
gem "net-smtp"
|
|
18
|
+
end
|
|
10
19
|
|
|
11
20
|
# Declare any dependencies that are still in development here instead of in
|
|
12
21
|
# your gemspec. These might include edge Rails or gems from your path or
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
# Sequenced
|
|
2
2
|
|
|
3
|
-
[](https://github.com/derrickreimer/sequenced/actions/workflows/ci.yml)
|
|
4
|
+
[](https://codeclimate.com/github/djreimer/sequenced)
|
|
5
|
+
[](http://badge.fury.io/rb/sequenced)
|
|
6
|
+
|
|
7
|
+
Sequenced is a simple gem that generates scoped sequential IDs for
|
|
8
|
+
ActiveRecord models. This gem provides an `acts_as_sequenced` macro that
|
|
9
|
+
automatically assigns a unique, sequential ID to each record. The sequential ID is
|
|
10
|
+
not a replacement for the database primary key, but rather adds another way to
|
|
11
11
|
retrieve the object without exposing the primary key.
|
|
12
12
|
|
|
13
13
|
## Purpose
|
|
14
14
|
|
|
15
|
-
It's generally a bad practice to expose your primary keys to the world
|
|
16
|
-
in your URLs. However, it is often appropriate to number objects in sequence
|
|
15
|
+
It's generally a bad practice to expose your primary keys to the world
|
|
16
|
+
in your URLs. However, it is often appropriate to number objects in sequence
|
|
17
17
|
(in the context of a parent object).
|
|
18
18
|
|
|
19
19
|
For example, given a Question model that has many Answers, it makes sense
|
|
20
|
-
to number answers sequentially for each individual question. You can achieve
|
|
20
|
+
to number answers sequentially for each individual question. You can achieve
|
|
21
21
|
this with Sequenced in one line of code:
|
|
22
22
|
|
|
23
23
|
```ruby
|
|
@@ -34,7 +34,7 @@ end
|
|
|
34
34
|
## Installation
|
|
35
35
|
|
|
36
36
|
Add the gem to your Gemfile:
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
gem 'sequenced'
|
|
39
39
|
|
|
40
40
|
Install the gem with bundler:
|
|
@@ -70,12 +70,75 @@ class Answer < ActiveRecord::Base
|
|
|
70
70
|
end
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
+
Multiple sequences can be defined by using the macro multiple times:
|
|
74
|
+
|
|
75
|
+
```ruby
|
|
76
|
+
class Answer < ActiveRecord::Base
|
|
77
|
+
belongs_to :account
|
|
78
|
+
belongs_to :question
|
|
79
|
+
|
|
80
|
+
acts_as_sequenced column: :question_answer_number, scope: :question_id
|
|
81
|
+
acts_as_sequenced column: :account_answer_number, scope: :account_id
|
|
82
|
+
end
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Schema and data integrity
|
|
86
|
+
|
|
87
|
+
**This gem is only concurrent-safe for PostgreSQL databases**. For other database systems, unexpected behavior may occur if you attempt to create records concurrently.
|
|
88
|
+
|
|
89
|
+
You can mitigate this somewhat by applying a unique index to your sequential ID column (or a multicolumn unique index on sequential ID and scope columns, if you are using scopes). This will ensure that you can never have duplicate sequential IDs within a scope, causing concurrent updates to instead raise a uniqueness error at the database-level.
|
|
90
|
+
|
|
91
|
+
It is also a good idea to apply a not-null constraint to your sequential ID column as well if you never intend to skip it.
|
|
92
|
+
|
|
93
|
+
Here is an example migration for a model that has a `sequential_id` scoped to a `burrow_id`:
|
|
94
|
+
|
|
95
|
+
```ruby
|
|
96
|
+
# app/db/migrations/20151120190645_create_badgers.rb
|
|
97
|
+
class CreateBadgers < ActiveRecord::Migration
|
|
98
|
+
def change
|
|
99
|
+
create_table :badgers do |t|
|
|
100
|
+
t.integer :sequential_id, null: false
|
|
101
|
+
t.integer :burrow_id
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
add_index :badgers, [:sequential_id, :burrow_id], unique: true
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
If you are adding a sequenced column to an existing table, you need to account for that in your migration.
|
|
110
|
+
|
|
111
|
+
Here is an example migration that adds and sets the `sequential_id` column based on the current database records:
|
|
112
|
+
```ruby
|
|
113
|
+
# app/db/migrations/20151120190645_add_sequental_id_to_badgers.rb
|
|
114
|
+
class AddSequentalIdToBadgers < ActiveRecord::Migration
|
|
115
|
+
add_column :badgers, :sequential_id, :integer
|
|
116
|
+
|
|
117
|
+
execute <<~SQL
|
|
118
|
+
UPDATE badgers
|
|
119
|
+
SET sequential_id = old_badgers.next_sequential_id
|
|
120
|
+
FROM (
|
|
121
|
+
SELECT id, ROW_NUMBER()
|
|
122
|
+
OVER(
|
|
123
|
+
PARTITION BY burrow_id
|
|
124
|
+
ORDER BY id
|
|
125
|
+
) AS next_sequential_id
|
|
126
|
+
FROM badgers
|
|
127
|
+
) old_badgers
|
|
128
|
+
WHERE badgers.id = old_badgers.id
|
|
129
|
+
SQL
|
|
130
|
+
|
|
131
|
+
change_column :badgers, :sequential_id, :integer, null: false
|
|
132
|
+
add_index :badgers, [:sequential_id, :burrow_id], unique: true
|
|
133
|
+
end
|
|
134
|
+
```
|
|
135
|
+
|
|
73
136
|
## Configuration
|
|
74
137
|
|
|
75
138
|
### Overriding the default sequential ID column
|
|
76
139
|
|
|
77
|
-
By default, Sequenced uses the `sequential_id` column and assumes it already
|
|
78
|
-
exists. If you wish to store the sequential ID in different integer column,
|
|
140
|
+
By default, Sequenced uses the `sequential_id` column and assumes it already
|
|
141
|
+
exists. If you wish to store the sequential ID in different integer column,
|
|
79
142
|
simply specify the column name with the `column` option:
|
|
80
143
|
|
|
81
144
|
```ruby
|
|
@@ -84,7 +147,7 @@ acts_as_sequenced scope: :question_id, column: :my_sequential_id
|
|
|
84
147
|
|
|
85
148
|
### Starting the sequence at a specific number
|
|
86
149
|
|
|
87
|
-
By default, Sequenced begins sequences with 1. To start at a different
|
|
150
|
+
By default, Sequenced begins sequences with 1. To start at a different
|
|
88
151
|
integer, simply set the `start_at` option:
|
|
89
152
|
|
|
90
153
|
```ruby
|
|
@@ -113,7 +176,7 @@ acts_as_sequenced skip: lambda { |r| r.score == 0 }
|
|
|
113
176
|
|
|
114
177
|
## Example
|
|
115
178
|
|
|
116
|
-
Suppose you have a question model that has many answers. This example
|
|
179
|
+
Suppose you have a question model that has many answers. This example
|
|
117
180
|
demonstrates how to use Sequenced to enable access to the nested answer
|
|
118
181
|
resource via its sequential ID.
|
|
119
182
|
|
|
@@ -127,10 +190,10 @@ end
|
|
|
127
190
|
class Answer < ActiveRecord::Base
|
|
128
191
|
belongs_to :question
|
|
129
192
|
acts_as_sequenced scope: :question_id
|
|
130
|
-
|
|
193
|
+
|
|
131
194
|
# Automatically use the sequential ID in URLs
|
|
132
195
|
def to_param
|
|
133
|
-
self.sequential_id
|
|
196
|
+
self.sequential_id.to_s
|
|
134
197
|
end
|
|
135
198
|
end
|
|
136
199
|
|
|
@@ -141,48 +204,25 @@ end
|
|
|
141
204
|
|
|
142
205
|
# app/controllers/answers_controller.rb
|
|
143
206
|
class AnswersController < ApplicationController
|
|
144
|
-
|
|
145
|
-
before_filter :load_answer, only: [:show, :edit, :update, :destroy]
|
|
146
|
-
|
|
147
|
-
private
|
|
148
|
-
|
|
149
|
-
def load_question
|
|
207
|
+
def show
|
|
150
208
|
@question = Question.find(params[:question_id])
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
def load_answer
|
|
154
|
-
@answer = @question.answers.where(:sequential_id => params[:id]).first
|
|
209
|
+
@answer = @question.answers.find_by(sequential_id: params[:id])
|
|
155
210
|
end
|
|
156
211
|
end
|
|
157
212
|
```
|
|
158
213
|
|
|
159
214
|
Now, answers are accessible via their sequential IDs:
|
|
160
215
|
|
|
161
|
-
http://example.com/questions/5/answers/1
|
|
216
|
+
http://example.com/questions/5/answers/1 # Good
|
|
162
217
|
|
|
163
218
|
instead of by their primary keys:
|
|
164
219
|
|
|
165
220
|
http://example.com/questions/5/answer/32454 # Bad
|
|
166
221
|
|
|
167
|
-
##
|
|
168
|
-
|
|
169
|
-
Copyright © 2011-2014 Derrick Reimer
|
|
170
|
-
|
|
171
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
172
|
-
a copy of this software and associated documentation files (the
|
|
173
|
-
"Software"), to deal in the Software without restriction, including
|
|
174
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
175
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
176
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
177
|
-
the following conditions:
|
|
178
|
-
|
|
179
|
-
The above copyright notice and this permission notice shall be
|
|
180
|
-
included in all copies or substantial portions of the Software.
|
|
222
|
+
## Contributing
|
|
181
223
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
188
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
224
|
+
1. Fork it
|
|
225
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
226
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
|
227
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
228
|
+
5. Create new Pull Request
|
data/Rakefile
CHANGED
|
@@ -1,35 +1,59 @@
|
|
|
1
1
|
#!/usr/bin/env rake
|
|
2
2
|
begin
|
|
3
|
-
require
|
|
3
|
+
require "bundler/setup"
|
|
4
4
|
rescue LoadError
|
|
5
|
-
puts
|
|
5
|
+
puts "You must `gem install bundler` and `bundle install` to run rake tasks"
|
|
6
6
|
end
|
|
7
7
|
begin
|
|
8
|
-
require
|
|
8
|
+
require "rdoc/task"
|
|
9
9
|
rescue LoadError
|
|
10
|
-
require
|
|
11
|
-
require
|
|
10
|
+
require "rdoc/rdoc"
|
|
11
|
+
require "rake/rdoctask"
|
|
12
12
|
RDoc::Task = Rake::RDocTask
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
RDoc::Task.new(:rdoc) do |rdoc|
|
|
16
|
-
rdoc.rdoc_dir =
|
|
17
|
-
rdoc.title
|
|
18
|
-
rdoc.options <<
|
|
19
|
-
rdoc.rdoc_files.include(
|
|
20
|
-
rdoc.rdoc_files.include(
|
|
16
|
+
rdoc.rdoc_dir = "rdoc"
|
|
17
|
+
rdoc.title = "Sequenced"
|
|
18
|
+
rdoc.options << "--line-numbers"
|
|
19
|
+
rdoc.rdoc_files.include("README.rdoc")
|
|
20
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
Bundler::GemHelper.install_tasks
|
|
24
24
|
|
|
25
|
-
require
|
|
25
|
+
require "rake/testtask"
|
|
26
26
|
|
|
27
27
|
Rake::TestTask.new(:test) do |t|
|
|
28
|
-
t.libs <<
|
|
29
|
-
t.libs <<
|
|
30
|
-
t.pattern =
|
|
28
|
+
t.libs << "lib"
|
|
29
|
+
t.libs << "test"
|
|
30
|
+
t.pattern = "test/**/*_test.rb"
|
|
31
31
|
t.verbose = false
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
task default: :test
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
namespace :db do
|
|
37
|
+
task :create do
|
|
38
|
+
# File.expand_path is executed directory of generated Rails app
|
|
39
|
+
rakefile = File.expand_path("Rakefile", "test/dummy/")
|
|
40
|
+
command = "rake -f '%s' db:create" % rakefile
|
|
41
|
+
sh(command)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
task :drop do
|
|
45
|
+
# File.expand_path is executed directory of generated Rails app
|
|
46
|
+
rakefile = File.expand_path("Rakefile", "test/dummy/")
|
|
47
|
+
command = "rake -f '%s' db:drop" % rakefile
|
|
48
|
+
sh(command)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
namespace :test do
|
|
52
|
+
task :prepare do
|
|
53
|
+
# File.expand_path is executed directory of generated Rails app
|
|
54
|
+
rakefile = File.expand_path("Rakefile", "test/dummy/")
|
|
55
|
+
command = "rake -f '%s' db:test:prepare" % rakefile
|
|
56
|
+
sh(command)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# This file was generated by Appraisal
|
|
2
|
+
|
|
3
|
+
source "https://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gem "appraisal"
|
|
6
|
+
gem "standardrb"
|
|
7
|
+
gem "rails", "~> 5.2.0"
|
|
8
|
+
|
|
9
|
+
group :development, :test do
|
|
10
|
+
gem "sqlite3", "~> 1.4.4"
|
|
11
|
+
gem "pg"
|
|
12
|
+
gem "net-imap"
|
|
13
|
+
gem "net-pop"
|
|
14
|
+
gem "net-smtp"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
gemspec path: "../"
|