Module: Risky::SecondaryIndexes
- Defined in:
- lib/risky/secondary_indexes.rb
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #indexes2i ⇒ Object
-
#initialize(key = nil, values = {}, indexes2i = {}) ⇒ Object
Instance methods.
- #inspect ⇒ Object
- #load_riak_object(riak_object, opts = {:merge => true}) ⇒ Object
- #save(opts = {}) ⇒ Object
Class Method Details
.included(base) ⇒ Object
3 4 5 |
# File 'lib/risky/secondary_indexes.rb', line 3 def self.included(base) base.extend ClassMethods end |
Instance Method Details
#indexes2i ⇒ Object
189 190 191 |
# File 'lib/risky/secondary_indexes.rb', line 189 def indexes2i @indexes2i end |
#initialize(key = nil, values = {}, indexes2i = {}) ⇒ Object
Instance methods
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/risky/secondary_indexes.rb', line 129 def initialize(key = nil, values = {}, indexes2i = {}) super((key.nil? ? nil : key.to_s), values) # Parse anything not parsed correctly by Yajl (no support for json_create) self.class.values.each do |k,v| if self[k].is_a?(Hash) && self[k]['json_class'] klass = Risky::Inflector.constantize(self[k]['json_class']) self[k] = klass.send(:json_create, self[k]) end end @indexes2i = {} indexes2i.each do |k,v| send(k.to_s + '=', v) end end |
#inspect ⇒ Object
193 194 195 |
# File 'lib/risky/secondary_indexes.rb', line 193 def inspect "#<#{self.class} #{key} #{@indexes2i.inspect} #{@values.inspect}>" end |
#load_riak_object(riak_object, opts = {:merge => true}) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/risky/secondary_indexes.rb', line 164 def load_riak_object(riak_object, opts = {:merge => true}) super(riak_object, opts) # Parse anything not parsed correctly by Yajl (no support for json_create) self.class.values.each do |k,v| if self[k].is_a?(Hash) && self[k]['json_class'] klass = Risky::Inflector.constantize(self[k]['json_class']) self[k] = klass.send(:json_create, self[k]) end end self.class.indexes2i.each do |k, v| case v[:type] when :int @indexes2i[k] = v[:multi] ? @riak_object.indexes["#{k}_int"].map(&:to_i) : @riak_object.indexes["#{k}_int"].first.to_i when :bin @indexes2i[k] = v[:multi] ? @riak_object.indexes["#{k}_bin"].map(&:to_s) : @riak_object.indexes["#{k}_bin"].first.to_s else raise TypeError, "Invalid 2i type '#{v[:type]}' for index #{k} on #{self.class.name}" end end self end |
#save(opts = {}) ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/risky/secondary_indexes.rb', line 147 def save(opts = {}) self.class.indexes2i.each do |k, v| raise ArgumentError, "Nil for index #{k} on #{self.class.name}" if (v[:multi] ? @indexes2i[k].nil? : @indexes2i[k].blank?) && !v[:allow_nil] case v[:type] when :int @riak_object.indexes["#{k}_int"] = v[:multi] && @indexes2i[k].respond_to?(:map) ? @indexes2i[k].map(&:to_i) : [ @indexes2i[k].to_i ] when :bin @riak_object.indexes["#{k}_bin"] = v[:multi] && @indexes2i[k].respond_to?(:map) ? @indexes2i[k].map(&:to_s) : [ @indexes2i[k].to_s ] else raise TypeError, "Invalid 2i type '#{v[:type]}' for index #{k} on #{self.class.name}" end end super(opts) end |