aduki 0.0.10 → 0.0.11

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 (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/aduki.rb +43 -14
  3. data/lib/aduki/version.rb +1 -1
  4. metadata +13 -19
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6ca8a03939e3f4904afebba8a335ca2f7e3fdcc5
4
+ data.tar.gz: 70223137072e357aa6963fa97b3536fe14ffa93d
5
+ SHA512:
6
+ metadata.gz: 7bde6768466c7cecde67f17caa5dfa0cd3c4b6956342e75affc73a4447335e6bbc4bf48dd72229456db8926bec4d900c49e297ad9a904088f082303ed8ebf1d5
7
+ data.tar.gz: 93dab1a3ebcb754f76edc823caea987cdabee8f1d70f24567ca2d2d3c72f91b70ec9a64cf415805fc341d94094d12360761dc83633a5f7f69119a0da1c92063c
@@ -29,6 +29,11 @@ module Aduki
29
29
  collector
30
30
  end
31
31
 
32
+ def self.maybe_parse_date str
33
+ return nil if (str == nil) || (str == '')
34
+ Date.parse(str)
35
+ end
36
+
32
37
  def self.to_value klass, setter, value
33
38
  return value.map { |v| to_value klass, setter, v} if value.is_a? Array
34
39
 
@@ -36,9 +41,15 @@ module Aduki
36
41
  if type.is_a? Hash
37
42
  to_typed_hash type.values.first, value
38
43
  elsif type == Date
39
- Date.parse value
44
+ case value
45
+ when Date; value
46
+ when String; maybe_parse_date(value)
47
+ end
40
48
  elsif type == Time
41
- Time.parse value
49
+ case value
50
+ when Time; value
51
+ when String; Time.parse(value)
52
+ end
42
53
  elsif type && (type <= Integer)
43
54
  value.to_i
44
55
  elsif type && (type <= Float)
@@ -73,22 +84,40 @@ module Aduki
73
84
  setters
74
85
  end
75
86
 
87
+ def self.apply_array_attribute klass, object, getter, value
88
+ setter_method = "#{getter}=".to_sym
89
+ return unless object.respond_to? setter_method
90
+
91
+ array = object.send getter
92
+ if array == nil
93
+ array = []
94
+ object.send(setter_method, array)
95
+ end
96
+ array << to_value(klass, getter, value)
97
+ end
98
+
99
+ def self.apply_single_attribute klass, object, setter, value
100
+ setter_method = "#{setter}=".to_sym
101
+ return unless object.respond_to? setter_method
102
+
103
+ object.send setter_method, to_value(klass, setter, value)
104
+ end
105
+
106
+ def self.apply_attribute klass, object, setter, value
107
+ if setter.match(/\[\d+\]/)
108
+ getter = setter.gsub(/\[\d+\]/, '').to_sym
109
+ apply_array_attribute klass, object, getter, value
110
+ else
111
+ apply_single_attribute klass, object, setter, value
112
+ end
113
+ end
114
+
76
115
  def self.apply_attributes object, attrs
77
- setters = split_attributes attrs
116
+ setters = split_attributes(attrs || { })
78
117
  klass = object.class
79
118
 
80
119
  setters.sort.each do |setter, value|
81
- if setter.match(/\[\d+\]/)
82
- setter = setter.gsub(/\[\d+\]/, '')
83
- array = object.send setter.to_sym
84
- if array == nil
85
- array = []
86
- object.send("#{setter}=", array)
87
- end
88
- array << to_value(klass, setter, value)
89
- else
90
- object.send "#{setter}=", to_value(klass, setter, value)
91
- end
120
+ apply_attribute klass, object, setter, value
92
121
  end
93
122
  end
94
123
 
@@ -1,3 +1,3 @@
1
1
  module Aduki
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aduki
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
5
- prerelease:
4
+ version: 0.0.11
6
5
  platform: ruby
7
6
  authors:
8
7
  - Conan Dalton
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-02-12 00:00:00.000000000 Z
11
+ date: 2015-01-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rspec
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '2.9'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2.9'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec_numbering_formatter
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: recursive attribute setting for ruby objects
@@ -50,8 +45,8 @@ executables: []
50
45
  extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
- - .gitignore
54
- - .rspec
48
+ - ".gitignore"
49
+ - ".rspec"
55
50
  - Gemfile
56
51
  - LICENSE.txt
57
52
  - README.md
@@ -71,27 +66,26 @@ files:
71
66
  homepage: https://github.com/conanite/aduki
72
67
  licenses:
73
68
  - MIT
69
+ metadata: {}
74
70
  post_install_message:
75
71
  rdoc_options: []
76
72
  require_paths:
77
73
  - lib
78
74
  required_ruby_version: !ruby/object:Gem::Requirement
79
- none: false
80
75
  requirements:
81
- - - ! '>='
76
+ - - ">="
82
77
  - !ruby/object:Gem::Version
83
78
  version: '0'
84
79
  required_rubygems_version: !ruby/object:Gem::Requirement
85
- none: false
86
80
  requirements:
87
- - - ! '>='
81
+ - - ">="
88
82
  - !ruby/object:Gem::Version
89
83
  version: '0'
90
84
  requirements: []
91
85
  rubyforge_project:
92
- rubygems_version: 1.8.24
86
+ rubygems_version: 2.2.2
93
87
  signing_key:
94
- specification_version: 3
88
+ specification_version: 4
95
89
  summary: set object attributes recursively from an attributes hash
96
90
  test_files:
97
91
  - spec/array_attribute_spec.rb