Class: S7n::Entry

Inherits:
Object
  • Object
show all
Includes:
GetText
Defined in:
lib/s7n/entry.rb

Overview

機密情報を表現する。

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeEntry

Returns a new instance of Entry.



16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/s7n/entry.rb', line 16

def initialize
  @attributes = []
  attr = NumericAttribute.new("name" => "id", "editabled" => false,
                              "protected" => true)
  @attributes.push(attr)
  attr = TextAttribute.new("name" => "name", "protected" => true)
  @attributes.push(attr)
  attr = NumericAttribute.new("name" => "rate", "protected" => true,
                              "value" => 1)
  @attributes.push(attr)
  
  @tags = []
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(symbol, *args) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/s7n/entry.rb', line 86

def method_missing(symbol, *args)
  attr_name = symbol.to_s
  if attr_name[-1] == "="
    attr_name = attr_name[0..-2]
    setter = true
  end
  attr = @attributes.find { |a|
    a.name == attr_name
  }
  if attr
    if setter
      attr.value = args.first
    else
      return attr.value
    end
  else
    super
  end
end

Instance Attribute Details

#attributesObject (readonly)

属性の配列。



14
15
16
# File 'lib/s7n/entry.rb', line 14

def attributes
  @attributes
end

#tagsObject (readonly)

タグ名の配列。



11
12
13
# File 'lib/s7n/entry.rb', line 11

def tags
  @tags
end

Instance Method Details

#add_attributes(*attributes) ⇒ Object

attributes で指定した属性を追加する。 名前が同じ属性が存在する場合、値を書き換える。 名前が同じ属性が存在し、なおかつ型が異なる場合、ApplicationError 例外を発生させる。



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/s7n/entry.rb', line 50

def add_attributes(*attributes)
  [attributes].flatten.each do |attribute|
    attr = @attributes.find { |a|
      a.name == attribute.name
    }
    if attr
      if attr.class == attribute.class
        attr.value = attribute.value
      else
        raise ApplicationError, _("not same attribute type: name=<%s> expected=<%s> actual=<%s>") % [attr.name, attr.class, attribute.class]
      end
    else
      @attributes.push(attribute)
    end
  end
end

#duplicate_attributes(exclude_uneditable = true) ⇒ Object

全ての属性の複製を取得する。



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/s7n/entry.rb', line 68

def duplicate_attributes(exclude_uneditable = true)
  if exclude_uneditable
    attrs = @attributes
  else
    attrs = @attributes.select { |attr|
      attr.editable?
    }
  end
  return attrs.collect { |attr|
    a = attr.dup
    begin
      a.value = attr.value.dup
    rescue TypeError
    end
    a
  }
end

#get_attribute(name) ⇒ Object

name で指定した名前の属性を取得する。 存在しない場合、nil を返す。



42
43
44
# File 'lib/s7n/entry.rb', line 42

def get_attribute(name)
  return @attributes.find { |attr| attr.name == name }
end

#idObject

ID を取得する。



31
32
33
# File 'lib/s7n/entry.rb', line 31

def id
  return get_attribute("id").value
end

#id=(val) ⇒ Object

ID を設定する。



36
37
38
# File 'lib/s7n/entry.rb', line 36

def id=(val)
  get_attribute("id").value = val
end