activerecord-pg_array 0.1.4 → 0.2
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.
- 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
|