squeel 0.5.0
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.
- data/.gitignore +4 -0
- data/Gemfile +8 -0
- data/LICENSE +20 -0
- data/README.rdoc +41 -0
- data/Rakefile +19 -0
- data/lib/core_ext/hash.rb +13 -0
- data/lib/core_ext/symbol.rb +36 -0
- data/lib/squeel.rb +26 -0
- data/lib/squeel/adapters/active_record.rb +6 -0
- data/lib/squeel/adapters/active_record/join_association.rb +90 -0
- data/lib/squeel/adapters/active_record/join_dependency.rb +68 -0
- data/lib/squeel/adapters/active_record/relation.rb +292 -0
- data/lib/squeel/configuration.rb +25 -0
- data/lib/squeel/constants.rb +23 -0
- data/lib/squeel/contexts/join_dependency_context.rb +74 -0
- data/lib/squeel/dsl.rb +31 -0
- data/lib/squeel/nodes.rb +10 -0
- data/lib/squeel/nodes/and.rb +8 -0
- data/lib/squeel/nodes/binary.rb +23 -0
- data/lib/squeel/nodes/function.rb +84 -0
- data/lib/squeel/nodes/join.rb +51 -0
- data/lib/squeel/nodes/key_path.rb +127 -0
- data/lib/squeel/nodes/nary.rb +35 -0
- data/lib/squeel/nodes/not.rb +8 -0
- data/lib/squeel/nodes/operation.rb +23 -0
- data/lib/squeel/nodes/operators.rb +27 -0
- data/lib/squeel/nodes/or.rb +8 -0
- data/lib/squeel/nodes/order.rb +35 -0
- data/lib/squeel/nodes/predicate.rb +49 -0
- data/lib/squeel/nodes/predicate_operators.rb +17 -0
- data/lib/squeel/nodes/stub.rb +113 -0
- data/lib/squeel/nodes/unary.rb +22 -0
- data/lib/squeel/predicate_methods.rb +22 -0
- data/lib/squeel/predicate_methods/function.rb +9 -0
- data/lib/squeel/predicate_methods/predicate.rb +11 -0
- data/lib/squeel/predicate_methods/stub.rb +9 -0
- data/lib/squeel/predicate_methods/symbol.rb +9 -0
- data/lib/squeel/version.rb +3 -0
- data/lib/squeel/visitors.rb +3 -0
- data/lib/squeel/visitors/base.rb +46 -0
- data/lib/squeel/visitors/order_visitor.rb +107 -0
- data/lib/squeel/visitors/predicate_visitor.rb +179 -0
- data/lib/squeel/visitors/select_visitor.rb +103 -0
- data/spec/blueprints/articles.rb +5 -0
- data/spec/blueprints/comments.rb +5 -0
- data/spec/blueprints/notes.rb +3 -0
- data/spec/blueprints/people.rb +4 -0
- data/spec/blueprints/tags.rb +3 -0
- data/spec/console.rb +22 -0
- data/spec/core_ext/symbol_spec.rb +68 -0
- data/spec/helpers/squeel_helper.rb +5 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/squeel/adapters/active_record/join_association_spec.rb +18 -0
- data/spec/squeel/adapters/active_record/join_depdendency_spec.rb +60 -0
- data/spec/squeel/adapters/active_record/relation_spec.rb +437 -0
- data/spec/squeel/contexts/join_dependency_context_spec.rb +43 -0
- data/spec/squeel/dsl_spec.rb +73 -0
- data/spec/squeel/nodes/function_spec.rb +149 -0
- data/spec/squeel/nodes/join_spec.rb +27 -0
- data/spec/squeel/nodes/key_path_spec.rb +92 -0
- data/spec/squeel/nodes/operation_spec.rb +149 -0
- data/spec/squeel/nodes/operators_spec.rb +87 -0
- data/spec/squeel/nodes/order_spec.rb +30 -0
- data/spec/squeel/nodes/predicate_operators_spec.rb +88 -0
- data/spec/squeel/nodes/predicate_spec.rb +92 -0
- data/spec/squeel/nodes/stub_spec.rb +178 -0
- data/spec/squeel/visitors/order_visitor_spec.rb +128 -0
- data/spec/squeel/visitors/predicate_visitor_spec.rb +267 -0
- data/spec/squeel/visitors/select_visitor_spec.rb +115 -0
- data/spec/support/schema.rb +101 -0
- data/squeel.gemspec +44 -0
- metadata +221 -0
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
ActiveRecord::Base.establish_connection(
|
4
|
+
:adapter => 'sqlite3',
|
5
|
+
:database => ':memory:'
|
6
|
+
)
|
7
|
+
|
8
|
+
class Person < ActiveRecord::Base
|
9
|
+
belongs_to :parent, :class_name => 'Person', :foreign_key => :parent_id
|
10
|
+
has_many :children, :class_name => 'Person', :foreign_key => :parent_id
|
11
|
+
has_many :articles
|
12
|
+
has_many :comments
|
13
|
+
has_many :authored_article_comments, :through => :articles,
|
14
|
+
:class_name => 'Comment', :foreign_key => :person_id
|
15
|
+
has_many :notes, :as => :notable
|
16
|
+
end
|
17
|
+
|
18
|
+
class Article < ActiveRecord::Base
|
19
|
+
belongs_to :person
|
20
|
+
has_many :comments
|
21
|
+
has_and_belongs_to_many :tags
|
22
|
+
has_many :notes, :as => :notable
|
23
|
+
end
|
24
|
+
|
25
|
+
class Comment < ActiveRecord::Base
|
26
|
+
belongs_to :article
|
27
|
+
belongs_to :person
|
28
|
+
end
|
29
|
+
|
30
|
+
class Tag < ActiveRecord::Base
|
31
|
+
has_and_belongs_to_many :articles
|
32
|
+
end
|
33
|
+
|
34
|
+
class Note < ActiveRecord::Base
|
35
|
+
belongs_to :notable, :polymorphic => true
|
36
|
+
end
|
37
|
+
|
38
|
+
module Schema
|
39
|
+
def self.create
|
40
|
+
ActiveRecord::Base.silence do
|
41
|
+
ActiveRecord::Migration.verbose = false
|
42
|
+
|
43
|
+
ActiveRecord::Schema.define do
|
44
|
+
create_table :people, :force => true do |t|
|
45
|
+
t.integer :parent_id
|
46
|
+
t.string :name
|
47
|
+
t.integer :salary
|
48
|
+
end
|
49
|
+
|
50
|
+
create_table :articles, :force => true do |t|
|
51
|
+
t.integer :person_id
|
52
|
+
t.string :title
|
53
|
+
t.text :body
|
54
|
+
end
|
55
|
+
|
56
|
+
create_table :comments, :force => true do |t|
|
57
|
+
t.integer :article_id
|
58
|
+
t.integer :person_id
|
59
|
+
t.text :body
|
60
|
+
end
|
61
|
+
|
62
|
+
create_table :tags, :force => true do |t|
|
63
|
+
t.string :name
|
64
|
+
end
|
65
|
+
|
66
|
+
create_table :articles_tags, :force => true, :id => false do |t|
|
67
|
+
t.integer :article_id
|
68
|
+
t.integer :tag_id
|
69
|
+
end
|
70
|
+
|
71
|
+
create_table :notes, :force => true do |t|
|
72
|
+
t.integer :notable_id
|
73
|
+
t.string :notable_type
|
74
|
+
t.string :note
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
10.times do
|
81
|
+
person = Person.make
|
82
|
+
Note.make(:notable => person)
|
83
|
+
3.times do
|
84
|
+
article = Article.make(:person => person)
|
85
|
+
3.times do
|
86
|
+
article.tags = [Tag.make, Tag.make, Tag.make]
|
87
|
+
end
|
88
|
+
Note.make(:notable => article)
|
89
|
+
10.times do
|
90
|
+
Comment.make(:article => article)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
2.times do
|
94
|
+
Comment.make(:person => person)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
Comment.make(:body => 'First post!', :article => Article.make(:title => 'Hello, world!'))
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
data/squeel.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "squeel/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "squeel"
|
7
|
+
s.version = Squeel::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Ernie Miller"]
|
10
|
+
s.email = ["ernie@metautonomo.us"]
|
11
|
+
s.homepage = "http://metautonomo.us/projects/squeel"
|
12
|
+
s.summary = %q{ActiveRecord 3 query syntax on steroids.}
|
13
|
+
s.description = %q{
|
14
|
+
Squeel offers the ability to call any Arel predicate methods
|
15
|
+
(with a few convenient aliases) on your model's attributes instead
|
16
|
+
of the ones normally offered by ActiveRecord's hash parameters. It also
|
17
|
+
adds convenient syntax for order clauses, smarter mapping of nested hash
|
18
|
+
conditions, and a debug_sql method to see the real SQL your code is
|
19
|
+
generating without running it against the database. If you like the new
|
20
|
+
AR 3.0 query interface, you'll love it with Squeel.
|
21
|
+
}
|
22
|
+
s.post_install_message = %q{
|
23
|
+
*** Thanks for installing Squeel! ***
|
24
|
+
Be sure to check out http://metautonomo.us/projects/squeel/ for a
|
25
|
+
walkthrough of Squeel's features, and click the donate button if
|
26
|
+
you're feeling especially appreciative. It'd help me justify this
|
27
|
+
"open source" stuff to my lovely wife. :)
|
28
|
+
|
29
|
+
}
|
30
|
+
|
31
|
+
s.rubyforge_project = "squeel"
|
32
|
+
|
33
|
+
s.add_dependency 'activerecord', '~> 3.1.0.alpha'
|
34
|
+
s.add_dependency 'activesupport', '~> 3.1.0.alpha'
|
35
|
+
s.add_development_dependency 'rspec', '~> 2.5.0'
|
36
|
+
s.add_development_dependency 'machinist', '~> 1.0.6'
|
37
|
+
s.add_development_dependency 'faker', '~> 0.9.5'
|
38
|
+
s.add_development_dependency 'sqlite3', '~> 1.3.3'
|
39
|
+
|
40
|
+
s.files = `git ls-files`.split("\n")
|
41
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
42
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
43
|
+
s.require_paths = ["lib"]
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,221 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: squeel
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.5.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ernie Miller
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-04-09 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activerecord
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 3.1.0.alpha
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: activesupport
|
28
|
+
prerelease: false
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 3.1.0.alpha
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rspec
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.5.0
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: machinist
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 1.0.6
|
57
|
+
type: :development
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: faker
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 0.9.5
|
68
|
+
type: :development
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: sqlite3
|
72
|
+
prerelease: false
|
73
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 1.3.3
|
79
|
+
type: :development
|
80
|
+
version_requirements: *id006
|
81
|
+
description: "\n Squeel offers the ability to call any Arel predicate methods\n (with a few convenient aliases) on your model's attributes instead\n of the ones normally offered by ActiveRecord's hash parameters. It also\n adds convenient syntax for order clauses, smarter mapping of nested hash\n conditions, and a debug_sql method to see the real SQL your code is\n generating without running it against the database. If you like the new\n AR 3.0 query interface, you'll love it with Squeel.\n "
|
82
|
+
email:
|
83
|
+
- ernie@metautonomo.us
|
84
|
+
executables: []
|
85
|
+
|
86
|
+
extensions: []
|
87
|
+
|
88
|
+
extra_rdoc_files: []
|
89
|
+
|
90
|
+
files:
|
91
|
+
- .gitignore
|
92
|
+
- Gemfile
|
93
|
+
- LICENSE
|
94
|
+
- README.rdoc
|
95
|
+
- Rakefile
|
96
|
+
- lib/core_ext/hash.rb
|
97
|
+
- lib/core_ext/symbol.rb
|
98
|
+
- lib/squeel.rb
|
99
|
+
- lib/squeel/adapters/active_record.rb
|
100
|
+
- lib/squeel/adapters/active_record/join_association.rb
|
101
|
+
- lib/squeel/adapters/active_record/join_dependency.rb
|
102
|
+
- lib/squeel/adapters/active_record/relation.rb
|
103
|
+
- lib/squeel/configuration.rb
|
104
|
+
- lib/squeel/constants.rb
|
105
|
+
- lib/squeel/contexts/join_dependency_context.rb
|
106
|
+
- lib/squeel/dsl.rb
|
107
|
+
- lib/squeel/nodes.rb
|
108
|
+
- lib/squeel/nodes/and.rb
|
109
|
+
- lib/squeel/nodes/binary.rb
|
110
|
+
- lib/squeel/nodes/function.rb
|
111
|
+
- lib/squeel/nodes/join.rb
|
112
|
+
- lib/squeel/nodes/key_path.rb
|
113
|
+
- lib/squeel/nodes/nary.rb
|
114
|
+
- lib/squeel/nodes/not.rb
|
115
|
+
- lib/squeel/nodes/operation.rb
|
116
|
+
- lib/squeel/nodes/operators.rb
|
117
|
+
- lib/squeel/nodes/or.rb
|
118
|
+
- lib/squeel/nodes/order.rb
|
119
|
+
- lib/squeel/nodes/predicate.rb
|
120
|
+
- lib/squeel/nodes/predicate_operators.rb
|
121
|
+
- lib/squeel/nodes/stub.rb
|
122
|
+
- lib/squeel/nodes/unary.rb
|
123
|
+
- lib/squeel/predicate_methods.rb
|
124
|
+
- lib/squeel/predicate_methods/function.rb
|
125
|
+
- lib/squeel/predicate_methods/predicate.rb
|
126
|
+
- lib/squeel/predicate_methods/stub.rb
|
127
|
+
- lib/squeel/predicate_methods/symbol.rb
|
128
|
+
- lib/squeel/version.rb
|
129
|
+
- lib/squeel/visitors.rb
|
130
|
+
- lib/squeel/visitors/base.rb
|
131
|
+
- lib/squeel/visitors/order_visitor.rb
|
132
|
+
- lib/squeel/visitors/predicate_visitor.rb
|
133
|
+
- lib/squeel/visitors/select_visitor.rb
|
134
|
+
- spec/blueprints/articles.rb
|
135
|
+
- spec/blueprints/comments.rb
|
136
|
+
- spec/blueprints/notes.rb
|
137
|
+
- spec/blueprints/people.rb
|
138
|
+
- spec/blueprints/tags.rb
|
139
|
+
- spec/console.rb
|
140
|
+
- spec/core_ext/symbol_spec.rb
|
141
|
+
- spec/helpers/squeel_helper.rb
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
- spec/squeel/adapters/active_record/join_association_spec.rb
|
144
|
+
- spec/squeel/adapters/active_record/join_depdendency_spec.rb
|
145
|
+
- spec/squeel/adapters/active_record/relation_spec.rb
|
146
|
+
- spec/squeel/contexts/join_dependency_context_spec.rb
|
147
|
+
- spec/squeel/dsl_spec.rb
|
148
|
+
- spec/squeel/nodes/function_spec.rb
|
149
|
+
- spec/squeel/nodes/join_spec.rb
|
150
|
+
- spec/squeel/nodes/key_path_spec.rb
|
151
|
+
- spec/squeel/nodes/operation_spec.rb
|
152
|
+
- spec/squeel/nodes/operators_spec.rb
|
153
|
+
- spec/squeel/nodes/order_spec.rb
|
154
|
+
- spec/squeel/nodes/predicate_operators_spec.rb
|
155
|
+
- spec/squeel/nodes/predicate_spec.rb
|
156
|
+
- spec/squeel/nodes/stub_spec.rb
|
157
|
+
- spec/squeel/visitors/order_visitor_spec.rb
|
158
|
+
- spec/squeel/visitors/predicate_visitor_spec.rb
|
159
|
+
- spec/squeel/visitors/select_visitor_spec.rb
|
160
|
+
- spec/support/schema.rb
|
161
|
+
- squeel.gemspec
|
162
|
+
homepage: http://metautonomo.us/projects/squeel
|
163
|
+
licenses: []
|
164
|
+
|
165
|
+
post_install_message: "\n\
|
166
|
+
*** Thanks for installing Squeel! ***\n\
|
167
|
+
Be sure to check out http://metautonomo.us/projects/squeel/ for a\n\
|
168
|
+
walkthrough of Squeel's features, and click the donate button if\n\
|
169
|
+
you're feeling especially appreciative. It'd help me justify this\n\
|
170
|
+
\"open source\" stuff to my lovely wife. :)\n\n"
|
171
|
+
rdoc_options: []
|
172
|
+
|
173
|
+
require_paths:
|
174
|
+
- lib
|
175
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
176
|
+
none: false
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: "0"
|
181
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
|
+
none: false
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: "0"
|
187
|
+
requirements: []
|
188
|
+
|
189
|
+
rubyforge_project: squeel
|
190
|
+
rubygems_version: 1.7.2
|
191
|
+
signing_key:
|
192
|
+
specification_version: 3
|
193
|
+
summary: ActiveRecord 3 query syntax on steroids.
|
194
|
+
test_files:
|
195
|
+
- spec/blueprints/articles.rb
|
196
|
+
- spec/blueprints/comments.rb
|
197
|
+
- spec/blueprints/notes.rb
|
198
|
+
- spec/blueprints/people.rb
|
199
|
+
- spec/blueprints/tags.rb
|
200
|
+
- spec/console.rb
|
201
|
+
- spec/core_ext/symbol_spec.rb
|
202
|
+
- spec/helpers/squeel_helper.rb
|
203
|
+
- spec/spec_helper.rb
|
204
|
+
- spec/squeel/adapters/active_record/join_association_spec.rb
|
205
|
+
- spec/squeel/adapters/active_record/join_depdendency_spec.rb
|
206
|
+
- spec/squeel/adapters/active_record/relation_spec.rb
|
207
|
+
- spec/squeel/contexts/join_dependency_context_spec.rb
|
208
|
+
- spec/squeel/dsl_spec.rb
|
209
|
+
- spec/squeel/nodes/function_spec.rb
|
210
|
+
- spec/squeel/nodes/join_spec.rb
|
211
|
+
- spec/squeel/nodes/key_path_spec.rb
|
212
|
+
- spec/squeel/nodes/operation_spec.rb
|
213
|
+
- spec/squeel/nodes/operators_spec.rb
|
214
|
+
- spec/squeel/nodes/order_spec.rb
|
215
|
+
- spec/squeel/nodes/predicate_operators_spec.rb
|
216
|
+
- spec/squeel/nodes/predicate_spec.rb
|
217
|
+
- spec/squeel/nodes/stub_spec.rb
|
218
|
+
- spec/squeel/visitors/order_visitor_spec.rb
|
219
|
+
- spec/squeel/visitors/predicate_visitor_spec.rb
|
220
|
+
- spec/squeel/visitors/select_visitor_spec.rb
|
221
|
+
- spec/support/schema.rb
|