arql 0.1.2 → 0.1.3
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/Gemfile.lock +14 -3
- data/arql.gemspec +5 -2
- data/lib/arql/app.rb +15 -4
- data/lib/arql/cli.rb +34 -13
- data/lib/arql/commands/info.rb +37 -0
- data/lib/arql/commands/models.rb +27 -0
- data/lib/arql/commands/table.rb +34 -0
- data/lib/arql/commands.rb +6 -0
- data/lib/arql/definition.rb +17 -1
- data/lib/arql/id.rb +59 -0
- data/lib/arql/repl.rb +3 -1
- data/lib/arql/version.rb +1 -1
- data/lib/arql.rb +1 -0
- metadata +53 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61c15f55639c3eb58102f4f03c4c5549edf06433da1037efb62372aad6ce5742
|
4
|
+
data.tar.gz: 41d5e0bac8a8d5fdeedaf2d8e23db093be42fb6f8476de674dc1aece8da6c2dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13a8e6dc10a7953c02e826e7f4bdd4674e41d7a9e436001b92985fcbf280816ebd916d5cd8e4e59368243c9b94e260bf8bddd4f49139d0f1f46b641dac2125d3
|
7
|
+
data.tar.gz: 0f128278d9de51ff5f95a1c1f598159b2aaf383da947a312579b093a9fccd898fa3e4b9275531d9739455faea51329283c82ca2d266e81c78901316dabc97c40
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
arql (0.1.
|
5
|
-
activerecord (~> 6.0.
|
6
|
-
activesupport (~> 6.0.
|
4
|
+
arql (0.1.3)
|
5
|
+
activerecord (~> 6.0.3)
|
6
|
+
activesupport (~> 6.0.3)
|
7
7
|
mysql2 (~> 0.5.3)
|
8
8
|
net-ssh-gateway (~> 2.0.0)
|
9
9
|
pry (~> 0.13.1)
|
10
10
|
pry-byebug (~> 3.9.0)
|
11
|
+
pry-doc (~> 1.1.0)
|
12
|
+
rainbow (~> 3.0.0)
|
13
|
+
terminal-table (~> 1.8.0)
|
11
14
|
|
12
15
|
GEM
|
13
16
|
remote: https://rubygems.org/
|
@@ -40,10 +43,18 @@ GEM
|
|
40
43
|
pry-byebug (3.9.0)
|
41
44
|
byebug (~> 11.0)
|
42
45
|
pry (~> 0.13.0)
|
46
|
+
pry-doc (1.1.0)
|
47
|
+
pry (~> 0.11)
|
48
|
+
yard (~> 0.9.11)
|
49
|
+
rainbow (3.0.0)
|
43
50
|
rake (12.3.3)
|
51
|
+
terminal-table (1.8.0)
|
52
|
+
unicode-display_width (~> 1.1, >= 1.1.1)
|
44
53
|
thread_safe (0.3.6)
|
45
54
|
tzinfo (1.2.7)
|
46
55
|
thread_safe (~> 0.1)
|
56
|
+
unicode-display_width (1.7.0)
|
57
|
+
yard (0.9.25)
|
47
58
|
zeitwerk (2.3.0)
|
48
59
|
|
49
60
|
PLATFORMS
|
data/arql.gemspec
CHANGED
@@ -24,9 +24,12 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.require_paths = ["lib"]
|
25
25
|
|
26
26
|
spec.add_dependency 'mysql2', '~> 0.5.3'
|
27
|
-
spec.add_dependency 'activerecord', '~> 6.0.
|
28
|
-
spec.add_dependency 'activesupport', '~> 6.0.
|
27
|
+
spec.add_dependency 'activerecord', '~> 6.0.3'
|
28
|
+
spec.add_dependency 'activesupport', '~> 6.0.3'
|
29
29
|
spec.add_dependency 'net-ssh-gateway', '~> 2.0.0'
|
30
30
|
spec.add_dependency 'pry', '~> 0.13.1'
|
31
31
|
spec.add_dependency 'pry-byebug', '~> 3.9.0'
|
32
|
+
spec.add_dependency 'pry-doc', '~> 1.1.0'
|
33
|
+
spec.add_dependency 'rainbow', '~> 3.0.0'
|
34
|
+
spec.add_dependency 'terminal-table', '~> 1.8.0'
|
32
35
|
end
|
data/lib/arql/app.rb
CHANGED
@@ -2,6 +2,17 @@ require 'net/ssh/gateway'
|
|
2
2
|
|
3
3
|
module Arql
|
4
4
|
class App
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def config
|
8
|
+
@@effective_config
|
9
|
+
end
|
10
|
+
|
11
|
+
def local_ssh_proxy_port
|
12
|
+
@@local_ssh_proxy_port
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
5
16
|
def initialize(options)
|
6
17
|
@options = options
|
7
18
|
Connection.open(connect_options)
|
@@ -21,11 +32,11 @@ module Arql
|
|
21
32
|
|
22
33
|
def start_ssh_proxy!
|
23
34
|
ssh_config = effective_config[:ssh]
|
24
|
-
@ssh_gateway = Net::SSH::Gateway.new(ssh_config[:host], ssh_config[:user])
|
25
|
-
|
35
|
+
@ssh_gateway = Net::SSH::Gateway.new(ssh_config[:host], ssh_config[:user], ssh_config.slice(:port, :password).symbolize_keys)
|
36
|
+
@@local_ssh_proxy_port = @ssh_gateway.open(effective_config[:host], effective_config[:port], ssh_config[:local_port])
|
26
37
|
{
|
27
38
|
host: '127.0.0.1',
|
28
|
-
port:
|
39
|
+
port: @@local_ssh_proxy_port
|
29
40
|
}
|
30
41
|
end
|
31
42
|
|
@@ -38,7 +49,7 @@ module Arql
|
|
38
49
|
end
|
39
50
|
|
40
51
|
def effective_config
|
41
|
-
|
52
|
+
@@effective_config ||= selected_config.deep_merge(@options.to_h)
|
42
53
|
end
|
43
54
|
|
44
55
|
def run!
|
data/lib/arql/cli.rb
CHANGED
@@ -14,7 +14,8 @@ module Arql
|
|
14
14
|
encoding: 'utf8',
|
15
15
|
pool: 5,
|
16
16
|
config_file: default_config_file,
|
17
|
-
initializer: default_initializer
|
17
|
+
initializer: default_initializer,
|
18
|
+
ssh: {})
|
18
19
|
|
19
20
|
|
20
21
|
OptionParser.new do |opts|
|
@@ -34,7 +35,7 @@ module Arql
|
|
34
35
|
@options.initializer = initializer
|
35
36
|
end
|
36
37
|
|
37
|
-
opts.on('-
|
38
|
+
opts.on('-eENVIRON', '--env=ENVIRON', 'Specify config environment.') do |env|
|
38
39
|
@options.env = env
|
39
40
|
end
|
40
41
|
|
@@ -42,31 +43,31 @@ module Arql
|
|
42
43
|
@options.config_file = config_file
|
43
44
|
end
|
44
45
|
|
45
|
-
opts.on('-
|
46
|
+
opts.on('-aDB_ADAPTER', '--db-adapter=DB_ADAPTER', 'Specify database Adapter, default is mysql2') do |db_adapter|
|
46
47
|
@options.dapter = db_adapter
|
47
48
|
end
|
48
49
|
|
49
|
-
opts.on('-
|
50
|
+
opts.on('-hDB_HOST', '--db-host=DB_HOST', 'Specify database host') do |db_host|
|
50
51
|
@options.host = db_host
|
51
52
|
end
|
52
53
|
|
53
|
-
opts.on('-
|
54
|
+
opts.on('-pDB_PORT', '--db-port=DB_PORT', 'Specify database port') do |db_port|
|
54
55
|
@options.port = db_port.to_i
|
55
56
|
end
|
56
57
|
|
57
|
-
opts.on('-
|
58
|
+
opts.on('-dDB_NAME', '--db-name=DB_NAME', 'Specify database name') do |db_name|
|
58
59
|
@options.database = db_name
|
59
60
|
end
|
60
61
|
|
61
|
-
opts.on('-
|
62
|
+
opts.on('-uDB_USER', '--db-user=DB_USER', 'Specify database user') do |db_user|
|
62
63
|
@options.username = db_user
|
63
64
|
end
|
64
65
|
|
65
|
-
opts.on('-
|
66
|
+
opts.on('-PDB_PASSWORD', '--db-password=DB_PASSWORD', 'Specify database password') do |db_password|
|
66
67
|
@options.password = db_password
|
67
68
|
end
|
68
69
|
|
69
|
-
opts.on('-n', '--db-encoding=DB_ENCODING', 'Specify database encoding, default is
|
70
|
+
opts.on('-n', '--db-encoding=DB_ENCODING', 'Specify database encoding, default is utf8') do |db_encoding|
|
70
71
|
@options.encoding = db_encoding
|
71
72
|
end
|
72
73
|
|
@@ -74,11 +75,31 @@ module Arql
|
|
74
75
|
@options.pool = db_pool
|
75
76
|
end
|
76
77
|
|
77
|
-
opts.on('-
|
78
|
+
opts.on('-HSSH_HOST', '--ssh-host=SSH_HOST', 'Specify SSH host') do |ssh_host|
|
79
|
+
@options.ssh[:host] = ssh_host
|
80
|
+
end
|
81
|
+
|
82
|
+
opts.on('-OSSH_PORT', '--ssh-port=SSH_PORT', 'Specify SSH port') do |ssh_port|
|
83
|
+
@options.ssh[:port] = ssh_port.to_i
|
84
|
+
end
|
85
|
+
|
86
|
+
opts.on('-USSH_USER', '--ssh-user=SSH_USER', 'Specify SSH user') do |ssh_user|
|
87
|
+
@options.ssh[:user] = ssh_user
|
88
|
+
end
|
89
|
+
|
90
|
+
opts.on('-WSSH_PASSWORD', '--ssh-password=SSH_PASSWORD', 'Specify SSH password') do |ssh_password|
|
91
|
+
@options.ssh[:password] = ssh_password
|
92
|
+
end
|
93
|
+
|
94
|
+
opts.on('-LSSH_LOCAL_PORT', '--ssh-local-port=SSH_LOCAL_PORT', 'Specify local SSH proxy port') do |local_port|
|
95
|
+
@options.ssh[:local_port] = local_port.to_i
|
96
|
+
end
|
97
|
+
|
98
|
+
opts.on('-ECODE', '--eval=CODE', 'evaluate CODE') do |code|
|
78
99
|
@options.code = code
|
79
100
|
end
|
80
101
|
|
81
|
-
opts.on('-
|
102
|
+
opts.on('-S', '--show-sql', 'Show SQL on STDOUT') do
|
82
103
|
@options.show_sql = true
|
83
104
|
end
|
84
105
|
|
@@ -86,11 +107,11 @@ module Arql
|
|
86
107
|
@options.write_sql = file
|
87
108
|
end
|
88
109
|
|
89
|
-
opts.on('-
|
110
|
+
opts.on('-AOUTPUT', '--append-sql=OUTPUT', 'Append SQL to OUTPUT file') do |file|
|
90
111
|
@options.append_sql = file
|
91
112
|
end
|
92
113
|
|
93
|
-
opts.on('
|
114
|
+
opts.on('', '--help', 'Prints this help') do
|
94
115
|
puts opts
|
95
116
|
exit
|
96
117
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Arql::Commands
|
2
|
+
module Info
|
3
|
+
class << self
|
4
|
+
def db_info
|
5
|
+
<<~EOF
|
6
|
+
|
7
|
+
Database Connection Information:
|
8
|
+
Host: #{Arql::App.config[:host]}
|
9
|
+
Port: #{Arql::App.config[:port]}
|
10
|
+
Username: #{Arql::App.config[:username]}
|
11
|
+
Password: #{Arql::App.config[:password].gsub(/./, '*')}
|
12
|
+
Database: #{Arql::App.config[:database]}
|
13
|
+
Adapter: #{Arql::App.config[:adapter]}
|
14
|
+
Encoding: #{Arql::App.config[:encoding]}
|
15
|
+
Pool Size: #{Arql::App.config[:pool]}
|
16
|
+
EOF
|
17
|
+
end
|
18
|
+
|
19
|
+
def ssh_info
|
20
|
+
<<~EOF
|
21
|
+
|
22
|
+
SSH Connection Information:
|
23
|
+
Host: #{Arql::App.config[:ssh][:host]}
|
24
|
+
Port: #{Arql::App.config[:ssh][:port]}
|
25
|
+
Username: #{Arql::App.config[:ssh][:user]}
|
26
|
+
Password: #{Arql::App.config[:ssh][:password].gsub(/./, '*')}
|
27
|
+
Local Port: #{Arql::App.local_ssh_proxy_port}
|
28
|
+
EOF
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Pry.commands.block_command 'info' do
|
33
|
+
puts Info::db_info
|
34
|
+
puts Info::ssh_info if Arql::App.config[:ssh].present?
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Arql::Commands
|
4
|
+
module Models
|
5
|
+
class << self
|
6
|
+
def models
|
7
|
+
Terminal::Table.new do |t|
|
8
|
+
t << ['Table Name', 'Model Class', 'Abbr']
|
9
|
+
t << :separator
|
10
|
+
Arql::Definition.models.each do |definition|
|
11
|
+
t << [definition[:table], definition[:model].name, definition[:abbr] || '']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
Pry.commands.block_command 'models' do
|
19
|
+
puts
|
20
|
+
puts Models::models
|
21
|
+
end
|
22
|
+
|
23
|
+
Pry.commands.alias_command 'm', 'models'
|
24
|
+
Pry.commands.alias_command 'l', 'models'
|
25
|
+
Pry.commands.alias_command 'tables', 'models'
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
|
3
|
+
module Arql::Commands
|
4
|
+
module Table
|
5
|
+
class << self
|
6
|
+
def table_info(table_name)
|
7
|
+
Terminal::Table.new do |t|
|
8
|
+
t << ['PK', 'Name', 'SQL Type', 'Ruby Type', 'Limit', 'Precision', 'Scale', 'Default', 'Nullable', 'Comment']
|
9
|
+
t << :separator
|
10
|
+
connection = ::ActiveRecord::Base.connection
|
11
|
+
connection.columns(table_name).each do |column|
|
12
|
+
pk = if column.name == connection.primary_key(table_name)
|
13
|
+
'Y'
|
14
|
+
else
|
15
|
+
''
|
16
|
+
end
|
17
|
+
t << [pk, column.name, column.sql_type,
|
18
|
+
column.sql_type_metadata.type, column.sql_type_metadata.limit || '',
|
19
|
+
column.sql_type_metadata.precision || '', column.sql_type_metadata.scale || '', column.default || '',
|
20
|
+
column.null, column.comment || '']
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
Pry.commands.block_command 'table' do |table_name|
|
28
|
+
puts
|
29
|
+
puts Table::table_info(table_name)
|
30
|
+
end
|
31
|
+
|
32
|
+
Pry.commands.alias_command 't', 'table'
|
33
|
+
end
|
34
|
+
end
|
data/lib/arql/definition.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
module Arql
|
2
2
|
class Definition
|
3
|
+
class << self
|
4
|
+
def models
|
5
|
+
@@models ||= []
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
3
9
|
def initialize
|
10
|
+
@@models = []
|
4
11
|
ActiveRecord::Base.connection.tap do |conn|
|
5
12
|
conn.tables.each do |table_name|
|
6
13
|
conn.primary_key(table_name).tap do |pkey|
|
@@ -14,7 +21,16 @@ module Arql
|
|
14
21
|
end.tap do |clazz|
|
15
22
|
Object.const_set(const_name, clazz).tap do |const|
|
16
23
|
const_name.gsub(/[a-z]*/, '').tap do |abbr|
|
17
|
-
|
24
|
+
unless Object.const_defined?(abbr)
|
25
|
+
Object.const_set abbr, const
|
26
|
+
abbr_const = abbr
|
27
|
+
end
|
28
|
+
|
29
|
+
@@models << {
|
30
|
+
model: const,
|
31
|
+
abbr: abbr_const,
|
32
|
+
table: table_name
|
33
|
+
}
|
18
34
|
end
|
19
35
|
end
|
20
36
|
end
|
data/lib/arql/id.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
module Arql
|
2
|
+
class ID
|
3
|
+
@worker_id_bits = 5
|
4
|
+
@data_center_id_bits = 5
|
5
|
+
@max_worker_id = -1 ^ (-1 << @worker_id_bits)
|
6
|
+
@max_data_center_id = -1 ^ (-1 << @data_center_id_bits)
|
7
|
+
|
8
|
+
@sequence_bits = 12
|
9
|
+
@worker_id_shift = @sequence_bits
|
10
|
+
@data_center_id_shift = @sequence_bits + @worker_id_shift
|
11
|
+
@timestamp_left_shift = @sequence_bits + @worker_id_bits + @data_center_id_bits
|
12
|
+
@sequence_mask = -1 ^ (-1 << @sequence_bits)
|
13
|
+
|
14
|
+
@id_epoch = (Time.new(2018, 1, 1, 0, 0, 0).to_f * 1000).to_i
|
15
|
+
@worker_id = 0
|
16
|
+
@data_center_id = 0
|
17
|
+
@sequence = 0
|
18
|
+
|
19
|
+
@last_timestamp = -1
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def long
|
23
|
+
ts = (Time.now.to_f * 1000).to_i
|
24
|
+
if ts < @last_timestamp
|
25
|
+
raise 'Clock moved backwards.'
|
26
|
+
end
|
27
|
+
|
28
|
+
if ts == @last_timestamp
|
29
|
+
@sequence = (@sequence + 1) & @sequence_mask
|
30
|
+
if (@sequence == 0)
|
31
|
+
ts = til_next_millis(@last_timestamp)
|
32
|
+
end
|
33
|
+
else
|
34
|
+
@sequence = 0
|
35
|
+
end
|
36
|
+
@last_timestamp = ts
|
37
|
+
|
38
|
+
((ts - @id_epoch) << @timestamp_left_shift) | (@data_center_id << @data_center_id_shift) | (@worker_id << @worker_id_shift) | @sequence
|
39
|
+
end
|
40
|
+
|
41
|
+
def uuid
|
42
|
+
require 'securerandom'
|
43
|
+
SecureRandom.uuid.gsub('-', '')
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def til_next_millis(last_timestamp)
|
49
|
+
ts = (Time.now.to_f * 1000).to_i
|
50
|
+
while ts <= last_timestamp
|
51
|
+
ts = (Time.now.to_f * 1000).to_i
|
52
|
+
end
|
53
|
+
ts
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
::ID = Arql::ID
|
data/lib/arql/repl.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'pry'
|
2
2
|
require 'pry-byebug'
|
3
|
+
require 'arql/commands'
|
4
|
+
require 'rainbow'
|
3
5
|
|
4
6
|
module Arql
|
5
7
|
class Repl
|
@@ -29,7 +31,7 @@ module Arql
|
|
29
31
|
else
|
30
32
|
nest_level_prompt = "(#{obj}:#{nest_level})"
|
31
33
|
end
|
32
|
-
"
|
34
|
+
"%s#{nest_level_prompt} %s " % [Rainbow('ARQL').red, Rainbow('❯').green]
|
33
35
|
end]
|
34
36
|
end
|
35
37
|
end
|
data/lib/arql/version.rb
CHANGED
data/lib/arql.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liu Xiang
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 6.0.
|
33
|
+
version: 6.0.3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 6.0.
|
40
|
+
version: 6.0.3
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: activesupport
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 6.0.
|
47
|
+
version: 6.0.3
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 6.0.
|
54
|
+
version: 6.0.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: net-ssh-gateway
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +94,48 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 3.9.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-doc
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.1.0
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.1.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rainbow
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.0.0
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.0.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: terminal-table
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.8.0
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.8.0
|
97
139
|
description: Use ActiveRecord and Pry as your favorite SQL query editor.
|
98
140
|
email:
|
99
141
|
- liuxiang921@gmail.com
|
@@ -116,8 +158,13 @@ files:
|
|
116
158
|
- lib/arql.rb
|
117
159
|
- lib/arql/app.rb
|
118
160
|
- lib/arql/cli.rb
|
161
|
+
- lib/arql/commands.rb
|
162
|
+
- lib/arql/commands/info.rb
|
163
|
+
- lib/arql/commands/models.rb
|
164
|
+
- lib/arql/commands/table.rb
|
119
165
|
- lib/arql/connection.rb
|
120
166
|
- lib/arql/definition.rb
|
167
|
+
- lib/arql/id.rb
|
121
168
|
- lib/arql/multi_io.rb
|
122
169
|
- lib/arql/repl.rb
|
123
170
|
- lib/arql/version.rb
|