Converter 1.0.0

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/Converter.rb +50 -0
  2. metadata +46 -0
data/lib/Converter.rb ADDED
@@ -0,0 +1,50 @@
1
+ module Converter
2
+ def self.included(base)
3
+ base.extend(ClassConverter)
4
+ end
5
+
6
+ def self.convert(source, targetType)
7
+ target = targetType.new
8
+ source.instance_variables.each do |var|
9
+ varName = var.to_s.delete('@').to_sym
10
+ converter = source.class.class_eval { @attribute_converter }
11
+ if converter.has_key? varName
12
+ targetPropertyName = converter[varName][0] || varName
13
+ targetPropertyName = targetPropertyName.to_s.concat('=').to_sym
14
+ targetValue = converter[varName][1] ?
15
+ converter[varName][1].call(source.send(varName)) :
16
+ source.send(varName)
17
+
18
+ target.send(targetPropertyName, targetValue)
19
+ end
20
+ end
21
+
22
+ target
23
+ end
24
+
25
+ def self.ConvertBack(target, sourceType)
26
+ source = sourceType.new
27
+ source.methods.grep(/[a-zA-Z0-9]=$/).each do |varName|
28
+ varNameTrimmed = varName.to_s.delete('=').to_sym
29
+ converter = source.class.class_eval { @attribute_converter }
30
+ if converter.has_key? varNameTrimmed
31
+ targetPropertyName = converter[varNameTrimmed][0] || varNameTrimmed
32
+ sourceValue = converter[varNameTrimmed][2] ?
33
+ converter[varNameTrimmed][2].call(target.send(targetPropertyName)) :
34
+ target.send(targetPropertyName)
35
+ source.send(varName, sourceValue)
36
+ end
37
+ end
38
+
39
+ source
40
+ end
41
+
42
+ module ClassConverter
43
+ def attr_converter(symbol, attr_another_name = nil, converterBlock = nil, converterBackBlock = nil)
44
+ @attribute_converter ||= {}
45
+ @attribute_converter[symbol] = [attr_another_name, converterBlock, converterBackBlock]
46
+ class_eval( "def #{symbol}() @#{symbol}; end" )
47
+ class_eval( "def #{symbol}=(val) @#{symbol} = val; end" )
48
+ end
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Converter
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Shuky Chen
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-22 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Adds attr_converter attribute creator that maps attributes to another
15
+ object
16
+ email: shukyc19@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/Converter.rb
22
+ homepage: http://rubygems.org/gems/Converter
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.23
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: Convert between to object by mapping their's attributes
46
+ test_files: []