arql 0.3.2 → 0.3.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21ead482a62e2bad4589f8756b4c5db0e5d4152d54e08b2707bf3ce1441e24cd
4
- data.tar.gz: d51796aed86a97001c59e927073a8fefdc82c14c5b45a8417db4aed167ab4125
3
+ metadata.gz: 26a222ddbbce9305531742f9b9f160406fe36351aaac3026a1c93879de257e35
4
+ data.tar.gz: f324c816f59dc993fca822d5482f0ee43cd973f1659abcd2f2fa48b7fd80acd7
5
5
  SHA512:
6
- metadata.gz: 8be01074982b47fb01a0992f35e2504379ef51edbc9ad9f29d14f31aeedb0d297542ca7f9f98671a3b5a4a38567858c83a60f2025eed63832dc1951b994e4a3a
7
- data.tar.gz: f66fea7d15fbd6a99e7c84ebe90540d6c86467ed108c94707b07fe081251d1d4e647c43d8577e560eaf7bdfe56c286069a5ca95d5de27ce76a7bf97aa0ea4043
6
+ metadata.gz: 5935a72b159a97a09dbdcfa761ba57b4375c7d78a680569ba8cd88a6f95fb9543b9d70e56d62c0973dc6a99a11347d32f87bce5f8b9ea5335c35f3176b9e5ca4
7
+ data.tar.gz: 84313b888ed601eafdce1b5e1867ca7580058b575e34de9291c489b4e318966ec169bff22c1d070960f3d1cf55020e8930b2212d78300a331ce122ccc868c87e
data/.solargraph.yml ADDED
@@ -0,0 +1,10 @@
1
+ require:
2
+ - actioncable
3
+ - actionmailer
4
+ - actionpack
5
+ - actionview
6
+ - activejob
7
+ - activemodel
8
+ - activerecord
9
+ - activestorage
10
+ - activesupport
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- arql (0.3.2)
4
+ arql (0.3.6)
5
5
  activerecord (>= 6.0.3, < 6.2.0)
6
6
  activesupport (~> 6.0.3)
7
7
  caxlsx (~> 3.0.2)
@@ -10,7 +10,7 @@ PATH
10
10
  net-ssh-gateway (~> 2.0.0)
11
11
  pry (~> 0.13.1)
12
12
  pry-byebug (~> 3.9.0)
13
- pry-doc (~> 1.2.0)
13
+ pry-doc (>= 1.0.0)
14
14
  rainbow (~> 3.0.0)
15
15
  roo (~> 2.8.3)
16
16
  sqlite3 (~> 1.4)
@@ -40,7 +40,7 @@ GEM
40
40
  coderay (1.1.3)
41
41
  composite_primary_keys (12.0.10)
42
42
  activerecord (~> 6.0.0)
43
- concurrent-ruby (1.1.9)
43
+ concurrent-ruby (1.1.10)
44
44
  htmlentities (4.3.4)
45
45
  i18n (1.8.11)
46
46
  concurrent-ruby (~> 1.0)
@@ -48,14 +48,12 @@ GEM
48
48
  mimemagic (0.4.3)
49
49
  nokogiri (~> 1)
50
50
  rake
51
- mini_portile2 (2.6.1)
52
51
  minitest (5.15.0)
53
52
  mysql2 (0.5.3)
54
53
  net-ssh (6.1.0)
55
54
  net-ssh-gateway (2.0.0)
56
55
  net-ssh (>= 4.0.0)
57
- nokogiri (1.12.5)
58
- mini_portile2 (~> 2.6.1)
56
+ nokogiri (1.13.0-x86_64-darwin)
59
57
  racc (~> 1.4)
60
58
  pry (0.13.1)
61
59
  coderay (~> 1.1)
@@ -63,7 +61,7 @@ GEM
63
61
  pry-byebug (3.9.0)
64
62
  byebug (~> 11.0)
65
63
  pry (~> 0.13.0)
66
- pry-doc (1.2.0)
64
+ pry-doc (1.3.0)
67
65
  pry (~> 0.11)
68
66
  yard (~> 0.9.11)
69
67
  racc (1.6.0)
@@ -84,7 +82,7 @@ GEM
84
82
  webrick (1.7.0)
85
83
  yard (0.9.27)
86
84
  webrick (~> 1.7.0)
87
- zeitwerk (2.5.1)
85
+ zeitwerk (2.5.3)
88
86
 
89
87
  PLATFORMS
90
88
  ruby
data/arql.gemspec CHANGED
@@ -34,7 +34,7 @@ Gem::Specification.new do |spec|
34
34
  spec.add_dependency 'net-ssh-gateway', '~> 2.0.0'
35
35
  spec.add_dependency 'pry', '~> 0.13.1'
36
36
  spec.add_dependency 'pry-byebug', '~> 3.9.0'
37
- spec.add_dependency 'pry-doc', '~> 1.2.0'
37
+ spec.add_dependency 'pry-doc', '>= 1.0.0'
38
38
  spec.add_dependency 'rainbow', '~> 3.0.0'
39
39
  spec.add_dependency 'terminal-table', '~> 1.8.0'
40
40
  spec.add_dependency 'table_print', '~> 1.5.6'
@@ -0,0 +1,33 @@
1
+ module Arql::Commands
2
+ module Sandbox
3
+ class << self
4
+ attr_accessor :enabled
5
+
6
+ @sandbox_callback = proc do
7
+ begin_transaction(joinable: false)
8
+ end
9
+
10
+ def enter
11
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.set_callback(:checkout, :after, &@sandbox_callback)
12
+ ActiveRecord::Base.connection.begin_transaction(joinable: false)
13
+ @enabled = true
14
+ end
15
+
16
+ def quit
17
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.skip_callback(:checkout, :after, &@sandbox_callback)
18
+ @enabled = false
19
+
20
+ puts "begin_transaction callbacks removed."
21
+ puts "You still have open %d transactions open, don't forget commit or rollback them." % ActiveRecord::Base.connection.open_transactions if ActiveRecord::Base.connection.open_transactions > 0
22
+ end
23
+ end
24
+
25
+ Pry.commands.block_command 'sandbox-enter' do
26
+ Sandbox.enter
27
+ end
28
+
29
+ Pry.commands.block_command 'sandbox-quit' do
30
+ Sandbox.quit
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ require 'arql/vd'
2
+
3
+ module Arql::Commands
4
+ module VD
5
+ class << self
6
+ def get_table_name(name)
7
+ name = name.to_s
8
+ return name if name =~ /^[a-z]/
9
+ if Object.const_defined?(name)
10
+ klass = Object.const_get(name)
11
+ return klass.table_name if klass < ActiveRecord::Base
12
+ end
13
+ name
14
+ end
15
+
16
+ def table_info_vd(table_name)
17
+ Arql::VD.new do |vd|
18
+ table_info(table_name).each { |row| vd << row }
19
+ end
20
+ end
21
+
22
+ def table_info(table_name)
23
+ t = []
24
+ t << ['PK', 'Name', 'SQL Type', 'Ruby Type', 'Limit', 'Precision', 'Scale', 'Default', 'Nullable', 'Comment']
25
+ connection = ::ActiveRecord::Base.connection
26
+ connection.columns(table_name).each do |column|
27
+ pk = if [connection.primary_key(table_name)].flatten.include?(column.name)
28
+ 'Y'
29
+ else
30
+ ''
31
+ end
32
+ t << [pk, column.name, column.sql_type,
33
+ column.sql_type_metadata.type, column.sql_type_metadata.limit || '',
34
+ column.sql_type_metadata.precision || '', column.sql_type_metadata.scale || '', column.default || '',
35
+ column.null, column.comment || '']
36
+ end
37
+ t
38
+ end
39
+ end
40
+
41
+ Pry.commands.block_command 'vd' do |name|
42
+ table_name = VD::get_table_name(name)
43
+ VD::table_info_vd(table_name)
44
+ end
45
+ end
46
+ end
data/lib/arql/commands.rb CHANGED
@@ -4,6 +4,8 @@ require 'arql/commands/table'
4
4
  require 'arql/commands/reconnect'
5
5
  require 'arql/commands/redefine'
6
6
  require 'arql/commands/show_sql'
7
+ require 'arql/commands/sandbox'
8
+ require 'arql/commands/vd'
7
9
 
8
10
  module Arql::Commands
9
11
  end
@@ -1,4 +1,5 @@
1
1
  require 'arql/concerns'
2
+ require 'arql/vd'
2
3
  module Arql
3
4
  module Extension
4
5
  extend ActiveSupport::Concern
@@ -9,6 +10,15 @@ module Arql
9
10
  }
10
11
  end
11
12
 
13
+ def vd
14
+ VD.new do |vd|
15
+ vd << ['Attribute Name', 'Attribute Value', 'SQL Type', 'Comment']
16
+ self.class.connection.columns(self.class.table_name).each do |column|
17
+ vd << [column.name, read_attribute(column.name), column.sql_type, column.comment || '']
18
+ end
19
+ end
20
+ end
21
+
12
22
  def v
13
23
  t = []
14
24
  t << ['Attribute Name', 'Attribute Value', 'SQL Type', 'Comment']
@@ -49,6 +59,12 @@ module Arql
49
59
  puts Commands::Table::table_info_table(table_name)
50
60
  end
51
61
 
62
+ def vd
63
+ table_name = Commands::Table::get_table_name(name)
64
+ Commands::VD::table_info_vd(table_name)
65
+ nil
66
+ end
67
+
52
68
  def v
53
69
  table_name = Commands::Table::get_table_name(name)
54
70
  Commands::Table::table_info(table_name)
@@ -229,6 +245,10 @@ module Arql
229
245
  records.t(*attrs, **options)
230
246
  end
231
247
 
248
+ def vd(*attrs, **options)
249
+ records.vd(*attrs, **options)
250
+ end
251
+
232
252
  def v
233
253
  records.v
234
254
  end
@@ -1,3 +1,5 @@
1
+ require 'arql/vd'
2
+
1
3
  class Array
2
4
  def to_insert_sql(batch_size=500)
3
5
  raise 'All element should be an ActiveRecord instance object' unless all? { |e| e.is_a?(ActiveRecord::Base) }
@@ -48,6 +50,33 @@ class Array
48
50
  end
49
51
  end
50
52
 
53
+ def vd(*attrs, **options)
54
+ if (attrs.present? || options.present? && options[:except]) && present? && first.is_a?(ActiveRecord::Base)
55
+ column_names = first.attribute_names.map(&:to_sym)
56
+ attrs = attrs.flat_map { |e| e.is_a?(Regexp) ? column_names.grep(e) : e }.uniq
57
+ if options.present? && options[:except]
58
+ attrs = column_names if attrs.empty?
59
+ if options[:except].is_a?(Regexp)
60
+ attrs.reject! { |e| e =~ options[:except] }
61
+ else
62
+ attrs -= [options[:except]].flatten
63
+ end
64
+ end
65
+
66
+ Arql::VD.new do |vd|
67
+ vd << attrs
68
+ each do |e|
69
+ vd << e.attributes.values_at(*attrs.map(&:to_s))
70
+ end
71
+ end
72
+ else
73
+ Arql::VD.new do |vd|
74
+ v.each { |row| vd << row if row }
75
+ end
76
+ end
77
+ nil
78
+ end
79
+
51
80
  def v
52
81
  return self unless present?
53
82
  t = []
data/lib/arql/multi_io.rb CHANGED
@@ -5,7 +5,14 @@ module Arql
5
5
  end
6
6
 
7
7
  def write(*args)
8
- @targets.each {|t| t.write(*args)}
8
+ @targets.each do |t|
9
+ if t.isatty
10
+ t.write(*args)
11
+ else
12
+ t.write(*(args.map { |str| str.gsub(/\e\[(\d+)m/, '')}))
13
+ end
14
+ t.flush
15
+ end
9
16
  end
10
17
 
11
18
  def close
data/lib/arql/repl.rb CHANGED
@@ -35,7 +35,12 @@ module Arql
35
35
  "(#{obj}:#{nest_level})"
36
36
  end
37
37
  end
38
- "%s#{Rainbow('@').green}%s#{nest_level_prompt} [%d] %s " % [Rainbow('ARQL').red, Rainbow(App.prompt).yellow, pry_instance.input_ring.count, Rainbow('❯').green]
38
+ if Arql::Commands::Sandbox.enabled
39
+ sandbox_indicator = ' [%s] ' % Rainbow('sandbox').green.bright
40
+ else
41
+ sandbox_indicator = ''
42
+ end
43
+ "%s#{Rainbow('@').green}%s%s#{nest_level_prompt} [%d] %s " % [Rainbow('ARQL').red, Rainbow(App.prompt).yellow, sandbox_indicator, pry_instance.input_ring.count, Rainbow('❯').green]
39
44
  end]
40
45
  end
41
46
  end
data/lib/arql/vd.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'csv'
2
+
3
+ module Arql
4
+ class VD
5
+ COMMAND = 'vd'
6
+
7
+ attr_accessor :rows
8
+
9
+ def initialize
10
+ return unless check_command_installation
11
+ @rows = []
12
+ yield self
13
+ command = "#{COMMAND} -f csv"
14
+ IO.popen(command, 'w+') do |io|
15
+ io.puts(csv)
16
+ io.close_write
17
+ end
18
+ end
19
+
20
+ def <<(row)
21
+ rows << row
22
+ end
23
+
24
+ def csv
25
+ CSV.generate do |csv|
26
+ rows.each do |row|
27
+ csv << row
28
+ end
29
+ end
30
+ end
31
+
32
+ def check_command_installation
33
+ `which #{COMMAND}`
34
+ if $?.exitstatus != 0
35
+ puts "Please install vd (visidata) command, see: https://www.visidata.org/"
36
+ else
37
+ true
38
+ end
39
+ end
40
+ end
41
+ end
data/lib/arql/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Arql
2
- VERSION = "0.3.2"
2
+ VERSION = "0.3.6"
3
3
  end
data/lib/arql.rb CHANGED
@@ -11,6 +11,7 @@ require "arql/ssh_proxy"
11
11
  require "arql/app"
12
12
  require "arql/cli"
13
13
  require "arql/mysqldump"
14
+ require "arql/vd"
14
15
 
15
16
  module Arql
16
17
  end
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.3.2
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Xiang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-27 00:00:00.000000000 Z
11
+ date: 2022-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -132,16 +132,16 @@ dependencies:
132
132
  name: pry-doc
133
133
  requirement: !ruby/object:Gem::Requirement
134
134
  requirements:
135
- - - "~>"
135
+ - - ">="
136
136
  - !ruby/object:Gem::Version
137
- version: 1.2.0
137
+ version: 1.0.0
138
138
  type: :runtime
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - "~>"
142
+ - - ">="
143
143
  - !ruby/object:Gem::Version
144
- version: 1.2.0
144
+ version: 1.0.0
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: rainbow
147
147
  requirement: !ruby/object:Gem::Requirement
@@ -222,6 +222,7 @@ extensions: []
222
222
  extra_rdoc_files: []
223
223
  files:
224
224
  - ".gitignore"
225
+ - ".solargraph.yml"
225
226
  - CODE_OF_CONDUCT.md
226
227
  - Gemfile
227
228
  - Gemfile.lock
@@ -241,8 +242,10 @@ files:
241
242
  - lib/arql/commands/models.rb
242
243
  - lib/arql/commands/reconnect.rb
243
244
  - lib/arql/commands/redefine.rb
245
+ - lib/arql/commands/sandbox.rb
244
246
  - lib/arql/commands/show_sql.rb
245
247
  - lib/arql/commands/table.rb
248
+ - lib/arql/commands/vd.rb
246
249
  - lib/arql/concerns.rb
247
250
  - lib/arql/concerns/global_data_definition.rb
248
251
  - lib/arql/concerns/table_data_definition.rb
@@ -261,6 +264,7 @@ files:
261
264
  - lib/arql/repl.rb
262
265
  - lib/arql/ssh_proxy.rb
263
266
  - lib/arql/ssh_proxy_patch.rb
267
+ - lib/arql/vd.rb
264
268
  - lib/arql/version.rb
265
269
  homepage: https://github.com/lululau/arql
266
270
  licenses: