# File lib/reactive_record/active_record/class_methods.rb, line 23 def primary_key base_class.instance_eval { @primary_key_value || :id } end
module ActiveRecord::ClassMethods
Constants
- SERVER_METHODS
ignore any of these methods if they get called on the client. This list should be trimmed down to include only methods to be called as “macros” such as :after_create, etc…
Public Instance Methods
_react_param_conversion(param, opt = nil)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 248 def _react_param_conversion(param, opt = nil) param = Native(param) param = JSON.from_object(param.to_n) if param.is_a? Native::Object result = if param.is_a? self param elsif param.is_a? Hash if opt == :validate_only klass = ReactiveRecord::Base.infer_type_from_hash(self, param) klass == self or klass < self else if param[primary_key] target = find(param[primary_key]) else target = new end associations = reflect_on_all_associations param = param.collect do |key, value| assoc = reflect_on_all_associations.detect do |assoc| assoc.association_foreign_key == key end if assoc if value [assoc.attribute, {id: [value], type: [nil]}] else [assoc.attribute, [nil]] end else [key, [value]] end end # We do want to be doing something like this, but this breaks other stuff... # # ReactiveRecord::Base.load_data do # ReactiveRecord::ServerDataCache.load_from_json(Hash[param], target) # end ReactiveRecord::ServerDataCache.load_from_json(Hash[param], target) target end else nil end result end
abstract_class=(val)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 149 def abstract_class=(val) @abstract_class = val end
abstract_class?()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 19 def abstract_class? defined?(@abstract_class) && @abstract_class == true end
all()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 163 def all ReactiveRecord::Base.class_scopes(self)[:all] ||= ReactiveRecord::Collection.new(self, nil, nil, self, "all") end
all=(collection)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 167 def all=(collection) ReactiveRecord::Base.class_scopes(self)[:all] = collection end
base_class()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 5 def base_class unless self < Base raise ActiveRecordError, "#{name} doesn't belong in a hierarchy descending from ActiveRecord" end if superclass == Base || superclass.abstract_class? self else superclass.base_class end end
column_names()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 212 def column_names ReactiveRecord::Base.public_columns_hash.keys end
columns_hash()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 216 def columns_hash ReactiveRecord::Base.public_columns_hash[name] || {} end
composed_of(name, opts = {})
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 204 def composed_of(name, opts = {}) Aggregations::AggregationReflection.new(base_class, :composed_of, name, opts) define_method(name) { @backing_record.reactive_get!(name, nil) } define_method("#{name}=") do |val| @backing_record.reactive_set!(name, backing_record.convert(name, val)) end end
define_attribute_methods()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 236 def define_attribute_methods columns_hash.keys.each do |name| next if name == :id define_method(name) { @backing_record.reactive_get!(name, nil) } define_method("#{name}!") { @backing_record.reactive_get!(name, true) } define_method("#{name}=") do |val| @backing_record.reactive_set!(name, backing_record.convert(name, val)) end define_method("#{name}_changed?") { @backing_record.changed?(name) } end end
enum(*args)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 52 def enum(*args) # when we implement schema validation we should also implement value checking end
find(id)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 44 def find(id) base_class.instance_eval {ReactiveRecord::Base.find(self, primary_key, id)} end
find_by(opts = {})
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 48 def find_by(opts = {}) base_class.instance_eval {ReactiveRecord::Base.find(self, opts.first.first, opts.first.last)} end
inheritance_column()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 31 def inheritance_column base_class.instance_eval {@inheritance_column_value || "type"} end
inheritance_column=(name)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 35 def inheritance_column=(name) base_class.instance_eval {@inheritance_column_value = name} end
method_missing(name, *args, &block)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 141 def method_missing(name, *args, &block) if args.count == 1 && name =~ /^find_by_/ && !block find_by(name.gsub(/^find_by_/, "") => args[0]) elsif !SERVER_METHODS.include?(name) raise "#{self.name}.#{name}(#{args}) (called class method missing)" end end
model_name()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 39 def model_name # in reality should return ActiveModel::Name object, blah blah name end
primary_key()
click to toggle source
primary_key=(val)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 27 def primary_key=(val) base_class.instance_eval { @primary_key_value = val } end
scope(name, body)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 153 def scope(name, body) singleton_class.send(:define_method, name) do | *args | args = (args.count == 0) ? name : [name, *args] ReactiveRecord::Base.class_scopes(self)[args] ||= ReactiveRecord::Collection.new(self, nil, nil, self, args) end singleton_class.send(:define_method, "#{name}=") do |collection| ReactiveRecord::Base.class_scopes(self)[name] = collection end end
server_method(name, default: nil)
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 224 def server_method(name, default: nil) server_methods[name] = { default: default } define_method(name) do |*args| vector = args.count.zero? ? name : [[name]+args] @backing_record.reactive_get!(vector, nil) end define_method("#{name}!") do |*args| vector = args.count.zero? ? name : [[name]+args] @backing_record.reactive_get!(vector, true) end end
server_methods()
click to toggle source
# File lib/reactive_record/active_record/class_methods.rb, line 220 def server_methods @server_methods ||= {} end