scoped_search 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +25 -22
- data/lib/scoped_search.rb +1 -1
- data/lib/scoped_search/query_language/parser.rb +1 -0
- data/scoped_search.gemspec +12 -7
- data/spec/integration/api_spec.rb +6 -6
- data/spec/integration/ordinal_querying_spec.rb +6 -6
- data/spec/integration/profile_querying_spec.rb +6 -6
- data/spec/integration/relation_querying_spec.rb +193 -190
- data/spec/integration/string_querying_spec.rb +6 -6
- data/spec/lib/database.rb +10 -6
- data/spec/lib/matchers.rb +17 -34
- data/spec/lib/mocks.rb +1 -1
- data/spec/spec_helper.rb +4 -5
- data/spec/unit/ast_spec.rb +1 -1
- data/spec/unit/definition_spec.rb +1 -1
- data/spec/unit/parser_spec.rb +1 -1
- data/spec/unit/query_builder_spec.rb +1 -1
- data/spec/unit/tokenizer_spec.rb +1 -1
- data/tasks/github-gem.rake +41 -51
- metadata +48 -40
@@ -1,15 +1,15 @@
|
|
1
|
-
require
|
1
|
+
require 'spec_helper'
|
2
2
|
|
3
3
|
# These specs will run on all databases that are defined in the spec/database.yml file.
|
4
4
|
# Comment out any databases that you do not have available for testing purposes if needed.
|
5
|
-
ScopedSearch::
|
5
|
+
ScopedSearch::RSpec::Database.test_databases.each do |db|
|
6
6
|
|
7
7
|
describe ScopedSearch, "using a #{db} database" do
|
8
8
|
|
9
9
|
before(:all) do
|
10
|
-
ScopedSearch::
|
10
|
+
ScopedSearch::RSpec::Database.establish_named_connection(db)
|
11
11
|
|
12
|
-
@class = ScopedSearch::
|
12
|
+
@class = ScopedSearch::RSpec::Database.create_model(:string => :string, :another => :string, :explicit => :string) do |klass|
|
13
13
|
klass.scoped_search :on => :string
|
14
14
|
klass.scoped_search :on => :another, :default_operator => :eq, :alias => :alias
|
15
15
|
klass.scoped_search :on => :explicit, :only_explicit => true
|
@@ -21,8 +21,8 @@ ScopedSearch::Spec::Database.test_databases.each do |db|
|
|
21
21
|
end
|
22
22
|
|
23
23
|
after(:all) do
|
24
|
-
ScopedSearch::
|
25
|
-
ScopedSearch::
|
24
|
+
ScopedSearch::RSpec::Database.drop_model(@class)
|
25
|
+
ScopedSearch::RSpec::Database.close_connection
|
26
26
|
end
|
27
27
|
|
28
28
|
context 'in an implicit string field' do
|
data/spec/lib/database.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
require 'erb'
|
1
2
|
ActiveRecord::Migration.verbose = false unless ENV.has_key?('DEBUG')
|
2
3
|
|
3
|
-
module ScopedSearch::
|
4
|
+
module ScopedSearch::RSpec::Database
|
4
5
|
|
5
6
|
def self.establish_connection
|
6
7
|
if ENV['DATABASE']
|
@@ -10,15 +11,18 @@ module ScopedSearch::Spec::Database
|
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
14
|
+
def self.test_databases_configuration
|
15
|
+
file = File.expand_path("../database.yml", File.dirname(__FILE__))
|
16
|
+
@database_connections ||= YAML.load(ERB.new(File.read(file)).result)
|
17
|
+
end
|
18
|
+
|
13
19
|
def self.test_databases
|
14
|
-
|
15
|
-
@database_connections.keys
|
20
|
+
test_databases_configuration.keys
|
16
21
|
end
|
17
22
|
|
18
23
|
def self.establish_named_connection(name)
|
19
|
-
|
20
|
-
|
21
|
-
ActiveRecord::Base.establish_connection(@database_connections[name.to_s])
|
24
|
+
raise "#{name} database not configured" if test_databases_configuration[name.to_s].nil?
|
25
|
+
ActiveRecord::Base.establish_connection(test_databases_configuration[name.to_s])
|
22
26
|
end
|
23
27
|
|
24
28
|
def self.establish_default_connection
|
data/spec/lib/matchers.rb
CHANGED
@@ -1,40 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
node.kind_of?(ScopedSearch::QueryLanguage::AST::OperatorNode) &&
|
5
|
-
node.infix? && (operator.nil? || operator == node.operator)
|
6
|
-
end
|
7
|
-
end
|
1
|
+
RSpec::Matchers.define :be_infix_operator do |operator|
|
2
|
+
match { |node| node.kind_of?(ScopedSearch::QueryLanguage::AST::OperatorNode) && node.infix? && (operator.nil? || operator == node.operator) }
|
3
|
+
end
|
8
4
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
node.prefix? && (operator.nil? || operator == node.operator)
|
13
|
-
end
|
14
|
-
end
|
5
|
+
RSpec::Matchers.define :be_prefix_operator do |operator|
|
6
|
+
match { |node| node.kind_of?(ScopedSearch::QueryLanguage::AST::OperatorNode) && node.prefix? && (operator.nil? || operator == node.operator) }
|
7
|
+
end
|
15
8
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
(operator.nil? || operator == node.operator)
|
20
|
-
end
|
21
|
-
end
|
9
|
+
RSpec::Matchers.define :be_logical_operator do |operator|
|
10
|
+
match { |node| node.kind_of?(ScopedSearch::QueryLanguage::AST::LogicalOperatorNode) && (operator.nil? || operator == node.operator) }
|
11
|
+
end
|
22
12
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
13
|
+
RSpec::Matchers.define :be_leaf_node do |value|
|
14
|
+
match { |node| node.kind_of?(ScopedSearch::QueryLanguage::AST::LeafNode) && (value.nil? || value == node.value) }
|
15
|
+
end
|
28
16
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
17
|
+
RSpec::Matchers.define :tokenize_to do |*tokens|
|
18
|
+
match { |str| tokens == ScopedSearch::QueryLanguage::Compiler.tokenize(str) }
|
19
|
+
end
|
34
20
|
|
35
|
-
|
36
|
-
|
37
|
-
tree == ScopedSearch::QueryLanguage::Compiler.parse(string).to_a
|
38
|
-
end
|
39
|
-
end
|
21
|
+
RSpec::Matchers.define :parse_to do |tree|
|
22
|
+
match { |str| tree == ScopedSearch::QueryLanguage::Compiler.parse(str).to_a }
|
40
23
|
end
|
data/spec/lib/mocks.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require '
|
4
|
+
require 'rspec'
|
5
5
|
require 'active_record'
|
6
6
|
|
7
7
|
require 'scoped_search'
|
8
8
|
|
9
|
-
module ScopedSearch::
|
9
|
+
module ScopedSearch::RSpec; end
|
10
10
|
|
11
11
|
require "#{File.dirname(__FILE__)}/lib/matchers"
|
12
12
|
require "#{File.dirname(__FILE__)}/lib/database"
|
13
13
|
require "#{File.dirname(__FILE__)}/lib/mocks"
|
14
14
|
|
15
15
|
|
16
|
-
|
17
|
-
config.include ScopedSearch::
|
18
|
-
config.include ScopedSearch::Spec::Mocks
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.include ScopedSearch::RSpec::Mocks
|
19
18
|
end
|
data/spec/unit/ast_spec.rb
CHANGED
data/spec/unit/parser_spec.rb
CHANGED
data/spec/unit/tokenizer_spec.rb
CHANGED
data/tasks/github-gem.rake
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'rake/tasklib'
|
4
4
|
require 'date'
|
5
|
-
require '
|
5
|
+
require 'set'
|
6
6
|
|
7
7
|
module GithubGem
|
8
8
|
|
@@ -24,7 +24,7 @@ module GithubGem
|
|
24
24
|
|
25
25
|
class RakeTasks
|
26
26
|
|
27
|
-
attr_reader :gemspec, :modified_files
|
27
|
+
attr_reader :gemspec, :modified_files
|
28
28
|
attr_accessor :gemspec_file, :task_namespace, :main_include, :root_dir, :spec_pattern, :test_pattern, :remote, :remote_branch, :local_branch
|
29
29
|
|
30
30
|
# Initializes the settings, yields itself for configuration
|
@@ -33,7 +33,7 @@ module GithubGem
|
|
33
33
|
@gemspec_file = GithubGem.detect_gemspec_file
|
34
34
|
@task_namespace = task_namespace
|
35
35
|
@main_include = GithubGem.detect_main_include
|
36
|
-
@modified_files =
|
36
|
+
@modified_files = Set.new
|
37
37
|
@root_dir = Dir.pwd
|
38
38
|
@test_pattern = 'test/**/*_test.rb'
|
39
39
|
@spec_pattern = 'spec/**/*_spec.rb'
|
@@ -43,13 +43,16 @@ module GithubGem
|
|
43
43
|
|
44
44
|
yield(self) if block_given?
|
45
45
|
|
46
|
-
@git = Git.open(@root_dir)
|
47
46
|
load_gemspec!
|
48
47
|
define_tasks!
|
49
48
|
end
|
50
49
|
|
51
50
|
protected
|
52
51
|
|
52
|
+
def git
|
53
|
+
@git ||= ENV['GIT'] || 'git'
|
54
|
+
end
|
55
|
+
|
53
56
|
# Define Unit test tasks
|
54
57
|
def define_test_tasks!
|
55
58
|
require 'rake/testtask'
|
@@ -68,23 +71,23 @@ module GithubGem
|
|
68
71
|
|
69
72
|
# Defines RSpec tasks
|
70
73
|
def define_rspec_tasks!
|
71
|
-
require '
|
74
|
+
require 'rspec/core/rake_task'
|
72
75
|
|
73
76
|
namespace(:spec) do
|
74
77
|
desc "Verify all RSpec examples for #{gemspec.name}"
|
75
|
-
|
76
|
-
t.
|
78
|
+
RSpec::Core::RakeTask.new(:basic) do |t|
|
79
|
+
t.pattern = spec_pattern
|
77
80
|
end
|
78
81
|
|
79
82
|
desc "Verify all RSpec examples for #{gemspec.name} and output specdoc"
|
80
|
-
|
81
|
-
t.
|
82
|
-
t.
|
83
|
+
RSpec::Core::RakeTask.new(:specdoc) do |t|
|
84
|
+
t.pattern = spec_pattern
|
85
|
+
t.rspec_opts = ['--format', 'documentation', '--color']
|
83
86
|
end
|
84
87
|
|
85
88
|
desc "Run RCov on specs for #{gemspec.name}"
|
86
|
-
|
87
|
-
t.
|
89
|
+
RSpec::Core::RakeTask.new(:rcov) do |t|
|
90
|
+
t.pattern = spec_pattern
|
88
91
|
t.rcov = true
|
89
92
|
t.rcov_opts = ['--exclude', '"spec/*,gems/*"', '--rails']
|
90
93
|
end
|
@@ -134,8 +137,8 @@ module GithubGem
|
|
134
137
|
desc "Release the next version of the gem, by incrementing the last version segment by 1"
|
135
138
|
task(:next => [:next_version] + release_tasks) { release_task }
|
136
139
|
|
137
|
-
desc "Release the next version of the gem, using a
|
138
|
-
task(:
|
140
|
+
desc "Release the next version of the gem, using a patch increment (0.0.1)"
|
141
|
+
task(:patch => [:next_patch_version] + release_tasks) { release_task }
|
139
142
|
|
140
143
|
desc "Release the next version of the gem, using a minor increment (0.1.0)"
|
141
144
|
task(:minor => [:next_minor_version] + release_tasks) { release_task }
|
@@ -152,7 +155,7 @@ module GithubGem
|
|
152
155
|
task(:commit_modified_files) { commit_modified_files_task }
|
153
156
|
|
154
157
|
task(:next_version) { next_version_task }
|
155
|
-
task(:
|
158
|
+
task(:next_patch_version) { next_version_task(:patch) }
|
156
159
|
task(:next_minor_version) { next_version_task(:minor) }
|
157
160
|
task(:next_major_version) { next_version_task(:major) }
|
158
161
|
|
@@ -165,7 +168,7 @@ module GithubGem
|
|
165
168
|
# in the repository and the spec/test file pattern.
|
166
169
|
def manifest_task
|
167
170
|
# Load all the gem's files using "git ls-files"
|
168
|
-
repository_files = git
|
171
|
+
repository_files = `#{git} ls-files`.split("\n")
|
169
172
|
test_files = Dir[test_pattern] + Dir[spec_pattern]
|
170
173
|
|
171
174
|
update_gemspec(:files, repository_files)
|
@@ -180,14 +183,14 @@ module GithubGem
|
|
180
183
|
end
|
181
184
|
|
182
185
|
def newest_version
|
183
|
-
git.
|
186
|
+
`#{git} tag`.split("\n").map { |tag| tag.split('-').last }.compact.map { |v| Gem::Version.new(v) }.max || Gem::Version.new('0.0.0')
|
184
187
|
end
|
185
188
|
|
186
189
|
def next_version(increment = nil)
|
187
190
|
next_version = newest_version.segments
|
188
191
|
increment_index = case increment
|
189
192
|
when :micro then 3
|
190
|
-
when :
|
193
|
+
when :patch then 2
|
191
194
|
when :minor then 1
|
192
195
|
when :major then 0
|
193
196
|
else next_version.length - 1
|
@@ -217,72 +220,58 @@ module GithubGem
|
|
217
220
|
|
218
221
|
def check_version_task
|
219
222
|
raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
|
220
|
-
proposed_version = Gem::Version.new(ENV['VERSION'] || gemspec.version)
|
223
|
+
proposed_version = Gem::Version.new(ENV['VERSION'].dup || gemspec.version)
|
221
224
|
raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version >= proposed_version
|
222
225
|
end
|
223
226
|
|
224
227
|
# Checks whether the current branch is not diverged from the remote branch
|
225
228
|
def check_not_diverged_task
|
226
|
-
raise "The current branch is diverged from the remote branch!" if git
|
229
|
+
raise "The current branch is diverged from the remote branch!" if `#{git} rev-list HEAD..#{remote}/#{remote_branch}`.split("\n").any?
|
227
230
|
end
|
228
231
|
|
229
232
|
# Checks whether the repository status ic clean
|
230
233
|
def check_clean_status_task
|
231
|
-
raise "The current working copy contains modifications" if git.
|
234
|
+
raise "The current working copy contains modifications" if `#{git} ls-files -m`.split("\n").any?
|
232
235
|
end
|
233
236
|
|
234
237
|
# Checks whether the current branch is correct
|
235
238
|
def check_current_branch_task
|
236
|
-
raise "Currently not on #{local_branch} branch!" unless git
|
239
|
+
raise "Currently not on #{local_branch} branch!" unless `#{git} branch`.split("\n").detect { |b| /^\* / =~ b } == "* #{local_branch}"
|
237
240
|
end
|
238
241
|
|
239
242
|
# Fetches the latest updates from Github
|
240
243
|
def fetch_origin_task
|
241
|
-
git
|
244
|
+
sh git, 'fetch', remote
|
242
245
|
end
|
243
246
|
|
244
247
|
# Commits every file that has been changed by the release task.
|
245
248
|
def commit_modified_files_task
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
+
really_modified = `#{git} ls-files -m #{modified_files.entries.join(' ')}`.split("\n")
|
250
|
+
if really_modified.any?
|
251
|
+
really_modified.each { |file| sh git, 'add', file }
|
252
|
+
sh git, 'commit', '-m', "Released #{gemspec.name} gem version #{gemspec.version}."
|
249
253
|
end
|
250
254
|
end
|
251
255
|
|
252
256
|
# Adds a tag for the released version
|
253
257
|
def tag_version_task
|
254
|
-
git
|
258
|
+
sh git, 'tag', '-a', "#{gemspec.name}-#{gemspec.version}", '-m', "Released #{gemspec.name} gem version #{gemspec.version}."
|
255
259
|
end
|
256
260
|
|
257
261
|
# Pushes the changes and tag to github
|
258
262
|
def github_release_task
|
259
|
-
git
|
263
|
+
sh git, 'push', '--tags', remote, remote_branch
|
260
264
|
end
|
261
265
|
|
262
|
-
# # Checks whether Rubyforge is configured properly
|
263
|
-
# def check_rubyforge_task
|
264
|
-
# # Login no longer necessary when using rubyforge 2.0.0 gem
|
265
|
-
# # raise "Could not login on rubyforge!" unless `rubyforge login 2>&1`.strip.empty?
|
266
|
-
# output = `rubyforge names`.split("\n")
|
267
|
-
# raise "Rubyforge group not found!" unless output.any? { |line| %r[^groups\s*\:.*\b#{Regexp.quote(gemspec.rubyforge_project)}\b.*] =~ line }
|
268
|
-
# raise "Rubyforge package not found!" unless output.any? { |line| %r[^packages\s*\:.*\b#{Regexp.quote(gemspec.name)}\b.*] =~ line }
|
269
|
-
# end
|
270
|
-
|
271
|
-
# # Task to release the .gem file toRubyforge.
|
272
|
-
# def rubyforge_release_task
|
273
|
-
# sh 'rubyforge', 'add_release', gemspec.rubyforge_project, gemspec.name, gemspec.version.to_s, "pkg/#{gemspec.name}-#{gemspec.version}.gem"
|
274
|
-
# end
|
275
|
-
|
276
266
|
def gemcutter_release_task
|
277
|
-
sh "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
|
267
|
+
sh "gem", 'push', "pkg/#{gemspec.name}-#{gemspec.version}.gem"
|
278
268
|
end
|
279
269
|
|
280
270
|
# Gem release task.
|
281
271
|
# All work is done by the task's dependencies, so just display a release completed message.
|
282
272
|
def release_task
|
283
273
|
puts
|
284
|
-
puts
|
285
|
-
puts "Released #{gemspec.name} version #{gemspec.version}"
|
274
|
+
puts "Release successful."
|
286
275
|
end
|
287
276
|
|
288
277
|
private
|
@@ -342,6 +331,9 @@ module GithubGem
|
|
342
331
|
|
343
332
|
# Reload the gemspec so the changes are incorporated
|
344
333
|
load_gemspec!
|
334
|
+
|
335
|
+
# Also mark the Gemfile.lock file as changed because of the new version.
|
336
|
+
modified_files << 'Gemfile.lock' if File.exist?(File.join(root_dir, 'Gemfile.lock'))
|
345
337
|
end
|
346
338
|
end
|
347
339
|
|
@@ -357,15 +349,13 @@ module GithubGem
|
|
357
349
|
open(__FILE__, "w") { |file| file.write(response.body) }
|
358
350
|
end
|
359
351
|
|
360
|
-
relative_file = File.expand_path(__FILE__).sub(%r[^#{
|
361
|
-
if git
|
362
|
-
git
|
363
|
-
git
|
364
|
-
puts "Updated to latest version of gem release management tasks."
|
352
|
+
relative_file = File.expand_path(__FILE__).sub(%r[^#{@root_dir}/], '')
|
353
|
+
if `#{git} ls-files -m #{relative_file}`.split("\n").any?
|
354
|
+
sh git, 'add', relative_file
|
355
|
+
sh git, 'commit', '-m', "Updated to latest gem release management tasks."
|
365
356
|
else
|
366
357
|
puts "Release managament tasks already are at the latest version."
|
367
358
|
end
|
368
359
|
end
|
369
|
-
|
370
360
|
end
|
371
361
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scoped_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 5
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 2
|
7
8
|
- 2
|
8
|
-
-
|
9
|
-
version: 2.2.
|
9
|
+
- 1
|
10
|
+
version: 2.2.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Willem van Bergen
|
@@ -15,16 +16,18 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-
|
19
|
+
date: 2010-11-09 00:00:00 +01:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
22
23
|
name: activerecord
|
23
24
|
prerelease: false
|
24
25
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
25
27
|
requirements:
|
26
28
|
- - ">="
|
27
29
|
- !ruby/object:Gem::Version
|
30
|
+
hash: 11
|
28
31
|
segments:
|
29
32
|
- 2
|
30
33
|
- 1
|
@@ -36,17 +39,18 @@ dependencies:
|
|
36
39
|
name: rspec
|
37
40
|
prerelease: false
|
38
41
|
requirement: &id002 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
39
43
|
requirements:
|
40
|
-
- -
|
44
|
+
- - ~>
|
41
45
|
- !ruby/object:Gem::Version
|
46
|
+
hash: 3
|
42
47
|
segments:
|
43
|
-
-
|
44
|
-
-
|
45
|
-
|
46
|
-
version: 1.1.4
|
48
|
+
- 2
|
49
|
+
- 0
|
50
|
+
version: "2.0"
|
47
51
|
type: :development
|
48
52
|
version_requirements: *id002
|
49
|
-
description: " Scoped search makes it easy to search your ActiveRecord-based models.\n It will create a named scope :search_for that can be called with a query string. It will build an SQL query using\n the provided query string and a definition that specifies on what fields to search. Because the functionality is\n built on named_scope, the result of the search_for call can be used like any other named_scope, so it can be\n chained with another scope or combined with will_paginate.\
|
53
|
+
description: " Scoped search makes it easy to search your ActiveRecord-based models.\n \n It will create a named scope :search_for that can be called with a query string. It will build an SQL query using\n the provided query string and a definition that specifies on what fields to search. Because the functionality is\n built on named_scope, the result of the search_for call can be used like any other named_scope, so it can be\n chained with another scope or combined with will_paginate.\n \n Because it uses standard SQL, it does not require any setup, indexers or daemons. This makes scoped_search\n suitable to quickly add basic search functionality to your application with little hassle. On the other hand,\n it may not be the best choice if it is going to be used on very large datasets or by a large user base.\n"
|
50
54
|
email:
|
51
55
|
- willem@railsdoctors.com
|
52
56
|
- weshays@gbdev.com
|
@@ -57,37 +61,37 @@ extensions: []
|
|
57
61
|
extra_rdoc_files:
|
58
62
|
- README.rdoc
|
59
63
|
files:
|
60
|
-
- spec/spec_helper.rb
|
61
|
-
- spec/integration/string_querying_spec.rb
|
62
|
-
- lib/scoped_search/definition.rb
|
63
|
-
- spec/lib/mocks.rb
|
64
|
-
- scoped_search.gemspec
|
65
|
-
- lib/scoped_search/query_language/parser.rb
|
66
|
-
- spec/lib/matchers.rb
|
67
64
|
- .gitignore
|
68
65
|
- LICENSE
|
69
|
-
-
|
70
|
-
- spec/database.yml
|
71
|
-
- init.rb
|
66
|
+
- README.rdoc
|
72
67
|
- Rakefile
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
- lib/scoped_search/query_language/ast.rb
|
77
|
-
- lib/scoped_search/query_language.rb
|
68
|
+
- init.rb
|
69
|
+
- lib/scoped_search.rb
|
70
|
+
- lib/scoped_search/definition.rb
|
78
71
|
- lib/scoped_search/query_builder.rb
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
72
|
+
- lib/scoped_search/query_language.rb
|
73
|
+
- lib/scoped_search/query_language/ast.rb
|
74
|
+
- lib/scoped_search/query_language/parser.rb
|
75
|
+
- lib/scoped_search/query_language/tokenizer.rb
|
76
|
+
- scoped_search.gemspec
|
77
|
+
- spec/database.yml
|
78
|
+
- spec/integration/api_spec.rb
|
79
|
+
- spec/integration/ordinal_querying_spec.rb
|
82
80
|
- spec/integration/profile_querying_spec.rb
|
83
|
-
- tasks/github-gem.rake
|
84
|
-
- spec/unit/query_builder_spec.rb
|
85
|
-
- lib/scoped_search.rb
|
86
81
|
- spec/integration/relation_querying_spec.rb
|
87
|
-
- spec/integration/
|
88
|
-
- lib/
|
82
|
+
- spec/integration/string_querying_spec.rb
|
83
|
+
- spec/lib/database.rb
|
84
|
+
- spec/lib/matchers.rb
|
85
|
+
- spec/lib/mocks.rb
|
86
|
+
- spec/spec_helper.rb
|
87
|
+
- spec/unit/ast_spec.rb
|
88
|
+
- spec/unit/definition_spec.rb
|
89
|
+
- spec/unit/parser_spec.rb
|
90
|
+
- spec/unit/query_builder_spec.rb
|
91
|
+
- spec/unit/tokenizer_spec.rb
|
92
|
+
- tasks/github-gem.rake
|
89
93
|
has_rdoc: true
|
90
|
-
homepage: http://
|
94
|
+
homepage: http://github.com/wvanbergen/scoped_search/wiki
|
91
95
|
licenses: []
|
92
96
|
|
93
97
|
post_install_message:
|
@@ -101,34 +105,38 @@ rdoc_options:
|
|
101
105
|
require_paths:
|
102
106
|
- lib
|
103
107
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
104
109
|
requirements:
|
105
110
|
- - ">="
|
106
111
|
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
107
113
|
segments:
|
108
114
|
- 0
|
109
115
|
version: "0"
|
110
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
111
118
|
requirements:
|
112
119
|
- - ">="
|
113
120
|
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
114
122
|
segments:
|
115
123
|
- 0
|
116
124
|
version: "0"
|
117
125
|
requirements: []
|
118
126
|
|
119
127
|
rubyforge_project:
|
120
|
-
rubygems_version: 1.3.
|
128
|
+
rubygems_version: 1.3.7
|
121
129
|
signing_key:
|
122
130
|
specification_version: 3
|
123
131
|
summary: Easily search you ActiveRecord models with a simple query language using a named scope.
|
124
132
|
test_files:
|
133
|
+
- spec/integration/api_spec.rb
|
134
|
+
- spec/integration/ordinal_querying_spec.rb
|
135
|
+
- spec/integration/profile_querying_spec.rb
|
136
|
+
- spec/integration/relation_querying_spec.rb
|
125
137
|
- spec/integration/string_querying_spec.rb
|
126
138
|
- spec/unit/ast_spec.rb
|
127
|
-
- spec/unit/tokenizer_spec.rb
|
128
|
-
- spec/unit/parser_spec.rb
|
129
|
-
- spec/integration/api_spec.rb
|
130
139
|
- spec/unit/definition_spec.rb
|
131
|
-
- spec/
|
140
|
+
- spec/unit/parser_spec.rb
|
132
141
|
- spec/unit/query_builder_spec.rb
|
133
|
-
- spec/
|
134
|
-
- spec/integration/ordinal_querying_spec.rb
|
142
|
+
- spec/unit/tokenizer_spec.rb
|