serialized_attr_accessors 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|