squeel 1.1.1 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +36 -4
  5. data/CHANGELOG.md +15 -0
  6. data/Gemfile +1 -1
  7. data/README.md +47 -6
  8. data/Rakefile +14 -2
  9. data/lib/squeel.rb +9 -1
  10. data/lib/squeel/adapters/active_record.rb +0 -1
  11. data/lib/squeel/adapters/active_record/3.0/join_dependency_extensions.rb +1 -0
  12. data/lib/squeel/adapters/active_record/3.0/relation_extensions.rb +12 -1
  13. data/lib/squeel/adapters/active_record/3.1/join_dependency_extensions.rb +1 -0
  14. data/lib/squeel/adapters/active_record/3.2/join_dependency_extensions.rb +1 -0
  15. data/lib/squeel/adapters/active_record/4.0/join_dependency_extensions.rb +1 -0
  16. data/lib/squeel/adapters/active_record/4.0/relation_extensions.rb +92 -0
  17. data/lib/squeel/adapters/active_record/4.1/compat.rb +15 -0
  18. data/lib/squeel/adapters/active_record/4.1/context.rb +88 -0
  19. data/lib/squeel/adapters/active_record/4.1/preloader_extensions.rb +31 -0
  20. data/lib/squeel/adapters/active_record/4.1/reflection_extensions.rb +37 -0
  21. data/lib/squeel/adapters/active_record/4.1/relation_extensions.rb +307 -0
  22. data/lib/squeel/adapters/active_record/4.2/compat.rb +1 -0
  23. data/lib/squeel/adapters/active_record/4.2/context.rb +1 -0
  24. data/lib/squeel/adapters/active_record/4.2/preloader_extensions.rb +1 -0
  25. data/lib/squeel/adapters/active_record/4.2/relation_extensions.rb +108 -0
  26. data/lib/squeel/adapters/active_record/context.rb +7 -7
  27. data/lib/squeel/adapters/active_record/join_dependency_extensions.rb +9 -13
  28. data/lib/squeel/adapters/active_record/relation_extensions.rb +38 -8
  29. data/lib/squeel/core_ext/symbol.rb +3 -3
  30. data/lib/squeel/dsl.rb +1 -1
  31. data/lib/squeel/nodes.rb +1 -0
  32. data/lib/squeel/nodes/as.rb +12 -0
  33. data/lib/squeel/nodes/join.rb +8 -4
  34. data/lib/squeel/nodes/key_path.rb +10 -1
  35. data/lib/squeel/nodes/node.rb +21 -0
  36. data/lib/squeel/nodes/stub.rb +8 -4
  37. data/lib/squeel/nodes/subquery_join.rb +44 -0
  38. data/lib/squeel/version.rb +1 -1
  39. data/lib/squeel/visitors.rb +2 -0
  40. data/lib/squeel/visitors/enumeration_visitor.rb +101 -0
  41. data/lib/squeel/visitors/order_visitor.rb +9 -2
  42. data/lib/squeel/visitors/predicate_visitor.rb +11 -0
  43. data/lib/squeel/visitors/preload_visitor.rb +12 -0
  44. data/lib/squeel/visitors/visitor.rb +89 -13
  45. data/spec/config.travis.yml +13 -0
  46. data/spec/config.yml +12 -0
  47. data/spec/console.rb +3 -12
  48. data/spec/core_ext/symbol_spec.rb +3 -3
  49. data/spec/helpers/squeel_helper.rb +8 -5
  50. data/spec/spec_helper.rb +4 -16
  51. data/spec/squeel/adapters/active_record/context_spec.rb +8 -4
  52. data/spec/squeel/adapters/active_record/join_dependency_extensions_spec.rb +123 -38
  53. data/spec/squeel/adapters/active_record/relation_extensions_spec.rb +350 -124
  54. data/spec/squeel/core_ext/symbol_spec.rb +3 -3
  55. data/spec/squeel/nodes/join_spec.rb +4 -4
  56. data/spec/squeel/nodes/stub_spec.rb +3 -3
  57. data/spec/squeel/nodes/subquery_join_spec.rb +46 -0
  58. data/spec/squeel/visitors/order_visitor_spec.rb +3 -3
  59. data/spec/squeel/visitors/predicate_visitor_spec.rb +69 -36
  60. data/spec/squeel/visitors/select_visitor_spec.rb +1 -1
  61. data/spec/squeel/visitors/visitor_spec.rb +7 -6
  62. data/spec/support/models.rb +99 -15
  63. data/spec/support/schema.rb +109 -4
  64. data/squeel.gemspec +8 -6
  65. metadata +89 -107
  66. data/.ruby-gemset +0 -1
  67. data/.ruby-version +0 -1
  68. data/spec/blueprints/articles.rb +0 -5
  69. data/spec/blueprints/comments.rb +0 -5
  70. data/spec/blueprints/notes.rb +0 -3
  71. data/spec/blueprints/people.rb +0 -4
  72. data/spec/blueprints/tags.rb +0 -3
@@ -71,9 +71,13 @@ class Article < ActiveRecord::Base
71
71
  belongs_to :person
72
72
  has_many :comments
73
73
  has_and_belongs_to_many :tags
74
- has_many :notes, :as => :notable
74
+ has_many :notes, :as => :notable
75
75
  has_many :commenters, :through => :comments, :source => :person
76
- has_many :uniq_commenters, :through => :comments, :source => :person, :uniq => true
76
+ if ActiveRecord::VERSION::MAJOR > 3 && ActiveRecord::VERSION::MINOR >= 1
77
+ has_many :uniq_commenters, lambda { uniq }, :through => :comments, :source => :person
78
+ else
79
+ has_many :uniq_commenters, :through => :comments, :source => :person, :uniq => true
80
+ end
77
81
  end
78
82
 
79
83
  class Comment < ActiveRecord::Base
@@ -89,34 +93,114 @@ class Note < ActiveRecord::Base
89
93
  belongs_to :notable, :polymorphic => true
90
94
  end
91
95
 
92
- Dir[File.expand_path('../../blueprints/*.rb', __FILE__)].each do |f|
93
- require f
96
+ class User < ActiveRecord::Base
97
+ has_many :memberships, as: :member
98
+ has_many :groups, through: :memberships
99
+ has_many :packages, through: :groups
100
+ end
101
+
102
+ class Package < ActiveRecord::Base
103
+ has_many :memberships, as: :member
104
+ end
105
+
106
+ class Membership < ActiveRecord::Base
107
+ belongs_to :group
108
+ belongs_to :member, polymorphic: true
109
+
110
+ if ActiveRecord::VERSION::MAJOR > 3
111
+ default_scope -> { where(active: true) }
112
+ else
113
+ default_scope where(active: true)
114
+ end
115
+
116
+ before_save :set_active
117
+
118
+ def set_active
119
+ self.active = true
120
+ end
121
+ end
122
+
123
+ class Group < ActiveRecord::Base
124
+ has_many :memberships
125
+ has_many :users, through: :memberships, source: :member, source_type: 'User'
126
+ has_many :packages, through: :memberships, source: :member, source_type: 'Package'
127
+ end
128
+
129
+ class Seat < ActiveRecord::Base
130
+ belongs_to :payment, dependent: :destroy
131
+ has_many(:order_items,
132
+ as: :orderable,
133
+ autosave: true,
134
+ dependent: :destroy
135
+ )
136
+ end
137
+
138
+ class OrderItem < ActiveRecord::Base
139
+ belongs_to :orderable, polymorphic: true
140
+ end
141
+
142
+ class Payment < ActiveRecord::Base
143
+ has_many :seats
94
144
  end
95
145
 
96
146
  class Models
97
147
  def self.make
98
- 10.times do
99
- person = Person.make
148
+ 10.times do |i|
149
+ # 10 people total, salary gt 30000
150
+ person = Person.create(name: Faker::Name.name, salary: 30000 + (i + 1) * 1000)
100
151
  2.times do
101
- UnidentifiedObject.create(:person => person, :name => Sham.object_name)
152
+ # 20 unidentified object total, 2 per person
153
+ person.unidentified_objects.create(name: Faker::Lorem.words(1).first)
102
154
  end
103
- Note.make(:notable => person)
155
+ # 10 notes based on people total
156
+ person.notes.create(note: Faker::Lorem.words(7).join(' '))
104
157
  3.times do
105
- article = Article.make(:person => person)
158
+ # 30 articles total
159
+ article = person.articles.create(title: Faker::Lorem.sentence, body: Faker::Lorem.paragraph)
106
160
  3.times do
107
- article.tags = [Tag.make, Tag.make, Tag.make]
161
+ # 30 * 3 tags total
162
+ article.tags << Tag.create(name: Faker::Lorem.words(3).join(' '))
108
163
  end
109
- Note.make(:notable => article)
164
+ # 30 notes based on articles total
165
+ article.notes.create(note: Faker::Lorem.words(7).join(' '))
110
166
  10.times do
111
- Comment.make(:article => article)
167
+ # 30 * 10 comments based on articles total
168
+ article.comments.create(body: Faker::Lorem.paragraph)
112
169
  end
113
170
  end
114
171
  2.times do
115
- Comment.make(:person => person)
172
+ # 20 comments based on people total
173
+ person.comments.create(body: Faker::Lorem.paragraph)
116
174
  end
117
175
  end
118
176
 
119
- Comment.make(:body => 'First post!', :article => Article.make(:title => 'Hello, world!'))
120
- Comment.make(:body => 'Last post!', :article => Article.first, :person => Article.first.commenters.first)
177
+ # an article, a comment based on articles and people
178
+ Article.create(title: 'Hello, world!', body: Faker::Lorem.paragraph).
179
+ comments.create(body: 'First post!', person: Person.last)
180
+ # a comment based on articles and people
181
+ Article.first.comments.create(body: 'Last post!', person: Article.last.commenters.first)
182
+
183
+ # So, we created
184
+ # 10 people
185
+ # 31 articles
186
+ # 322 comments(22 p + 302 a, 2 overlaps)
187
+ # 40 notes(10 p + 30 a)
188
+ # 90 tags
189
+ # 20 unidentified objects
190
+
191
+ # has many through polymorphic model examples
192
+ users = User.create([{ name: 'batman' }, { name: 'robin' }])
193
+ groups = Group.create([{ name: 'justice league'}, { name: 'batcave stalagmite counting club'}])
194
+ users.first.groups << groups.first
195
+ users.first.groups << groups.last
196
+ users.last.groups << groups.last
197
+
198
+ 10.times do |i|
199
+ seat = Seat.create(no: i+1)
200
+ seat.order_items.create(unit_price: 10, quantity: 1)
201
+
202
+ seat.create_payment if i%2 == 0
203
+ end
121
204
  end
122
205
  end
206
+
@@ -1,10 +1,79 @@
1
1
  require 'active_record'
2
2
  require 'squeel'
3
+ require 'pathname'
4
+ require 'yaml'
3
5
 
4
- ActiveRecord::Base.establish_connection(
5
- :adapter => 'sqlite3',
6
- :database => ':memory:'
7
- )
6
+ ENV['SQ_DB'] ||= 'sqlite3'
7
+
8
+ MYSQL_ENV = ENV['SQ_DB'] =~ /mysql/
9
+ SQLITE_ENV = ENV['SQ_DB'] == 'sqlite3'
10
+ PG_ENV = ENV['SQ_DB'] == 'postgresql'
11
+ Q = MYSQL_ENV ? '`' : '"' #Quotes difference in MySQL
12
+
13
+ module Squeel
14
+ module Test
15
+ extend self
16
+
17
+ def config
18
+ @config ||= read_config
19
+ end
20
+
21
+ def read_config
22
+ config_file = Pathname.new(ENV['SQ_CONFIG_FILE'] || File.expand_path('../../', __FILE__) + '/config.yml')
23
+ expand_config(YAML.parse(config_file.read).transform)
24
+ end
25
+
26
+ def expand_config(config)
27
+ config["databases"].each do |adapter, connection|
28
+ connection['adapter'] ||= adapter
29
+ end
30
+
31
+ config
32
+ end
33
+
34
+ def build_connection(adapter)
35
+ case adapter
36
+ when 'sqlite3'
37
+ ActiveRecord::Base.establish_connection(
38
+ :adapter => 'sqlite3',
39
+ :database => ':memory:'
40
+ )
41
+ else
42
+ Squeel::Test.send "rebuild_#{ENV['SQ_DB']}_db"
43
+
44
+ ActiveRecord::Base.establish_connection(
45
+ Squeel::Test.config['databases'][ENV['SQ_DB']]
46
+ )
47
+ end
48
+ end
49
+
50
+ private
51
+ def rebuild_mysql_db
52
+ config = self.config['databases']['mysql']
53
+ %x( mysqladmin --user=#{config['username']} -f drop #{config['database']} )
54
+ %x( mysql --user=#{config['username']} -e "create DATABASE #{config['database']} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci ")
55
+ end
56
+
57
+ def rebuild_mysql2_db
58
+ config = self.config['databases']['mysql2']
59
+ %x( mysqladmin --user=#{config['username']} -f drop #{config['database']} )
60
+ %x( mysql --user=#{config['username']} -e "create DATABASE #{config['database']} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci ")
61
+ end
62
+
63
+ def rebuild_postgresql_db
64
+ config = self.config['databases']['postgresql']
65
+ %x( dropdb #{config['database']} )
66
+ %x( createdb -E UTF8 -T template0 #{config['database']} )
67
+ end
68
+ end
69
+ end
70
+
71
+ case ENV['SQ_DB']
72
+ when 'sqlite3', 'mysql', 'mysql2', 'postgresql'
73
+ Squeel::Test.build_connection(ENV['SQ_DB'])
74
+ else
75
+ raise RuntimeError, "Error SQ_DB setting, must be included in sqlite3, mysql, mysql2, postgresql."
76
+ end
8
77
 
9
78
  silence_stream(STDOUT) do
10
79
  ActiveRecord::Migration.verbose = false
@@ -53,6 +122,42 @@ silence_stream(STDOUT) do
53
122
  t.string :note
54
123
  end
55
124
 
125
+ # Test for polymorphic with source_type
126
+ create_table :users do |t|
127
+ t.string :name
128
+ end
129
+
130
+ create_table :memberships do |t|
131
+ t.references :group
132
+ t.integer :member_id
133
+ t.string :member_type
134
+ t.boolean :active
135
+ end
136
+
137
+ create_table :packages do |t|
138
+ t.string :name
139
+ end
140
+
141
+ create_table :groups do |t|
142
+ t.string :name
143
+ end
144
+
145
+ create_table :seats do |t|
146
+ t.string :no
147
+ t.integer :payment_id
148
+ end
149
+
150
+ create_table :order_items do |t|
151
+ t.string :orderable_type
152
+ t.integer :orderable_id
153
+ t.integer :quantity
154
+ t.integer :unit_price
155
+ end
156
+
157
+ create_table :payments do |t|
158
+
159
+ end
160
+
56
161
  end
57
162
  end
58
163
 
@@ -8,23 +8,25 @@ Gem::Specification.new do |s|
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Ernie Miller"]
10
10
  s.email = ["ernie@erniemiller.org"]
11
- s.homepage = "http://erniemiller.org/projects/squeel"
12
- s.summary = %q{Active Record 3, improved.}
11
+ s.homepage = "https://github.com/ernie/squeel"
12
+ s.summary = %q{Active Record, improved.}
13
13
  s.description = %q{
14
- Squeel unlocks the power of Arel in your Rails 3 application with
14
+ Squeel unlocks the power of Arel in your Rails application with
15
15
  a handy block-based syntax. You can write subqueries, access named
16
16
  functions provided by your RDBMS, and more, all without writing
17
- SQL strings.
17
+ SQL strings. Supporting Rails 3 and 4.
18
18
  }
19
19
  s.rubyforge_project = "squeel"
20
20
 
21
21
  s.add_dependency 'activerecord', '>= 3.0'
22
22
  s.add_dependency 'activesupport', '>= 3.0'
23
- s.add_dependency 'polyamorous', '~> 0.6.0'
23
+ s.add_dependency 'polyamorous', '~> 1.1.0'
24
24
  s.add_development_dependency 'rspec', '~> 2.6.0'
25
- s.add_development_dependency 'machinist', '~> 1.0.6'
26
25
  s.add_development_dependency 'faker', '~> 0.9.5'
27
26
  s.add_development_dependency 'sqlite3', '~> 1.3.3'
27
+ s.add_development_dependency 'mysql', '~> 2.9.1'
28
+ s.add_development_dependency 'mysql2', '~> 0.3.16'
29
+ s.add_development_dependency 'pg', '~> 0.17.1'
28
30
 
29
31
  s.files = `git ls-files`.split("\n")
30
32
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,143 +1,155 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squeel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
5
- prerelease:
4
+ version: 1.2.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ernie Miller
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-03 00:00:00.000000000 Z
11
+ date: 2014-07-18 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '3.0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '3.0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: polyamorous
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: 0.6.0
47
+ version: 1.1.0
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: 0.6.0
54
+ version: 1.1.0
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
61
  version: 2.6.0
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
68
  version: 2.6.0
78
69
  - !ruby/object:Gem::Dependency
79
- name: machinist
70
+ name: faker
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
- version: 1.0.6
75
+ version: 0.9.5
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
- version: 1.0.6
82
+ version: 0.9.5
94
83
  - !ruby/object:Gem::Dependency
95
- name: faker
84
+ name: sqlite3
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ~>
87
+ - - "~>"
100
88
  - !ruby/object:Gem::Version
101
- version: 0.9.5
89
+ version: 1.3.3
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ~>
94
+ - - "~>"
108
95
  - !ruby/object:Gem::Version
109
- version: 0.9.5
96
+ version: 1.3.3
110
97
  - !ruby/object:Gem::Dependency
111
- name: sqlite3
98
+ name: mysql
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ~>
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: 1.3.3
103
+ version: 2.9.1
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ~>
108
+ - - "~>"
124
109
  - !ruby/object:Gem::Version
125
- version: 1.3.3
126
- description: ! "\n Squeel unlocks the power of Arel in your Rails 3 application
127
- with\n a handy block-based syntax. You can write subqueries, access named\n
128
- \ functions provided by your RDBMS, and more, all without writing\n SQL
129
- strings.\n "
110
+ version: 2.9.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: mysql2
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.3.16
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.3.16
125
+ - !ruby/object:Gem::Dependency
126
+ name: pg
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.17.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.17.1
139
+ description: "\n Squeel unlocks the power of Arel in your Rails application with\n
140
+ \ a handy block-based syntax. You can write subqueries, access named\n functions
141
+ provided by your RDBMS, and more, all without writing\n SQL strings. Supporting
142
+ Rails 3 and 4.\n "
130
143
  email:
131
144
  - ernie@erniemiller.org
132
145
  executables: []
133
146
  extensions: []
134
147
  extra_rdoc_files: []
135
148
  files:
136
- - .gitignore
137
- - .ruby-gemset
138
- - .ruby-version
139
- - .travis.yml
140
- - .yardopts
149
+ - ".gitignore"
150
+ - ".rspec"
151
+ - ".travis.yml"
152
+ - ".yardopts"
141
153
  - CHANGELOG.md
142
154
  - Gemfile
143
155
  - LICENSE
@@ -150,19 +162,32 @@ files:
150
162
  - lib/squeel/adapters/active_record/3.0/association_preload_extensions.rb
151
163
  - lib/squeel/adapters/active_record/3.0/compat.rb
152
164
  - lib/squeel/adapters/active_record/3.0/context.rb
165
+ - lib/squeel/adapters/active_record/3.0/join_dependency_extensions.rb
153
166
  - lib/squeel/adapters/active_record/3.0/relation_extensions.rb
154
167
  - lib/squeel/adapters/active_record/3.1/compat.rb
155
168
  - lib/squeel/adapters/active_record/3.1/context.rb
169
+ - lib/squeel/adapters/active_record/3.1/join_dependency_extensions.rb
156
170
  - lib/squeel/adapters/active_record/3.1/preloader_extensions.rb
157
171
  - lib/squeel/adapters/active_record/3.1/relation_extensions.rb
158
172
  - lib/squeel/adapters/active_record/3.2/compat.rb
159
173
  - lib/squeel/adapters/active_record/3.2/context.rb
174
+ - lib/squeel/adapters/active_record/3.2/join_dependency_extensions.rb
160
175
  - lib/squeel/adapters/active_record/3.2/preloader_extensions.rb
161
176
  - lib/squeel/adapters/active_record/3.2/relation_extensions.rb
162
177
  - lib/squeel/adapters/active_record/4.0/compat.rb
163
178
  - lib/squeel/adapters/active_record/4.0/context.rb
179
+ - lib/squeel/adapters/active_record/4.0/join_dependency_extensions.rb
164
180
  - lib/squeel/adapters/active_record/4.0/preloader_extensions.rb
165
181
  - lib/squeel/adapters/active_record/4.0/relation_extensions.rb
182
+ - lib/squeel/adapters/active_record/4.1/compat.rb
183
+ - lib/squeel/adapters/active_record/4.1/context.rb
184
+ - lib/squeel/adapters/active_record/4.1/preloader_extensions.rb
185
+ - lib/squeel/adapters/active_record/4.1/reflection_extensions.rb
186
+ - lib/squeel/adapters/active_record/4.1/relation_extensions.rb
187
+ - lib/squeel/adapters/active_record/4.2/compat.rb
188
+ - lib/squeel/adapters/active_record/4.2/context.rb
189
+ - lib/squeel/adapters/active_record/4.2/preloader_extensions.rb
190
+ - lib/squeel/adapters/active_record/4.2/relation_extensions.rb
166
191
  - lib/squeel/adapters/active_record/base_extensions.rb
167
192
  - lib/squeel/adapters/active_record/compat.rb
168
193
  - lib/squeel/adapters/active_record/context.rb
@@ -198,9 +223,11 @@ files:
198
223
  - lib/squeel/nodes/predicate_operators.rb
199
224
  - lib/squeel/nodes/sifter.rb
200
225
  - lib/squeel/nodes/stub.rb
226
+ - lib/squeel/nodes/subquery_join.rb
201
227
  - lib/squeel/nodes/unary.rb
202
228
  - lib/squeel/version.rb
203
229
  - lib/squeel/visitors.rb
230
+ - lib/squeel/visitors/enumeration_visitor.rb
204
231
  - lib/squeel/visitors/from_visitor.rb
205
232
  - lib/squeel/visitors/group_visitor.rb
206
233
  - lib/squeel/visitors/having_visitor.rb
@@ -211,11 +238,8 @@ files:
211
238
  - lib/squeel/visitors/select_visitor.rb
212
239
  - lib/squeel/visitors/visitor.rb
213
240
  - lib/squeel/visitors/where_visitor.rb
214
- - spec/blueprints/articles.rb
215
- - spec/blueprints/comments.rb
216
- - spec/blueprints/notes.rb
217
- - spec/blueprints/people.rb
218
- - spec/blueprints/tags.rb
241
+ - spec/config.travis.yml
242
+ - spec/config.yml
219
243
  - spec/console.rb
220
244
  - spec/core_ext/symbol_spec.rb
221
245
  - spec/helpers/squeel_helper.rb
@@ -239,6 +263,7 @@ files:
239
263
  - spec/squeel/nodes/predicate_spec.rb
240
264
  - spec/squeel/nodes/sifter_spec.rb
241
265
  - spec/squeel/nodes/stub_spec.rb
266
+ - spec/squeel/nodes/subquery_join_spec.rb
242
267
  - spec/squeel/visitors/from_visitor_spec.rb
243
268
  - spec/squeel/visitors/order_visitor_spec.rb
244
269
  - spec/squeel/visitors/predicate_visitor_spec.rb
@@ -248,70 +273,27 @@ files:
248
273
  - spec/support/models.rb
249
274
  - spec/support/schema.rb
250
275
  - squeel.gemspec
251
- homepage: http://erniemiller.org/projects/squeel
276
+ homepage: https://github.com/ernie/squeel
252
277
  licenses: []
278
+ metadata: {}
253
279
  post_install_message:
254
280
  rdoc_options: []
255
281
  require_paths:
256
282
  - lib
257
283
  required_ruby_version: !ruby/object:Gem::Requirement
258
- none: false
259
284
  requirements:
260
- - - ! '>='
285
+ - - ">="
261
286
  - !ruby/object:Gem::Version
262
287
  version: '0'
263
- segments:
264
- - 0
265
- hash: 2299455513016806786
266
288
  required_rubygems_version: !ruby/object:Gem::Requirement
267
- none: false
268
289
  requirements:
269
- - - ! '>='
290
+ - - ">="
270
291
  - !ruby/object:Gem::Version
271
292
  version: '0'
272
- segments:
273
- - 0
274
- hash: 2299455513016806786
275
293
  requirements: []
276
294
  rubyforge_project: squeel
277
- rubygems_version: 1.8.23
295
+ rubygems_version: 2.2.2
278
296
  signing_key:
279
- specification_version: 3
280
- summary: Active Record 3, improved.
281
- test_files:
282
- - spec/blueprints/articles.rb
283
- - spec/blueprints/comments.rb
284
- - spec/blueprints/notes.rb
285
- - spec/blueprints/people.rb
286
- - spec/blueprints/tags.rb
287
- - spec/console.rb
288
- - spec/core_ext/symbol_spec.rb
289
- - spec/helpers/squeel_helper.rb
290
- - spec/spec_helper.rb
291
- - spec/squeel/adapters/active_record/base_extensions_spec.rb
292
- - spec/squeel/adapters/active_record/context_spec.rb
293
- - spec/squeel/adapters/active_record/join_dependency_extensions_spec.rb
294
- - spec/squeel/adapters/active_record/relation_extensions_spec.rb
295
- - spec/squeel/core_ext/symbol_spec.rb
296
- - spec/squeel/dsl_spec.rb
297
- - spec/squeel/nodes/as_spec.rb
298
- - spec/squeel/nodes/function_spec.rb
299
- - spec/squeel/nodes/grouping_spec.rb
300
- - spec/squeel/nodes/join_spec.rb
301
- - spec/squeel/nodes/key_path_spec.rb
302
- - spec/squeel/nodes/literal_spec.rb
303
- - spec/squeel/nodes/operation_spec.rb
304
- - spec/squeel/nodes/operators_spec.rb
305
- - spec/squeel/nodes/order_spec.rb
306
- - spec/squeel/nodes/predicate_operators_spec.rb
307
- - spec/squeel/nodes/predicate_spec.rb
308
- - spec/squeel/nodes/sifter_spec.rb
309
- - spec/squeel/nodes/stub_spec.rb
310
- - spec/squeel/visitors/from_visitor_spec.rb
311
- - spec/squeel/visitors/order_visitor_spec.rb
312
- - spec/squeel/visitors/predicate_visitor_spec.rb
313
- - spec/squeel/visitors/preload_visitor_spec.rb
314
- - spec/squeel/visitors/select_visitor_spec.rb
315
- - spec/squeel/visitors/visitor_spec.rb
316
- - spec/support/models.rb
317
- - spec/support/schema.rb
297
+ specification_version: 4
298
+ summary: Active Record, improved.
299
+ test_files: []