active_record-pg_generate_series 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/.codeclimate.yml +16 -0
- data/.rubocop.yml +63 -0
- data/.travis.yml +8 -3
- data/CHANGELOG.md +14 -0
- data/Gemfile +5 -1
- data/README.md +4 -0
- data/Rakefile +5 -3
- data/active_record-pg_generate_series.gemspec +3 -3
- data/bin/benchmark.rb +6 -4
- data/bin/db_setup.rb +1 -1
- data/connect_db.rb +1 -1
- data/gemfiles/active_record_32.gemfile +5 -0
- data/gemfiles/active_record_42.gemfile +4 -0
- data/gemfiles/active_record_50.gemfile +4 -0
- data/lib/active_record/pg_generate_series/extension.rb +1 -0
- data/lib/active_record/pg_generate_series/sql_builder.rb +3 -1
- data/lib/active_record/pg_generate_series/version.rb +1 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9174923b9800d2bbe387a990d821623dd588fb2
|
4
|
+
data.tar.gz: cf2171a8c525c9cf5bc0034e8572025037b755fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddc6aee50a0941fd1eaadb7e0920df4093743cbe253f451c2cab733f05214989ba9cebaac830e630a473f28fbb51fa935e613848e3a1ab4e786408de21486b8d
|
7
|
+
data.tar.gz: e8101995e0f940943e0f5993c46e88cb5e4516c48c8eef26c97322cf40b35da60961cab0026d6b4f579b7412c198e259b384abe1b35d30ca449f445c0a5a37a5
|
data/.codeclimate.yml
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
AllCops:
|
2
|
+
DisplayCopNames: true
|
3
|
+
|
4
|
+
##################### Linting #############################
|
5
|
+
|
6
|
+
##################### Metrics #############################
|
7
|
+
|
8
|
+
Metrics/AbcSize:
|
9
|
+
Max: 20
|
10
|
+
|
11
|
+
Metrics/BlockLength:
|
12
|
+
Exclude:
|
13
|
+
- 'spec/**/*'
|
14
|
+
- '*.gemspec'
|
15
|
+
|
16
|
+
Metrics/LineLength:
|
17
|
+
Max: 120
|
18
|
+
|
19
|
+
Metrics/MethodLength:
|
20
|
+
Max: 30
|
21
|
+
|
22
|
+
Metrics/ParameterLists:
|
23
|
+
CountKeywordArgs: false
|
24
|
+
|
25
|
+
##################### Performance #############################
|
26
|
+
|
27
|
+
Performance/FlatMap:
|
28
|
+
EnabledForFlattenWithoutParams: false
|
29
|
+
|
30
|
+
Performance/RedundantBlockCall:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
##################### Rails ##################################
|
34
|
+
|
35
|
+
Rails/SafeNavigation:
|
36
|
+
ConvertTry: true
|
37
|
+
|
38
|
+
Rails/SaveBang:
|
39
|
+
Enabled: true
|
40
|
+
|
41
|
+
##################### Security ##################################
|
42
|
+
|
43
|
+
Security/YAMLLoad:
|
44
|
+
Enabled: false
|
45
|
+
|
46
|
+
##################### Style #################################
|
47
|
+
|
48
|
+
Style/AutoResourceCleanup:
|
49
|
+
Enabled: true
|
50
|
+
|
51
|
+
Style/Encoding:
|
52
|
+
Enabled: true
|
53
|
+
EnforcedStyle: never
|
54
|
+
|
55
|
+
Style/IfUnlessModifier:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
Style/MultilineMethodCallIndentation:
|
59
|
+
Enabled: false
|
60
|
+
|
61
|
+
##################### Bundler #################################
|
62
|
+
Bundler/OrderedGems:
|
63
|
+
Enabled: false
|
data/.travis.yml
CHANGED
@@ -16,9 +16,14 @@ sudo: false
|
|
16
16
|
services:
|
17
17
|
- postgresql
|
18
18
|
|
19
|
-
before_install:
|
20
|
-
|
21
|
-
|
19
|
+
before_install:
|
20
|
+
- 'gem update bundler --no-document'
|
21
|
+
before_script:
|
22
|
+
- 'bundle exec ruby bin/db_setup.rb'
|
23
|
+
script:
|
24
|
+
- 'bundle exec rspec'
|
25
|
+
after_success:
|
26
|
+
- 'bundle exec codeclimate-test-reporter'
|
22
27
|
|
23
28
|
cache: bundler
|
24
29
|
|
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# ActiveRecord::PgGenerateSeries
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/active_record-pg_generate_series)
|
3
4
|
[](https://travis-ci.org/ryu39/active_record-pg_generate_series)
|
5
|
+
[](https://codeclimate.com/github/ryu39/active_record-pg_generate_series)
|
6
|
+
[](https://codeclimate.com/github/ryu39/active_record-pg_generate_series/coverage)
|
7
|
+
[](https://codeclimate.com/github/ryu39/active_record-pg_generate_series)
|
4
8
|
|
5
9
|
This gem adds a feature which inserts records using PostgreSQL [GENERATE_SERIES](https://www.postgresql.org/docs/current/static/functions-srf.html) function to ActiveRecord.
|
6
10
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'rubocop/rake_task'
|
3
4
|
|
4
5
|
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
RuboCop::RakeTask.new(:spec)
|
5
7
|
|
6
|
-
task :
|
8
|
+
task default: :spec
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
lib = File.expand_path('../lib', __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'active_record/pg_generate_series/version'
|
@@ -9,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
9
8
|
spec.authors = ['ryu39']
|
10
9
|
spec.email = ['dev.ryu39@gmail.com']
|
11
10
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description = <<EOS.
|
11
|
+
spec.summary = 'Add a feature which inserts records using PostgreSQL generate_series function to ActiveRecord'
|
12
|
+
spec.description = <<EOS.tr("\n", ' ')
|
14
13
|
This gem adds a feature which inserts records using PostgreSQL generate_series function to ActiveRecord.
|
15
14
|
Insertion using generate_series function is very fast, so it is useful
|
16
15
|
when you want to insert simple but many and many record, e.g. prepare for performance test.
|
@@ -30,6 +29,7 @@ EOS
|
|
30
29
|
spec.add_development_dependency 'bundler', '~> 1.13'
|
31
30
|
spec.add_development_dependency 'rake', '~> 10.0'
|
32
31
|
spec.add_development_dependency 'rspec', '>= 3.5'
|
32
|
+
spec.add_development_dependency 'rubocop'
|
33
33
|
spec.add_development_dependency 'pry'
|
34
34
|
spec.add_development_dependency 'pg'
|
35
35
|
spec.add_development_dependency 'activerecord-import'
|
data/bin/benchmark.rb
CHANGED
@@ -10,21 +10,23 @@ require 'benchmark'
|
|
10
10
|
|
11
11
|
RECORD_NUM = 10_000
|
12
12
|
|
13
|
+
def build_user(num)
|
14
|
+
User.new(name: "name#{num + 1}", age: num + 1, birth_date: Date.today + num + 1)
|
15
|
+
end
|
16
|
+
|
13
17
|
User.delete_all
|
14
18
|
|
15
19
|
GC.disable
|
16
20
|
Benchmark.bm(36) do |x|
|
17
21
|
x.report('iteration of ActiveRecord::Base#save') do
|
18
22
|
RECORD_NUM.times do |i|
|
19
|
-
user =
|
23
|
+
user = build_user(i)
|
20
24
|
user.save(validate: false)
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
24
28
|
x.report('bulk insert(activerecord-import)') do
|
25
|
-
users = RECORD_NUM
|
26
|
-
User.new(name: "name#{i + 1}", age: i + 1, birth_date: Date.today + i + 1)
|
27
|
-
end
|
29
|
+
users = Array.new(RECORD_NUM) { |i| build_user(i) }
|
28
30
|
User.import(users)
|
29
31
|
end
|
30
32
|
|
data/bin/db_setup.rb
CHANGED
@@ -4,7 +4,7 @@ require 'yaml'
|
|
4
4
|
require 'active_record'
|
5
5
|
|
6
6
|
config_file = File.expand_path('../../database.yml', __FILE__)
|
7
|
-
config = YAML
|
7
|
+
config = YAML.load(ERB.new(IO.read(config_file)).result)['db']
|
8
8
|
|
9
9
|
ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres'))
|
10
10
|
ActiveRecord::Base.connection.drop_database(config['database'])
|
data/connect_db.rb
CHANGED
@@ -4,6 +4,6 @@ require 'yaml'
|
|
4
4
|
require 'active_record'
|
5
5
|
|
6
6
|
config_file = File.expand_path('../database.yml', __FILE__)
|
7
|
-
config = YAML
|
7
|
+
config = YAML.load(ERB.new(IO.read(config_file)).result)['db']
|
8
8
|
|
9
9
|
ActiveRecord::Base.establish_connection(config)
|
@@ -3,6 +3,7 @@ require 'forwardable'
|
|
3
3
|
|
4
4
|
module ActiveRecord
|
5
5
|
module PgGenerateSeries
|
6
|
+
# SQL builder using PostgreSQL GENERATE_SERIES function.
|
6
7
|
class SqlBuilder
|
7
8
|
extend Forwardable
|
8
9
|
def_delegators :@ar_class, :connection, :sanitize, :quoted_table_name
|
@@ -27,7 +28,7 @@ module ActiveRecord
|
|
27
28
|
INSERT INTO
|
28
29
|
#{quoted_table_name} (#{@select_items.keys.map { |col| connection.quote_column_name(col) }.join(',')})
|
29
30
|
SELECT
|
30
|
-
#{@select_items.map { |
|
31
|
+
#{@select_items.values.map { |val| val.is_a?(Raw) ? val.str : sanitize(val) }.join(",\n ")}
|
31
32
|
FROM
|
32
33
|
GENERATE_SERIES(#{@first.to_i}, #{@last.to_i}, #{@step.to_i}) AS #{connection.quote_column_name(@seq_name)}
|
33
34
|
;
|
@@ -36,6 +37,7 @@ EOS
|
|
36
37
|
|
37
38
|
private
|
38
39
|
|
40
|
+
# no doc
|
39
41
|
class Raw
|
40
42
|
attr_reader :str
|
41
43
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record-pg_generate_series
|
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
|
- ryu39
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: pry
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,9 +132,12 @@ executables: []
|
|
118
132
|
extensions: []
|
119
133
|
extra_rdoc_files: []
|
120
134
|
files:
|
135
|
+
- ".codeclimate.yml"
|
121
136
|
- ".gitignore"
|
122
137
|
- ".rspec"
|
138
|
+
- ".rubocop.yml"
|
123
139
|
- ".travis.yml"
|
140
|
+
- CHANGELOG.md
|
124
141
|
- CODE_OF_CONDUCT.md
|
125
142
|
- Gemfile
|
126
143
|
- LICENSE.txt
|