Class: Cassandra::KsDef

Inherits:
Object
  • Object
show all
Defined in:
lib/cassandra.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.from_h(h) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/cassandra.rb', line 72

def self.from_h(h)
  ks_def = h.reduce(self.new) do |ks_def, (field_name, field_value)|
    case field_name.to_sym
    when :strategy_options
      field_value = Hash[field_value.map { |k, v| [k.to_s, v.to_s] }]
    when :column_families
      field_name = 'cf_defs'
      field_value = field_value.map { |cf_name, cf_def_h| CfDef.from_h(cf_def_h.merge(:name => cf_name, :keyspace => h[:name])) }
    end
    field = self::_Fields.find_by_name(field_name.to_s)
    raise ArgumentError, %(No field named "#{field_name}") unless field
    ks_def.set_field_value(field, field_value)
    ks_def
  end
  ks_def.cf_defs = java.util.Collections.emptyList unless ks_def.cf_defs
  ks_def
end

Instance Method Details

#to_hObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/cassandra.rb', line 90

def to_h
  self.class.metaDataMap.reduce({}) do |acc, (field, )|
    field_name = field.field_name.to_sym
    field_value = get_field_value(field)
    case field_name.to_sym
    when :cf_defs
      cf_hs = field_value.map { |cf_def| cf_def.to_h }
      acc[:column_families] = Hash[cf_hs.map { |cf_h| [cf_h[:name], cf_h] }]
    when :strategy_options
      acc[field_name] = Hash[field_value.map { |pair| [pair.first.to_sym, pair.last] }] # JRuby 1.6.2 Java Map doesn't splat when yielding
    else
      acc[field_name] = field_value
    end
    acc
  end.tap do |h|
    if h[:strategy_class] == LOCATOR_STRATEGY_CLASSES[:simple] || h[:strategy_class] == LOCATOR_STRATEGY_CLASSES[:network_topology]
      h[:strategy_options].keys.each do |k|
        h[:strategy_options][k] = h[:strategy_options][k].to_i
      end
    end
  end
end