surus 0.4.0 → 0.4.1

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.
@@ -1,3 +1,11 @@
1
+ # 0.4.1 (February 27, 2013)
2
+
3
+ * Fix array_has and array_has_any with varchar[]
4
+
5
+ # 0.4.0 (February 22, 2013)
6
+
7
+ * Added JSON generation with find_json and all_json
8
+
1
9
  # 0.3.2 (March 10, 2012)
2
10
 
3
11
  * No changes. Had to bump version to get around partially failed upload to RubyGems.org.
@@ -8,9 +8,9 @@ module Surus
8
8
  # User.array_has(:permissions, "manage_users", "manage_roles")
9
9
  # User.array_has(:permissions, ["manage_users", "manage_roles"])
10
10
  def array_has(column, *values)
11
- where("#{connection.quote_column_name(column)} @> ARRAY[?]", values.flatten)
11
+ where("#{connection.quote_column_name(column)} @> ARRAY[?]#{array_cast(column)}", values.flatten)
12
12
  end
13
-
13
+
14
14
  # Adds where condition that requires column to contain any values
15
15
  #
16
16
  # Examples:
@@ -18,7 +18,13 @@ module Surus
18
18
  # User.array_has_any(:permissions, "manage_users", "manage_roles")
19
19
  # User.array_has_any(:permissions, ["manage_users", "manage_roles"])
20
20
  def array_has_any(column, *values)
21
- where("#{connection.quote_column_name(column)} && ARRAY[?]", values.flatten)
21
+ where("#{connection.quote_column_name(column)} && ARRAY[?]#{array_cast(column)}", values.flatten)
22
+ end
23
+
24
+ private
25
+ def array_cast(column_name)
26
+ column = columns_hash[column_name.to_s]
27
+ "::#{column.sql_type}"
22
28
  end
23
29
  end
24
30
  end
@@ -1,3 +1,3 @@
1
1
  module Surus
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -6,52 +6,60 @@ describe Surus::Array::Scope do
6
6
  context "array_has" do
7
7
  let!(:match) { TextArrayRecord.create! :texts => %w{a b} }
8
8
  let!(:missing_element) { TextArrayRecord.create! :texts => %w{a} }
9
-
9
+
10
10
  def self.shared_examples
11
11
  it { should include(match) }
12
12
  it { should_not include(missing_element) }
13
13
  it { should_not include(empty) }
14
14
  end
15
-
15
+
16
16
  context "with one element" do
17
17
  subject { TextArrayRecord.array_has(:texts, "b").all }
18
18
  shared_examples
19
19
  end
20
-
20
+
21
21
  context "with array of elements" do
22
22
  subject { TextArrayRecord.array_has(:texts, ["a", "b"]).all }
23
23
  shared_examples
24
24
  end
25
-
25
+
26
26
  context "with multiple elements" do
27
27
  subject { TextArrayRecord.array_has(:texts, "a", "b").all }
28
28
  shared_examples
29
29
  end
30
30
  end
31
-
31
+
32
32
  context "array_has_any" do
33
33
  let!(:match) { TextArrayRecord.create! :texts => %w{a b} }
34
34
  let!(:missing_element) { TextArrayRecord.create! :texts => %w{a} }
35
-
35
+
36
36
  def self.shared_examples
37
37
  it { should include(match) }
38
38
  it { should_not include(missing_element) }
39
39
  it { should_not include(empty) }
40
40
  end
41
-
41
+
42
42
  context "with one element" do
43
43
  subject { TextArrayRecord.array_has_any(:texts, "b").all }
44
44
  shared_examples
45
45
  end
46
-
46
+
47
47
  context "with array of elements" do
48
48
  subject { TextArrayRecord.array_has_any(:texts, ["b", "c"]).all }
49
49
  shared_examples
50
50
  end
51
-
51
+
52
52
  context "with multiple elements" do
53
53
  subject { TextArrayRecord.array_has_any(:texts, "b", "c").all }
54
54
  shared_examples
55
55
  end
56
- end
56
+ end
57
+
58
+ it "casts between varchar[] and text[]" do
59
+ record = VarcharArrayRecord.create! :varchars => %w{a b}
60
+ expect(VarcharArrayRecord.array_has_any(:varchars, "a")).to include(record)
61
+ expect(VarcharArrayRecord.array_has_any(:varchars, "c")).to_not include(record)
62
+ expect(VarcharArrayRecord.array_has_any(:varchars, "b", "c")).to include(record)
63
+ expect(VarcharArrayRecord.array_has_any(:varchars, "c")).to_not include(record)
64
+ end
57
65
  end
@@ -17,6 +17,13 @@ CREATE TABLE text_array_records(
17
17
  );
18
18
 
19
19
 
20
+ DROP TABLE IF EXISTS varchar_array_records;
21
+
22
+ CREATE TABLE varchar_array_records(
23
+ id serial PRIMARY KEY,
24
+ varchars varchar[]
25
+ );
26
+
20
27
 
21
28
  DROP TABLE IF EXISTS integer_array_records;
22
29
 
@@ -15,6 +15,10 @@ class TextArrayRecord < ActiveRecord::Base
15
15
  serialize :texts, Surus::Array::TextSerializer.new
16
16
  end
17
17
 
18
+ class VarcharArrayRecord < ActiveRecord::Base
19
+ serialize :varchars, Surus::Array::TextSerializer.new
20
+ end
21
+
18
22
  class IntegerArrayRecord < ActiveRecord::Base
19
23
  serialize :integers, Surus::Array::IntegerSerializer.new
20
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: surus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
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: 2013-02-22 00:00:00.000000000 Z
12
+ date: 2013-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pg