Created
June 11, 2021 08:44
-
-
Save julianrubisch/36df54502403f87b99f0c99d74dcb2a1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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