serialized_attr_accessors 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/serialized_attr_accessors.rb +49 -3
- metadata +3 -3
@@ -17,6 +17,10 @@ module SerializedAttrAccessors
|
|
17
17
|
end
|
18
18
|
|
19
19
|
module ClassMethods
|
20
|
+
def s_datatypes
|
21
|
+
[:integer, :string, :boolean]
|
22
|
+
end
|
23
|
+
|
20
24
|
#Stores list of attributes serialized
|
21
25
|
def serialized_attribute_list
|
22
26
|
@@parent_attribute_list ||= {:serialized_options => []}
|
@@ -27,11 +31,24 @@ module SerializedAttrAccessors
|
|
27
31
|
@@curr_ser_attr ||= serialized_attribute_list.keys.first
|
28
32
|
end
|
29
33
|
|
30
|
-
#Generates getter and setter method with field_name and default_value (if provided else nil)
|
34
|
+
#Generates getter and setter method with field_name (datatype and) default_value (if provided else nil)
|
31
35
|
#Example:
|
36
|
+
# sattr_accessor :name, :string, "some name"
|
37
|
+
# sattr_accessor :roll_no, :integer, 111
|
38
|
+
# sattr_accessor :is_admin, :boolean, true
|
32
39
|
# sattr_accessor :second_name, "kumar"
|
33
40
|
# sattr_accessor :address
|
34
|
-
def sattr_accessor(
|
41
|
+
def sattr_accessor(*arg)
|
42
|
+
field_name = arg[0]
|
43
|
+
if s_datatypes.include?(arg[1])
|
44
|
+
datatype = arg[1]
|
45
|
+
default_value = arg[2]
|
46
|
+
else
|
47
|
+
datatype = nil
|
48
|
+
default_value = arg[1]
|
49
|
+
end
|
50
|
+
|
51
|
+
|
35
52
|
field_name = field_name.to_sym unless field_name.is_a?(Symbol)
|
36
53
|
|
37
54
|
serialized_attribute_list[current_serialized_attr] ||= []
|
@@ -51,10 +68,39 @@ module SerializedAttrAccessors
|
|
51
68
|
end
|
52
69
|
|
53
70
|
define_method field_name do
|
54
|
-
|
71
|
+
field_value = unserialized_options(fetch_parent_attribute(field_name))[field_name]
|
72
|
+
(field_value.nil? ? default_value : field_value)
|
55
73
|
end
|
56
74
|
|
57
75
|
define_method "#{field_name.to_s}=" do |field_value|
|
76
|
+
if datatype.nil? #If no datatype then take value as it is
|
77
|
+
field_value = field_value
|
78
|
+
elsif datatype == :integer #If integer then convert to integer and also accept nil
|
79
|
+
field_value = field_value.to_i unless field_value.nil?
|
80
|
+
elsif datatype == :string #If string then convert to string and also accept nil
|
81
|
+
field_value = field_value.to_s unless field_value.nil?
|
82
|
+
elsif datatype == :boolean #If boolean then convert to true or false and also accept nil
|
83
|
+
unless field_value.nil?
|
84
|
+
if [true, false].include?(field_value)
|
85
|
+
field_value = field_value
|
86
|
+
elsif (field_value.is_a?(Fixnum) or field_value.is_a?(Bignum)) #Todo: Use a regexp instead
|
87
|
+
field_value = ((field_value.to_i <= 0) ? false : true)
|
88
|
+
elsif field_value.is_a?(String)
|
89
|
+
temp_f = field_value.downcase.strip
|
90
|
+
field_value = if temp_f == "false"
|
91
|
+
false
|
92
|
+
elsif temp_f == "true"
|
93
|
+
true
|
94
|
+
elsif temp_f.to_i > 0
|
95
|
+
true
|
96
|
+
else
|
97
|
+
false
|
98
|
+
end
|
99
|
+
else
|
100
|
+
raise "InvalidValue"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
58
104
|
unserialized_options(fetch_parent_attribute(field_name)).merge!(field_name => field_value)
|
59
105
|
field_value
|
60
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serialized_attr_accessors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-05-07 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: attribute accessor generator using sattr_accessor (with default field
|
15
15
|
:serialized_options) or a different serialized field using for_serialized_field
|
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
41
41
|
version: '0'
|
42
42
|
requirements: []
|
43
43
|
rubyforge_project:
|
44
|
-
rubygems_version: 1.8.
|
44
|
+
rubygems_version: 1.8.10
|
45
45
|
signing_key:
|
46
46
|
specification_version: 3
|
47
47
|
summary: SerializedAttrAccessors for generating attr_accessors backed by serialized
|