sqlui 0.1.48 → 0.1.49

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddbafc23478bb1d27023d516dda3ef412306c68e3084aa9c7e186c7372ff18ad
4
- data.tar.gz: 5638fa4d6a7e30ecce0d89505953e2fc2d9f18e19e928c41f7c1bde4a986aba9
3
+ metadata.gz: ae60c3a8d2bb051b87f0e10ed67b3c5e5c6360ecd298b5176a17a7a5f66796d8
4
+ data.tar.gz: 4ee88fae0167dc7dd8958384d7b2492df3944368238453d729244d91232ebf35
5
5
  SHA512:
6
- metadata.gz: c99d375bf14a2f892b1a7c3e85ec576ebdc749e432e56f7e993c8437c89e8a19af96189a501b7a80e08e3b6f5743eeecd57dbfa94b056570ba1da0274d163121
7
- data.tar.gz: 3fab12e8be52afbd23f317b16c48eed4d095f293f4bab02a9c4c515ea91d501fd027fa71b1f008831d86fa00af38fb4376ba6c3f891ba5a4c7aa7f0b39690e2c
6
+ metadata.gz: b809f370ad688d9b54d50ff1ccf4dd703dea5af4344f61577220da2b3f4d7536265d8b8e03613158b81fdec4d86ca10dde35f89623cb114fde2b345a5df0108b
7
+ data.tar.gz: 70324412047c434e03c39e3676cd616da4f6a29c0c7767805fe4073d15e59dd1f28d994253921e18457c469154661081a4570cfec63100cfb9dd2d3ae1aec242
data/.version CHANGED
@@ -1 +1 @@
1
- 0.1.48
1
+ 0.1.49
data/app/args.rb CHANGED
@@ -4,7 +4,7 @@
4
4
  class Args
5
5
  def self.fetch_non_empty_string(hash, key)
6
6
  value = fetch_non_nil(hash, key, String)
7
- raise ArgumentError, "required parameter #{key} empty" if value.strip.empty?
7
+ raise ArgumentError, "parameter #{key} empty" if value.strip.empty?
8
8
 
9
9
  value
10
10
  end
@@ -15,7 +15,7 @@ class Args
15
15
 
16
16
  def self.fetch_non_empty_hash(hash, key)
17
17
  value = fetch_non_nil(hash, key, Hash)
18
- raise ArgumentError, "required parameter #{key} empty" if value.empty?
18
+ raise ArgumentError, "parameter #{key} empty" if value.empty?
19
19
 
20
20
  value
21
21
  end
@@ -29,9 +29,9 @@ class Args
29
29
  end
30
30
 
31
31
  def self.fetch_non_nil(hash, key, *classes)
32
- raise ArgumentError, "required parameter #{key} missing" unless hash.key?(key)
32
+ raise ArgumentError, "parameter #{key} missing" unless hash.key?(key)
33
33
 
34
- raise ArgumentError, "required parameter #{key} null" if hash[key].nil?
34
+ raise ArgumentError, "parameter #{key} null" if hash[key].nil?
35
35
 
36
36
  fetch_optional(hash, key, *classes)
37
37
  end
@@ -40,12 +40,12 @@ class Args
40
40
  value = hash[key]
41
41
  if value && classes.size.positive? && !classes.find { |clazz| value.is_a?(clazz) }
42
42
  if classes.size != 1
43
- raise ArgumentError, "required parameter #{key} not #{classes.map(&:to_s).map(&:downcase).join(' or ')}"
43
+ raise ArgumentError, "parameter #{key} not #{classes.map(&:to_s).map(&:downcase).join(' or ')}"
44
44
  end
45
45
 
46
46
  class_name = classes[0].to_s.downcase
47
47
  class_name = %w[a e i o u].include?(class_name[0]) ? "an #{class_name}" : "a #{class_name}"
48
- raise ArgumentError, "required parameter #{key} not #{class_name}"
48
+ raise ArgumentError, "parameter #{key} not #{class_name}"
49
49
  end
50
50
 
51
51
  value
@@ -18,8 +18,10 @@ class DatabaseConfig
18
18
  raise ArgumentError, 'url_path should not end with a /' if @url_path.length > 1 && @url_path.end_with?('/')
19
19
 
20
20
  @saved_path = Args.fetch_non_empty_string(hash, :saved_path).strip
21
- @joins = Args.fetch_optional_array(hash, :joins) || []
22
- @joins.map do |join|
21
+
22
+ # Make joins an array. It is only a map to allow for YAML extension.
23
+ @joins = (Args.fetch_optional_hash(hash, :joins) || {}).values
24
+ @joins.each do |join|
23
25
  next if join.is_a?(Hash) &&
24
26
  join.keys.size == 2 &&
25
27
  join[:label].is_a?(String) && !join[:label].strip.empty? &&
@@ -27,6 +29,7 @@ class DatabaseConfig
27
29
 
28
30
  raise ArgumentError, "invalid join #{join.to_json}"
29
31
  end
32
+
30
33
  @tables = Args.fetch_optional_hash(hash, :tables) || {}
31
34
  @tables.each do |table, table_config|
32
35
  unless table_config.is_a?(Hash)
@@ -43,16 +46,15 @@ class DatabaseConfig
43
46
  raise ArgumentError, "invalid table boost for #{table} (#{table_boost}), expected int"
44
47
  end
45
48
  end
49
+
46
50
  @columns = Args.fetch_optional_hash(hash, :columns) || {}
47
51
  @columns.each do |column, column_config|
48
52
  unless column_config.is_a?(Hash)
49
53
  raise ArgumentError, "invalid column config for #{column} (#{column_config}), expected hash"
50
54
  end
51
55
 
52
- links = column_config[:links]
53
- raise ArgumentError, "invalid links for #{column} (#{links}), expected array" if links && !links.is_a?(Array)
54
-
55
- links.each do |link_config|
56
+ links = Args.fetch_optional_hash(column_config, :links) || {}
57
+ links.each_value do |link_config|
56
58
  unless link_config.is_a?(Hash)
57
59
  raise ArgumentError, "invalid link config for #{column} (#{link_config}), expected hash"
58
60
  end
@@ -65,9 +67,11 @@ class DatabaseConfig
65
67
  raise ArgumentError, "invalid link long_name for #{column} link (#{link_config[:long_name]}), expected string"
66
68
  end
67
69
  unless link_config[:template].is_a?(String)
68
- raise ArgumentError, "invalid template for #{column} link (#{link_config[:template]}), expected string"
70
+ raise ArgumentError, "invalid link template for #{column} link (#{link_config[:template]}), expected string"
69
71
  end
70
72
  end
73
+ # Make links an array. It is only a map to allow for YAML extension
74
+ column_config[:links] = links.values
71
75
  end
72
76
  aliases = @tables.map { |_table, table_config| table_config[:alias] }.compact
73
77
  if aliases.to_set.size < aliases.size
@@ -258,15 +258,13 @@ p {
258
258
  }
259
259
 
260
260
  #result-table tbody tr td abbr {
261
- margin: 0 0 0 5px;
261
+ margin: 0 5px 0 0;
262
262
  text-decoration: none;
263
- display: inline-block;
264
263
  position: relative;
265
- top: -2px;
266
264
  }
267
265
 
268
- #result-table tbody tr td abbr:first-child {
269
- margin: 0 0 0 10px;
266
+ #result-table tbody tr td abbr:last-child {
267
+ margin: 0;
270
268
  }
271
269
 
272
270
  .fetch-sql-box {
@@ -24152,7 +24152,7 @@
24152
24152
  return match ? match[1] : identifier
24153
24153
  }
24154
24154
 
24155
- function createTable (columns, rows, id, cellRenderer) {
24155
+ function createTable (columns, rows, id, headerRenderer, cellRenderer) {
24156
24156
  const tableElement = document.createElement('table');
24157
24157
  if (id) tableElement.id = id;
24158
24158
  const theadElement = document.createElement('thead');
@@ -24163,9 +24163,13 @@
24163
24163
  tableElement.appendChild(tbodyElement);
24164
24164
 
24165
24165
  columns.forEach(function (columnName) {
24166
- const headerElement = document.createElement('th');
24167
- headerElement.innerText = columnName;
24168
- headerTrElement.appendChild(headerElement);
24166
+ if (headerRenderer) {
24167
+ headerRenderer(headerTrElement, columnName);
24168
+ } else {
24169
+ const headerElement = document.createElement('th');
24170
+ headerElement.innerText = columnName;
24171
+ headerTrElement.appendChild(headerElement);
24172
+ }
24169
24173
  });
24170
24174
  if (columns.length > 0) {
24171
24175
  headerTrElement.appendChild(document.createElement('th'));
@@ -24179,14 +24183,13 @@
24179
24183
  highlight = !highlight;
24180
24184
  tbodyElement.appendChild(rowElement);
24181
24185
  row.forEach(function (value, i) {
24182
- let cellElement;
24183
24186
  if (cellRenderer) {
24184
- cellElement = cellRenderer(columns[i], value);
24187
+ cellRenderer(rowElement, columns[i], value);
24185
24188
  } else {
24186
- cellElement = document.createElement('td');
24189
+ const cellElement = document.createElement('td');
24187
24190
  cellElement.innerText = value;
24191
+ rowElement.appendChild(cellElement);
24188
24192
  }
24189
- rowElement.appendChild(cellElement);
24190
24193
  });
24191
24194
  rowElement.appendChild(document.createElement('td'));
24192
24195
  });
@@ -24936,20 +24939,34 @@
24936
24939
 
24937
24940
  return abbrElement
24938
24941
  };
24939
- const cellRenderer = function (column, value) {
24940
- const cellElement = document.createElement('td');
24942
+
24943
+ const headerRenderer = function (rowElement, column) {
24944
+ const headerElement = document.createElement('th');
24945
+ headerElement.innerText = column;
24946
+ if (window.metadata.columns[column]) {
24947
+ headerElement.colSpan = 2;
24948
+ }
24949
+ rowElement.appendChild(headerElement);
24950
+ };
24951
+
24952
+ const cellRenderer = function (rowElement, column, value) {
24941
24953
  if (window.metadata.columns[column]?.links?.length > 0) {
24942
- cellElement.appendChild(document.createTextNode(value));
24954
+ const linksColumnElement = document.createElement('td');
24943
24955
  window.metadata.columns[column].links.forEach((link) => {
24944
- cellElement.appendChild(createLink(link, value));
24956
+ linksColumnElement.appendChild(createLink(link, value));
24945
24957
  });
24958
+ rowElement.appendChild(linksColumnElement);
24959
+ const textColumnElement = document.createElement('td');
24960
+ textColumnElement.innerText = value;
24961
+ rowElement.appendChild(textColumnElement);
24946
24962
  } else {
24963
+ const cellElement = document.createElement('td');
24947
24964
  cellElement.innerText = value;
24965
+ rowElement.appendChild(cellElement);
24948
24966
  }
24949
- return cellElement
24950
24967
  };
24951
24968
  document.getElementById('result-box')
24952
- .appendChild(createTable(fetch.result.columns, fetch.result.rows, 'result-table', cellRenderer));
24969
+ .appendChild(createTable(fetch.result.columns, fetch.result.rows, 'result-table', headerRenderer, cellRenderer));
24953
24970
  }
24954
24971
 
24955
24972
  function disableDownloadButtons () {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.48
4
+ version: 0.1.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Dower
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-27 00:00:00.000000000 Z
11
+ date: 2022-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2