brick 1.0.119 → 1.0.120

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: 6dfec2ebe501c46c17a7466bd98a9fb510ce6676f74c9b914da52e789e279036
4
- data.tar.gz: 803598a5b59f73e81ed94079dd2b7dd55328c5c12de6d6968937b6518b68cef7
3
+ metadata.gz: faca98f57870f50ba6474325fa995fe70ac36b4efd4c58946553242afe7ccb86
4
+ data.tar.gz: 3dd28e3cb60b74bd99209da86e302b7301e0eb844e314e7c56dde43ed4475b7e
5
5
  SHA512:
6
- metadata.gz: 1618ef1ff14f0198d45aa0aafc5ee9e0272c82a886b0129e14cfe6c47fea1cbb55c76f32cf2a98eb93915c68a62275ad53e5ab32621da45b9a7397e2d1f95f3f
7
- data.tar.gz: f34063a9ebc164bf352d96b1149f1ed501a351c3e786219a29593be13359162c9bb140cf822d9ce1494be9ea43b655afb0422008d6fcc64f59ee7050a1e84072
6
+ metadata.gz: 3ccbfc86abb0a16f053ddbf0b43e0c96a6d70a9f2ab3cab95ea008d76bcba1572aaf87b5d6eb9a79a342c20b26b900c42a1dd178c6b478e6f0f8daf372bb9189
7
+ data.tar.gz: 464e92a80e820c66c8ed2517593440e0752bfc4b8d7fdf3667fd662291b6663e95e417f60281647529cea7c11c0d13a3fa5c22d69142c6b880db5ae077e632d3
@@ -2,6 +2,39 @@
2
2
 
3
3
  module Brick
4
4
  module Rails
5
+ def self.display_binary(val)
6
+ @image_signatures ||= { (+"\xFF\xD8\xFF\xEE").force_encoding('ASCII-8BIT') => 'jpeg',
7
+ (+"\xFF\xD8\xFF\xE0\x00\x10\x4A\x46\x49\x46\x00\x01").force_encoding('ASCII-8BIT') => 'jpeg',
8
+ (+"\x89PNG\r\n\x1A\n").force_encoding('ASCII-8BIT') => 'png',
9
+ '<svg' => 'svg+xml', # %%% Not yet very good detection for SVG
10
+ (+'BM').force_encoding('ASCII-8BIT') => 'bmp',
11
+ (+'GIF87a').force_encoding('ASCII-8BIT') => 'gif',
12
+ (+'GIF89a').force_encoding('ASCII-8BIT') => 'gif' }
13
+
14
+ if val[0..1] == "\x15\x1C" # One of those goofy Microsoft OLE containers?
15
+ package_header_length = val[2..3].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
16
+ # This will often be just FF FF FF FF
17
+ # object_size = val[16..19].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
18
+ friendly_and_class_names = val[20...package_header_length].split("\0")
19
+ object_type_name_length = val[package_header_length + 8..package_header_length+11].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
20
+ friendly_and_class_names << val[package_header_length + 12...package_header_length + 12 + object_type_name_length].strip
21
+ # friendly_and_class_names will now be something like: ['Bitmap Image', 'Paint.Picture', 'PBrush']
22
+ real_object_size = val[package_header_length + 20 + object_type_name_length..package_header_length + 23 + object_type_name_length].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
23
+ object_start = package_header_length + 24 + object_type_name_length
24
+ val = val[object_start...object_start + real_object_size]
25
+ end
26
+
27
+ if (signature = @image_signatures.find { |k, _v| val[0...k.length] == k })
28
+ if val.length < 500_000
29
+ "<img src=\"data:image/#{signature.last};base64,#{Base64.encode64(val)}\">"
30
+ else
31
+ "&lt;&nbsp;#{signature.last} image, #{val.length} bytes&nbsp;>"
32
+ end
33
+ else
34
+ "&lt;&nbsp;Binary, #{val.length} bytes&nbsp;>"
35
+ end
36
+ end
37
+
5
38
  # See http://guides.rubyonrails.org/engines.html
6
39
  class Engine < ::Rails::Engine
7
40
  JS_CHANGEOUT = "function changeout(href, param, value, trimAfter) {
@@ -938,7 +971,7 @@ def display_value(col_type, val)
938
971
  '(Add RGeo gem to parse geometry detail)'
939
972
  end
940
973
  when :binary
941
- display_binary(val) if val
974
+ ::Brick::Rails.display_binary(val) if val
942
975
  else
943
976
  if col_type
944
977
  hide_bcrypt(val, col_type == :xml)
@@ -948,39 +981,6 @@ def display_value(col_type, val)
948
981
  end
949
982
  end
950
983
 
951
- def image_signatures
952
- @image_signatures ||= { \"\\xFF\\xD8\\xFF\\xEE\".force_encoding('ASCII-8BIT') => 'jpeg',
953
- \"\\xFF\\xD8\\xFF\\xE0\\x00\\x10\\x4A\\x46\\x49\\x46\\x00\\x01\".force_encoding('ASCII-8BIT') => 'jpeg',
954
- \"\\x89PNG\\r\\n\\x1A\\n\".force_encoding('ASCII-8BIT') => 'png',
955
- '<svg' => 'svg+xml', # %%% Not yet very good detection for SVG
956
- 'BM'.force_encoding('ASCII-8BIT') => 'bmp',
957
- 'GIF87a'.force_encoding('ASCII-8BIT') => 'gif',
958
- 'GIF89a'.force_encoding('ASCII-8BIT') => 'gif' }
959
- end
960
- def display_binary(val)
961
- if val[0..1] == \"\\x15\\x1C\" # One of those goofy Microsoft OLE containers?
962
- package_header_length = val[2..3].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
963
- # This will often be just FF FF FF FF
964
- # object_size = val[16..19].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
965
- friendly_and_class_names = val[20...package_header_length].split(\"\\0\")
966
- object_type_name_length = val[package_header_length + 8..package_header_length+11].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
967
- friendly_and_class_names << val[package_header_length + 12...package_header_length + 12 + object_type_name_length].strip
968
- # friendly_and_class_names will now be something like: ['Bitmap Image', 'Paint.Picture', 'PBrush']
969
- real_object_size = val[package_header_length + 20 + object_type_name_length..package_header_length + 23 + object_type_name_length].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
970
- object_start = package_header_length + 24 + object_type_name_length
971
- val = val[object_start...object_start + real_object_size]
972
- end
973
- if (signature = image_signatures.find { |k, _v| val[0...k.length] == k })
974
- if val.length < 500_000
975
- \"<img src=\\\"data:image/#\{signature.last};base64,#\{Base64.encode64(val)}\\\">\"
976
- else
977
- \"&lt;&nbsp;#\{signature.last} image, #\{val.length} bytes&nbsp;>\"
978
- end
979
- else
980
- \"&lt;&nbsp;Binary, #\{val.length} bytes&nbsp;>\"
981
- end
982
- end
983
-
984
984
  # Accommodate composite primary keys that include strings with forward-slash characters
985
985
  def slashify(*vals)
986
986
  vals.map { |val_part| val_part.is_a?(String) ? val_part.gsub('/', '^^sl^^') : val_part }
@@ -1685,7 +1685,7 @@ end
1685
1685
  if val.length < 31 && (val.length - 6) % 8 == 0 && val[0..5].bytes == [230, 16, 0, 0, 1, 12]
1686
1686
  display_value('geography', val)
1687
1687
  else
1688
- display_binary(val)
1688
+ ::Brick::Rails.display_binary(val)
1689
1689
  end.html_safe
1690
1690
  end %>
1691
1691
  <% when :primary_key
@@ -90,7 +90,7 @@ module Brick::Rails::FormTags
90
90
  # 0..62 because Postgres column names are limited to 63 characters
91
91
  obj, descrips[0..-2].map { |id| obj.send(id.last[0..62]) }, bt_id_col
92
92
  )
93
- bt_txt = display_binary(bt_txt).html_safe if bt_txt&.encoding&.name == 'ASCII-8BIT'
93
+ bt_txt = ::Brick::Rails.display_binary(bt_txt).html_safe if bt_txt&.encoding&.name == 'ASCII-8BIT'
94
94
  bt_txt ||= "<span class=\"orphan\">&lt;&lt; Orphaned ID: #{val} >></span>" if val
95
95
  bt_id = bt_id_col&.map { |id_col| obj.respond_to?(id_sym = id_col.to_sym) ? obj.send(id_sym) : id_col }
96
96
  out << (bt_id&.first ? link_to(bt_txt, send("#{bt_class.base_class._brick_index(:singular)}_path".to_sym, bt_id)) : bt_txt || '')
@@ -5,7 +5,7 @@ module Brick
5
5
  module VERSION
6
6
  MAJOR = 1
7
7
  MINOR = 0
8
- TINY = 119
8
+ TINY = 120
9
9
 
10
10
  # PRE is nil unless it's a pre-release (beta, RC, etc.)
11
11
  PRE = nil
@@ -268,7 +268,7 @@ if ActiveRecord::Base.respond_to?(:brick_select) && !::Brick.initializer_loaded
268
268
  # # FRIENDLY DSL
269
269
 
270
270
  # # A simple DSL is available to allow more user-friendly display of objects. Normally a user object might be shown
271
- # # as its first non-metadata column, or if that is not available then something like \"User #45\" where 45 is that
271
+ # # as its first non-metadata column, or if that is not available then something like \"User #42\" where 42 is that
272
272
  # # object's ID. If there is no primary key then even that is not possible, so the object's .to_s method is called.
273
273
  # # To override these defaults and specify exactly what you want shown, such as first names and last names for a
274
274
  # # user, then you can use model_descrips like this, putting expressions with property references in square brackets:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.119
4
+ version: 1.0.120
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lorin Thwaits
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-05 00:00:00.000000000 Z
11
+ date: 2023-03-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord