hstore-attributes 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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