metka 0.1.1 → 0.1.2
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 +4 -4
- data/.github/workflows/continuous-integration-workflow.yml +11 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -7
- data/.travis.yml +4 -2
- data/Gemfile.lock +17 -8
- data/README.md +1 -1
- data/Rakefile +3 -3
- data/lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb +58 -0
- data/lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb +40 -0
- data/lib/generators/metka/strategies/view/templates/migration.rb.erb +1 -1
- data/lib/generators/metka/strategies/view/view_generator.rb +11 -11
- data/lib/metka.rb +8 -8
- data/lib/metka/generic_parser.rb +2 -2
- data/lib/metka/model.rb +2 -2
- data/lib/metka/query_builder.rb +3 -3
- data/lib/metka/query_builder/all_tags_query.rb +6 -6
- data/lib/metka/query_builder/any_tags_query.rb +7 -7
- data/lib/metka/tag_list.rb +1 -1
- data/lib/metka/version.rb +1 -1
- data/metka.gemspec +23 -23
- metadata +15 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd6f202972d558afed083a0095530a47e1e2f35028beb4a457c1b13741614b0d
|
4
|
+
data.tar.gz: e11832ae26b49cdb99aa7b6fd5dddb9f559b862b8460c19b492c05467ea04331
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea2f237f88c8a661931db07532243ddd6c7af85741f77422cc6f6fafd3460fbfaacad205064eeecb438a29a25c3aff11157ddf6309ff6bb559d317674bbdc019
|
7
|
+
data.tar.gz: b9e9f74757a541c6bf8fb123ba27cf619ebafeb7b92b61ea0a71b0482b5e3a3def87bae4c5292cd159e4bc6beeeb9274811e77e7dd461736d16bb15529ec7673
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
inherit_gem:
|
2
|
-
standard: config/
|
2
|
+
jetrockets-standard: config/gems.yml
|
3
3
|
|
4
4
|
AllCops:
|
5
5
|
Exclude:
|
@@ -13,12 +13,6 @@ AllCops:
|
|
13
13
|
DisplayCopNames: true
|
14
14
|
TargetRubyVersion: 2.5
|
15
15
|
|
16
|
-
Standard/SemanticBlocks:
|
17
|
-
Enabled: false
|
18
|
-
|
19
|
-
Style/FrozenStringLiteralComment:
|
20
|
-
Enabled: true
|
21
|
-
|
22
16
|
Style/TrailingCommaInArrayLiteral:
|
23
17
|
EnforcedStyleForMultiline: no_comma
|
24
18
|
|
data/.travis.yml
CHANGED
@@ -16,7 +16,9 @@ env:
|
|
16
16
|
- METKA_DB_USER=postgres
|
17
17
|
- METKA_DB_NAME=metka
|
18
18
|
|
19
|
+
before_install:
|
20
|
+
- gem install -v 2.0.2 bundler
|
21
|
+
|
19
22
|
before_script:
|
20
23
|
- gem update --system
|
21
|
-
- bundle exec rake dummy:db:create
|
22
|
-
- RAILS_ENV=test bundle exec rake dummy:db:create dummy:db:migrate
|
24
|
+
- RAILS_ENV=test bundle exec rake dummy:db:create dummy:db:schema:load
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
metka (0.1.
|
4
|
+
metka (0.1.1)
|
5
5
|
dry-configurable
|
6
6
|
rails (>= 4.2)
|
7
7
|
|
@@ -61,13 +61,17 @@ GEM
|
|
61
61
|
dry-core (0.4.9)
|
62
62
|
concurrent-ruby (~> 1.0)
|
63
63
|
erubi (1.8.0)
|
64
|
-
faker (2.
|
65
|
-
i18n (
|
64
|
+
faker (2.3.0)
|
65
|
+
i18n (~> 1.6.0)
|
66
66
|
globalid (0.4.2)
|
67
67
|
activesupport (>= 4.2.0)
|
68
68
|
i18n (1.6.0)
|
69
69
|
concurrent-ruby (~> 1.0)
|
70
70
|
jaro_winkler (1.5.3)
|
71
|
+
jetrockets-standard (1.0.1)
|
72
|
+
rubocop-rails (~> 2.3.2)
|
73
|
+
rubocop-rspec (~> 1.35.0)
|
74
|
+
standard (~> 0.1.4)
|
71
75
|
loofah (2.2.3)
|
72
76
|
crass (~> 1.0.2)
|
73
77
|
nokogiri (>= 1.5.9)
|
@@ -77,11 +81,11 @@ GEM
|
|
77
81
|
mini_mime (1.0.2)
|
78
82
|
mini_portile2 (2.4.0)
|
79
83
|
minitest (5.11.3)
|
80
|
-
nio4r (2.
|
84
|
+
nio4r (2.5.1)
|
81
85
|
nokogiri (1.10.4)
|
82
86
|
mini_portile2 (~> 2.4.0)
|
83
87
|
parallel (1.17.0)
|
84
|
-
parser (2.6.
|
88
|
+
parser (2.6.4.1)
|
85
89
|
ast (~> 2.4.0)
|
86
90
|
pg (1.1.4)
|
87
91
|
rack (2.0.7)
|
@@ -142,6 +146,11 @@ GEM
|
|
142
146
|
unicode-display_width (>= 1.4.0, < 1.7)
|
143
147
|
rubocop-performance (1.4.1)
|
144
148
|
rubocop (>= 0.71.0)
|
149
|
+
rubocop-rails (2.3.2)
|
150
|
+
rack (>= 1.1)
|
151
|
+
rubocop (>= 0.72.0)
|
152
|
+
rubocop-rspec (1.35.0)
|
153
|
+
rubocop (>= 0.60.0)
|
145
154
|
ruby-progressbar (1.10.1)
|
146
155
|
sprockets (3.7.2)
|
147
156
|
concurrent-ruby (~> 1.0)
|
@@ -150,7 +159,7 @@ GEM
|
|
150
159
|
actionpack (>= 4.0)
|
151
160
|
activesupport (>= 4.0)
|
152
161
|
sprockets (>= 3.0.0)
|
153
|
-
standard (0.1.
|
162
|
+
standard (0.1.4)
|
154
163
|
rubocop (~> 0.72.0)
|
155
164
|
rubocop-performance (~> 1.4.0)
|
156
165
|
thor (0.20.3)
|
@@ -171,13 +180,13 @@ DEPENDENCIES
|
|
171
180
|
ammeter
|
172
181
|
bundler
|
173
182
|
faker
|
183
|
+
jetrockets-standard (~> 1.0.1)
|
174
184
|
metka!
|
175
185
|
pg
|
176
186
|
rake
|
177
187
|
rspec
|
178
188
|
rspec-rails
|
179
|
-
standard
|
180
189
|
timecop
|
181
190
|
|
182
191
|
BUNDLED WITH
|
183
|
-
2.0.
|
192
|
+
2.0.2
|
data/README.md
CHANGED
@@ -76,7 +76,7 @@ Lets take a look at real example. We have a `notes` table with `tags` column.
|
|
76
76
|
Now lets generate a migration.
|
77
77
|
|
78
78
|
```bash
|
79
|
-
|
79
|
+
rails g metka:strategies:view --source-table-name=notes
|
80
80
|
```
|
81
81
|
|
82
82
|
The result would be:
|
data/Rakefile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
5
|
|
6
6
|
RSpec::Core::RakeTask.new(:spec)
|
7
7
|
|
8
8
|
namespace :dummy do
|
9
|
-
require_relative
|
9
|
+
require_relative 'spec/dummy/config/application'
|
10
10
|
Dummy::Application.load_tasks
|
11
11
|
end
|
12
12
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require 'rails/generators/active_record'
|
5
|
+
|
6
|
+
module Metka
|
7
|
+
module Generators
|
8
|
+
module Strategies
|
9
|
+
class MaterializedViewGenerator < ::Rails::Generators::Base # :nodoc:
|
10
|
+
include Rails::Generators::Migration
|
11
|
+
|
12
|
+
desc <<~LONGDESC
|
13
|
+
Generates migration to implement view strategy for Metka
|
14
|
+
|
15
|
+
> $ rails g metka:strategies:materialized_view --source-table-name=NAME_OF_TABLE_WITH_TAGS
|
16
|
+
LONGDESC
|
17
|
+
|
18
|
+
source_root File.expand_path('templates', __dir__)
|
19
|
+
|
20
|
+
class_option :source_table_name, type: :string, required: true,
|
21
|
+
desc: 'Name of the table that has a column with tags'
|
22
|
+
|
23
|
+
class_option :source_column_name, type: :string, default: 'tags',
|
24
|
+
desc: 'Name of the column with stored tags'
|
25
|
+
|
26
|
+
def generate_migration
|
27
|
+
migration_template 'migration.rb.erb', "db/migrate/#{migration_name}.rb"
|
28
|
+
end
|
29
|
+
|
30
|
+
no_tasks do
|
31
|
+
def source_table_name
|
32
|
+
options[:source_table_name]
|
33
|
+
end
|
34
|
+
|
35
|
+
def source_column_name
|
36
|
+
options[:source_column_name]
|
37
|
+
end
|
38
|
+
|
39
|
+
def view_name
|
40
|
+
"tagged_#{source_table_name}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def migration_name
|
44
|
+
"create_#{view_name}_view"
|
45
|
+
end
|
46
|
+
|
47
|
+
def migration_class_name
|
48
|
+
migration_name.classify
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.next_migration_number(dir)
|
53
|
+
::ActiveRecord::Generators::Base.next_migration_number(dir)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class <%= @migration_class_name %> < ActiveRecord::Migration<%= ActiveRecord::VERSION::MAJOR < 5 ? '' : '[5.0]' %>
|
4
|
+
def up
|
5
|
+
execute <<-SQL
|
6
|
+
CREATE
|
7
|
+
OR REPLACE FUNCTION metka_refresh_<%= view_name %>_materialized_view RETURNS TRIGGER LANGUAGE plpgsql AS $$
|
8
|
+
BEGIN
|
9
|
+
IF TG_OP = 'INSERT' AND NEW.<%= source_column_name %> IS NOT NULL THEN
|
10
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY <%= view_name %>;
|
11
|
+
ELSIF TG_OP = 'UPDATE' AND OLD.<%= source_column_name %> IS NOT NULL AND NEW.<%= source_column_name %> IS NOT NULL THEN
|
12
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY <%= view_name %>;
|
13
|
+
ELSIF TG_OP = 'DELETE' AND OLD.<%= source_column_name %> IS NOT NULL THEN
|
14
|
+
REFRESH MATERIALIZED VIEW CONCURRENTLY <%= view_name %>;
|
15
|
+
END IF;
|
16
|
+
|
17
|
+
RETURN NULL;
|
18
|
+
END $$;
|
19
|
+
|
20
|
+
CREATE OR REPLACE MATERIALZIED VIEW <%= view_name %> AS
|
21
|
+
|
22
|
+
SELECT UNNEST
|
23
|
+
( <%= source_column_name %> ) AS <%= source_column_name.singularize %>_name,
|
24
|
+
COUNT ( * ) AS taggings_count
|
25
|
+
FROM
|
26
|
+
<%= source_table_name %>
|
27
|
+
GROUP BY
|
28
|
+
<%= source_column_name.singularize %>_name;
|
29
|
+
|
30
|
+
CREATE TRIGGER metka_on_<%= source_table_name %>
|
31
|
+
BEFORE UPDATE OR INSERT OR DELETE ON <%= source_table_name %> FOR EACH ROW
|
32
|
+
EXECUTE PROCEDURE metka_refresh_<%= view_name %>_materialized_view();
|
33
|
+
end
|
34
|
+
|
35
|
+
def down
|
36
|
+
execute <<-SQL
|
37
|
+
DROP VIEW <%= view_name %>;
|
38
|
+
SQL
|
39
|
+
end
|
40
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'rails/generators'
|
4
|
+
require 'rails/generators/active_record'
|
5
5
|
|
6
6
|
module Metka
|
7
7
|
module Generators
|
@@ -9,22 +9,22 @@ module Metka
|
|
9
9
|
class ViewGenerator < ::Rails::Generators::Base # :nodoc:
|
10
10
|
include Rails::Generators::Migration
|
11
11
|
|
12
|
-
desc
|
13
|
-
Generates migration to implement view strategy for Metka
|
12
|
+
desc <<~LONGDESC
|
13
|
+
Generates migration to implement view strategy for Metka
|
14
14
|
|
15
|
-
> $ rails g metka:strategies:view --source-table-name=NAME_OF_TABLE_WITH_TAGS
|
16
|
-
LONGDESC
|
15
|
+
> $ rails g metka:strategies:view --source-table-name=NAME_OF_TABLE_WITH_TAGS
|
16
|
+
LONGDESC
|
17
17
|
|
18
|
-
source_root File.expand_path(
|
18
|
+
source_root File.expand_path('templates', __dir__)
|
19
19
|
|
20
20
|
class_option :source_table_name, type: :string, required: true,
|
21
|
-
|
21
|
+
desc: 'Name of the table that has a column with tags'
|
22
22
|
|
23
23
|
class_option :source_column_name, type: :string, default: 'tags',
|
24
|
-
|
24
|
+
desc: 'Name of the column with stored tags'
|
25
25
|
|
26
26
|
def generate_migration
|
27
|
-
migration_template
|
27
|
+
migration_template 'migration.rb.erb', "db/migrate/#{migration_name}.rb"
|
28
28
|
end
|
29
29
|
|
30
30
|
no_tasks do
|
@@ -55,4 +55,4 @@ LONGDESC
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
|
-
end
|
58
|
+
end
|
data/lib/metka.rb
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'metka/version'
|
4
4
|
|
5
|
-
require
|
6
|
-
require
|
5
|
+
require 'active_support/core_ext/module'
|
6
|
+
require 'dry-configurable'
|
7
7
|
|
8
8
|
module Metka
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
9
|
+
require 'metka/tag_list'
|
10
|
+
require 'metka/generic_parser'
|
11
|
+
require 'metka/query_builder'
|
12
|
+
require 'metka/model'
|
13
13
|
|
14
14
|
class Error < StandardError; end
|
15
15
|
|
16
16
|
extend Dry::Configurable
|
17
17
|
|
18
18
|
setting :parser, Metka::GenericParser
|
19
|
-
setting :delimiter,
|
19
|
+
setting :delimiter, ','
|
20
20
|
end
|
data/lib/metka/generic_parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'singleton'
|
4
4
|
|
5
5
|
module Metka
|
6
6
|
##
|
@@ -16,7 +16,7 @@ module Metka
|
|
16
16
|
TagList.new.tap do |tag_list|
|
17
17
|
case value
|
18
18
|
when String
|
19
|
-
tag_list.merge value.split(
|
19
|
+
tag_list.merge value.split(',').map(&:strip).reject(&:empty?)
|
20
20
|
when Enumerable
|
21
21
|
tag_list.merge value.reject(&:empty?)
|
22
22
|
end
|
data/lib/metka/model.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'active_support/concern'
|
4
4
|
|
5
5
|
module Metka
|
6
6
|
# Extends AR model with methods to use tags
|
@@ -14,7 +14,7 @@ module Metka
|
|
14
14
|
|
15
15
|
return none if tag_list.empty?
|
16
16
|
|
17
|
-
where(::Metka::QueryBuilder.new.call(self,
|
17
|
+
where(::Metka::QueryBuilder.new.call(self, 'tags', tag_list, options))
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
data/lib/metka/query_builder.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
3
|
+
require_relative 'query_builder/exclude_tags_query'
|
4
|
+
require_relative 'query_builder/any_tags_query'
|
5
|
+
require_relative 'query_builder/all_tags_query'
|
6
6
|
|
7
7
|
module Metka
|
8
8
|
class QueryBuilder
|
@@ -6,21 +6,21 @@ module Metka
|
|
6
6
|
|
7
7
|
def call(model, column_name, tag_list)
|
8
8
|
column_cast = Arel::Nodes::NamedFunction.new(
|
9
|
-
|
10
|
-
[model.arel_table[column_name].as(
|
9
|
+
'CAST',
|
10
|
+
[model.arel_table[column_name].as('text[]')]
|
11
11
|
)
|
12
12
|
|
13
13
|
value = Arel::Nodes::SqlLiteral.new(
|
14
14
|
# In Rails 5.2 and above Sanitanization moved to public level, but still we have to support 4.2 and 5.0 and 5.1
|
15
|
-
ActiveRecord::Base.send(:sanitize_sql_for_conditions, [
|
15
|
+
ActiveRecord::Base.send(:sanitize_sql_for_conditions, ['ARRAY[?]', tag_list.to_a])
|
16
16
|
)
|
17
17
|
|
18
18
|
value_cast = Arel::Nodes::NamedFunction.new(
|
19
|
-
|
20
|
-
[value.as(
|
19
|
+
'CAST',
|
20
|
+
[value.as('text[]')]
|
21
21
|
)
|
22
22
|
|
23
|
-
Arel::Nodes::InfixOperation.new(
|
23
|
+
Arel::Nodes::InfixOperation.new('@>', column_cast, value_cast)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'singleton'
|
4
4
|
|
5
5
|
module Metka
|
6
6
|
class AnyTagsQuery
|
@@ -8,21 +8,21 @@ module Metka
|
|
8
8
|
|
9
9
|
def call(model, column_name, tag_list)
|
10
10
|
column_cast = Arel::Nodes::NamedFunction.new(
|
11
|
-
|
12
|
-
[model.arel_table[column_name].as(
|
11
|
+
'CAST',
|
12
|
+
[model.arel_table[column_name].as('text[]')]
|
13
13
|
)
|
14
14
|
|
15
15
|
value = Arel::Nodes::SqlLiteral.new(
|
16
16
|
# In Rails 5.2 and above Sanitanization moved to public level, but still we have to support 4.2 and 5.0 and 5.1
|
17
|
-
ActiveRecord::Base.send(:sanitize_sql_for_conditions, [
|
17
|
+
ActiveRecord::Base.send(:sanitize_sql_for_conditions, ['ARRAY[?]', tag_list.to_a])
|
18
18
|
)
|
19
19
|
|
20
20
|
value_cast = Arel::Nodes::NamedFunction.new(
|
21
|
-
|
22
|
-
[value.as(
|
21
|
+
'CAST',
|
22
|
+
[value.as('text[]')]
|
23
23
|
)
|
24
24
|
|
25
|
-
Arel::Nodes::InfixOperation.new(
|
25
|
+
Arel::Nodes::InfixOperation.new('&&', column_cast, value_cast)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/lib/metka/tag_list.rb
CHANGED
data/lib/metka/version.rb
CHANGED
data/metka.gemspec
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require
|
5
|
+
require 'metka/version'
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
|
-
spec.name =
|
8
|
+
spec.name = 'metka'
|
9
9
|
spec.version = Metka::VERSION
|
10
|
-
spec.authors = [
|
11
|
-
spec.email = [
|
10
|
+
spec.authors = ['Igor Alexandrov']
|
11
|
+
spec.email = ['igor.alexandrov@gmail.com']
|
12
12
|
|
13
|
-
spec.summary =
|
14
|
-
spec.description =
|
15
|
-
spec.homepage =
|
16
|
-
spec.license =
|
13
|
+
spec.summary = 'Rails tagging system based on PostgreSQL arrays'
|
14
|
+
spec.description = 'Rails tagging system based on PostgreSQL arrays'
|
15
|
+
spec.homepage = 'https://github.com/jetrockets/metka'
|
16
|
+
spec.license = 'MIT'
|
17
17
|
|
18
18
|
# Specify which files should be added to the gem when it is released.
|
19
19
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
-
spec.files = Dir.chdir(File.expand_path(
|
20
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
21
21
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
22
|
end
|
23
|
-
spec.bindir =
|
23
|
+
spec.bindir = 'exe'
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
-
spec.require_paths = [
|
25
|
+
spec.require_paths = ['lib']
|
26
26
|
|
27
|
-
spec.add_dependency
|
28
|
-
spec.add_dependency
|
27
|
+
spec.add_dependency 'dry-configurable'
|
28
|
+
spec.add_dependency 'rails', '>= 4.2'
|
29
29
|
|
30
|
-
spec.add_development_dependency
|
31
|
-
spec.add_development_dependency
|
32
|
-
spec.add_development_dependency
|
33
|
-
spec.add_development_dependency
|
34
|
-
spec.add_development_dependency
|
35
|
-
spec.add_development_dependency
|
36
|
-
spec.add_development_dependency
|
37
|
-
spec.add_development_dependency
|
38
|
-
spec.add_development_dependency
|
30
|
+
spec.add_development_dependency 'ammeter'
|
31
|
+
spec.add_development_dependency 'bundler'
|
32
|
+
spec.add_development_dependency 'faker'
|
33
|
+
spec.add_development_dependency 'jetrockets-standard', '~> 1.0.1'
|
34
|
+
spec.add_development_dependency 'pg'
|
35
|
+
spec.add_development_dependency 'rake'
|
36
|
+
spec.add_development_dependency 'rspec'
|
37
|
+
spec.add_development_dependency 'rspec-rails'
|
38
|
+
spec.add_development_dependency 'timecop'
|
39
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Igor Alexandrov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-configurable
|
@@ -81,21 +81,21 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: jetrockets-standard
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.0.1
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.0.1
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: pg
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
112
|
+
name: rake
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - ">="
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name: rspec
|
126
|
+
name: rspec
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: rspec-rails
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -171,6 +171,7 @@ executables: []
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
+
- ".github/workflows/continuous-integration-workflow.yml"
|
174
175
|
- ".gitignore"
|
175
176
|
- ".rspec"
|
176
177
|
- ".rubocop.yml"
|
@@ -183,6 +184,8 @@ files:
|
|
183
184
|
- Rakefile
|
184
185
|
- bin/console
|
185
186
|
- bin/setup
|
187
|
+
- lib/generators/metka/strategies/materialized_view/materialized_view_generator.rb
|
188
|
+
- lib/generators/metka/strategies/materialized_view/templates/migration.rb.erb
|
186
189
|
- lib/generators/metka/strategies/view/templates/migration.rb.erb
|
187
190
|
- lib/generators/metka/strategies/view/view_generator.rb
|
188
191
|
- lib/metka.rb
|
@@ -214,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
217
|
- !ruby/object:Gem::Version
|
215
218
|
version: '0'
|
216
219
|
requirements: []
|
217
|
-
rubygems_version: 3.0.
|
220
|
+
rubygems_version: 3.0.6
|
218
221
|
signing_key:
|
219
222
|
specification_version: 4
|
220
223
|
summary: Rails tagging system based on PostgreSQL arrays
|