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.
Files changed (2) hide show
  1. data/lib/serialized_attr_accessors.rb +49 -3
  2. 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(field_name, default_value = nil)
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
- (unserialized_options(fetch_parent_attribute(field_name))[field_name] || default_value)
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
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-04-15 00:00:00.000000000 Z
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.25
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