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
|
# File 'lib/fog/core/attributes.rb', line 17
def attribute(name, options = {})
class_eval " def \#{name}\n attributes[:\#{name}]\n end\n EOS\n case options[:type]\n when :boolean\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = case new_\#{name}\n when true,'true'\n true\n when false,'false'\n false\n end\n end\n EOS\n when :float\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = new_\#{name}.to_f\n end\n EOS\n when :integer\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = new_\#{name}.to_i\n end\n EOS\n when :string\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = new_\#{name}.to_s\n end\n EOS\n when :time\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = if new_\#{name}.nil? || new_\#{name} == \"\" || new_\#{name}.is_a?(Time)\n new_\#{name}\n else\n Time.parse(new_\#{name})\n end\n end\n EOS\n when :array\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = [*new_\#{name}]\n end\n EOS\n else\n if squash = options[:squash]\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_data)\n if new_data.is_a?(Hash)\n if new_data.has_key?(:'\#{squash}')\n attributes[:\#{name}] = new_data[:'\#{squash}']\n elsif new_data.has_key?(\"\#{squash}\")\n attributes[:\#{name}] = new_data[\"\#{squash}\"]\n else\n attributes[:\#{name}] = [ new_data ]\n end\n else\n attributes[:\#{name}] = new_data\n end\n end\n EOS\n else\n class_eval <<-EOS, __FILE__, __LINE__\n def \#{name}=(new_\#{name})\n attributes[:\#{name}] = new_\#{name}\n end\n EOS\n end\n end\n @attributes ||= []\n @attributes |= [name]\n for new_alias in [*options[:aliases]]\n aliases[new_alias] = name\n end\nend\n", __FILE__, __LINE__
|