hstore-attributes 0.0.3 → 0.0.4

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.
@@ -11,7 +11,7 @@ Gem::Specification.new do |gem|
11
11
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
12
12
  gem.name = "hstore-attributes"
13
13
  gem.require_paths = ["lib"]
14
- gem.version = "0.0.3"
14
+ gem.version = "0.0.4"
15
15
 
16
16
  gem.add_dependency('pg')
17
17
  gem.add_dependency('activerecord', '>= 3.0')
@@ -17,14 +17,12 @@ module HstoreColumns
17
17
  end
18
18
 
19
19
 
20
+
20
21
  module ClassMethods
21
22
 
22
23
  def hstore_accessor(hstore_column, attr_name, type = :string)
23
24
  return unless table_exists?
24
- column = ActiveRecord::ConnectionAdapters::Column.new(attr_name, nil, "#{type}")
25
- columns_hash[attr_name.to_s]= column
26
- cast_code = column.type_cast_code('v')
27
- access_code = "(v=read_hstore('#{attr_name}', '#{hstore_column}')) && #{cast_code}"
25
+ access_code = "(v=read_hstore('#{attr_name}', '#{hstore_column}')) && #{type_cast_code('v', type)}"
28
26
 
29
27
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
30
28
  def #{attr_name}; #{access_code}; end
@@ -39,6 +37,23 @@ module HstoreColumns
39
37
  end
40
38
  end
41
39
 
40
+ def type_cast_code(var_name, type)
41
+ klass = ActiveRecord::ConnectionAdapters::Column
42
+
43
+ case type.to_sym
44
+ when :string, :text then var_name
45
+ when :integer then "(#{var_name}.to_i rescue #{var_name} ? 1 : 0)"
46
+ when :float then "#{var_name}.to_f"
47
+ when :decimal then "#{klass}.value_to_decimal(#{var_name})"
48
+ when :datetime, :timestamp then "#{klass}.string_to_time(#{var_name})"
49
+ when :time then "#{klass}.string_to_dummy_time(#{var_name})"
50
+ when :date then "#{klass}.string_to_date(#{var_name})"
51
+ when :binary then "#{klass}.binary_to_string(#{var_name})"
52
+ when :boolean then "#{klass}.value_to_boolean(#{var_name})"
53
+ else var_name
54
+ end
55
+ end
56
+
42
57
  end
43
58
 
44
59
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hstore-attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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: 2012-07-03 00:00:00.000000000 Z
12
+ date: 2013-03-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg
@@ -93,18 +93,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
93
  - - ! '>='
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
- segments:
97
- - 0
98
- hash: -4242591301514564069
99
96
  required_rubygems_version: !ruby/object:Gem::Requirement
100
97
  none: false
101
98
  requirements:
102
99
  - - ! '>='
103
100
  - !ruby/object:Gem::Version
104
101
  version: '0'
105
- segments:
106
- - 0
107
- hash: -4242591301514564069
108
102
  requirements: []
109
103
  rubyforge_project:
110
104
  rubygems_version: 1.8.21