brick 1.0.101 → 1.0.102
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/brick/extensions.rb +42 -28
- data/lib/brick/frameworks/rails/engine.rb +41 -6
- data/lib/brick/frameworks/rails/form_tags.rb +2 -1
- data/lib/brick/version_number.rb +1 -1
- data/lib/brick.rb +144 -8
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 167e29431250efc9170ec3f174cce913584c700ce8405a0d275c63636d04cf81
|
4
|
+
data.tar.gz: 34826b000c093ab4fb8d63edd4509d8244f3d5e3712066489e00076f67ba9704
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0d8d82c98b918c2a6b61c06a636ce60e2c4eaaed32b9556b09984f0b778f624cfb887cf9d82d48042cb75057b1e3688be661c05fa9c79f90052da32d029e1b2
|
7
|
+
data.tar.gz: 53c296598e9bc85ca2afd5456ff02d3c56fde7f79cd6de9f4684c5fcef0ad1be489e6ccda37c26b81a109393de1a10fa70a08d352825e69437ffdcd8b2bb2bfe
|
data/lib/brick/extensions.rb
CHANGED
@@ -119,30 +119,32 @@ module ActiveRecord
|
|
119
119
|
end
|
120
120
|
s << part_sym
|
121
121
|
end
|
122
|
-
if
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
if klass&.column_names.exclude?(parts.last) &&
|
131
|
-
(klass = (orig_class = klass).reflect_on_association(possible_dsl = parts.pop.to_sym)&.klass)
|
132
|
-
if prefix.empty? # Custom columns start with an empty prefix
|
133
|
-
prefix << parts.shift until parts.empty?
|
122
|
+
if first_parts
|
123
|
+
if (parts = prefix + first_parts + [parts[-1]]).length > 1 && klass
|
124
|
+
unless is_polymorphic
|
125
|
+
s = build_array
|
126
|
+
parts[0..-3].each { |v| s = s[v.to_sym] }
|
127
|
+
s[parts[-2]] = nil # unless parts[-2].empty? # Using []= will "hydrate" any missing part(s) in our whole series
|
128
|
+
end
|
129
|
+
translations[parts[0..-2].join('.')] = klass
|
134
130
|
end
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
131
|
+
if klass&.column_names.exclude?(parts.last) &&
|
132
|
+
(klass = (orig_class = klass).reflect_on_association(possible_dsl = parts.pop.to_sym)&.klass)
|
133
|
+
if prefix.empty? # Custom columns start with an empty prefix
|
134
|
+
prefix << parts.shift until parts.empty?
|
135
|
+
end
|
136
|
+
# Expand this entry which refers to an association name
|
137
|
+
members2, dsl2a = klass.brick_parse_dsl(build_array, prefix + [possible_dsl], translations, is_polymorphic, nil, true)
|
138
|
+
members += members2
|
139
|
+
dsl2 << dsl2a
|
140
|
+
dsl3 << dsl2a
|
141
|
+
else
|
142
|
+
dsl2 << "[#{bracket_name}]"
|
143
|
+
if emit_dsl
|
144
|
+
dsl3 << "[#{prefix[1..-1].map { |p| "#{p.to_s}." }.join if prefix.length > 1}#{bracket_name}]"
|
145
|
+
end
|
146
|
+
members << parts
|
144
147
|
end
|
145
|
-
members << parts
|
146
148
|
end
|
147
149
|
bracket_name = nil
|
148
150
|
else
|
@@ -409,7 +411,7 @@ module ActiveRecord
|
|
409
411
|
model._brick_calculate_bts_hms(translations, join_array) if is_add_bts || is_add_hms
|
410
412
|
|
411
413
|
is_postgres = ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
|
412
|
-
is_mysql = ActiveRecord::Base.connection.adapter_name
|
414
|
+
is_mysql = ['Mysql2', 'Trilogy'].include?(ActiveRecord::Base.connection.adapter_name)
|
413
415
|
is_mssql = ActiveRecord::Base.connection.adapter_name == 'SQLServer'
|
414
416
|
is_distinct = nil
|
415
417
|
wheres = {}
|
@@ -557,7 +559,7 @@ module ActiveRecord
|
|
557
559
|
brick_link = rel_dupe.brick_links[sel_col.first]
|
558
560
|
field_tbl_name = brick_link&.split('.')&.last ||
|
559
561
|
# ... so here's a best-effort guess for what the table name might be.
|
560
|
-
rel_dupe.klass.reflect_on_association(sel_col.first)
|
562
|
+
rel_dupe.klass.reflect_on_association(sel_col.first)&.klass&.table_name
|
561
563
|
# If it's Oracle, quote any AREL aliases that had been applied
|
562
564
|
field_tbl_name = "\"#{field_tbl_name}\"" if ::Brick.is_oracle && rel_dupe.brick_links.values.include?(field_tbl_name)
|
563
565
|
|
@@ -803,7 +805,7 @@ JOIN (SELECT #{hm_selects.map { |s| "#{'br_t0.' if from_clause}#{s}" }.join(', '
|
|
803
805
|
alias _brick_find_sti_class find_sti_class
|
804
806
|
def find_sti_class(type_name)
|
805
807
|
if ::Brick.sti_models.key?(type_name ||= name)
|
806
|
-
_brick_find_sti_class(type_name)
|
808
|
+
::Brick.sti_models[type_name].fetch(:base, nil) || _brick_find_sti_class(type_name)
|
807
809
|
else
|
808
810
|
# This auto-STI is more of a brute-force approach, building modules where needed
|
809
811
|
# The more graceful alternative is the overload of ActiveSupport::Dependencies#autoload_module! found below
|
@@ -1407,7 +1409,7 @@ class Object
|
|
1407
1409
|
singular_table_name = ActiveSupport::Inflector.singularize(ActiveSupport::Inflector.underscore(plural_class_name))
|
1408
1410
|
pk = model&._brick_primary_key(relations.fetch(table_name, nil))
|
1409
1411
|
is_postgres = ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
|
1410
|
-
is_mysql = ActiveRecord::Base.connection.adapter_name
|
1412
|
+
is_mysql = ['Mysql2', 'Trilogy'].include?(ActiveRecord::Base.connection.adapter_name)
|
1411
1413
|
|
1412
1414
|
code = +"class #{class_name} < #{controller_base&.name || 'ApplicationController'}\n"
|
1413
1415
|
built_controller = Class.new(controller_base || ActionController::Base) do |new_controller_class|
|
@@ -1622,6 +1624,18 @@ class Object
|
|
1622
1624
|
end
|
1623
1625
|
|
1624
1626
|
unless is_openapi || is_avo
|
1627
|
+
# Skip showing Bullet gem optimisation messages
|
1628
|
+
if Object.const_defined?('Bullet') && Bullet.respond_to?(:enable?)
|
1629
|
+
around_action :skip_bullet
|
1630
|
+
def skip_bullet
|
1631
|
+
bullet_enabled = Bullet.enable?
|
1632
|
+
Bullet.enable = false
|
1633
|
+
yield
|
1634
|
+
ensure
|
1635
|
+
Bullet.enable = bullet_enabled
|
1636
|
+
end
|
1637
|
+
end
|
1638
|
+
|
1625
1639
|
_, order_by_txt = model._brick_calculate_ordering(default_ordering(table_name, pk)) if pk
|
1626
1640
|
code << " def index\n"
|
1627
1641
|
code << " @#{table_name.pluralize} = #{model.name}#{pk&.present? ? ".order(#{order_by_txt.join(', ')})" : '.all'}\n"
|
@@ -1935,7 +1949,7 @@ end.class_exec do
|
|
1935
1949
|
puts "*** In the brick.rb initializer the line \"::Brick.schema_behavior = ...\" refers to schema(s) called #{possible_schemas.map { |s| "\"#{s}\"" }.join(', ')}. No mentioned schema exists. ***"
|
1936
1950
|
end
|
1937
1951
|
end
|
1938
|
-
when 'Mysql2'
|
1952
|
+
when 'Mysql2', 'Trilogy'
|
1939
1953
|
::Brick.default_schema = schema = ActiveRecord::Base.connection.current_database
|
1940
1954
|
when 'OracleEnhanced'
|
1941
1955
|
# ActiveRecord::Base.connection.current_database will be something like "XEPDB1"
|
@@ -2070,7 +2084,7 @@ ORDER BY 1, 2, c.internal_column_id, acc.position"
|
|
2070
2084
|
# end
|
2071
2085
|
# schema = ::Brick.default_schema # Reset back for this next round of fun
|
2072
2086
|
case ActiveRecord::Base.connection.adapter_name
|
2073
|
-
when 'PostgreSQL', 'Mysql2', 'SQLServer'
|
2087
|
+
when 'PostgreSQL', 'Mysql2', 'Trilogy', 'SQLServer'
|
2074
2088
|
sql = "SELECT kcu1.CONSTRAINT_SCHEMA, kcu1.TABLE_NAME, kcu1.COLUMN_NAME,
|
2075
2089
|
kcu2.CONSTRAINT_SCHEMA AS primary_schema, kcu2.TABLE_NAME AS primary_table, kcu1.CONSTRAINT_NAME AS CONSTRAINT_SCHEMA_FK
|
2076
2090
|
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS rc
|
@@ -625,7 +625,7 @@ def display_value(col_type, val)
|
|
625
625
|
case col_type
|
626
626
|
when 'geometry', 'geography'
|
627
627
|
if Object.const_defined?('RGeo')
|
628
|
-
@is_mysql = ActiveRecord::Base.connection.adapter_name
|
628
|
+
@is_mysql = ['Mysql2', 'Trilogy'].include?(ActiveRecord::Base.connection.adapter_name) if @is_mysql.nil?
|
629
629
|
@is_mssql = ActiveRecord::Base.connection.adapter_name == 'SQLServer' if @is_mssql.nil?
|
630
630
|
val_err = nil
|
631
631
|
if @is_mysql || @is_mssql
|
@@ -659,6 +659,8 @@ def display_value(col_type, val)
|
|
659
659
|
else
|
660
660
|
'(Add RGeo gem to parse geometry detail)'
|
661
661
|
end
|
662
|
+
when :binary
|
663
|
+
display_binary(val) if val
|
662
664
|
else
|
663
665
|
if col_type
|
664
666
|
hide_bcrypt(val)
|
@@ -667,6 +669,40 @@ def display_value(col_type, val)
|
|
667
669
|
end
|
668
670
|
end
|
669
671
|
end
|
672
|
+
|
673
|
+
def image_signatures
|
674
|
+
@image_signatures ||= { \"\\xFF\\xD8\\xFF\\xEE\" => 'jpeg',
|
675
|
+
\"\\xFF\\xD8\\xFF\\xE0\\x00\\x10\\x4A\\x46\\x49\\x46\\x00\\x01\" => 'jpeg',
|
676
|
+
\"\\x89PNG\\r\\n\\x1A\\n\" => 'png',
|
677
|
+
'<svg' => 'svg+xml', # %%% Not yet very good detection for SVG
|
678
|
+
'BM' => 'bmp',
|
679
|
+
'GIF87a' => 'gif',
|
680
|
+
'GIF89a' => 'gif' }
|
681
|
+
end
|
682
|
+
def display_binary(val)
|
683
|
+
if val[0..1] == \"\\x15\\x1C\" # One of those goofy Microsoft OLE containers?
|
684
|
+
package_header_length = val[2..3].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
|
685
|
+
# This will often be just FF FF FF FF
|
686
|
+
# object_size = val[16..19].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
|
687
|
+
friendly_and_class_names = val[20...package_header_length].split(\"\\0\")
|
688
|
+
object_type_name_length = val[package_header_length + 8..package_header_length+11].bytes.reverse.inject(0) {|m, b| (m << 8) + b }
|
689
|
+
friendly_and_class_names << val[package_header_length + 12...package_header_length + 12 + object_type_name_length].strip
|
690
|
+
# friendly_and_class_names will now be something like: ['Bitmap Image', 'Paint.Picture', 'PBrush']
|
691
|
+
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 }
|
692
|
+
object_start = package_header_length + 24 + object_type_name_length
|
693
|
+
val = val[object_start...object_start + real_object_size]
|
694
|
+
end
|
695
|
+
if (signature = image_signatures.find { |k, _v| val[0...k.length] == k })
|
696
|
+
if val.length < 500_000
|
697
|
+
\"<img src=\\\"data:image/#\{signature.last};base64,#\{Base64.encode64(val)}\\\">\"
|
698
|
+
else
|
699
|
+
\"< #\{signature.last} image, #\{val.length} bytes >\"
|
700
|
+
end
|
701
|
+
else
|
702
|
+
\"< Binary, #\{val.length} bytes >\"
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
670
706
|
# Accommodate composite primary keys that include strings with forward-slash characters
|
671
707
|
def slashify(*vals)
|
672
708
|
vals.map { |val_part| val_part.is_a?(String) ? val_part.gsub('/', '^^sl^^') : val_part }
|
@@ -1576,11 +1612,10 @@ document.querySelectorAll(\"input, select\").forEach(function (inp) {
|
|
1576
1612
|
private
|
1577
1613
|
|
1578
1614
|
alias _brick_render_template render_template
|
1579
|
-
def render_template(view, template, *args)
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
end
|
1615
|
+
def render_template(view, template, layout_name, *args)
|
1616
|
+
layout_name = nil if (is_brick = template.instance_variable_get(:@is_brick)) && layout_name.is_a?(Proc)
|
1617
|
+
result = _brick_render_template(view, template, layout_name, *args)
|
1618
|
+
Apartment::Tenant.switch!(::Brick.apartment_default_tenant) if is_brick && ::Brick.apartment_multitenant
|
1584
1619
|
result
|
1585
1620
|
end
|
1586
1621
|
end # TemplateRenderer
|
@@ -3,7 +3,7 @@ module Brick::Rails::FormTags
|
|
3
3
|
def brick_grid(relation, bt_descrip, sequence = nil, inclusions, exclusions,
|
4
4
|
cols, poly_cols, bts, hms_keys, hms_cols)
|
5
5
|
out = "<table id=\"headerTop\"></table>
|
6
|
-
<table id=\"#{relation.table_name}\" class=\"shadow\">
|
6
|
+
<table id=\"#{relation.table_name.split('.').last}\" class=\"shadow\">
|
7
7
|
<thead><tr>"
|
8
8
|
pk = (klass = relation.klass).primary_key || []
|
9
9
|
pk = [pk] unless pk.is_a?(Array)
|
@@ -90,6 +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
94
|
bt_txt ||= "<span class=\"orphan\"><< Orphaned ID: #{val} >></span>" if val
|
94
95
|
bt_id = bt_id_col&.map { |id_col| obj.respond_to?(id_sym = id_col.to_sym) ? obj.send(id_sym) : id_col }
|
95
96
|
out << (bt_id&.first ? link_to(bt_txt, send("#{bt_class.base_class._brick_index(:singular)}_path".to_sym, bt_id)) : bt_txt || '')
|
data/lib/brick/version_number.rb
CHANGED
data/lib/brick.rb
CHANGED
@@ -26,7 +26,7 @@ end
|
|
26
26
|
require 'brick/util'
|
27
27
|
|
28
28
|
# Allow ActiveRecord < 3.2 to work with Ruby 2.7 and later
|
29
|
-
if (ruby_version = ::Gem::Version.new(RUBY_VERSION)) >= ::Gem::Version.new('2.7')
|
29
|
+
if (is_ruby_2_7 = (ruby_version = ::Gem::Version.new(RUBY_VERSION)) >= ::Gem::Version.new('2.7'))
|
30
30
|
if ActiveRecord.version < ::Gem::Version.new('3.2')
|
31
31
|
# Remove circular reference for "now"
|
32
32
|
::Brick::Util._patch_require(
|
@@ -1043,6 +1043,18 @@ ActiveSupport.on_load(:active_record) do
|
|
1043
1043
|
end
|
1044
1044
|
# rubocop:enable Lint/ConstantDefinitionInBlock
|
1045
1045
|
|
1046
|
+
arsc = ::ActiveRecord::StatementCache
|
1047
|
+
if is_ruby_2_7 && (params = arsc.method(:create).parameters).length == 2 && params.last == [:opt, :block]
|
1048
|
+
arsc.class_exec do
|
1049
|
+
def self.create(connection, callable = nil, &block)
|
1050
|
+
relation = (callable || block).call ::ActiveRecord::StatementCache::Params.new
|
1051
|
+
bind_map = ::ActiveRecord::StatementCache::BindMap.new relation.bound_attributes
|
1052
|
+
query_builder = connection.cacheable_query(self, relation.arel)
|
1053
|
+
new query_builder, bind_map
|
1054
|
+
end
|
1055
|
+
end
|
1056
|
+
end
|
1057
|
+
|
1046
1058
|
# Rails < 4.2 is not innately compatible with Ruby 2.4 and later, and comes up with:
|
1047
1059
|
# "TypeError: Cannot visit Integer" unless we patch like this:
|
1048
1060
|
if ruby_version >= ::Gem::Version.new('2.4') &&
|
@@ -1081,11 +1093,54 @@ ActiveSupport.on_load(:active_record) do
|
|
1081
1093
|
end
|
1082
1094
|
end
|
1083
1095
|
|
1096
|
+
if Psych.respond_to?(:unsafe_load) && ActiveRecord.version < ::Gem::Version.new('6.1')
|
1097
|
+
Psych.class_exec do
|
1098
|
+
class << self
|
1099
|
+
alias _original_load load
|
1100
|
+
def load(yaml, *args, **kwargs)
|
1101
|
+
if caller.first.end_with?("`database_configuration'") && kwargs[:aliases].nil?
|
1102
|
+
kwargs[:aliases] = true
|
1103
|
+
end
|
1104
|
+
_original_load(yaml, *args, **kwargs)
|
1105
|
+
end
|
1106
|
+
end
|
1107
|
+
end
|
1108
|
+
end
|
1109
|
+
|
1110
|
+
# def aliased_table_for(arel_table, table_name = nil)
|
1111
|
+
# table_name ||= arel_table.name
|
1112
|
+
|
1113
|
+
# if aliases[table_name] == 0
|
1114
|
+
# # If it's zero, we can have our table_name
|
1115
|
+
# aliases[table_name] = 1
|
1116
|
+
# arel_table = arel_table.alias(table_name) if arel_table.name != table_name
|
1117
|
+
# else
|
1118
|
+
# # Otherwise, we need to use an alias
|
1119
|
+
# aliased_name = @connection.table_alias_for(yield)
|
1120
|
+
|
1121
|
+
# # Update the count
|
1122
|
+
# count = aliases[aliased_name] += 1
|
1123
|
+
|
1124
|
+
# aliased_name = "#{truncate(aliased_name)}_#{count}" if count > 1
|
1125
|
+
|
1126
|
+
# arel_table = arel_table.alias(aliased_name)
|
1127
|
+
# end
|
1128
|
+
|
1129
|
+
# arel_table
|
1130
|
+
# end
|
1131
|
+
# def aliased_table_for(table_name, aliased_name, type_caster)
|
1132
|
+
|
1084
1133
|
class ActiveRecord::Associations::JoinDependency
|
1085
|
-
if JoinBase.instance_method(:initialize).arity == 2 # Older ActiveRecord
|
1086
|
-
def initialize(base, associations, joins)
|
1087
|
-
|
1088
|
-
|
1134
|
+
if JoinBase.instance_method(:initialize).arity == 2 # Older ActiveRecord <= 5.1?
|
1135
|
+
def initialize(base, associations, joins, eager_loading: true)
|
1136
|
+
araat = ::ActiveRecord::Associations::AliasTracker
|
1137
|
+
if araat.respond_to?(:create_with_joins) # Rails 5.0 and 5.1
|
1138
|
+
@alias_tracker = araat.create_with_joins(base.connection, base.table_name, joins)
|
1139
|
+
@eager_loading = eager_loading # (Unused in Rails 5.0)
|
1140
|
+
else # Rails 4.2
|
1141
|
+
@alias_tracker = araat.create(base.connection, joins)
|
1142
|
+
@alias_tracker.aliased_table_for(base, base.table_name) # Updates the count for base.table_name to 1
|
1143
|
+
end
|
1089
1144
|
tree = self.class.make_tree associations
|
1090
1145
|
|
1091
1146
|
# Provide a way to find the original relation that this tree is being used for
|
@@ -1098,7 +1153,7 @@ ActiveSupport.on_load(:active_record) do
|
|
1098
1153
|
@join_root.children.each { |child| construct_tables! @join_root, child }
|
1099
1154
|
end
|
1100
1155
|
|
1101
|
-
else # For ActiveRecord 5.
|
1156
|
+
else # For ActiveRecord 5.2 - 7.1
|
1102
1157
|
|
1103
1158
|
def initialize(base, table, associations, join_type = nil)
|
1104
1159
|
tree = self.class.make_tree associations
|
@@ -1245,13 +1300,13 @@ module ActiveRecord
|
|
1245
1300
|
|
1246
1301
|
if private_instance_methods.include?(:build_join_query)
|
1247
1302
|
alias _brick_build_join_query build_join_query
|
1248
|
-
def build_join_query(manager, buckets, *args)
|
1303
|
+
def build_join_query(manager, buckets, *args) # , **kwargs)
|
1249
1304
|
# %%% Better way to bring relation into the mix
|
1250
1305
|
if (aj = buckets.fetch(:association_join, nil))
|
1251
1306
|
aj.instance_variable_set(:@relation, self)
|
1252
1307
|
end
|
1253
1308
|
|
1254
|
-
_brick_build_join_query(manager, buckets, *args)
|
1309
|
+
_brick_build_join_query(manager, buckets, *args) # , **kwargs)
|
1255
1310
|
end
|
1256
1311
|
|
1257
1312
|
else
|
@@ -1433,4 +1488,85 @@ if Gem::Specification.all_names.any? { |g| g.start_with?('ransack-') }
|
|
1433
1488
|
end
|
1434
1489
|
end
|
1435
1490
|
|
1491
|
+
# Keyword arguments updates for Rails <= 5.2.x and Ruby >= 3.0
|
1492
|
+
if ActiveRecord.version < ::Gem::Version.new('6.0') && ruby_version >= ::Gem::Version.new('3.0')
|
1493
|
+
admsm = ActionDispatch::MiddlewareStack::Middleware
|
1494
|
+
admsm.class_exec do
|
1495
|
+
# redefine #build
|
1496
|
+
def build(app, **kwargs)
|
1497
|
+
# puts klass.name
|
1498
|
+
if args.length > 1 && args.last.is_a?(Hash)
|
1499
|
+
kwargs.merge!(args.pop)
|
1500
|
+
end
|
1501
|
+
# binding.pry if klass == ActionDispatch::Static # ActionDispatch::Reloader
|
1502
|
+
klass.new(app, *args, **kwargs, &block)
|
1503
|
+
end
|
1504
|
+
end
|
1505
|
+
|
1506
|
+
require 'active_model'
|
1507
|
+
require 'active_model/type'
|
1508
|
+
require 'active_model/type/value'
|
1509
|
+
class ActiveModel::Type::Value
|
1510
|
+
def initialize(*args, precision: nil, limit: nil, scale: nil)
|
1511
|
+
@precision = precision
|
1512
|
+
@scale = scale
|
1513
|
+
@limit = limit
|
1514
|
+
end
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
if Object.const_defined?('I18n')
|
1518
|
+
module I18n::Base
|
1519
|
+
alias _brick_translate translate
|
1520
|
+
def translate(key = nil, *args, throw: false, raise: false, locale: nil, **options)
|
1521
|
+
options.merge!(args.pop) if args.length > 0 && args.last.is_a?(Hash)
|
1522
|
+
_brick_translate(key = nil, throw: false, raise: false, locale: nil, **options)
|
1523
|
+
end
|
1524
|
+
end
|
1525
|
+
end
|
1526
|
+
|
1527
|
+
module ActionController::RequestForgeryProtection
|
1528
|
+
private
|
1529
|
+
|
1530
|
+
# Creates the authenticity token for the current request.
|
1531
|
+
def form_authenticity_token(*args, form_options: {}) # :doc:
|
1532
|
+
form_options.merge!(args.pop) if args.length > 0 && args.last.is_a?(Hash)
|
1533
|
+
masked_authenticity_token(session, form_options: form_options)
|
1534
|
+
end
|
1535
|
+
end
|
1536
|
+
|
1537
|
+
module ActiveSupport
|
1538
|
+
class MessageEncryptor
|
1539
|
+
def encrypt_and_sign(value, *args, expires_at: nil, expires_in: nil, purpose: nil)
|
1540
|
+
encrypted = if method(:_encrypt).arity == 1
|
1541
|
+
_encrypt(value) # Rails <= 5.1
|
1542
|
+
else
|
1543
|
+
if args.length > 0 && args.last.is_a?(Hash)
|
1544
|
+
expires_at ||= args.last[:expires_at]
|
1545
|
+
expires_in ||= args.last[:expires_in]
|
1546
|
+
purpose ||= args.last[:purpose]
|
1547
|
+
end
|
1548
|
+
_encrypt(value, expires_at: expires_at, expires_in: expires_in, purpose: purpose)
|
1549
|
+
end
|
1550
|
+
verifier.generate(encrypted)
|
1551
|
+
end
|
1552
|
+
end
|
1553
|
+
if const_defined?('Messages')
|
1554
|
+
class Messages::Metadata
|
1555
|
+
def self.wrap(message, *args, expires_at: nil, expires_in: nil, purpose: nil)
|
1556
|
+
if args.length > 0 && args.last.is_a?(Hash)
|
1557
|
+
expires_at ||= args.last[:expires_at]
|
1558
|
+
expires_in ||= args.last[:expires_in]
|
1559
|
+
purpose ||= args.last[:purpose]
|
1560
|
+
end
|
1561
|
+
if expires_at || expires_in || purpose
|
1562
|
+
JSON.encode new(encode(message), pick_expiry(expires_at, expires_in), purpose)
|
1563
|
+
else
|
1564
|
+
message
|
1565
|
+
end
|
1566
|
+
end
|
1567
|
+
end
|
1568
|
+
end
|
1569
|
+
end
|
1570
|
+
end
|
1571
|
+
|
1436
1572
|
require 'brick/extensions'
|
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.
|
4
|
+
version: 1.0.102
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lorin Thwaits
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 1.42.0
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: mysql2
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.5'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.5'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: pg
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|