Class: BetterRecord::Base
- Defined in:
- app/models/better_record/base.rb
Direct Known Subclasses
Class Method Summary collapse
- .full_table_name ⇒ Object
- .gender_enum(col) ⇒ Object
- .get_hashed_string(str) ⇒ Object
- .reset_all_schemas ⇒ Object
- .reset_qualified_schema ⇒ Object
- .saved_qualified_schema ⇒ Object
- .schema_qualified ⇒ Object
-
.set_audit_methods! ⇒ Object
Class Methods ========================================================.
- .table_name_only ⇒ Object
Instance Method Summary collapse
- #dup(allow_full_dup = false) ⇒ Object
-
#get_hashed_string(str) ⇒ Object
Instance Methods =====================================================.
- #indifferent_attributes ⇒ Object
Class Method Details
.full_table_name ⇒ Object
125 126 127 |
# File 'app/models/better_record/base.rb', line 125 def self.full_table_name "#{schema_qualified[:schema_name]}.#{schema_qualified[:table_name]}" end |
.gender_enum(col) ⇒ Object
60 61 62 |
# File 'app/models/better_record/base.rb', line 60 def self.gender_enum(col) enum col, BetterRecord::Gender::ENUM end |
.get_hashed_string(str) ⇒ Object
64 65 66 67 68 |
# File 'app/models/better_record/base.rb', line 64 def self.get_hashed_string(str) ct = Time.now.to_i cq = ActiveRecord::Base.sanitize_sql_array(["hash_password(?) as hashed_cert_#{t}", str]) select(cq).limit(1).first[:"hashed_cert_#{t}"] end |
.reset_all_schemas ⇒ Object
70 71 72 73 74 75 |
# File 'app/models/better_record/base.rb', line 70 def self.reset_all_schemas ActiveRecord::Base.descendants.each do |desc| desc.reset_qualified_schema rescue nil end true end |
.reset_qualified_schema ⇒ Object
77 78 79 |
# File 'app/models/better_record/base.rb', line 77 def self.reset_qualified_schema @schema_qualified = nil end |
.saved_qualified_schema ⇒ Object
81 82 83 |
# File 'app/models/better_record/base.rb', line 81 def self.saved_qualified_schema @schema_qualified end |
.schema_qualified ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'app/models/better_record/base.rb', line 85 def self.schema_qualified return @schema_qualified if @schema_qualified.present? if table_name =~ /.+\..+/ tmp_name = table_name.split('.') @schema_qualified = { schema_name: tmp_name[0], table_name: tmp_name[1] } else paths = (connection.execute("show search_path").first || {})['search_path'] paths = (paths.presence || "public").to_s.split(",") paths.each do |schema_path| row = ( connection.execute " SELECT c.oid,\n n.nspname,\n c.relname\n FROM pg_catalog.pg_class c\n LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n WHERE c.relname = '\#{table_name}'\n AND n.nspname = '\#{schema_path.strip}'\n ORDER BY 2, 3;\n SQL\n ).first\n\n if row.present?\n @schema_qualified = {\n schema_name: row['nspname'],\n table_name: row['relname']\n }\n break\n end\n end\n return @schema_qualified ||= {\n schema_name: \"public\",\n table_name: table_name\n }\n end\nend\n".cleanup_production |
.set_audit_methods! ⇒ Object
Class Methods ========================================================
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/models/better_record/base.rb', line 26 def self.set_audit_methods! begin t_name = BetterRecord::LoggedAction.table_name.sub('_view', '') connection.execute(%Q(SELECT 1 FROM #{t_name}_#{self.table_name_only} LIMIT 1)) self.const_set(:LoggedAction, Class.new(ApplicationRecord)) self.const_get(:LoggedAction).include(ModelConcerns::LoggedActionBase) self.const_get(:LoggedAction).table_name = "#{t_name}_#{self.table_name_only}" self.const_get(:LoggedAction).primary_key = :event_id self rescue ActiveRecord::StatementInvalid self.const_set(:LoggedAction, BetterRecord::LoggedAction) self end self.has_many self.audit_relation_name, class_name: "#{self.to_s}::LoggedAction", primary_type: :full_table_name, foreign_key: :row_id, foreign_type: :full_name, as: self.audit_relation_name self.has_many :"#{self.audit_relation_name}_full_table", class_name: "#{self.to_s}::LoggedAction", primary_type: :table_name_only, foreign_key: :row_id, foreign_type: :table_name, as: self.audit_relation_name self rescue ActiveRecord::NoDatabaseError self end |
.table_name_only ⇒ Object
129 130 131 |
# File 'app/models/better_record/base.rb', line 129 def self.table_name_only schema_qualified[:table_name] end |
Instance Method Details
#dup(allow_full_dup = false) ⇒ Object
144 145 146 147 148 149 150 151 152 |
# File 'app/models/better_record/base.rb', line 144 def dup(allow_full_dup = false) if !allow_full_dup && self.class.const_defined?(:NON_DUPABLE_KEYS) super().tap do |r| r.class::NON_DUPABLE_KEYS.each {|k| r[k] = nil } end else super() end end |
#get_hashed_string(str) ⇒ Object
Instance Methods =====================================================
136 137 138 |
# File 'app/models/better_record/base.rb', line 136 def get_hashed_string(str) self.class.get_hashed_string(str) end |
#indifferent_attributes ⇒ Object
140 141 142 |
# File 'app/models/better_record/base.rb', line 140 def indifferent_attributes attributes.with_indifferent_access end |