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.
- data/hstore-attributes.gemspec +1 -1
- data/lib/hstore-attributes/hstore_columns.rb +19 -4
- metadata +2 -8
data/hstore-attributes.gemspec
CHANGED
@@ -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.
|
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
|
-
|
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.
|
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:
|
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
|