ransack 0.6.0 → 0.7.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/.travis.yml +1 -2
- data/Gemfile +2 -12
- data/README.md +17 -37
- data/lib/ransack/adapters/active_record.rb +1 -0
- data/lib/ransack/adapters/active_record/3.0/context.rb +4 -1
- data/lib/ransack/adapters/active_record/3.1/context.rb +5 -2
- data/lib/ransack/adapters/active_record/context.rb +9 -0
- data/lib/ransack/configuration.rb +11 -2
- data/lib/ransack/context.rb +2 -1
- data/lib/ransack/helpers/form_helper.rb +20 -7
- data/lib/ransack/locale/en.yml +4 -4
- data/lib/ransack/predicate.rb +1 -1
- data/lib/ransack/version.rb +1 -1
- data/ransack.gemspec +4 -4
- data/spec/ransack/configuration_spec.rb +28 -0
- data/spec/ransack/helpers/form_helper_spec.rb +18 -6
- data/spec/ransack/search_spec.rb +19 -3
- data/spec/spec_helper.rb +1 -1
- metadata +63 -20
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -3,19 +3,9 @@ gemspec
|
|
3
3
|
|
4
4
|
gem 'rake'
|
5
5
|
|
6
|
-
rails = ENV['RAILS'] || '
|
7
|
-
arel = ENV['AREL'] || 'master'
|
6
|
+
rails = ENV['RAILS'] || '3-2-stable'
|
8
7
|
|
9
|
-
|
10
|
-
when /\// # A path
|
11
|
-
{:path => arel}
|
12
|
-
when /^v/ # A tagged version
|
13
|
-
{:git => 'git://github.com/rails/arel.git', :tag => arel}
|
14
|
-
else
|
15
|
-
{:git => 'git://github.com/rails/arel.git', :branch => arel}
|
16
|
-
end
|
17
|
-
|
18
|
-
gem 'arel', arel_opts
|
8
|
+
gem 'arel', '3.0.2'
|
19
9
|
|
20
10
|
case rails
|
21
11
|
when /\// # A path
|
data/README.md
CHANGED
@@ -4,10 +4,10 @@ Ransack is a rewrite of [MetaSearch](http://metautonomo.us/projects/metasearch).
|
|
4
4
|
supports many of the same features as MetaSearch, its underlying implementation differs
|
5
5
|
greatly from MetaSearch, and _backwards compatibility is not a design goal._
|
6
6
|
|
7
|
-
Ransack enables the creation of both simple and [advanced](http://ransack-demo.
|
7
|
+
Ransack enables the creation of both simple and [advanced](http://ransack-demo.herokuapp.com/users/advanced_search)
|
8
8
|
search forms against your application's models. If you're looking for something that
|
9
9
|
simplifies query generation at the model or controller layer, you're probably not looking
|
10
|
-
for Ransack (or MetaSearch, for that matter). Try
|
10
|
+
for Ransack (or MetaSearch, for that matter). Try
|
11
11
|
[Squeel](http://metautonomo.us/projects/squeel) instead.
|
12
12
|
|
13
13
|
## Getting started
|
@@ -15,27 +15,11 @@ for Ransack (or MetaSearch, for that matter). Try
|
|
15
15
|
In your Gemfile:
|
16
16
|
|
17
17
|
gem "ransack" # Last officially released gem
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
config.add_predicate 'equals_diddly', # Name your predicate
|
24
|
-
# What non-compound ARel predicate will it use? (eq, matches, etc)
|
25
|
-
:arel_predicate => 'eq',
|
26
|
-
# Format incoming values as you see fit. (Default: Don't do formatting)
|
27
|
-
:formatter => proc {|v| "#{v}-diddly"},
|
28
|
-
# Validate a value. An "invalid" value won't be used in a search.
|
29
|
-
# Below is default.
|
30
|
-
:validator => proc {|v| v.present?},
|
31
|
-
# Should compounds be created? Will use the compound (any/all) version
|
32
|
-
# of the arel_predicate to create a corresponding any/all version of
|
33
|
-
# your predicate. (Default: true)
|
34
|
-
:compounds => true,
|
35
|
-
# Force a specific column type for type-casting of supplied values.
|
36
|
-
# (Default: use type from DB column)
|
37
|
-
:type => :string
|
38
|
-
end
|
18
|
+
|
19
|
+
Or if you want to use the bleeding edge:
|
20
|
+
|
21
|
+
gem "ransack", :git => "git://github.com/ernie/ransack.git" # Track git repo
|
22
|
+
|
39
23
|
|
40
24
|
## Usage
|
41
25
|
|
@@ -49,9 +33,10 @@ requires very little setup effort.
|
|
49
33
|
If you're coming from MetaSearch, things to note:
|
50
34
|
|
51
35
|
1. The default param key for search params is now `:q`, instead of `:search`. This is
|
52
|
-
primarily to shorten query strings, though advanced queries (below) will still
|
36
|
+
primarily to shorten query strings, though advanced queries (below) will still
|
53
37
|
run afoul of URL length limits in most browsers and require a switch to HTTP
|
54
|
-
POST requests.
|
38
|
+
POST requests. This key is
|
39
|
+
[configurable](https://github.com/ernie/ransack/wiki/Configuration)
|
55
40
|
2. `form_for` is now `search_form_for`, and validates that a Ransack::Search object
|
56
41
|
is passed to it.
|
57
42
|
3. Common ActiveRecord::Relation methods are no longer delegated by the search object.
|
@@ -59,7 +44,7 @@ If you're coming from MetaSearch, things to note:
|
|
59
44
|
the ActiveRecord adapter) via a call to `Search#result`. If passed `:distinct => true`,
|
60
45
|
`result` will generate a `SELECT DISTINCT` to avoid returning duplicate rows, even if
|
61
46
|
conditions on a join would otherwise result in some.
|
62
|
-
|
47
|
+
|
63
48
|
Please note that for many databases, a sort on an associated table's columns will
|
64
49
|
result in invalid SQL with `:distinct => true` -- in those cases, you're on your own,
|
65
50
|
and will need to modify the result as needed to allow these queries to work. Thankfully,
|
@@ -85,7 +70,7 @@ In your view:
|
|
85
70
|
|
86
71
|
`cont` (contains) and `start` (starts with) are just two of the available search predicates.
|
87
72
|
See Constants for a full list.
|
88
|
-
|
73
|
+
|
89
74
|
### Advanced Mode
|
90
75
|
|
91
76
|
"Advanced" searches (ab)use Rails' nested attributes functionality in order to generate
|
@@ -108,30 +93,25 @@ This means you'll need to tweak your routes...
|
|
108
93
|
index
|
109
94
|
render :index
|
110
95
|
end
|
111
|
-
|
96
|
+
|
112
97
|
... and update your `search_form_for` line in the view ...
|
113
98
|
|
114
|
-
<%= search_form_for @q, :url => search_people_path,
|
99
|
+
<%= search_form_for @q, :url => search_people_path,
|
115
100
|
:html => {:method => :post} do |f| %>
|
116
101
|
|
117
102
|
Once you've done so, you can make use of the helpers in Ransack::Helpers::FormBuilder to
|
118
103
|
construct much more complex search forms, such as the one on the
|
119
104
|
[demo page](http://ransack-demo.heroku.com).
|
120
105
|
|
121
|
-
**more docs to come**
|
122
|
-
|
123
106
|
## Contributions
|
124
107
|
|
125
|
-
|
126
|
-
[making a donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=48Q9HY64L3TWA).
|
127
|
-
|
128
|
-
To support the project in other ways:
|
108
|
+
To support the project:
|
129
109
|
|
130
|
-
* Use Ransack in your apps, and let
|
110
|
+
* Use Ransack in your apps, and let us know if you encounter anything that's broken or missing.
|
131
111
|
A failing spec is awesome. A pull request is even better!
|
132
112
|
* Spread the word on Twitter, Facebook, and elsewhere if Ransack's been useful to you. The more
|
133
113
|
people who are using the project, the quicker we can find and fix bugs!
|
134
114
|
|
135
115
|
## Copyright
|
136
116
|
|
137
|
-
Copyright © 2011 [Ernie Miller](http://twitter.com/erniemiller)
|
117
|
+
Copyright © 2011 [Ernie Miller](http://twitter.com/erniemiller)
|
@@ -18,7 +18,10 @@ module Ransack
|
|
18
18
|
|
19
19
|
def evaluate(search, opts = {})
|
20
20
|
viz = Visitor.new
|
21
|
-
relation = @object.
|
21
|
+
relation = @object.where(viz.accept(search.base))
|
22
|
+
if search.sorts.any?
|
23
|
+
relation = relation.except(:order).order(viz.accept(search.sorts))
|
24
|
+
end
|
22
25
|
opts[:distinct] ? relation.select("DISTINCT #{@klass.quoted_table_name}.*") : relation
|
23
26
|
end
|
24
27
|
|
@@ -16,7 +16,10 @@ module Ransack
|
|
16
16
|
|
17
17
|
def evaluate(search, opts = {})
|
18
18
|
viz = Visitor.new
|
19
|
-
relation = @object.
|
19
|
+
relation = @object.where(viz.accept(search.base))
|
20
|
+
if search.sorts.any?
|
21
|
+
relation = relation.except(:order).order(viz.accept(search.sorts))
|
22
|
+
end
|
20
23
|
opts[:distinct] ? relation.select("DISTINCT #{@klass.quoted_table_name}.*") : relation
|
21
24
|
end
|
22
25
|
|
@@ -135,7 +138,7 @@ module Ransack
|
|
135
138
|
)
|
136
139
|
|
137
140
|
join_nodes.each do |join|
|
138
|
-
join_dependency.
|
141
|
+
join_dependency.alias_tracker.aliases[join.left.name.downcase] = 1
|
139
142
|
end
|
140
143
|
|
141
144
|
join_dependency.graft(*stashed_association_joins)
|
@@ -26,6 +26,15 @@ module Ransack
|
|
26
26
|
@engine.connection.schema_cache.columns_hash[table][name].type
|
27
27
|
end
|
28
28
|
|
29
|
+
def evaluate(search, opts = {})
|
30
|
+
viz = Visitor.new
|
31
|
+
relation = @object.where(viz.accept(search.base))
|
32
|
+
if search.sorts.any?
|
33
|
+
relation = relation.except(:order).order(viz.accept(search.sorts))
|
34
|
+
end
|
35
|
+
opts[:distinct] ? relation.uniq : relation
|
36
|
+
end
|
37
|
+
|
29
38
|
end
|
30
39
|
end
|
31
40
|
end
|
@@ -4,8 +4,11 @@ require 'ransack/predicate'
|
|
4
4
|
module Ransack
|
5
5
|
module Configuration
|
6
6
|
|
7
|
-
mattr_accessor :predicates
|
7
|
+
mattr_accessor :predicates, :options
|
8
8
|
self.predicates = {}
|
9
|
+
self.options = {
|
10
|
+
:search_key => :q
|
11
|
+
}
|
9
12
|
|
10
13
|
def configure
|
11
14
|
yield self
|
@@ -16,6 +19,7 @@ module Ransack
|
|
16
19
|
opts[:name] = name
|
17
20
|
compounds = opts.delete(:compounds)
|
18
21
|
compounds = true if compounds.nil?
|
22
|
+
compounds = false if opts[:wants_array]
|
19
23
|
opts[:arel_predicate] = opts[:arel_predicate].to_s
|
20
24
|
|
21
25
|
self.predicates[name] = Predicate.new(opts)
|
@@ -31,5 +35,10 @@ module Ransack
|
|
31
35
|
end if compounds
|
32
36
|
end
|
33
37
|
|
38
|
+
# default search_key that, it can be overridden on sort_link level
|
39
|
+
def search_key=(name)
|
40
|
+
self.options[:search_key] = name
|
41
|
+
end
|
42
|
+
|
34
43
|
end
|
35
|
-
end
|
44
|
+
end
|
data/lib/ransack/context.rb
CHANGED
@@ -3,7 +3,7 @@ require 'ransack/visitor'
|
|
3
3
|
module Ransack
|
4
4
|
class Context
|
5
5
|
attr_reader :search, :object, :klass, :base, :engine, :arel_visitor
|
6
|
-
attr_accessor :auth_object
|
6
|
+
attr_accessor :auth_object, :search_key
|
7
7
|
|
8
8
|
class << self
|
9
9
|
|
@@ -32,6 +32,7 @@ module Ransack
|
|
32
32
|
@klass = @object.klass
|
33
33
|
@join_dependency = join_dependency(@object)
|
34
34
|
@join_type = options[:join_type] || Arel::OuterJoin
|
35
|
+
@search_key = options[:search_key] || Ransack.options[:search_key]
|
35
36
|
@base = @join_dependency.join_base
|
36
37
|
@engine = @base.arel_engine
|
37
38
|
@default_table = Arel::Table.new(@base.table_name, :as => @base.aliased_table_name, :engine => @engine)
|
@@ -25,9 +25,15 @@ module Ransack
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def sort_link(search, attribute, *args)
|
28
|
+
# Extract out a routing proxy for url_for scoping later
|
29
|
+
if search.is_a?(Array)
|
30
|
+
routing_proxy = search.shift
|
31
|
+
search = search.first
|
32
|
+
end
|
33
|
+
|
28
34
|
raise TypeError, "First argument must be a Ransack::Search!" unless Search === search
|
29
35
|
|
30
|
-
search_params = params[
|
36
|
+
search_params = params[search.context.search_key] || {}.with_indifferent_access
|
31
37
|
|
32
38
|
attr_name = attribute.to_s
|
33
39
|
|
@@ -50,12 +56,19 @@ module Ransack
|
|
50
56
|
html_options = args.first.is_a?(Hash) ? args.shift.dup : {}
|
51
57
|
css = ['sort_link', current_dir].compact.join(' ')
|
52
58
|
html_options[:class] = [css, html_options[:class]].compact.join(' ')
|
53
|
-
|
54
|
-
|
55
|
-
)
|
59
|
+
query_hash = {}
|
60
|
+
query_hash[search.context.search_key] = search_params.merge(:s => "#{attr_name} #{new_dir}")
|
61
|
+
options.merge!(query_hash)
|
62
|
+
|
63
|
+
url = if routing_proxy && respond_to?(routing_proxy)
|
64
|
+
send(routing_proxy).url_for(options)
|
65
|
+
else
|
66
|
+
url_for(options)
|
67
|
+
end
|
68
|
+
|
56
69
|
link_to [ERB::Util.h(name), order_indicator_for(current_dir)].compact.join(' ').html_safe,
|
57
|
-
|
58
|
-
|
70
|
+
url,
|
71
|
+
html_options
|
59
72
|
end
|
60
73
|
|
61
74
|
private
|
@@ -72,4 +85,4 @@ module Ransack
|
|
72
85
|
|
73
86
|
end
|
74
87
|
end
|
75
|
-
end
|
88
|
+
end
|
data/lib/ransack/locale/en.yml
CHANGED
@@ -62,9 +62,9 @@ en:
|
|
62
62
|
not_end: "doesn't end with"
|
63
63
|
not_end_any: "doesn't end with any"
|
64
64
|
not_end_all: "doesn't end with all"
|
65
|
-
true: "is true"
|
66
|
-
false: "is false"
|
65
|
+
'true': "is true"
|
66
|
+
'false': "is false"
|
67
67
|
present: "is present"
|
68
68
|
blank: "is blank"
|
69
|
-
null: "is null"
|
70
|
-
not_null: "is not null"
|
69
|
+
'null': "is null"
|
70
|
+
not_null: "is not null"
|
data/lib/ransack/predicate.rb
CHANGED
@@ -41,7 +41,7 @@ module Ransack
|
|
41
41
|
@formatter = opts[:formatter]
|
42
42
|
@validator = opts[:validator] || lambda { |v| v.respond_to?(:empty?) ? !v.empty? : !v.nil? }
|
43
43
|
@compound = opts[:compound]
|
44
|
-
@wants_array = @compound || ['in', 'not_in'].include?(@arel_predicate)
|
44
|
+
@wants_array = opts[:wants_array] == true || @compound || ['in', 'not_in'].include?(@arel_predicate)
|
45
45
|
end
|
46
46
|
|
47
47
|
def eql?(other)
|
data/lib/ransack/version.rb
CHANGED
data/ransack.gemspec
CHANGED
@@ -6,9 +6,9 @@ Gem::Specification.new do |s|
|
|
6
6
|
s.name = "ransack"
|
7
7
|
s.version = Ransack::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
|
-
s.authors = ["Ernie Miller"]
|
10
|
-
s.email = ["ernie@
|
11
|
-
s.homepage = "
|
9
|
+
s.authors = ["Ernie Miller", "Ryan Bigg"]
|
10
|
+
s.email = ["ernie@erniemiller.org", "radarlistener@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/ernie/ransack"
|
12
12
|
s.summary = %q{Object-based searching for ActiveRecord (currently).}
|
13
13
|
s.description = %q{Ransack is the successor to the MetaSearch gem. It improves and expands upon MetaSearch's functionality, but does not have a 100%-compatible API.}
|
14
14
|
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_dependency 'activerecord', '~> 3.0'
|
18
18
|
s.add_dependency 'actionpack', '~> 3.0'
|
19
19
|
s.add_dependency 'polyamorous', '~> 0.5.0'
|
20
|
-
s.add_development_dependency 'rspec', '~> 2.
|
20
|
+
s.add_development_dependency 'rspec', '~> 2.8.0'
|
21
21
|
s.add_development_dependency 'machinist', '~> 1.0.6'
|
22
22
|
s.add_development_dependency 'faker', '~> 0.9.5'
|
23
23
|
s.add_development_dependency 'sqlite3', '~> 1.3.3'
|
@@ -27,5 +27,33 @@ module Ransack
|
|
27
27
|
Ransack.predicates.should_not have_key 'test_predicate_without_compound_any'
|
28
28
|
Ransack.predicates.should_not have_key 'test_predicate_without_compound_all'
|
29
29
|
end
|
30
|
+
|
31
|
+
it 'should have default value for search key' do
|
32
|
+
Ransack.options[:search_key].should eq :q
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'changes default search key parameter' do
|
36
|
+
# store original state so we can restore it later
|
37
|
+
before = Ransack.options.clone
|
38
|
+
|
39
|
+
Ransack.configure do |config|
|
40
|
+
config.search_key = :query
|
41
|
+
end
|
42
|
+
|
43
|
+
Ransack.options[:search_key].should eq :query
|
44
|
+
|
45
|
+
# restore original state so we don't break other tests
|
46
|
+
Ransack.options = before
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'adds predicates that take arrays, overriding compounds' do
|
50
|
+
Ransack.configure do |config|
|
51
|
+
config.add_predicate :test_array_predicate, :wants_array => true, :compounds => true
|
52
|
+
end
|
53
|
+
|
54
|
+
Ransack.predicates['test_array_predicate'].wants_array.should eq true
|
55
|
+
Ransack.predicates.should_not have_key 'test_array_predicate_any'
|
56
|
+
Ransack.predicates.should_not have_key 'test_array_predicate_all'
|
57
|
+
end
|
30
58
|
end
|
31
59
|
end
|
@@ -25,14 +25,26 @@ module Ransack
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
describe '#sort_link' do
|
29
|
-
subject { @controller.view_context.sort_link(Person.search(:sorts => ['name desc']), :name, :controller => 'people') }
|
28
|
+
describe '#sort_link with default search_key' do
|
29
|
+
subject { @controller.view_context.sort_link([:main_app, Person.search(:sorts => ['name desc'])], :name, :controller => 'people') }
|
30
|
+
it { should match /people\?q%5Bs%5D=name\+asc/ }
|
31
|
+
it { should match /sort_link desc/ }
|
32
|
+
it { should match /Full Name ▼/ }
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#sort_link with default search_key defined as symbol' do
|
36
|
+
subject { @controller.view_context.sort_link(Person.search({:sorts => ['name desc']}, :search_key => :people_search),
|
37
|
+
:name, :controller => 'people') }
|
30
38
|
|
31
|
-
it { should match /people\?
|
32
|
-
it { should match /sort_link desc/}
|
33
|
-
it { should match /Full Name ▼/}
|
39
|
+
it { should match /people\?people_search%5Bs%5D=name\+asc/ }
|
34
40
|
end
|
35
41
|
|
42
|
+
describe '#sort_link with default search_key defined as string' do
|
43
|
+
subject { @controller.view_context.sort_link(Person.search({:sorts => ['name desc']}, :search_key => 'people_search'),
|
44
|
+
:name, :controller => 'people') }
|
45
|
+
|
46
|
+
it { should match /people\?people_search%5Bs%5D=name\+asc/ }
|
47
|
+
end
|
36
48
|
end
|
37
49
|
end
|
38
|
-
end
|
50
|
+
end
|
data/spec/ransack/search_spec.rb
CHANGED
@@ -90,6 +90,20 @@ module Ransack
|
|
90
90
|
conditions.should have(2).items
|
91
91
|
conditions.map {|c| c.class}.should eq [Nodes::Condition, Nodes::Condition]
|
92
92
|
end
|
93
|
+
|
94
|
+
it 'creates Conditions for custom predicates that take arrays' do
|
95
|
+
Ransack.configure do |config|
|
96
|
+
config.add_predicate 'ary_pred',
|
97
|
+
:wants_array => true
|
98
|
+
end
|
99
|
+
|
100
|
+
search = Search.new(Person, :name_ary_pred => ['Ernie', 'Bert'])
|
101
|
+
condition = search.base[:name_ary_pred]
|
102
|
+
condition.should be_a Nodes::Condition
|
103
|
+
condition.predicate.name.should eq 'ary_pred'
|
104
|
+
condition.attributes.first.name.should eq 'name'
|
105
|
+
condition.value.should eq ['Ernie', 'Bert']
|
106
|
+
end
|
93
107
|
end
|
94
108
|
|
95
109
|
describe '#result' do
|
@@ -124,7 +138,9 @@ module Ransack
|
|
124
138
|
)
|
125
139
|
search.result.should be_an ActiveRecord::Relation
|
126
140
|
where = search.result.where_values.first
|
127
|
-
where.to_sql.should match /"children_people"."name" = 'Ernie'
|
141
|
+
where.to_sql.should match /"children_people"."name" = 'Ernie'/
|
142
|
+
where.to_sql.should match /"people"."name" = 'Ernie'/
|
143
|
+
where.to_sql.should match /"children_people_2"."name" = 'Ernie'/
|
128
144
|
end
|
129
145
|
|
130
146
|
it 'evaluates arrays of groupings' do
|
@@ -146,7 +162,7 @@ module Ransack
|
|
146
162
|
|
147
163
|
it 'returns distinct records when passed :distinct => true' do
|
148
164
|
search = Search.new(Person, :g => [{:m => 'or', :comments_body_cont => 'e', :articles_comments_body_cont => 'e'}])
|
149
|
-
search.result.should have(920).items
|
165
|
+
search.result.all.should have(920).items
|
150
166
|
search.result(:distinct => true).should have(330).items
|
151
167
|
search.result.all.uniq.should eq search.result(:distinct => true).all
|
152
168
|
end
|
@@ -220,4 +236,4 @@ module Ransack
|
|
220
236
|
end
|
221
237
|
|
222
238
|
end
|
223
|
-
end
|
239
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ransack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ernie Miller
|
9
|
+
- Ryan Bigg
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
+
date: 2012-07-29 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: activerecord
|
16
|
-
requirement:
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ~>
|
@@ -21,10 +22,15 @@ dependencies:
|
|
21
22
|
version: '3.0'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '3.0'
|
25
31
|
- !ruby/object:Gem::Dependency
|
26
32
|
name: actionpack
|
27
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
28
34
|
none: false
|
29
35
|
requirements:
|
30
36
|
- - ~>
|
@@ -32,10 +38,15 @@ dependencies:
|
|
32
38
|
version: '3.0'
|
33
39
|
type: :runtime
|
34
40
|
prerelease: false
|
35
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.0'
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: polyamorous
|
38
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ~>
|
@@ -43,21 +54,31 @@ dependencies:
|
|
43
54
|
version: 0.5.0
|
44
55
|
type: :runtime
|
45
56
|
prerelease: false
|
46
|
-
version_requirements:
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 0.5.0
|
47
63
|
- !ruby/object:Gem::Dependency
|
48
64
|
name: rspec
|
49
|
-
requirement:
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
50
66
|
none: false
|
51
67
|
requirements:
|
52
68
|
- - ~>
|
53
69
|
- !ruby/object:Gem::Version
|
54
|
-
version: 2.
|
70
|
+
version: 2.8.0
|
55
71
|
type: :development
|
56
72
|
prerelease: false
|
57
|
-
version_requirements:
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.8.0
|
58
79
|
- !ruby/object:Gem::Dependency
|
59
80
|
name: machinist
|
60
|
-
requirement:
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
61
82
|
none: false
|
62
83
|
requirements:
|
63
84
|
- - ~>
|
@@ -65,10 +86,15 @@ dependencies:
|
|
65
86
|
version: 1.0.6
|
66
87
|
type: :development
|
67
88
|
prerelease: false
|
68
|
-
version_requirements:
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 1.0.6
|
69
95
|
- !ruby/object:Gem::Dependency
|
70
96
|
name: faker
|
71
|
-
requirement:
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
72
98
|
none: false
|
73
99
|
requirements:
|
74
100
|
- - ~>
|
@@ -76,10 +102,15 @@ dependencies:
|
|
76
102
|
version: 0.9.5
|
77
103
|
type: :development
|
78
104
|
prerelease: false
|
79
|
-
version_requirements:
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.9.5
|
80
111
|
- !ruby/object:Gem::Dependency
|
81
112
|
name: sqlite3
|
82
|
-
requirement:
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
83
114
|
none: false
|
84
115
|
requirements:
|
85
116
|
- - ~>
|
@@ -87,11 +118,17 @@ dependencies:
|
|
87
118
|
version: 1.3.3
|
88
119
|
type: :development
|
89
120
|
prerelease: false
|
90
|
-
version_requirements:
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ~>
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: 1.3.3
|
91
127
|
description: Ransack is the successor to the MetaSearch gem. It improves and expands
|
92
128
|
upon MetaSearch's functionality, but does not have a 100%-compatible API.
|
93
129
|
email:
|
94
|
-
- ernie@
|
130
|
+
- ernie@erniemiller.org
|
131
|
+
- radarlistener@gmail.com
|
95
132
|
executables: []
|
96
133
|
extensions: []
|
97
134
|
extra_rdoc_files: []
|
@@ -151,7 +188,7 @@ files:
|
|
151
188
|
- spec/spec_helper.rb
|
152
189
|
- spec/support/en.yml
|
153
190
|
- spec/support/schema.rb
|
154
|
-
homepage:
|
191
|
+
homepage: https://github.com/ernie/ransack
|
155
192
|
licenses: []
|
156
193
|
post_install_message:
|
157
194
|
rdoc_options: []
|
@@ -163,15 +200,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
200
|
- - ! '>='
|
164
201
|
- !ruby/object:Gem::Version
|
165
202
|
version: '0'
|
203
|
+
segments:
|
204
|
+
- 0
|
205
|
+
hash: 4077471372512744125
|
166
206
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
207
|
none: false
|
168
208
|
requirements:
|
169
209
|
- - ! '>='
|
170
210
|
- !ruby/object:Gem::Version
|
171
211
|
version: '0'
|
212
|
+
segments:
|
213
|
+
- 0
|
214
|
+
hash: 4077471372512744125
|
172
215
|
requirements: []
|
173
216
|
rubyforge_project: ransack
|
174
|
-
rubygems_version: 1.8.
|
217
|
+
rubygems_version: 1.8.24
|
175
218
|
signing_key:
|
176
219
|
specification_version: 3
|
177
220
|
summary: Object-based searching for ActiveRecord (currently).
|