activerecord-pg_array 0.1.4 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/activerecord-pg_array.gemspec +1 -0
- data/lib/activerecord/pg_array.rb +13 -2
- data/lib/activerecord/pg_array/version.rb +1 -1
- data/spec/lib/pg_array_spec.rb +14 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17a2bad120d04dfce009e51fcb416795cc9e92ee
|
4
|
+
data.tar.gz: 786d65d1c37c4b96c591af49aff861fadf045087
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b72879a9edab1046dba9b0d088f0f033e9fb61f98003919530204ffa4eaf9839a50c27cb59a72372b908843d33ba2c1d682f87514d5c8a1ffd206e3bba4ca9ae
|
7
|
+
data.tar.gz: 1d740182fdebba292587501ac17bb26762e9df6d481095cfa44e8bb73ce79f19e23ccafcc97b0bd6d46f854fad64586e8e864f7cf9c3b3fefc80daa342e5b416
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "rspec", "~> 2.14"
|
26
26
|
spec.add_development_dependency "pg", "~> 0.17"
|
27
27
|
spec.add_development_dependency "pry", "~> 0.9"
|
28
|
+
spec.add_development_dependency "pry-nav"
|
28
29
|
spec.add_development_dependency "guard", "~> 2.4"
|
29
30
|
spec.add_development_dependency "guard-rspec", "~> 4.2"
|
30
31
|
end
|
@@ -5,6 +5,11 @@ module ActiveRecord
|
|
5
5
|
|
6
6
|
def self.included(base)
|
7
7
|
base.class_eval do
|
8
|
+
|
9
|
+
def self.config_array_serializer(hash)
|
10
|
+
@@id_attr_map = hash
|
11
|
+
end
|
12
|
+
|
8
13
|
self.column_types.to_a.select { |c| c[1].instance_variable_get('@array') }.map(&:first).each do |attr_name|
|
9
14
|
ids_regex = /_ids$/
|
10
15
|
friendly_attr = attr_name.sub(ids_regex,'')
|
@@ -15,15 +20,21 @@ module ActiveRecord
|
|
15
20
|
friendly_attr_plural = segs.join('_')
|
16
21
|
|
17
22
|
obj_convert = ->(obj) do
|
18
|
-
|
19
|
-
|
23
|
+
custom_serializer = @@id_attr_map[attr_name.to_sym][obj.class.name.to_sym] rescue nil
|
24
|
+
|
25
|
+
if @@id_attr_map && custom_serializer
|
26
|
+
obj = obj.send(custom_serializer)
|
27
|
+
elsif attr_name =~ ids_regex && obj.kind_of?(ActiveRecord::Base) and
|
28
|
+
self.column_types[attr_name].type == :integer
|
20
29
|
obj = obj.id
|
21
30
|
end
|
22
31
|
obj
|
23
32
|
end
|
33
|
+
|
24
34
|
atr = ->(slf) do
|
25
35
|
slf.send attr_name.to_sym
|
26
36
|
end
|
37
|
+
|
27
38
|
atr_will_change = ->(slf) do
|
28
39
|
slf.send(:"#{attr_name}_will_change!")
|
29
40
|
end
|
data/spec/lib/pg_array_spec.rb
CHANGED
@@ -2,7 +2,9 @@ require 'spec_helper'
|
|
2
2
|
require 'active_record'
|
3
3
|
|
4
4
|
class Wolf < ActiveRecord::Base
|
5
|
+
# config_array_serializer names: :name
|
5
6
|
end
|
7
|
+
|
6
8
|
class Chicken < ActiveRecord::Base
|
7
9
|
end
|
8
10
|
|
@@ -11,6 +13,7 @@ require 'pry'
|
|
11
13
|
|
12
14
|
class WolfTracker < ActiveRecord::Base
|
13
15
|
include ActiveRecord::PGArray
|
16
|
+
config_array_serializer pack_names: {:Wolf => :name}
|
14
17
|
end
|
15
18
|
|
16
19
|
describe WolfTracker do
|
@@ -56,6 +59,11 @@ describe WolfTracker do
|
|
56
59
|
expect(wolf_tracker.wolf_ids).to eq [wolfy.id]
|
57
60
|
end
|
58
61
|
|
62
|
+
it "should be able to add a non integer attribute type to an array" do
|
63
|
+
wolf_tracker.add_pack_name(wolfy)
|
64
|
+
expect(wolf_tracker.pack_names).to eq [wolfy.name]
|
65
|
+
end
|
66
|
+
|
59
67
|
it "should add_<attr>" do
|
60
68
|
wolf_tracker.add_wolf(wolfy)
|
61
69
|
wolf_tracker.save!
|
@@ -89,6 +97,12 @@ describe WolfTracker do
|
|
89
97
|
wolf_tracker.pack_names.length.should be 2
|
90
98
|
end
|
91
99
|
|
100
|
+
it "should add multiple add_<atts>! with an array argument of class instances" do
|
101
|
+
wolf_tracker.add_pack_names!([wolfy, son_of_wolfy])
|
102
|
+
wolf_tracker.reload
|
103
|
+
expect(wolf_tracker.pack_names).to match_array [wolfy.name, son_of_wolfy.name]
|
104
|
+
end
|
105
|
+
|
92
106
|
it "should add with regular integer value" do
|
93
107
|
wolf_tracker.add_wolf(1)
|
94
108
|
wolf_tracker.save!
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-pg_array
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean McCleary
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-nav
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: guard
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|