Class: ConfigManager::Setting

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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id, value, tags) ⇒ Setting

Returns a new instance of Setting.



5
6
7
8
9
# File 'lib/config_manager/setting.rb', line 5

def initialize(id, value, tags)
  @id = id
  @value = value
  @tags = tags
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



3
4
5
# File 'lib/config_manager/setting.rb', line 3

def id
  @id
end

#tagsObject (readonly)

Returns the value of attribute tags.



3
4
5
# File 'lib/config_manager/setting.rb', line 3

def tags
  @tags
end

#valueObject (readonly)

Returns the value of attribute value.



3
4
5
# File 'lib/config_manager/setting.rb', line 3

def value
  @value
end

Class Method Details

.allObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/config_manager/setting.rb', line 75

def all
  keys = $redis.smembers(global_key)
  return [] if keys.empty?

  values = $redis.mget(*keys)

  # remove deleted keys
  obsolete_keys = Range.new(0, keys.size, true).inject([]) do |memo, i|
    values.at(i) ? memo : (memo << keys.at(i))
  end

  unless obsolete_keys.empty?
    Rails.logger.info("DELETING OBSOLETE KEYS IN GLOBAL INDEX: #{obsolete_keys}")
    $redis.srem(global_key, obsolete_keys)
    keys = keys - obsolete_keys
    values.compact!
  end

  # get tags
  ids = keys.map {|k| k.gsub("#{prefix}:", '') }
  tag_keys = ids.map {|id| generate_tags_key(id) }
  tags = tag_keys.map {|key| $redis.smembers(key) }

  ids.zip(values, tags).map do |i,v, t|
    Setting.new(i, v, t)
  end
end

.build(params) ⇒ Object



29
30
31
32
33
34
# File 'lib/config_manager/setting.rb', line 29

def build(params)
  tags = (params[:tags] || params[:formatted_tags] || "").
      gsub(/\s*,\s*/,',').
      split(',')
  new(params[:id], params[:value], tags)
end

.create(params) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/config_manager/setting.rb', line 40

def create(params)
  setting = build(params)
  if setting.valid?
    setting.persist
    find(params[:id], true)
  else
    setting
  end
end

.delete(id) ⇒ Object



107
108
109
# File 'lib/config_manager/setting.rb', line 107

def delete(id)
  $redis.del(generate_key(id), generate_tags_key(id))
end

.find(id, with_tags = false) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/config_manager/setting.rb', line 63

def find(id, with_tags=false)
  key = generate_key(id)
  value = $redis.get(key)

  return nil unless value

  index = generate_tags_key(id)
  tags = with_tags ? $redis.smembers(index) : []

  new(id, value, tags)
end

.persist(id, value, *indexes) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/config_manager/setting.rb', line 50

def persist(id, value, *indexes)
  $redis.set(generate_key(id), value)
  unless indexes.empty?
    $redis.sadd(generate_tags_key(id), indexes) 
    $redis.sadd(tag_global_key, indexes)
  end
  
  # update global and tag indexes
  indexes = indexes.map{|index| generate_index(index)}
  indexes << global_key
  index_by(id, indexes)
end

.tagsObject



103
104
105
# File 'lib/config_manager/setting.rb', line 103

def tags
  $redis.smembers(tag_global_key)
end

.value(id) ⇒ Object



36
37
38
# File 'lib/config_manager/setting.rb', line 36

def value(id)
  (find(id) || build({})).value
end

Instance Method Details

#formatted_tagsObject



15
16
17
# File 'lib/config_manager/setting.rb', line 15

def formatted_tags
  @tags && @tags.join(', ')
end

#messageObject



23
24
25
26
# File 'lib/config_manager/setting.rb', line 23

def message
  return "missing name(id)" unless @id.present?
  return "missing value" unless !!@value
end

#persistObject



19
20
21
# File 'lib/config_manager/setting.rb', line 19

def persist
  Setting.persist(@id, @value, *@tags)
end

#valid?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/config_manager/setting.rb', line 11

def valid?
  @id.present? && !!@value
end