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.
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