17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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/fog/attributes.rb', line 17
def attribute(name, options = {})
if !options.is_a?(Hash)
options = {:aliases => options}
end
class_eval "attr_reader :\#{name}\n", __FILE__, __LINE__
case options[:type]
when :boolean
class_eval "def \#{name}=(new_\#{name})\n@\#{name} = case new_\#{name}\nwhen 'true'\ntrue\nwhen 'false'\nfalse\nend\nend\n", __FILE__, __LINE__
when :float
class_eval "def \#{name}=(new_\#{name})\n@\#{name} = new_\#{name}.to_f\nend\n", __FILE__, __LINE__
when :integer
class_eval "def \#{name}=(new_\#{name})\n@\#{name} = new_\#{name}.to_i\nend\n", __FILE__, __LINE__
when :string
class_eval "def \#{name}=(new_\#{name})\n@\#{name} = new_\#{name}.to_s\nend\n", __FILE__, __LINE__
when :time
class_eval "def \#{name}=(new_\#{name})\nif !new_\#{name}.is_a?(Time)\n@\#{name} = Time.parse(new_\#{name})\nelse\n@\#{name} = new_\#{name}\nend\nend\n", __FILE__, __LINE__
when :array
class_eval "def \#{name}=(new_\#{name})\n@\#{name} = if new_\#{name}.is_a?(Array)\nnew_\#{name}\nelse\n@\#{name} = [ new_\#{name} ]\nend\nend\n", __FILE__, __LINE__
else
if squash = options[:squash]
class_eval "def \#{name}=(new_data)\nif new_data.is_a?(Hash)\nif new_data[:\#{squash}]\n@\#{name} = new_data[:\#{squash}]\nelse\n@\#{name} = [ new_data ]\nend\nelse\n@\#{name} = new_data\nend\nend\n", __FILE__, __LINE__
else
class_eval "attr_writer :\#{name}\n", __FILE__, __LINE__
end
end
@attributes ||= []
@attributes |= [name]
for new_alias in [*options[:aliases]]
aliases[new_alias] = name
end
end
|