Skip to content

Instantly share code, notes, and snippets.

@baya
Last active December 9, 2015 23:28
Show Gist options
  • Save baya/4344170 to your computer and use it in GitHub Desktop.
Save baya/4344170 to your computer and use it in GitHub Desktop.
状态管理工具v2.0
# 用于维护状态列表
# Example:
#
# sm = CodeNoteMapper.new({
# '-3' => '购买彩票失败',
# '-1' => ['默认', '未做任何处理'],
# '0' => '投注成功',
# '1' => '购买彩票成功'
# })
# sm['默认'].code #=> '-1'
# sm['默认'].note #=> '未做任何处理'
# sm['默认'].name #=> '默认'
# sm['默认', '投注成功'].codes #=> ['-1', '0']
# item = sm['-1']
# item.note #=> '未做任何处理'
# item.code #=> '-1'
# item.name #=> '默认'
class CodeNoteMapper
def initialize h = {}
@status = {}
@items = []
@raw = h
@data = nil
h.each {|k, v|
v = [v] if !v.is_a? Array
name = v[0]
code = k
note = v[1].nil? ? name : v[1]
item = OpenStruct.new(name: name, code: code, note: note)
@status[k] = item
@items << item
}
@enum = @items.to_enum
end
def raw
@raw.dup
end
def [](*indexs)
@data = indexs.map {|index|
@items.detect {|item| item.name == index || item.code == index }
}.uniq {|item| item.code }
self
end
def code
@data.first.code
end
def name
@data.first.name
end
def note
@data.first.note
end
def codes
@data.map(&:code)
end
def each
@enum.each {|item| yield item }
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment