🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

redis_object

Package Overview
Dependencies
Maintainers
1
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

redis_object - rubygems Package Compare versions

Comparing version
1.5.1
to
1.5.3
+2
-2
lib/redis_object.rb

@@ -37,7 +37,7 @@ require 'active_support/inflector'

include Seabright::Keys
include Seabright::Types
include Seabright::DefaultValues
include Seabright::Indices
include Seabright::Collections
include Seabright::Types
include Seabright::Triggers
include Seabright::Indices
include Seabright::Views

@@ -44,0 +44,0 @@ include Seabright::ViewCaching

@@ -74,5 +74,11 @@ module Seabright

def get(k)
cached_hash_values[k.to_s] ||= _get(k)
filter_gotten_value(k, (cached_hash_values[k.to_s] || _get(k)))
end
def filter_gotten_value(k,v)
self.class.get_filters.inject(v) do |acc, filter|
filter.call(self, k, acc)
end
end
def _get(k)

@@ -96,2 +102,5 @@ if is_ref_key?(k) && (v = get_reference(store.hget(hkey, k.to_s)))

def mset(dat)
dat = self.class.mset_filters.inject(dat) do |acc,filter|
filter.call(self, acc)
end
store.hmset(hkey, *(dat.inject([]){|acc,(k,v)| acc << [k,v] }.flatten))

@@ -120,2 +129,5 @@ cached_hash_values.merge!(dat)

def set(k,v)
(k,v) = self.class.set_filters.inject([k,v]) do |acc,filter|
filter.call(self,*acc) unless acc.nil? or acc[0].nil?
end
return nil if k.nil?

@@ -157,2 +169,5 @@ return set_ref(k,v) if v.is_a?(RedisObject)

def setnx(k,v)
(k,v) = self.class.set_filters.inject([k,v]) do |acc,filter|
filter.call(self,*acc)
end
if success = store.hsetnx(hkey, k.to_s, v.to_s)

@@ -223,2 +238,30 @@ cached_hash_values[k.to_s] = v

def action_filters
@@action_filters ||= {}
end
def set_filters
action_filters[:set] ||= []
end
def filter_sets(&block)
set_filters << block
end
def mset_filters
action_filters[:mset] ||= []
end
def filter_msets(&block)
mset_filters << block
end
def get_filters
action_filters[:get] ||= []
end
def filter_gets(&block)
get_filters << block
end
def clean_id(i)

@@ -225,0 +268,0 @@ i.to_s.gsub(/.*:/,'').gsub(/_h$/,'')

@@ -9,16 +9,2 @@ module Seabright

def load(o_id)
super(o_id)
store.smembers(hkey_col).each do |name|
collections[name] = Seabright::Collection.load(name,self)
define_access(name) do
get_collection(name)
end
define_access(name.to_s.singularize) do
get_collection(name).latest
end
end
true
end
def delete_child(obj)

@@ -82,10 +68,14 @@ if col = get_collection(obj.collection_name)

def get(k)
if has_collection?(k)
get_collection(k)
elsif has_collection?(pk = k.to_s.pluralize)
get_collection(pk).first
else
super(k)
def load(o_id)
super(o_id)
store.smembers(hkey_col).each do |name|
collections[name] = Seabright::Collection.load(name,self)
define_access(name) do
get_collection(name)
end
define_access(name.to_s.singularize) do
get_collection(name).latest
end
end
true
end

@@ -102,3 +92,3 @@

store.sadd hkey_col, name
@collection_names << name.to_s
collection_names << name.to_s
collections[name.to_s] ||= Collection.load(name,self)

@@ -109,3 +99,3 @@ define_access(name.to_s.pluralize) do

define_access(name.to_s.singularize) do
get_collection(name).latest
get_collection(name).first
end

@@ -124,12 +114,2 @@ end

def mset(dat)
dat.select! {|k,v| !collections[k.to_s] }
super(dat)
end
def set(k,v)
@data ? super(k,v) : has_collection?(k) ? get_collection(k.to_s).replace(v) : super(k,v)
v
end
def collect_type_by_key(col,*keys)

@@ -144,2 +124,33 @@ collect = get_collection(col)

def intercept_sets_for_collecting!
return if @intercepted_sets_for_collecting
self.class_eval do
filter_gets do |obj, k, v|
if obj.has_collection?(k)
obj.get_collection(k)
elsif obj.has_collection?(pk = k.to_s.pluralize)
obj.get_collection(pk).first
else
v
end
end
filter_sets do |obj, k, v|
if obj.has_collection?(k)
obj.get_collection(k.to_s).replace(v)
return [nil,nil]
else
[k,v]
end
end
filter_msets do |obj, dat|
dat.select {|k,v| !obj.collections[k.to_s] }
end
end
@intercepted_sets_for_collecting = true
end
def hkey_col(ident = nil)

@@ -179,8 +190,7 @@ "#{hkey(ident)}:collections"

if has_collection?(k)
get_collection(k)
return get_collection(k)
elsif has_collection?(pk = k.to_s.pluralize)
get_collection(pk).first
else
super(k)
return get_collection(pk).first
end
nil
end

@@ -205,2 +215,3 @@

base.extend(ClassMethods)
base.intercept_sets_for_collecting!
end

@@ -249,8 +260,14 @@

RedisObject::ScriptSources::FwdScript = "redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)\nlocal keys = redis.call('ZRANGE', KEYS[1], 0, KEYS[4])\nredis.call('DEL', KEYS[1])\nreturn keys".freeze
RedisObject::ScriptSources::RevScript = "redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)\nlocal keys = redis.call('ZREVRANGE', KEYS[1], 0, KEYS[4])\nredis.call('DEL', KEYS[1])\nreturn keys".freeze
RedisObject::ScriptSources::FwdScript = "redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)
local keys = redis.call('ZRANGE', KEYS[1], 0, KEYS[4])
redis.call('DEL', KEYS[1])
return keys".freeze
RedisObject::ScriptSources::RevScript = "redis.call('ZINTERSTORE', KEYS[1], 2, KEYS[2], KEYS[3], 'WEIGHTS', 1, 0)
local keys = redis.call('ZREVRANGE', KEYS[1], 0, KEYS[4])
redis.call('DEL', KEYS[1])
return keys".freeze
def keys_by_index(idx,num=-1,reverse=false)
keys = run_script(reverse ? :RevScript : :FwdScript, [temp_key, sort_index_key(idx), key, num])
ListEnumerator.new(keys) do |y|
keys = run_script(reverse ? :RevScript : :FwdScript, [temp_key, sort_index_key(idx), key, num>0 ? num - 1 : -1])
ListEnumerator.new(keys.uniq) do |y|
keys.each do |member|

@@ -596,2 +613,5 @@ y << member

def class_const_for(name)
if cls = RedisObject.constant_lookups[name.to_s.classify.to_sym]
return cls
end
Object.const_get(name.to_s.classify.to_sym) rescue RedisObject

@@ -598,0 +618,0 @@ end

@@ -14,8 +14,8 @@ module Seabright

alias_method :undefaulted_get, :get unless method_defined?(:undefaulted_get)
def get(k)
if !is_set?(k) && (d = self.class.default_vals[k.to_sym]) && !d.nil?
return d
filter_gets do |obj, k, v|
if !obj.is_set?(k) && (d = obj.class.default_vals[k.to_sym]) && !d.nil?
d
else
v
end
undefaulted_get(k)
end

@@ -22,0 +22,0 @@

@@ -10,30 +10,35 @@ module Seabright

def filtered_method_call(method,*args)
if filters = self.class.filters_for(method)
filters.each do |f|
next unless args.is_a?(Array) and !args[0].nil?
args = send(f,*args)
filter_gets do |obj, k, v|
if filters = obj.class.filters_for(:get)
return filters.inject(v) do |acc,f|
obj.send(f,acc)
end
else
v
end
unless args.is_a?(Array)
args = [nil,nil]
end
send("unfiltered_#{method.to_s}".to_sym,*args)
end
alias_method :unfiltered_get, :get unless method_defined?(:unfiltered_get)
def get(k)
filtered_method_call(:get,k)
filter_sets do |obj, k, v|
if filters = obj.class.filters_for(:set)
filters.inject([k,v]) do |acc,f|
obj.send(f,*acc)
end
else
[k,v]
end
end
alias_method :unfiltered_set, :set unless method_defined?(:unfiltered_set)
def set(k,v)
filtered_method_call(:set,k,v)
end
alias_method :unfiltered_setnx, :setnx unless method_defined?(:unfiltered_setnx)
def setnx(k,v)
filtered_method_call(:setnx,k,v)
end
# filter_msets do |dat|
# if filters = self.class.filters_for(method)
# filters.each do |f|
# next unless args.is_a?(Array) and !args[0].nil?
# args = send(f,*args)
# end
# end
# unless args.is_a?(Array)
# args = [nil,nil]
# end
# args
# end
#
end

@@ -45,3 +50,2 @@ @intercept_for_filters = true

filter_method(:set,filter)
filter_method(:setnx,filter)
end

@@ -48,0 +52,0 @@

@@ -25,13 +25,2 @@ module Seabright

def indexed_set_method(meth,k,v)
ret = send("unindexed_#{meth}".to_sym,k,v)
if self.class.has_index?(k)
set_index k, v, hkey
end
if self.class.has_sort_index?(k)
set_sort_index k, v, hkey
end
ret
end
def set_index(k,v,hkey)

@@ -49,21 +38,20 @@ if cur = get(k)

alias_method :unindexed_set, :set unless method_defined?(:unindexed_set)
def set(k,v)
indexed_set_method(:set,k,v)
filter_sets do |obj, k, v|
if obj.class.has_index?(k)
obj.set_index k, v, obj.hkey
end
if obj.class.has_sort_index?(k)
obj.set_sort_index k, v, obj.hkey
end
[k, v]
end
alias_method :unindexed_setnx, :setnx unless method_defined?(:unindexed_setnx)
def setnx(k,v)
indexed_set_method(:setnx,k,v)
end
alias_method :unindexed_mset, :mset unless method_defined?(:unindexed_mset)
def mset(dat)
dat.select {|k,v| self.class.has_index?(k) }.each do |k,v|
set_index k, v, hkey
filter_msets do |obj, dat|
dat.each do |k,v|
obj.set_index(k, v, obj.hkey) if obj.class.has_index?(k)
end
dat.select {|k,v| self.class.has_sort_index?(k) }.each do |k,v|
set_sort_index k, v, hkey
dat.each do |k,v|
obj.set_sort_index(k, v, obj.hkey) if obj.class.has_sort_index?(k)
end
unindexed_mset(dat)
dat
end

@@ -152,2 +140,3 @@

base.extend(ClassMethods)
base.intercept_sets_for_indices!
end

@@ -154,0 +143,0 @@

module Seabright
def RedisObject.constant_lookups
@constant_lookups ||= {}
end
module InheritanceTracking
module ClassMethods
def inherited(child_class)
RedisObject.constant_lookups[child_class.name.to_s.split("::").last.to_sym] ||= child_class
child_classes_set.add(child_class)

@@ -7,0 +14,0 @@ end

@@ -6,3 +6,5 @@ module Seabright

# return unless self.class.time_matters?
set(:created_at, Time.now) if !is_set?(:created_at)
if !is_set?(:created_at)
set(:created_at, Time.now)
end
set(:updated_at, Time.now)

@@ -9,0 +11,0 @@ end

@@ -139,26 +139,15 @@ module Seabright

return if @intercepted_for_typing
self.class_eval do
alias_method :untyped_get, :get unless method_defined?(:untyped_get)
def get(k)
enforce_format(k,untyped_get(k))
end
alias_method :untyped_mset, :mset unless method_defined?(:untyped_mset)
def mset(dat)
dat.merge!(dat) {|k,v1,v2| save_format(k,v1) }
untyped_mset(dat)
end
alias_method :untyped_set, :set unless method_defined?(:untyped_set)
def set(k,v)
untyped_set(k,save_format(k,v))
end
alias_method :untyped_setnx, :setnx unless method_defined?(:untyped_setnx)
def setnx(k,v)
untyped_setnx(k,save_format(k,v))
end
filter_gets do |obj, k, v|
obj.enforce_format(k, v)
end
filter_sets do |obj, k, v|
[k, obj.save_format(k,v)]
end
filter_msets do |obj, dat|
dat.merge!(dat) {|k,v1,v2| obj.save_format(k, v1) }
end
@intercepted_for_typing = true

@@ -165,0 +154,0 @@ end

@@ -6,2 +6,3 @@ module Seabright

def format_array(val)
return val if val.is_a?(Array)
val ? Yajl::Parser.new(:symbolize_keys => true).parse(val) : []

@@ -11,2 +12,3 @@ end

def save_array(val)
return val if val.is_a?(String)
Yajl::Encoder.encode(val)

@@ -13,0 +15,0 @@ end

@@ -6,7 +6,7 @@ module Seabright

def format_boolean(val)
val=="true"
(val === true or val === "true") ? true : false
end
def save_boolean(val)
val === true ? "true" : "false"
(val === true or val === "true") ? "true" : "false"
end

@@ -13,0 +13,0 @@

@@ -6,2 +6,3 @@ module Seabright

def format_json(val)
return val unless val.is_a?(String)
val ? Yajl::Parser.new(:symbolize_keys => true).parse(val) : nil

@@ -11,2 +12,3 @@ end

def save_json(val)
return val if val.is_a?(String)
Yajl::Encoder.encode(val)

@@ -13,0 +15,0 @@ end

module Seabright
class RedisObject
VERSION = "1.5.1"
VERSION = "1.5.3"
end
end

@@ -25,3 +25,3 @@ require File.dirname(__FILE__) + '/spec_helper'

RedisObject.dump_stores_to_files("/tmp")
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -28,0 +28,0 @@

@@ -33,3 +33,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -36,0 +36,0 @@

@@ -13,3 +13,3 @@ require File.dirname(__FILE__) + '/spec_helper'

RedisObject.store.flushdb
SpecHelper.flushdb
@granddad = GrandDad.create("gramps")

@@ -144,3 +144,3 @@ @dad = Daddy.create("dad")

# @dad.sons.indexed(:created_at,3,true).count.should eq(3)
@dad.sons.indexed(:created_at,3,true).count.should eq(3)

@@ -147,0 +147,0 @@ Son.indexed(:created_at,3,true).count.should eq(3)

@@ -31,3 +31,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -34,0 +34,0 @@

@@ -19,5 +19,5 @@ require File.dirname(__FILE__) + '/spec_helper'

describe Seabright::Triggers do
describe Seabright::Dumping do
before do
RedisObject.store.flushdb
SpecHelper.flushdb
5.times do

@@ -68,3 +68,3 @@ d = DumpableObject.create(phone: Random.rand(100)*555, mailed: true, canceled_at: Time.now)

r.size.should > 100
RedisObject.store.flushdb
SpecHelper.flushdb
RedisObject.load_dump r, :yml

@@ -75,3 +75,3 @@ DumpableObject.latest.generic_objects.count.should eq(1)

# r.size.should > 100
# RedisObject.store.flushdb
# SpecHelper.flushdb
# RedisObject.load_dump r, :json

@@ -78,0 +78,0 @@ # DumpableObject.latest.generic_objects.count.should eq(1)

@@ -11,3 +11,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
@dad = Dad.create("daddy")

@@ -14,0 +14,0 @@ @son = Son.create("sonny")

@@ -16,3 +16,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -19,0 +19,0 @@

@@ -38,3 +38,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -41,0 +41,0 @@

@@ -13,3 +13,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb

@@ -16,0 +16,0 @@ mozzarella = Topping.create(:mozzarella)

@@ -19,12 +19,15 @@ require File.dirname(__FILE__) + '/spec_helper'

describe Seabright::Triggers do
before do
RedisObject.store.flushdb
@secret = SensitiveObject.create(test: Time.now, yay: true, stuff: {test: "1"}, worthless: "yup", sup: "dawg")
before(:each) do
SpecHelper.flushdb
end
let(:secret) do
SensitiveObject.create(test: Time.now, yay: true, stuff: {test: "1"}, worthless: "yup", sup: "dawg")
end
it "can sanitize a field or two willy nilly" do
@secret.stuff.should be_a(Hash)
@secret.sanitize! :stuff, :sup
@secret.stuff.should eq(nil)
secret.stuff.should be_a(Hash)
secret.sanitize! :stuff, :sup
secret.stuff.should eq(nil)

@@ -35,7 +38,7 @@ end

@secret.test.should_not eq(nil)
@secret.yay.should eq(true)
@secret.sanitize_by_name! :burn
@secret.test.should eq(nil)
@secret.yay.should eq(false)
secret.test.should_not eq(nil)
secret.yay.should eq(true)
secret.sanitize_by_name! :burn
secret.test.should eq(nil)
secret.yay.should eq(false)

@@ -42,0 +45,0 @@ end

@@ -10,3 +10,3 @@ require File.dirname(__FILE__) + '/spec_helper'

RedisObject.store.flushdb
SpecHelper.flushdb

@@ -13,0 +13,0 @@ (1..5).each do |n|

@@ -38,3 +38,11 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'

module SpecHelper
def self.flushdb
RedisObject.store.flushdb
end
end
raise 'must specify TEST_DB' unless ENV['TEST_DB']
RedisObject.configure_store({adapter:'Redis', db:ENV['TEST_DB']},:global,:alias)

@@ -9,3 +9,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -12,0 +12,0 @@

@@ -33,3 +33,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -36,0 +36,0 @@

@@ -29,3 +29,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
end

@@ -32,0 +32,0 @@

@@ -56,3 +56,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
@obj = TypedObject.create(TestData)

@@ -59,0 +59,0 @@ @dad = Container.create("daddy")

@@ -36,3 +36,3 @@ require File.dirname(__FILE__) + '/spec_helper'

before do
RedisObject.store.flushdb
SpecHelper.flushdb
@obj = ViewedObject.create(TestData)

@@ -39,0 +39,0 @@ end