Module: Risky::SecondaryIndexes

Defined in:
lib/risky/secondary_indexes.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

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

#indexes2iObject



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

#inspectObject



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