metka 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE.md +15 -0
- data/.github/workflows/docs.yml +57 -0
- data/.github/workflows/rspec.yml +84 -0
- data/.github/workflows/rubocop.yml +21 -0
- data/.gitignore +1 -0
- data/.mdlrc +1 -0
- data/.rubocop-md.yml +17 -0
- data/.rubocop.yml +0 -1
- data/CODE_OF_CONDUCT.md +3 -4
- data/Gemfile.lock +80 -100
- data/README.md +71 -49
- data/forspell.dict +7 -0
- data/gemfiles/railsmaster.gemfile +5 -0
- data/gemfiles/rubocop.gemfile +4 -0
- data/lib/metka/query_builder.rb +1 -1
- data/lib/metka/query_builder/base_query.rb +36 -16
- data/lib/metka/version.rb +1 -1
- data/metka.gemspec +1 -2
- metadata +13 -20
- data/.github/workflows/continuous-integration-workflow.yml +0 -11
- data/.travis.yml +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81b76694d9f46c48214c49fd4ced765bc238534e0247e01f4cf3b50718d2d775
|
4
|
+
data.tar.gz: 659202753ebb523445de4a484c579b1a5b3b6b52628edf90908169a7c21cc14a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c91e5714a01ce5050da4980c1cd57ea9564717873d8bfba1602fd42cd69a527ec5f1789b84b2fd5f3401dd22c4b55f3f8443cedc0dfd0270f136255b4c27a550
|
7
|
+
data.tar.gz: 2bf4bd0866762a273bf594ecbc260595990afcb1f724bafef298c9ea71749b1b88f0459aff66d40c2cb5166680cec682c54a6234cc4e9d087412f04ef9c70e99
|
@@ -0,0 +1,57 @@
|
|
1
|
+
name: Lint Docs
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
paths:
|
8
|
+
- "*.md"
|
9
|
+
- "**/*.md"
|
10
|
+
pull_request:
|
11
|
+
paths:
|
12
|
+
- "*.md"
|
13
|
+
- "**/*.md"
|
14
|
+
|
15
|
+
jobs:
|
16
|
+
markdownlint:
|
17
|
+
runs-on: ubuntu-latest
|
18
|
+
steps:
|
19
|
+
- uses: actions/checkout@v2
|
20
|
+
- uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: 2.7
|
23
|
+
- name: Run Markdown linter
|
24
|
+
run: |
|
25
|
+
gem install mdl
|
26
|
+
mdl README.md .github/*.md
|
27
|
+
rubocop:
|
28
|
+
runs-on: ubuntu-latest
|
29
|
+
steps:
|
30
|
+
- uses: actions/checkout@v2
|
31
|
+
- uses: ruby/setup-ruby@v1
|
32
|
+
with:
|
33
|
+
ruby-version: 2.7
|
34
|
+
- name: Lint Markdown files with RuboCop
|
35
|
+
run: |
|
36
|
+
gem install bundler
|
37
|
+
bundle install --gemfile gemfiles/rubocop.gemfile --jobs 4 --retry 3
|
38
|
+
bundle exec --gemfile gemfiles/rubocop.gemfile rubocop -c .rubocop-md.yml
|
39
|
+
forspell:
|
40
|
+
runs-on: ubuntu-latest
|
41
|
+
steps:
|
42
|
+
- uses: actions/checkout@v2
|
43
|
+
- name: Install Hunspell
|
44
|
+
run: |
|
45
|
+
sudo apt-get install hunspell
|
46
|
+
- uses: ruby/setup-ruby@v1
|
47
|
+
with:
|
48
|
+
ruby-version: 2.7
|
49
|
+
- name: Cache installed gems
|
50
|
+
uses: actions/cache@v1
|
51
|
+
with:
|
52
|
+
path: /home/runner/.rubies/ruby-2.7.0/lib/ruby/gems/2.7.0
|
53
|
+
key: gems-cache-${{ runner.os }}
|
54
|
+
- name: Install Forspell
|
55
|
+
run: gem install forspell
|
56
|
+
- name: Run Forspell
|
57
|
+
run: forspell *.md .github/*.md
|
@@ -0,0 +1,84 @@
|
|
1
|
+
name: Build
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
rspec:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
env:
|
13
|
+
BUNDLE_JOBS: 4
|
14
|
+
BUNDLE_RETRY: 3
|
15
|
+
CI: true
|
16
|
+
RAILS_ENV: test
|
17
|
+
DATABASE_URL: postgres://postgres:postgres@localhost:5432
|
18
|
+
strategy:
|
19
|
+
fail-fast: false
|
20
|
+
matrix:
|
21
|
+
ruby: ["2.7"]
|
22
|
+
postgres: ["12"]
|
23
|
+
gemfile: [
|
24
|
+
"gemfiles/rails61.gemfile"
|
25
|
+
]
|
26
|
+
fx: ["false"]
|
27
|
+
include:
|
28
|
+
- ruby: "3.0"
|
29
|
+
postgres: "13"
|
30
|
+
gemfile: "gemfiles/railsmaster.gemfile"
|
31
|
+
fx: "false"
|
32
|
+
- ruby: "2.6"
|
33
|
+
postgres: "12"
|
34
|
+
gemfile: "gemfiles/rails61.gemfile"
|
35
|
+
fx: "false"
|
36
|
+
- ruby: "2.6"
|
37
|
+
postgres: "12"
|
38
|
+
gemfile: "gemfiles/rails6.gemfile"
|
39
|
+
fx: "false"
|
40
|
+
- ruby: "2.5"
|
41
|
+
postgres: "11"
|
42
|
+
gemfile: "gemfiles/rails52.gemfile"
|
43
|
+
fx: "false"
|
44
|
+
services:
|
45
|
+
postgres:
|
46
|
+
image: postgres:${{ matrix.postgres }}
|
47
|
+
ports: ["5432:5432"]
|
48
|
+
env:
|
49
|
+
POSTGRES_PASSWORD: postgres
|
50
|
+
options: >-
|
51
|
+
--health-cmd pg_isready
|
52
|
+
--health-interval 10s
|
53
|
+
--health-timeout 5s
|
54
|
+
--health-retries 5
|
55
|
+
steps:
|
56
|
+
- uses: actions/checkout@v2
|
57
|
+
- uses: actions/cache@v1
|
58
|
+
with:
|
59
|
+
path: /home/runner/bundle
|
60
|
+
key: bundle-${{ matrix.ruby }}-${{ matrix.gemfile }}-${{ hashFiles(matrix.gemfile) }}-${{ hashFiles('**/*.gemspec') }}
|
61
|
+
restore-keys: |
|
62
|
+
bundle-${{ matrix.ruby }}-${{ matrix.gemfile }}-
|
63
|
+
- name: Install system deps
|
64
|
+
run: |
|
65
|
+
sudo apt-get update
|
66
|
+
sudo apt-get -yqq install libpq-dev
|
67
|
+
- uses: ruby/setup-ruby@v1
|
68
|
+
with:
|
69
|
+
ruby-version: ${{ matrix.ruby }}
|
70
|
+
- name: Bundle install
|
71
|
+
run: |
|
72
|
+
bundle config path /home/runner/bundle
|
73
|
+
bundle config --global gemfile ${{ matrix.gemfile }}
|
74
|
+
bundle install
|
75
|
+
bundle update
|
76
|
+
- name: Prepare test database
|
77
|
+
run: |
|
78
|
+
bundle exec rake dummy:db:create
|
79
|
+
bundle exec rake dummy:db:migrate:reset
|
80
|
+
- name: Run RSpec
|
81
|
+
env:
|
82
|
+
USE_FX: ${{ matrix.fx }}
|
83
|
+
run: |
|
84
|
+
bundle exec rspec -f d --force-color
|
@@ -0,0 +1,21 @@
|
|
1
|
+
name: Rubocop
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
rubocop:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- uses: ruby/setup-ruby@v1
|
15
|
+
with:
|
16
|
+
ruby-version: 2.7
|
17
|
+
- name: RuboCop
|
18
|
+
run: |
|
19
|
+
gem install bundler
|
20
|
+
bundle install --gemfile gemfiles/rubocop.gemfile --jobs 4 --retry 3
|
21
|
+
bundle exec --gemfile gemfiles/rubocop.gemfile rubocop
|
data/.gitignore
CHANGED
data/.mdlrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rules "~MD013", "~MD026", "~MD029", "~MD034", "~MD041"
|
data/.rubocop-md.yml
ADDED
data/.rubocop.yml
CHANGED
data/CODE_OF_CONDUCT.md
CHANGED
@@ -22,8 +22,7 @@ include:
|
|
22
22
|
|
23
23
|
Examples of unacceptable behavior by participants include:
|
24
24
|
|
25
|
-
* The use of sexualized language or imagery and unwelcome sexual attention or
|
26
|
-
advances
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
27
26
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
28
27
|
* Public or private harassment
|
29
28
|
* Publishing others' private information, such as a physical or electronic
|
@@ -67,8 +66,8 @@ members of the project's leadership.
|
|
67
66
|
|
68
67
|
## Attribution
|
69
68
|
|
70
|
-
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
71
|
-
available at [http://contributor-covenant.org/version/1/4][version]
|
69
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
70
|
+
version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
|
72
71
|
|
73
72
|
[homepage]: http://contributor-covenant.org
|
74
73
|
[version]: http://contributor-covenant.org/version/1/4/
|
data/Gemfile.lock
CHANGED
@@ -1,73 +1,87 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
metka (2.0
|
4
|
+
metka (2.1.0)
|
5
5
|
dry-configurable (>= 0.8)
|
6
|
-
rails (>= 5.
|
6
|
+
rails (>= 5.2)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
actioncable (
|
12
|
-
actionpack (=
|
11
|
+
actioncable (6.1.0)
|
12
|
+
actionpack (= 6.1.0)
|
13
|
+
activesupport (= 6.1.0)
|
13
14
|
nio4r (~> 2.0)
|
14
15
|
websocket-driver (>= 0.6.1)
|
15
|
-
|
16
|
-
actionpack (=
|
17
|
-
|
18
|
-
|
16
|
+
actionmailbox (6.1.0)
|
17
|
+
actionpack (= 6.1.0)
|
18
|
+
activejob (= 6.1.0)
|
19
|
+
activerecord (= 6.1.0)
|
20
|
+
activestorage (= 6.1.0)
|
21
|
+
activesupport (= 6.1.0)
|
22
|
+
mail (>= 2.7.1)
|
23
|
+
actionmailer (6.1.0)
|
24
|
+
actionpack (= 6.1.0)
|
25
|
+
actionview (= 6.1.0)
|
26
|
+
activejob (= 6.1.0)
|
27
|
+
activesupport (= 6.1.0)
|
19
28
|
mail (~> 2.5, >= 2.5.4)
|
20
29
|
rails-dom-testing (~> 2.0)
|
21
|
-
actionpack (
|
22
|
-
actionview (=
|
23
|
-
activesupport (=
|
24
|
-
rack (~> 2.0, >= 2.0.
|
30
|
+
actionpack (6.1.0)
|
31
|
+
actionview (= 6.1.0)
|
32
|
+
activesupport (= 6.1.0)
|
33
|
+
rack (~> 2.0, >= 2.0.9)
|
25
34
|
rack-test (>= 0.6.3)
|
26
35
|
rails-dom-testing (~> 2.0)
|
27
|
-
rails-html-sanitizer (~> 1.0, >= 1.0
|
28
|
-
|
29
|
-
|
36
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
37
|
+
actiontext (6.1.0)
|
38
|
+
actionpack (= 6.1.0)
|
39
|
+
activerecord (= 6.1.0)
|
40
|
+
activestorage (= 6.1.0)
|
41
|
+
activesupport (= 6.1.0)
|
42
|
+
nokogiri (>= 1.8.5)
|
43
|
+
actionview (6.1.0)
|
44
|
+
activesupport (= 6.1.0)
|
30
45
|
builder (~> 3.1)
|
31
46
|
erubi (~> 1.4)
|
32
47
|
rails-dom-testing (~> 2.0)
|
33
|
-
rails-html-sanitizer (~> 1.
|
34
|
-
activejob (
|
35
|
-
activesupport (=
|
48
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
49
|
+
activejob (6.1.0)
|
50
|
+
activesupport (= 6.1.0)
|
36
51
|
globalid (>= 0.3.6)
|
37
|
-
activemodel (
|
38
|
-
activesupport (=
|
39
|
-
activerecord (
|
40
|
-
activemodel (=
|
41
|
-
activesupport (=
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
activerecord (=
|
52
|
+
activemodel (6.1.0)
|
53
|
+
activesupport (= 6.1.0)
|
54
|
+
activerecord (6.1.0)
|
55
|
+
activemodel (= 6.1.0)
|
56
|
+
activesupport (= 6.1.0)
|
57
|
+
activestorage (6.1.0)
|
58
|
+
actionpack (= 6.1.0)
|
59
|
+
activejob (= 6.1.0)
|
60
|
+
activerecord (= 6.1.0)
|
61
|
+
activesupport (= 6.1.0)
|
46
62
|
marcel (~> 0.3.1)
|
47
|
-
|
63
|
+
mimemagic (~> 0.3.2)
|
64
|
+
activesupport (6.1.0)
|
48
65
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
49
|
-
i18n (>=
|
50
|
-
minitest (
|
51
|
-
tzinfo (~>
|
66
|
+
i18n (>= 1.6, < 2)
|
67
|
+
minitest (>= 5.1)
|
68
|
+
tzinfo (~> 2.0)
|
69
|
+
zeitwerk (~> 2.3)
|
52
70
|
ammeter (1.1.4)
|
53
71
|
activesupport (>= 3.0)
|
54
72
|
railties (>= 3.0)
|
55
73
|
rspec-rails (>= 2.2)
|
56
|
-
arel (9.0.0)
|
57
|
-
ast (2.4.1)
|
58
74
|
builder (3.2.4)
|
59
75
|
coderay (1.1.3)
|
60
76
|
concurrent-ruby (1.1.7)
|
61
77
|
crass (1.0.6)
|
62
78
|
database_cleaner (1.8.5)
|
63
79
|
diff-lcs (1.4.4)
|
64
|
-
dry-configurable (0.
|
80
|
+
dry-configurable (0.12.0)
|
65
81
|
concurrent-ruby (~> 1.0)
|
66
|
-
dry-core (~> 0.
|
67
|
-
dry-equalizer (~> 0.2)
|
82
|
+
dry-core (~> 0.5, >= 0.5.0)
|
68
83
|
dry-core (0.5.0)
|
69
84
|
concurrent-ruby (~> 1.0)
|
70
|
-
dry-equalizer (0.3.0)
|
71
85
|
erubi (1.10.0)
|
72
86
|
faker (2.15.1)
|
73
87
|
i18n (>= 1.6, < 2)
|
@@ -75,10 +89,6 @@ GEM
|
|
75
89
|
activesupport (>= 4.2.0)
|
76
90
|
i18n (1.8.5)
|
77
91
|
concurrent-ruby (~> 1.0)
|
78
|
-
jetrockets-standard (1.0.7)
|
79
|
-
rubocop-rails (~> 2.8.1)
|
80
|
-
rubocop-rspec (~> 1.43.2)
|
81
|
-
standard (~> 0.6.1)
|
82
92
|
loofah (2.8.0)
|
83
93
|
crass (~> 1.0.2)
|
84
94
|
nokogiri (>= 1.5.9)
|
@@ -94,9 +104,6 @@ GEM
|
|
94
104
|
nio4r (2.5.4)
|
95
105
|
nokogiri (1.10.10)
|
96
106
|
mini_portile2 (~> 2.4.0)
|
97
|
-
parallel (1.20.1)
|
98
|
-
parser (2.7.2.0)
|
99
|
-
ast (~> 2.4.1)
|
100
107
|
pg (1.2.3)
|
101
108
|
pry (0.13.1)
|
102
109
|
coderay (~> 1.1)
|
@@ -104,76 +111,54 @@ GEM
|
|
104
111
|
rack (2.2.3)
|
105
112
|
rack-test (1.1.0)
|
106
113
|
rack (>= 1.0, < 3)
|
107
|
-
rails (
|
108
|
-
actioncable (=
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
114
|
+
rails (6.1.0)
|
115
|
+
actioncable (= 6.1.0)
|
116
|
+
actionmailbox (= 6.1.0)
|
117
|
+
actionmailer (= 6.1.0)
|
118
|
+
actionpack (= 6.1.0)
|
119
|
+
actiontext (= 6.1.0)
|
120
|
+
actionview (= 6.1.0)
|
121
|
+
activejob (= 6.1.0)
|
122
|
+
activemodel (= 6.1.0)
|
123
|
+
activerecord (= 6.1.0)
|
124
|
+
activestorage (= 6.1.0)
|
125
|
+
activesupport (= 6.1.0)
|
126
|
+
bundler (>= 1.15.0)
|
127
|
+
railties (= 6.1.0)
|
119
128
|
sprockets-rails (>= 2.0.0)
|
120
129
|
rails-dom-testing (2.0.3)
|
121
130
|
activesupport (>= 4.2.0)
|
122
131
|
nokogiri (>= 1.6)
|
123
132
|
rails-html-sanitizer (1.3.0)
|
124
133
|
loofah (~> 2.3)
|
125
|
-
railties (
|
126
|
-
actionpack (=
|
127
|
-
activesupport (=
|
134
|
+
railties (6.1.0)
|
135
|
+
actionpack (= 6.1.0)
|
136
|
+
activesupport (= 6.1.0)
|
128
137
|
method_source
|
129
138
|
rake (>= 0.8.7)
|
130
|
-
thor (
|
131
|
-
rainbow (3.0.0)
|
139
|
+
thor (~> 1.0)
|
132
140
|
rake (13.0.3)
|
133
|
-
regexp_parser (2.0.1)
|
134
|
-
rexml (3.2.4)
|
135
141
|
rspec (3.10.0)
|
136
142
|
rspec-core (~> 3.10.0)
|
137
143
|
rspec-expectations (~> 3.10.0)
|
138
144
|
rspec-mocks (~> 3.10.0)
|
139
|
-
rspec-core (3.10.
|
145
|
+
rspec-core (3.10.1)
|
140
146
|
rspec-support (~> 3.10.0)
|
141
|
-
rspec-expectations (3.10.
|
147
|
+
rspec-expectations (3.10.1)
|
142
148
|
diff-lcs (>= 1.2.0, < 2.0)
|
143
149
|
rspec-support (~> 3.10.0)
|
144
150
|
rspec-mocks (3.10.0)
|
145
151
|
diff-lcs (>= 1.2.0, < 2.0)
|
146
152
|
rspec-support (~> 3.10.0)
|
147
|
-
rspec-rails (4.0.
|
153
|
+
rspec-rails (4.0.2)
|
148
154
|
actionpack (>= 4.2)
|
149
155
|
activesupport (>= 4.2)
|
150
156
|
railties (>= 4.2)
|
151
|
-
rspec-core (~> 3.
|
152
|
-
rspec-expectations (~> 3.
|
153
|
-
rspec-mocks (~> 3.
|
154
|
-
rspec-support (~> 3.
|
155
|
-
rspec-support (3.10.
|
156
|
-
rubocop (0.91.1)
|
157
|
-
parallel (~> 1.10)
|
158
|
-
parser (>= 2.7.1.1)
|
159
|
-
rainbow (>= 2.2.2, < 4.0)
|
160
|
-
regexp_parser (>= 1.7)
|
161
|
-
rexml
|
162
|
-
rubocop-ast (>= 0.4.0, < 1.0)
|
163
|
-
ruby-progressbar (~> 1.7)
|
164
|
-
unicode-display_width (>= 1.4.0, < 2.0)
|
165
|
-
rubocop-ast (0.8.0)
|
166
|
-
parser (>= 2.7.1.5)
|
167
|
-
rubocop-performance (1.8.1)
|
168
|
-
rubocop (>= 0.87.0)
|
169
|
-
rubocop-ast (>= 0.4.0)
|
170
|
-
rubocop-rails (2.8.1)
|
171
|
-
activesupport (>= 4.2.0)
|
172
|
-
rack (>= 1.1)
|
173
|
-
rubocop (>= 0.87.0)
|
174
|
-
rubocop-rspec (1.43.2)
|
175
|
-
rubocop (~> 0.87)
|
176
|
-
ruby-progressbar (1.10.1)
|
157
|
+
rspec-core (~> 3.10)
|
158
|
+
rspec-expectations (~> 3.10)
|
159
|
+
rspec-mocks (~> 3.10)
|
160
|
+
rspec-support (~> 3.10)
|
161
|
+
rspec-support (3.10.1)
|
177
162
|
sprockets (4.0.2)
|
178
163
|
concurrent-ruby (~> 1.0)
|
179
164
|
rack (> 1, < 3)
|
@@ -181,18 +166,14 @@ GEM
|
|
181
166
|
actionpack (>= 4.0)
|
182
167
|
activesupport (>= 4.0)
|
183
168
|
sprockets (>= 3.0.0)
|
184
|
-
standard (0.6.2)
|
185
|
-
rubocop (= 0.91.1)
|
186
|
-
rubocop-performance (= 1.8.1)
|
187
169
|
thor (1.0.1)
|
188
|
-
thread_safe (0.3.6)
|
189
170
|
timecop (0.9.2)
|
190
|
-
tzinfo (
|
191
|
-
|
192
|
-
unicode-display_width (1.7.0)
|
171
|
+
tzinfo (2.0.4)
|
172
|
+
concurrent-ruby (~> 1.0)
|
193
173
|
websocket-driver (0.7.3)
|
194
174
|
websocket-extensions (>= 0.1.0)
|
195
175
|
websocket-extensions (0.1.5)
|
176
|
+
zeitwerk (2.4.2)
|
196
177
|
|
197
178
|
PLATFORMS
|
198
179
|
ruby
|
@@ -203,7 +184,6 @@ DEPENDENCIES
|
|
203
184
|
bundler (>= 1.3)
|
204
185
|
database_cleaner (>= 1.7)
|
205
186
|
faker (>= 2.8)
|
206
|
-
jetrockets-standard (~> 1.0.1)
|
207
187
|
metka!
|
208
188
|
pg (>= 1.1)
|
209
189
|
pry (>= 0.12.2)
|
data/README.md
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
[![Gem Version](https://badge.fury.io/rb/metka.svg)](https://badge.fury.io/rb/metka)
|
2
|
-
[![Build Status](https://
|
2
|
+
[![Build Status](https://github.com/jetrockets/metka/workflows/Build/badge.svg?branch=master)](https://github.com/jetrockets/metka/actions)
|
3
3
|
[![Open Source Helpers](https://www.codetriage.com/jetrockets/metka/badges/users.svg)](https://www.codetriage.com/jetrockets/metka)
|
4
4
|
|
5
5
|
# Metka
|
6
6
|
|
7
7
|
Rails gem to manage tags with PostgreSQL array columns.
|
8
8
|
|
9
|
+
:exclamation: Requirements:
|
10
|
+
|
11
|
+
* Ruby ~> 2.5
|
12
|
+
* Rails >= 5.2 (for Rails 5.1 and 5.0 use version <2.1.0)
|
13
|
+
|
9
14
|
## Installation
|
10
15
|
|
11
16
|
Add this line to your application's Gemfile:
|
@@ -16,11 +21,15 @@ gem 'metka'
|
|
16
21
|
|
17
22
|
And then execute:
|
18
23
|
|
19
|
-
|
24
|
+
```bash
|
25
|
+
bundle
|
26
|
+
```
|
20
27
|
|
21
28
|
Or install it yourself as:
|
22
29
|
|
23
|
-
|
30
|
+
```bash
|
31
|
+
gem install metka
|
32
|
+
```
|
24
33
|
|
25
34
|
## Tag objects
|
26
35
|
|
@@ -32,9 +41,9 @@ rails g migration CreateSongs
|
|
32
41
|
class CreateSongs < ActiveRecord::Migration[5.0]
|
33
42
|
def change
|
34
43
|
create_table :songs do |t|
|
35
|
-
t.string
|
36
|
-
t.string
|
37
|
-
t.string
|
44
|
+
t.string :title
|
45
|
+
t.string :tags, array: true
|
46
|
+
t.string :genres, array: true
|
38
47
|
t.timestamps
|
39
48
|
end
|
40
49
|
end
|
@@ -55,140 +64,152 @@ end
|
|
55
64
|
## Find tagged objects
|
56
65
|
|
57
66
|
### .with_all_#{column_name}
|
67
|
+
|
58
68
|
```ruby
|
59
69
|
Song.with_all_tags('top')
|
60
|
-
|
70
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
61
71
|
|
62
72
|
Song.with_all_tags('top, 1990')
|
63
|
-
|
73
|
+
#=> []
|
64
74
|
|
65
75
|
Song.with_all_tags('')
|
66
|
-
|
76
|
+
#=> []
|
67
77
|
|
68
78
|
Song.with_all_genres('rock')
|
69
|
-
|
79
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
70
80
|
```
|
71
81
|
|
72
82
|
### .with_any_#{column_name}
|
83
|
+
|
73
84
|
```ruby
|
74
85
|
Song.with_any_tags('chill')
|
75
|
-
|
86
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
76
87
|
|
77
88
|
Song.with_any_tags('chill, 1980')
|
78
|
-
|
89
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
79
90
|
|
80
91
|
Song.with_any_tags('')
|
81
|
-
|
92
|
+
#=> []
|
82
93
|
|
83
94
|
Song.with_any_genres('rock, rap')
|
84
|
-
|
95
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
85
96
|
```
|
97
|
+
|
86
98
|
### .without_all_#{column_name}
|
99
|
+
|
87
100
|
```ruby
|
88
101
|
Song.without_all_tags('top')
|
89
|
-
|
102
|
+
#=> []
|
90
103
|
|
91
104
|
Song.without_all_tags('top, 1990')
|
92
|
-
|
105
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
93
106
|
|
94
107
|
Song.without_all_tags('')
|
95
|
-
|
108
|
+
#=> []
|
96
109
|
|
97
110
|
Song.without_all_genres('rock, pop')
|
98
|
-
|
111
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
99
112
|
|
100
113
|
Song.without_all_genres('rock')
|
101
|
-
|
114
|
+
#=> []
|
102
115
|
```
|
103
116
|
|
104
117
|
### .without_any_#{column_name}
|
118
|
+
|
105
119
|
```ruby
|
106
120
|
Song.without_any_tags('top, 1990')
|
107
|
-
|
121
|
+
#=> []
|
108
122
|
|
109
123
|
Song.without_any_tags('1990, 1980')
|
110
|
-
|
124
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
111
125
|
|
112
126
|
Song.without_any_genres('rock, pop')
|
113
|
-
|
127
|
+
#=> []
|
114
128
|
|
115
129
|
Song.without_any_genres('')
|
116
|
-
|
130
|
+
#=> []
|
117
131
|
```
|
118
132
|
|
119
133
|
### .tagged_with
|
134
|
+
|
120
135
|
```ruby
|
121
136
|
Song.tagged_with('top')
|
122
|
-
|
137
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
123
138
|
|
124
139
|
Song.tagged_with('top, 1990')
|
125
|
-
|
140
|
+
#=> []
|
126
141
|
|
127
142
|
Song.tagged_with('')
|
128
|
-
|
143
|
+
#=> []
|
129
144
|
|
130
145
|
Song.tagged_with('rock')
|
131
|
-
|
146
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
132
147
|
|
133
148
|
Song.tagged_with('rock', join_operator: Metka::And)
|
134
|
-
|
149
|
+
#=> []
|
135
150
|
|
136
151
|
Song.tagged_with('chill', any: true)
|
137
|
-
|
152
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
138
153
|
|
139
154
|
Song.tagged_with('chill, 1980', any: true)
|
140
|
-
|
155
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
141
156
|
|
142
157
|
Song.tagged_with('', any: true)
|
143
|
-
|
158
|
+
#=> []
|
144
159
|
|
145
160
|
Song.tagged_with('rock, rap', any: true, on: ['genres'])
|
146
|
-
|
161
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
147
162
|
|
148
163
|
Song.without_all_tags('top')
|
149
|
-
|
164
|
+
#=> []
|
150
165
|
|
151
166
|
Song.tagged_with('top, 1990', exclude: true)
|
152
|
-
|
167
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
153
168
|
|
154
169
|
Song.tagged_with('', exclude: true)
|
155
|
-
|
170
|
+
#=> []
|
156
171
|
|
157
172
|
Song.tagged_with('top, 1990', any: true, exclude: true)
|
158
|
-
|
173
|
+
#=> []
|
159
174
|
|
160
175
|
Song.tagged_with('1990, 1980', any: true, exclude: true)
|
161
|
-
|
176
|
+
#=> [#<Song id: 1, title: 'Migrate tags in Rails to PostgreSQL', tags: ['top', 'chill'], genres: ['rock', 'jazz', 'pop']]
|
162
177
|
|
163
178
|
Song.without_any_genres('rock, pop')
|
164
|
-
|
179
|
+
#=> []
|
165
180
|
```
|
166
181
|
|
167
182
|
## Custom delimiter
|
183
|
+
|
168
184
|
By default, a comma is used as a delimiter to create tags from a string.
|
169
185
|
You can make your own custom separator:
|
186
|
+
|
170
187
|
```ruby
|
171
188
|
Metka.config.delimiter = '|'
|
172
189
|
parsed_data = Metka::GenericParser.instance.call('cool, data|I have')
|
173
190
|
parsed_data.to_a
|
174
|
-
|
191
|
+
#=>['cool, data', 'I have']
|
175
192
|
```
|
176
193
|
|
177
194
|
## Tags with quote
|
195
|
+
|
178
196
|
```ruby
|
179
197
|
parsed_data = Metka::GenericParser.instance.call("'cool, data', code")
|
180
198
|
parsed_data.to_a
|
181
|
-
|
199
|
+
#=> ['cool, data', 'code']
|
182
200
|
```
|
183
201
|
|
184
202
|
## Custom parser
|
203
|
+
|
185
204
|
By default we use [generic_parser](lib/metka/generic_parser.rb "generic_parser")
|
186
205
|
If you want to use your custom parser you can do:
|
206
|
+
|
187
207
|
```ruby
|
188
208
|
class Song < ActiveRecord::Base
|
189
209
|
include Metka::Model(columns: %w[genres tags], parser: Your::Custom::Parser.instance)
|
190
210
|
end
|
191
211
|
```
|
212
|
+
|
192
213
|
Custom parser must be a singleton class that has a `.call` method that accepts the tag string
|
193
214
|
|
194
215
|
## Tag Cloud Strategies
|
@@ -200,29 +221,30 @@ There are several strategies to get tag statistics
|
|
200
221
|
Data about taggings is accessible via class methods of your model with `Metka::Model` attached. You can calculate a cloud for a single tagged column or multiple columns, the latter case would return to you a sum of taggings from multiple tagged columns, that are provided as arguments, for each tag present. ActiveRecord Strategy is an easiest way to implement, since it wouldn't require any additional code, but it's the slowest one on SELECT.
|
201
222
|
|
202
223
|
```ruby
|
224
|
+
|
203
225
|
class Book < ActiveRecord::Base
|
204
226
|
include Metka::Model(column: 'authors')
|
205
227
|
include Metka::Model(column: 'co_authors')
|
206
228
|
end
|
207
229
|
|
208
230
|
tag_cloud = Book.author_cloud
|
209
|
-
|
231
|
+
#=> [["L.N. Tolstoy", 3], ["F.M. Dostoevsky", 6]]
|
210
232
|
genre_cloud = Book.co_author_cloud
|
211
|
-
|
233
|
+
#=> [["A.P. Chekhov", 5], ["N.V. Gogol", 8], ["L.N. Tolstoy", 2]]
|
212
234
|
summary_cloud = Book.metka_cloud('authors', 'co_authors')
|
213
|
-
|
235
|
+
#=> [["L.N. Tolstoy", 5], ["F.M. Dostoevsky", 6], ["A.P. Chekhov", 5], ["N.V. Gogol", 8]]
|
214
236
|
```
|
215
237
|
|
216
238
|
### View Strategy
|
217
239
|
|
218
|
-
Data about taggings will be
|
240
|
+
Data about taggings will be aggregated in SQL View. Performance-wise that strategy has no benefits over ActiveRecord Strategy, but if you need to store tags aggregations in a distinct model, that's an easiest way to achieve it.
|
219
241
|
|
220
242
|
```bash
|
221
243
|
rails g metka:strategies:view --source-table-name=NAME_OF_TABLE_WITH_TAGS [--source-columns=NAME_OF_COLUMN_1 NAME_OF_COLUMN_2] [--view-name=NAME_OF_RESULTING_VIEW]
|
222
244
|
```
|
223
245
|
|
224
246
|
The code above will generate a migration that creates view with specified `NAME_OF_RESULTING_VIEW`, that would aggregate tags data from specified array of tagged columns [`NAME_OF_COLUMN_1`, `NAME_OF_COLUMN_2`, ...], that are present within specified table `NAME_OF_TABLE_WITH_TAGS`.
|
225
|
-
If `source-columns` option is not provided, then `tags` column would be used as defaults. If array of multiple values would be provided to the option, then the aggregation would be made with the tags from multiple tagged columns, so if a single tag would be found within multiple tagged columns, the resulting aggregation inside the view would have a single row for that tag with a sum of it's
|
247
|
+
If `source-columns` option is not provided, then `tags` column would be used as defaults. If array of multiple values would be provided to the option, then the aggregation would be made with the tags from multiple tagged columns, so if a single tag would be found within multiple tagged columns, the resulting aggregation inside the view would have a single row for that tag with a sum of it's occurrences across all stated tagged columns.
|
226
248
|
`view-name` option is also optional, it would just force the resulting view's name to the one of your choice. If it's not provided, then view name would be generated automatically, you could check it within generated migration.
|
227
249
|
|
228
250
|
Lets take a look at real example. We have a `notes` table with `tags` column.
|
@@ -290,7 +312,7 @@ Data about taggings will be aggregated in SQL Materialized View, that would be r
|
|
290
312
|
rails g metka:strategies:materialized_view --source-table-name=NAME_OF_TABLE_WITH_TAGS --source-columns=NAME_OF_COLUMN_1 NAME_OF_COLUMN_2 --view-name=NAME_OF_RESULTING_VIEW
|
291
313
|
```
|
292
314
|
|
293
|
-
All of the options for that
|
315
|
+
All of the options for that strategy's generation command are the same as for the View Strategy.
|
294
316
|
|
295
317
|
The migration template can be seen [here](spec/dummy/db/migrate/06_create_tagged_materialized_view_posts_materialized_view.rb "here")
|
296
318
|
|
@@ -308,11 +330,10 @@ And you can also create `TaggedNote` model to work with the view as with a Rails
|
|
308
330
|
|
309
331
|
### Table Strategy with Triggers
|
310
332
|
|
311
|
-
|
312
|
-
|
313
333
|
TBD
|
314
334
|
|
315
335
|
## Inspired by
|
336
|
+
|
316
337
|
1. [ActsAsTaggableOn](https://github.com/mbleigh/acts-as-taggable-on)
|
317
338
|
2. [ActsAsTaggableArrayOn](https://github.com/tmiyamon/acts-as-taggable-array-on)
|
318
339
|
3. [TagColumns](https://github.com/hopsoft/tag_columns)
|
@@ -447,9 +468,10 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
447
468
|
|
448
469
|
## Contributing
|
449
470
|
|
450
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
471
|
+
Bug reports and pull requests are welcome on GitHub at [https://github.com/jetrockets/metka](https://github.com/jetrockets/metka). This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
451
472
|
|
452
473
|
## Credits
|
474
|
+
|
453
475
|
![JetRockets](https://media.jetrockets.pro/jetrockets-white.png)
|
454
476
|
Metka is maintained by [JetRockets](http://www.jetrockets.ru).
|
455
477
|
|
data/forspell.dict
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# Format: one word per line. Empty lines and #-comments are supported too.
|
2
|
+
# If you want to add word with its forms, you can write 'word: example' (without quotes) on the line,
|
3
|
+
# where 'example' is existing word with the same possible forms (endings) as your word.
|
4
|
+
# Example: deduplicate: duplicate
|
5
|
+
Metka
|
6
|
+
taggings
|
7
|
+
benchmarked
|
data/lib/metka/query_builder.rb
CHANGED
@@ -7,22 +7,42 @@ module Metka
|
|
7
7
|
include Singleton
|
8
8
|
|
9
9
|
def call(model, column_name, tag_list)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
10
|
+
tags = tag_list.to_a
|
11
|
+
|
12
|
+
if tags.one?
|
13
|
+
value = Arel::Nodes::SqlLiteral.new(
|
14
|
+
ActiveRecord::Base.sanitize_sql_for_conditions(['?', tags.first])
|
15
|
+
)
|
16
|
+
|
17
|
+
column_cast = Arel::Nodes::NamedFunction.new(
|
18
|
+
'ANY',
|
19
|
+
[model.arel_table[column_name]]
|
20
|
+
)
|
21
|
+
|
22
|
+
Arel::Nodes::Equality.new(value, column_cast)
|
23
|
+
else
|
24
|
+
value = Arel::Nodes::SqlLiteral.new(
|
25
|
+
ActiveRecord::Base.sanitize_sql_for_conditions(['ARRAY[?]::varchar[]', tags])
|
26
|
+
)
|
27
|
+
|
28
|
+
Arel::Nodes::InfixOperation.new(infix_operator, model.arel_table[column_name], value)
|
29
|
+
end
|
30
|
+
# column_cast = Arel::Nodes::NamedFunction.new(
|
31
|
+
# 'CAST',
|
32
|
+
# [model.arel_table[column_name].as('text[]')]
|
33
|
+
# )
|
34
|
+
|
35
|
+
# value = Arel::Nodes::SqlLiteral.new(
|
36
|
+
# ActiveRecord::Base.sanitize_sql_for_conditions(['ARRAY[?]::varchar[]', tag_list.to_a])
|
37
|
+
# )
|
38
|
+
|
39
|
+
# value_cast = Arel::Nodes::NamedFunction.new(
|
40
|
+
# 'CAST',
|
41
|
+
# [value.as('text[]')]
|
42
|
+
# )
|
43
|
+
|
44
|
+
# # Arel::Nodes::InfixOperation.new(infix_operator, column_cast, value_cast)
|
45
|
+
# Arel::Nodes::InfixOperation.new(infix_operator, model.arel_table[column_name], value)
|
26
46
|
end
|
27
47
|
end
|
28
48
|
end
|
data/lib/metka/version.rb
CHANGED
data/metka.gemspec
CHANGED
@@ -25,13 +25,12 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
27
|
spec.add_dependency 'dry-configurable', '>= 0.8'
|
28
|
-
spec.add_dependency 'rails', '>= 5.
|
28
|
+
spec.add_dependency 'rails', '>= 5.2'
|
29
29
|
|
30
30
|
spec.add_development_dependency 'ammeter', '>= 1.1'
|
31
31
|
spec.add_development_dependency 'pry', '>= 0.12.2'
|
32
32
|
spec.add_development_dependency 'bundler', '>= 1.3'
|
33
33
|
spec.add_development_dependency 'faker', '>= 2.8'
|
34
|
-
spec.add_development_dependency 'jetrockets-standard', '~> 1.0.1'
|
35
34
|
spec.add_development_dependency 'pg', '>= 1.1'
|
36
35
|
spec.add_development_dependency 'rake', '>= 0.8.7'
|
37
36
|
spec.add_development_dependency 'rspec', '>= 3.9'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Alexandrov
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-12-
|
12
|
+
date: 2020-12-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dry-configurable
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '5.
|
34
|
+
version: '5.2'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '5.
|
41
|
+
version: '5.2'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: ammeter
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,20 +95,6 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '2.8'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: jetrockets-standard
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - "~>"
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: 1.0.1
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - "~>"
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: 1.0.1
|
112
98
|
- !ruby/object:Gem::Dependency
|
113
99
|
name: pg
|
114
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,12 +187,16 @@ executables: []
|
|
201
187
|
extensions: []
|
202
188
|
extra_rdoc_files: []
|
203
189
|
files:
|
204
|
-
- ".github/
|
190
|
+
- ".github/ISSUE_TEMPLATE.md"
|
191
|
+
- ".github/workflows/docs.yml"
|
192
|
+
- ".github/workflows/rspec.yml"
|
193
|
+
- ".github/workflows/rubocop.yml"
|
205
194
|
- ".gitignore"
|
195
|
+
- ".mdlrc"
|
206
196
|
- ".rspec"
|
197
|
+
- ".rubocop-md.yml"
|
207
198
|
- ".rubocop.yml"
|
208
199
|
- ".ruby-version"
|
209
|
-
- ".travis.yml"
|
210
200
|
- CODE_OF_CONDUCT.md
|
211
201
|
- Gemfile
|
212
202
|
- Gemfile.lock
|
@@ -215,9 +205,12 @@ files:
|
|
215
205
|
- Rakefile
|
216
206
|
- bin/console
|
217
207
|
- bin/setup
|
208
|
+
- forspell.dict
|
218
209
|
- gemfiles/rails52.gemfile
|
219
210
|
- gemfiles/rails6.gemfile
|
220
211
|
- gemfiles/rails61.gemfile
|
212
|
+
- gemfiles/railsmaster.gemfile
|
213
|
+
- gemfiles/rubocop.gemfile
|
221
214
|
- lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb
|
222
215
|
- lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb
|
223
216
|
- lib/generators/metka/strategies/view/templates/migration.rb.erb
|
data/.travis.yml
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
---
|
2
|
-
language: ruby
|
3
|
-
cache: bundler
|
4
|
-
|
5
|
-
dist: trusty
|
6
|
-
sudo: false
|
7
|
-
|
8
|
-
notifications:
|
9
|
-
email: false
|
10
|
-
|
11
|
-
services:
|
12
|
-
- postgresql
|
13
|
-
addons:
|
14
|
-
postgresql: "11.2"
|
15
|
-
|
16
|
-
before_install:
|
17
|
-
- gem install -v 2.0.2 bundler
|
18
|
-
- sudo apt-get update
|
19
|
-
- sudo apt-get --yes remove postgresql\*
|
20
|
-
- sudo apt-get install -y postgresql-11 postgresql-client-11
|
21
|
-
- sudo cp /etc/postgresql/{9.6,11}/main/pg_hba.conf
|
22
|
-
- sudo service postgresql restart 11
|
23
|
-
|
24
|
-
before_script:
|
25
|
-
- psql -c 'CREATE ROLE travis SUPERUSER LOGIN CREATEDB;' -U postgres
|
26
|
-
- ./bin/setup
|
27
|
-
|
28
|
-
matrix:
|
29
|
-
include:
|
30
|
-
- rvm: 2.5.1
|
31
|
-
gemfile: gemfiles/rails5.gemfile
|
32
|
-
- rvm: 2.5.5
|
33
|
-
gemfile: gemfiles/rails52.gemfile
|
34
|
-
- rvm: 2.6.2
|
35
|
-
gemfile: gemfiles/rails6.gemfile
|
36
|
-
- rvm: 2.7.2
|
37
|
-
gemfile: gemfiles/rails61.gemfile
|