postgres_ext 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9078ca33d9a9b96fa41f3082157f2bceb46319b9
4
- data.tar.gz: 8797b9642f4c3757d3b450bbdef4ffbcc00dce72
3
+ metadata.gz: 6f8878d742f2c1d692cca006bbd3fe55dfb69e1d
4
+ data.tar.gz: 64ae985d2dae1389ee05b0c843b2ad8d578d1ffc
5
5
  SHA512:
6
- metadata.gz: 96d7943795f68ab0e4ca85e12ca0d508844d29f78ff7baec44e952bb23c012290ffadceef317d5496a395cb896d1110289a2cf395998a107574a556dabb2e97c
7
- data.tar.gz: 75c699237d3dfa87a62099d52dd84a1c77936d0ae730207bf3801bc1acc4112acfd0cf64521c2407cf79199033b025c3eeab91c747ef6b1c2ff3ae9d21c36ed0
6
+ metadata.gz: 1a8cd94d52fce6e7dbf5472899b1a1f45b9328fbf31e42a912c4ec4cf10880d2e398f0f954bf9ab49fea5e503c11a660f6ee89fbf690162e2bf3c96d64a338bc
7
+ data.tar.gz: 66a9c9c002c548b0920657f243c6c23ea04a4468666b3799f5bc52ea76b25d0f47f2e84ec8071e2f818638f6af12e804223994e515456540b1eab9f38cbadcab
data/.gitignore CHANGED
@@ -18,5 +18,8 @@ test/version_tmp
18
18
  tmp
19
19
  bin/
20
20
  .rbenv-version*
21
+ .ruby-version
22
+ .ruby-gemset
23
+ gemfiles/*.lock
21
24
 
22
25
  spec/dummy/config/database.yml
data/.travis.yml CHANGED
@@ -1,19 +1,19 @@
1
1
  rvm:
2
- - 1.9.3
3
2
  - 2.0.0
4
- - jruby-19mode
3
+ - 2.1.2
4
+
5
+ gemfile:
6
+ - gemfiles/Gemfile.activerecord-4.0.x
7
+ - gemfiles/Gemfile.activerecord-4.1.x
5
8
 
6
9
  env: DATABASE_URL=postgres://postgres@localhost/postgres_ext_test
7
10
 
8
11
  before_script:
9
12
  - psql -c 'create database postgres_ext_test;' -U postgres -h localhost
10
- - rake db:migrate
13
+ - bundle exec rake db:migrate
11
14
 
12
15
  notifications:
13
16
  email:
14
17
  - git@danmcclain.net
15
- hipchat:
16
- rooms:
17
- secure: gebjx8Q/jmnNmf6l+SyQHHJjGn9RfA6s4e8sIoRBVt9pomkOCBvHq7++AjpVlqkXcvV6rK2L90rAEPKMP0QUS04vRtRY6LvwmjiQHFo99/gktG6LO+5/QGvy9zbK4PxWe35Yr1F98Gs0mQ+y/ZbU6u8rJsI7DM1iPq2ULzo/QUw=
18
18
  addons:
19
19
  postgresql: '9.3'
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 2.3.0
2
+
3
+ * Fixes an issue with `where(table: { column: [] })` was not properly
4
+ converting the where clause to an equality instead of an `IN`
5
+ predicate (#111) - Dan McClain
6
+ * Adds support for Rails 4.1 - Dan McClain
7
+ * Adds support for hstore columns when using `contains` (#120) - Dan McClain
8
+ * Quotes CTE names (#130) - Dan McClain
9
+
1
10
  ## 2.2.0
2
11
 
3
12
  * Adds Arel predications for `ANY` and `ALL` - Dan McClain
@@ -6,37 +15,37 @@
6
15
  * Relation.with now accepts Arel::SelectMangers - Dan McClain
7
16
 
8
17
  ## 2.1.3
9
-
18
+
10
19
  * Fixes Arel 4.0.1 issues - Dan McClain
11
20
  * Prevents coversion of string to order statement - Dan McClain
12
-
21
+
13
22
  ## 2.1.2
14
23
 
15
24
  * Fixes calls to count when ranking a relation - Dan McClain
16
-
25
+
17
26
  ## 2.1.1
18
-
27
+
19
28
  * Fixes cte proxy so that it can create records - Dan McClain
20
-
29
+
21
30
  ## 2.1.0
22
-
31
+
23
32
  * Support added for common table expressions - Dan McClain
24
33
  * Support added for rank windowing function - Dan McClain
25
34
  * Insert Code Climate badge into README - Doug Yun
26
-
35
+
27
36
  # 2.0.0
28
-
37
+
29
38
  * JRuby fixes - Dan McClain
30
39
  * Updates docs and description - Dan McClain
31
40
  * Rails 4 support - Dan McClain
32
-
41
+
33
42
  # 1.0.0
34
-
43
+
35
44
  1.0.0 is the last major and minor release for Rails 3.2.x. Postgres\_ext
36
45
  will only receive bug fixes in the future. Also, bug fixes for 1.0.x
37
46
  will come from PRs only, future development efforts are concentrated on
38
47
  2.x.
39
-
48
+
40
49
  * Fixing array tests in jruby - Dan McClain
41
50
  * Removes encoding patches from PostgreSQLAdapter - Dan McClain
42
51
  * Update documentation to reflect changes in 0.3.0 - Fabian Schwahn
@@ -129,7 +138,7 @@ encoded strings - Michael Graff (@skandragon)
129
138
 
130
139
  ## 0.0.8
131
140
 
132
- Fixes add and change column
141
+ Fixes add and change column
133
142
 
134
143
  ## 0.0.7
135
144
 
@@ -143,5 +152,5 @@ Lots of array related fixes:
143
152
  array column
144
153
  * Array columns follow database defaults
145
154
 
146
- Migration fix (rn0 and gilltots)
155
+ Migration fix (rn0 and gilltots)
147
156
  Typos in README (bcardarella)
data/README.md CHANGED
@@ -44,13 +44,17 @@ be adding more datatypes as we come across them.
44
44
 
45
45
  To work on postgres\_ext locally, follow these steps:
46
46
 
47
- 1. Run `bundle install`, this will install all the development
47
+ 1. Run `bundle install`, this will install (almost) all the development
48
48
  dependencies
49
- 2. Run `rake setup`, this will set up the `.env` file necessary to run
49
+ 2. Run `gem install byebug` (not a declared dependency to not break CI)
50
+ 3. Run `bundle exec rake setup`, this will set up the `.env` file necessary to run
50
51
  the tests and set up the database
51
- 3. Run `rake db:create`, this will create the test database
52
- 4. Run `rake db:migrate`, this will set up the database tables required
52
+ 4. Run `bundle exec rake db:create`, this will create the test database
53
+ 5. Run `bundle exec rake db:migrate`, this will set up the database tables required
53
54
  by the test
55
+ 6. Run `BUNDLE_GEMFILE='gemfiles/Gemfile.activerecord-4.0.x' bundle install --quiet` to create the Gemfile.lock for 4.0.
56
+ 7. Run `BUNDLE_GEMFILE='gemfiles/Gemfile.activerecord-4.1.x' bundle install --quiet` to create the Gemfile.lock for 4.1.
57
+ 8. Run `bundle exec rake test:all` to run tests against all supported versions of Active Record
54
58
 
55
59
  ## Authors
56
60
 
data/Rakefile CHANGED
@@ -34,6 +34,17 @@ end
34
34
 
35
35
  task :default => :test
36
36
 
37
+ namespace :test do
38
+ desc 'Test against all supported ActiveRecord versions'
39
+ task :all do
40
+ # Currently only supports Active Record v4.0
41
+ %w(4.0.x 4.1.x).each do |version|
42
+ sh "BUNDLE_GEMFILE='gemfiles/Gemfile.activerecord-#{version}' bundle install --quiet"
43
+ sh "BUNDLE_GEMFILE='gemfiles/Gemfile.activerecord-#{version}' bundle exec rake test"
44
+ end
45
+ end
46
+ end
47
+
37
48
  task :setup do
38
49
  if File.exist?('.env')
39
50
  puts 'This will overwrite your existing .env file'
@@ -82,11 +93,14 @@ namespace :db do
82
93
  task :migrate => :load_db_settings do
83
94
  ActiveRecord::Base.establish_connection
84
95
 
96
+ ActiveRecord::Base.connection.enable_extension 'hstore'
97
+
85
98
  ActiveRecord::Base.connection.create_table :people, force: true do |t|
86
99
  t.inet "ip"
87
100
  t.cidr "subnet"
88
101
  t.integer "tag_ids", array: true
89
102
  t.string "tags", array: true
103
+ t.hstore "data"
90
104
  t.integer "lucky_number"
91
105
  t.datetime "created_at"
92
106
  t.datetime "updated_at"
data/docs/querying.md CHANGED
@@ -12,7 +12,7 @@ We can add CTEs to queries by chaining `#with` off a relation.
12
12
  `Relation#with` accepts a hash, and will convert `Relation`s to the
13
13
  proper SQL in the CTE.
14
14
 
15
- Let's expand a `#with` call to it's resulting SQL code:
15
+ Let's expand a `#with` call to its resulting SQL code:
16
16
 
17
17
  ```ruby
18
18
  Score.with(my_games: Game.where(id: 1)).joins('JOIN my_games ON scores.game_id = my_games.id')
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec :path => '..'
4
+
5
+ gem "activerecord", "~>4.0.0"
6
+
7
+ unless ENV['CI'] || RUBY_PLATFORM =~ /java/
8
+ gem 'byebug'
9
+ end
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec :path => '..'
4
+
5
+ gem "activerecord", "~>4.1.0"
6
+
7
+ unless ENV['CI'] || RUBY_PLATFORM =~ /java/
8
+ gem 'byebug'
9
+ end
@@ -11,7 +11,7 @@ class CTEProxy
11
11
  @arel_table = Arel::Table.new(name)
12
12
  @model = model
13
13
  @connection = model.connection
14
- @reflections = {}
14
+ @_reflections = {}
15
15
  end
16
16
 
17
17
  def name
@@ -30,11 +30,31 @@ class CTEProxy
30
30
  @model.columns_hash
31
31
  end
32
32
 
33
+ def model_name
34
+ @model.model_name
35
+ end
36
+
33
37
  def primary_key
34
38
  @model.primary_key
35
39
  end
36
40
 
41
+ def attribute_alias?(*args)
42
+ @model.attribute_alias?(*args)
43
+ end
44
+
45
+ def aggregate_reflections(*args)
46
+ @model.aggregate_reflections(*args)
47
+ end
48
+
37
49
  def instantiate(record, column_types = {})
38
50
  @model.instantiate(record, column_types)
39
51
  end
52
+
53
+ private
54
+
55
+ def reflections
56
+ @_reflections
57
+ end
58
+
59
+ alias _reflections reflections
40
60
  end
@@ -8,7 +8,7 @@ module ActiveRecord
8
8
  case value
9
9
  when Array
10
10
  engine = attribute.relation.engine
11
- column = engine.columns.detect{ |col| col.name.to_s == attribute.name.to_s }
11
+ column = engine.connection.columns(attribute.relation.name).detect{ |col| col.name.to_s == attribute.name.to_s }
12
12
  if column && column.array
13
13
  attribute.eq(value)
14
14
  else
@@ -162,7 +162,7 @@ module ActiveRecord
162
162
  when Arel::SelectManager
163
163
  select = Arel::SqlLiteral.new visitor.accept(expression)
164
164
  end
165
- as = Arel::Nodes::As.new Arel::SqlLiteral.new(name.to_s), select
165
+ as = Arel::Nodes::As.new Arel::SqlLiteral.new("\"#{name.to_s}\""), select
166
166
  end
167
167
  end
168
168
  end
@@ -15,7 +15,7 @@ module Arel
15
15
  def visit_Arel_Nodes_Contains o, a = nil
16
16
  left_column = o.left.relation.engine.columns.find { |col| col.name == o.left.name.to_s }
17
17
 
18
- if left_column && left_column.respond_to?(:array) && left_column.array
18
+ if left_column && (left_column.type == :hstore || (left_column.respond_to?(:array) && left_column.array))
19
19
  "#{visit o.left, a} @> #{visit o.right, o.left}"
20
20
  else
21
21
  "#{visit o.left, a} >> #{visit o.right, o.left}"
@@ -1,3 +1,3 @@
1
1
  module PostgresExt
2
- VERSION = '2.2.0'
2
+ VERSION = '2.3.0'
3
3
  end
data/postgres_ext.gemspec CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
6
6
  gem.email = ["git@danmcclain.net"]
7
7
  gem.description = %q{Adds missing native PostgreSQL data types to ActiveRecord and convenient querying extensions for ActiveRecord and Arel}
8
8
  gem.summary = %q{Extends ActiveRecord to handle native PostgreSQL data types}
9
- gem.homepage = ""
9
+ gem.homepage = 'https://github.com/dockyard/postgres_ext'
10
10
  gem.licenses = ['MIT']
11
11
 
12
12
  gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -16,8 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = PostgresExt::VERSION
18
18
 
19
- gem.add_dependency 'activerecord', '~> 4.0.0'
20
- gem.add_dependency 'arel', '~> 4.0.1'
19
+ gem.add_dependency 'activerecord', '>= 4.0.0'
20
+ gem.add_dependency 'arel', '>= 4.0.1'
21
21
  gem.add_dependency 'pg_array_parser', '~> 0.0.9'
22
22
 
23
23
  gem.add_development_dependency 'rake', '~> 10.1.0'
@@ -3,7 +3,6 @@ require 'test_helper'
3
3
  describe 'Array queries' do
4
4
  let(:equality_regex) { %r{\"people\"\.\"tags\" = '\{\"working\"\}'} }
5
5
  let(:overlap_regex) { %r{\"people\"\.\"tag_ids\" && '\{1,2\}'} }
6
- let(:contains_regex) { %r{\"people\"\.\"tag_ids\" @> '\{1,2\}'} }
7
6
  let(:any_regex) { %r{2 = ANY\(\"people\"\.\"tag_ids\"\)} }
8
7
  let(:all_regex) { %r{2 = ALL\(\"people\"\.\"tag_ids\"\)} }
9
8
 
@@ -36,19 +35,6 @@ describe 'Array queries' do
36
35
  end
37
36
  end
38
37
 
39
- describe '.where.contains(:column => value)' do
40
- it 'generates the appropriate where clause' do
41
- query = Person.where.contains(:tag_ids => [1,2])
42
- query.to_sql.must_match contains_regex
43
- end
44
-
45
- it 'allows chaining' do
46
- query = Person.where.contains(:tag_ids => [1,2]).where(:tags => ['working']).to_sql
47
-
48
- query.must_match contains_regex
49
- query.must_match equality_regex
50
- end
51
- end
52
38
 
53
39
  describe '.where.any(:column => value)' do
54
40
  it 'generates the appropriate where clause' do
@@ -4,22 +4,22 @@ describe 'Common Table Expression queries' do
4
4
  describe '.with(common_table_expression_hash)' do
5
5
  it 'generates an expression with the CTE' do
6
6
  query = Person.with(lucky_number_seven: Person.where(lucky_number: 7)).joins('JOIN lucky_number_seven ON lucky_number_seven.id = people.id')
7
- query.to_sql.must_equal 'WITH lucky_number_seven AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id'
7
+ query.to_sql.must_equal 'WITH "lucky_number_seven" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id'
8
8
  end
9
9
 
10
10
  it 'generates an expression with multiple CTEs' do
11
11
  query = Person.with(lucky_number_seven: Person.where(lucky_number: 7), lucky_number_three: Person.where(lucky_number: 3)).joins('JOIN lucky_number_seven ON lucky_number_seven.id = people.id').joins('JOIN lucky_number_three ON lucky_number_three.id = people.id')
12
- query.to_sql.must_equal 'WITH lucky_number_seven AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7), lucky_number_three AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 3) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id JOIN lucky_number_three ON lucky_number_three.id = people.id'
12
+ query.to_sql.must_equal 'WITH "lucky_number_seven" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7), "lucky_number_three" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 3) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id JOIN lucky_number_three ON lucky_number_three.id = people.id'
13
13
  end
14
14
 
15
15
  it 'generates an expression with multiple with calls' do
16
16
  query = Person.with(lucky_number_seven: Person.where(lucky_number: 7)).with(lucky_number_three: Person.where(lucky_number: 3)).joins('JOIN lucky_number_seven ON lucky_number_seven.id = people.id').joins('JOIN lucky_number_three ON lucky_number_three.id = people.id')
17
- query.to_sql.must_equal 'WITH lucky_number_seven AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7), lucky_number_three AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 3) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id JOIN lucky_number_three ON lucky_number_three.id = people.id'
17
+ query.to_sql.must_equal 'WITH "lucky_number_seven" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7), "lucky_number_three" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 3) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id JOIN lucky_number_three ON lucky_number_three.id = people.id'
18
18
  end
19
19
 
20
20
  it 'generates an expression with recursive' do
21
21
  query = Person.with.recursive(lucky_number_seven: Person.where(lucky_number: 7)).joins('JOIN lucky_number_seven ON lucky_number_seven.id = people.id')
22
- query.to_sql.must_equal 'WITH RECURSIVE lucky_number_seven AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id'
22
+ query.to_sql.must_equal 'WITH RECURSIVE "lucky_number_seven" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7) SELECT "people".* FROM "people" JOIN lucky_number_seven ON lucky_number_seven.id = people.id'
23
23
  end
24
24
 
25
25
  it 'accepts Arel::SelectMangers' do
@@ -27,14 +27,14 @@ describe 'Common Table Expression queries' do
27
27
  arel_manager = arel_table.project arel_table[:foo]
28
28
 
29
29
  query = Person.with(testing: arel_manager)
30
- query.to_sql.must_equal 'WITH testing AS (SELECT "test"."foo" FROM "test") SELECT "people".* FROM "people"'
30
+ query.to_sql.must_equal 'WITH "testing" AS (SELECT "test"."foo" FROM "test") SELECT "people".* FROM "people"'
31
31
  end
32
32
  end
33
33
 
34
34
  describe '.from_cte(common_table_expression_hash)' do
35
35
  it 'generates an expression with the CTE as the main table' do
36
36
  query = Person.from_cte('lucky_number_seven', Person.where(lucky_number: 7)).where(id: 5)
37
- query.to_sql.must_equal 'WITH lucky_number_seven AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7) SELECT "lucky_number_seven".* FROM "lucky_number_seven" WHERE "lucky_number_seven"."id" = 5'
37
+ query.to_sql.must_equal 'WITH "lucky_number_seven" AS (SELECT "people".* FROM "people" WHERE "people"."lucky_number" = 7) SELECT "lucky_number_seven".* FROM "lucky_number_seven" WHERE "lucky_number_seven"."id" = 5'
38
38
  end
39
39
 
40
40
  it 'returns instances of the model' do
@@ -45,5 +45,11 @@ describe 'Common Table Expression queries' do
45
45
  people.count.must_equal 3
46
46
  people.first.lucky_number.must_equal 7
47
47
  end
48
+
49
+ it 'responds to table_name' do
50
+ people = Person.from_cte('lucky_number_seven', Person.where(lucky_number: 7))
51
+
52
+ people.model_name.must_equal 'Person'
53
+ end
48
54
  end
49
55
  end
@@ -3,8 +3,11 @@ require 'test_helper'
3
3
  describe 'Contains queries' do
4
4
  let(:contained_within_regex) { %r{\"people\"\.\"ip\" << '127.0.0.1/24'} }
5
5
  let(:contained_within_equals_regex) { %r{\"people\"\.\"ip\" <<= '127.0.0.1/24'} }
6
- let(:contains_regex) { %r{\"people\"\.\"ip\" >> '127.0.0.1'} }
6
+ let(:contains_ip_regex) { %r{\"people\"\.\"ip\" >> '127.0.0.1'} }
7
+ let(:contains_array_regex) { %r{\"people\"\.\"tag_ids\" @> '\{1,2\}'} }
8
+ let(:contains_hstore_regex) { %r{\"people\"\.\"data\" @> '\"nickname\"=>"Dan"'} }
7
9
  let(:contains_equals_regex) { %r{\"people\"\.\"ip\" >>= '127.0.0.1'} }
10
+ let(:equality_regex) { %r{\"people\"\.\"tags\" = '\{\"working\"\}'} }
8
11
 
9
12
  describe '.where.contained_within(:column, value)' do
10
13
  it 'generates the appropriate where clause' do
@@ -20,17 +23,34 @@ describe 'Contains queries' do
20
23
  end
21
24
  end
22
25
 
23
- describe '.where.contains(:column, value)' do
24
- it 'generates the appropriate where clause' do
25
- query = Person.where.contains(:ip => '127.0.0.1')
26
- query.to_sql.must_match contains_regex
27
- end
28
- end
29
-
30
26
  describe '.where.contained_within_or_equals(:column, value)' do
31
27
  it 'generates the appropriate where clause' do
32
28
  query = Person.where.contains_or_equals(:ip => '127.0.0.1')
33
29
  query.to_sql.must_match contains_equals_regex
34
30
  end
35
31
  end
32
+
33
+ describe '.where.contains(:column => value)' do
34
+ it 'generates the appropriate where clause for inet columns' do
35
+ query = Person.where.contains(:ip => '127.0.0.1')
36
+ query.to_sql.must_match contains_ip_regex
37
+ end
38
+
39
+ it 'generates the appropriate where clause for array columns' do
40
+ query = Person.where.contains(:tag_ids => [1,2])
41
+ query.to_sql.must_match contains_array_regex
42
+ end
43
+
44
+ it 'generates the appropriate where clause for array columns' do
45
+ query = Person.where.contains(data: { nickname: 'Dan' })
46
+ query.to_sql.must_match contains_hstore_regex
47
+ end
48
+
49
+ it 'allows chaining' do
50
+ query = Person.where.contains(:tag_ids => [1,2]).where(:tags => ['working']).to_sql
51
+
52
+ query.must_match contains_array_regex
53
+ query.must_match equality_regex
54
+ end
55
+ end
36
56
  end
@@ -29,4 +29,12 @@ describe 'Ensure that we don\'t stomp on Active Record\'s queries' do
29
29
  person.habtm_tag_ids.must_be_empty
30
30
  end
31
31
  end
32
+
33
+ describe 'Associated record array query' do
34
+ it 'correctly identifies the column on associations with different class names' do
35
+ person = Person.create(:habtm_tag_ids => [Tag.create(categories: ['wicked', 'awesome']).id])
36
+ wicked_people = Person.wicked_people
37
+ wicked_people.must_include(person)
38
+ end
39
+ end
32
40
  end
data/test/test_helper.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'active_record'
2
2
  require 'minitest/autorun'
3
3
  require 'bourne'
4
- require 'postgres_ext'
5
4
  require 'database_cleaner'
6
5
  unless ENV['CI'] || RUBY_PLATFORM =~ /java/
7
6
  require 'byebug'
@@ -10,11 +9,18 @@ end
10
9
  require 'dotenv'
11
10
  Dotenv.load
12
11
 
13
- ActiveRecord::Base.establish_connection
12
+ require 'postgres_ext'
13
+
14
+ ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
14
15
 
15
16
  class Person < ActiveRecord::Base
16
17
  has_many :hm_tags, class_name: 'Tag'
17
18
  has_and_belongs_to_many :habtm_tags, class_name: 'Tag'
19
+
20
+ def self.wicked_people
21
+ includes(:habtm_tags)
22
+ .where(:tags => {:categories => ['wicked','awesome']})
23
+ end
18
24
  end
19
25
 
20
26
  class Tag < ActiveRecord::Base
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postgres_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan McClain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-30 00:00:00.000000000 Z
11
+ date: 2014-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: arel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.0.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.0.1
41
41
  - !ruby/object:Gem::Dependency
@@ -159,7 +159,6 @@ extensions: []
159
159
  extra_rdoc_files: []
160
160
  files:
161
161
  - ".gitignore"
162
- - ".rspec"
163
162
  - ".travis.yml"
164
163
  - CHANGELOG.md
165
164
  - CONTRIBUTING.md
@@ -167,6 +166,8 @@ files:
167
166
  - README.md
168
167
  - Rakefile
169
168
  - docs/querying.md
169
+ - gemfiles/Gemfile.activerecord-4.0.x
170
+ - gemfiles/Gemfile.activerecord-4.1.x
170
171
  - lib/postgres_ext.rb
171
172
  - lib/postgres_ext/active_record.rb
172
173
  - lib/postgres_ext/active_record/cte_proxy.rb
@@ -192,7 +193,7 @@ files:
192
193
  - test/queries/sanity_test.rb
193
194
  - test/queries/window_functions_test.rb
194
195
  - test/test_helper.rb
195
- homepage: ''
196
+ homepage: https://github.com/dockyard/postgres_ext
196
197
  licenses:
197
198
  - MIT
198
199
  metadata: {}
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format Fivemat
2
- --colour