pg_tags_on 0.1.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -2
- data/LICENSE.txt +1 -1
- data/README.md +30 -22
- data/lib/pg_tags_on/active_record/base.rb +1 -1
- data/lib/pg_tags_on/repositories/array_jsonb_repository.rb +47 -24
- data/lib/pg_tags_on/repositories/array_repository.rb +31 -18
- data/lib/pg_tags_on/repositories/base_repository.rb +39 -4
- data/lib/pg_tags_on/validations/validator.rb +4 -4
- data/lib/pg_tags_on/version.rb +1 -1
- metadata +21 -137
- data/.gitignore +0 -11
- data/.rspec +0 -3
- data/.rubocop.yml +0 -9
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -91
- data/Rakefile +0 -16
- data/bin/console +0 -16
- data/bin/setup +0 -8
- data/pg_tags_on.gemspec +0 -38
- data/spec/array_integers/records_spec.rb +0 -47
- data/spec/array_integers/tag_ops_spec.rb +0 -65
- data/spec/array_integers/taggings_spec.rb +0 -27
- data/spec/array_integers/tags_spec.rb +0 -53
- data/spec/array_jsonb/records_spec.rb +0 -89
- data/spec/array_jsonb/tag_ops_spec.rb +0 -115
- data/spec/array_jsonb/taggings_spec.rb +0 -27
- data/spec/array_jsonb/tags_spec.rb +0 -41
- data/spec/array_strings/records_spec.rb +0 -61
- data/spec/array_strings/tag_ops_spec.rb +0 -65
- data/spec/array_strings/taggings_spec.rb +0 -27
- data/spec/array_strings/tags_spec.rb +0 -54
- data/spec/config/database.yml +0 -6
- data/spec/configuration_spec.rb +0 -48
- data/spec/helpers/database_helpers.rb +0 -46
- data/spec/spec_helper.rb +0 -39
- data/spec/support/factory.rb +0 -47
- data/spec/tags_query_spec.rb +0 -31
- data/spec/validator_spec.rb +0 -40
- data/tasks/benchmark.rake +0 -58
data/spec/tags_query_spec.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe 'TagsQuery' do
|
4
|
-
it 'accept String arguments' do
|
5
|
-
query = PgTagsOn::TagsQuery.all('a')
|
6
|
-
|
7
|
-
expect(query.value).to be_eql('a')
|
8
|
-
expect(query.predicate).to be_eql('all')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'accept Integer arguments' do
|
12
|
-
query = PgTagsOn::TagsQuery.all(1)
|
13
|
-
|
14
|
-
expect(query.value).to be_eql(1)
|
15
|
-
expect(query.predicate).to be_eql('all')
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'accept Array arguments' do
|
19
|
-
query = PgTagsOn::TagsQuery.all(%w[a b c])
|
20
|
-
|
21
|
-
expect(query.value).to be_eql(%w[a b c])
|
22
|
-
expect(query.predicate).to be_eql('all')
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'accept arguments list' do
|
26
|
-
query = PgTagsOn::TagsQuery.all('a', 'b', 'c')
|
27
|
-
|
28
|
-
expect(query.value).to be_eql(%w[a b c])
|
29
|
-
expect(query.predicate).to be_eql('all')
|
30
|
-
end
|
31
|
-
end
|
data/spec/validator_spec.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RSpec.describe 'Validator' do
|
4
|
-
before(:all) do
|
5
|
-
Entity.pg_tags_on :tags_str, limit: 2, tag_length: 3
|
6
|
-
Entity.pg_tags_on :tags_jsonb, key: :name, limit: 2, tag_length: 3
|
7
|
-
end
|
8
|
-
|
9
|
-
context 'string tags' do
|
10
|
-
it 'add errors if number of tags exceeds limit' do
|
11
|
-
entity = Entity.new(tags_str: %w[a b c])
|
12
|
-
entity.valid?
|
13
|
-
|
14
|
-
expect(entity.errors.full_messages.first).to include('size exceeded')
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'add errors if tag length exceeds limit' do
|
18
|
-
entity = Entity.new(tags_str: %w[a x123])
|
19
|
-
entity.valid?
|
20
|
-
|
21
|
-
expect(entity.errors.full_messages.first).to include('length exceeded')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context 'jsonb tags' do
|
26
|
-
it 'add errors if number of tags exceeds limit' do
|
27
|
-
entity = Entity.new(tags_jsonb: [{ name: 'a' }, { name: 'b' }, { name: 'c' }])
|
28
|
-
entity.valid?
|
29
|
-
|
30
|
-
expect(entity.errors.full_messages.first).to include('size exceeded')
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'add errors if tag length exceeds limit' do
|
34
|
-
entity = Entity.new(tags_jsonb: [{ name: 'x123' }])
|
35
|
-
entity.valid?
|
36
|
-
|
37
|
-
expect(entity.errors.full_messages.first).to include('length exceeded')
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
data/tasks/benchmark.rake
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'benchmark'
|
4
|
-
require './spec/helpers/database_helpers'
|
5
|
-
require 'lib/pg_tags_on'
|
6
|
-
require 'pry'
|
7
|
-
|
8
|
-
namespace :pg_tags_on do
|
9
|
-
task :benchmark do
|
10
|
-
DatabaseHelpers.establish_connection
|
11
|
-
DatabaseHelpers.load_schema
|
12
|
-
|
13
|
-
Entity = Class.new(::ActiveRecord::Base)
|
14
|
-
Entity.pg_tags_on :tags_int
|
15
|
-
Entity.pg_tags_on :tags_str
|
16
|
-
Entity.pg_tags_on :tags_jsonb, key: :name
|
17
|
-
|
18
|
-
puts 'How many records to generate? (default 10_000)'
|
19
|
-
records = STDIN.gets.chomp.to_i
|
20
|
-
puts 'Minimum tags per record (default 1):'
|
21
|
-
min_tags = STDIN.gets.chomp.to_i
|
22
|
-
puts 'Maximum tags per record (default 10):'
|
23
|
-
max_tags = STDIN.gets.chomp.to_i
|
24
|
-
|
25
|
-
records = 10_000 if records.zero?
|
26
|
-
min_tags = 1 if min_tags.zero?
|
27
|
-
max_tags = 10 if max_tags.zero?
|
28
|
-
|
29
|
-
data = []
|
30
|
-
str_tags = Array.new(100) { Faker::Name.first_name }
|
31
|
-
|
32
|
-
puts "Generating #{records} records..."
|
33
|
-
records.times do
|
34
|
-
tags_count = rand(min_tags..max_tags)
|
35
|
-
|
36
|
-
data << {
|
37
|
-
tags_int: Array.new(tags_count) { rand(1..100) },
|
38
|
-
tags_str: str_tags.sample(tags_count),
|
39
|
-
tags_jsonb: Array.new(tags_count) { { name: str_tags.sample } }
|
40
|
-
}
|
41
|
-
|
42
|
-
if data.size == 5_000
|
43
|
-
Entity.insert_all data
|
44
|
-
data = []
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
Entity.insert_all(data) if data.present?
|
49
|
-
puts 'Done'
|
50
|
-
|
51
|
-
puts "\n\n* character varying[]\n\n"
|
52
|
-
PgTagsOn::Benchmark.new(Entity, :tags_str).call
|
53
|
-
puts "\n\n* integer[]\n\n"
|
54
|
-
PgTagsOn::Benchmark.new(Entity, :tags_int).call
|
55
|
-
puts "\n\n* jsonb[]\n\n"
|
56
|
-
PgTagsOn::Benchmark.new(Entity, :tags_jsonb).call
|
57
|
-
end
|
58
|
-
end
|