squeel 1.1.1 → 1.2.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.
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: []