Skip to content

Instantly share code, notes, and snippets.

@julianrubisch
Created June 11, 2021 08:44
Show Gist options
  • Save julianrubisch/36df54502403f87b99f0c99d74dcb2a1 to your computer and use it in GitHub Desktop.
Save julianrubisch/36df54502403f87b99f0c99d74dcb2a1 to your computer and use it in GitHub Desktop.
module YieldsMembers
module ClassMethods
def yields_members_for(*method_names)
module_eval do
# method_names.each do |method_name|
binding.pry
define_method :add do |*members, &proc|
puts "IN PREPENDED MODULE"
binding.pry
super members
proc&.call send(:members)
end
# method = instance_method(:add)
binding.pry
# end
end
end
end
def self.prepended(base)
base.extend ClassMethods
# define_method :add do |*members, &proc|
# puts "IN PREPENDED MODULE"
# super members
# proc&.call send(:members)
# end
end
end
class Kredis::Types::Set < Kredis::Types::Proxying
proxying :smembers, :sadd, :srem, :multi, :del, :sismember, :scard, :spop
prepend YieldsMembers
yields_members_for :add
attr_accessor :typed
def members
strings_to_types(smembers || [], typed).sort
end
alias to_a members
def add(*members)
puts "IN CLASS"
sadd types_to_strings(members) if members.flatten.any?
end
alias << add
def remove(*members)
srem types_to_strings(members) if members.flatten.any?
yield send(:members) if block_given?
end
def replace(*members)
multi do
del
add members
end
end
def include?(member)
sismember type_to_string(member)
end
def size
scard.to_i
end
def take
spop
end
def clear
del
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment