ransack 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,8 +2,7 @@ rvm:
2
2
  - 1.8.7
3
3
  - 1.9.2
4
4
  - ree
5
- - rbx
6
- - rbx-2.0
5
+ - rbx-18mode
7
6
  - ruby-head
8
7
 
9
8
  env:
data/Gemfile CHANGED
@@ -3,19 +3,9 @@ gemspec
3
3
 
4
4
  gem 'rake'
5
5
 
6
- rails = ENV['RAILS'] || 'master'
7
- arel = ENV['AREL'] || 'master'
6
+ rails = ENV['RAILS'] || '3-2-stable'
8
7
 
9
- arel_opts = case arel
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.heroku.com)
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
- # gem "ransack", :git => "git://github.com/ernie/ransack.git" # Track git repo
19
-
20
- If you'd like to add your own custom Ransack predicates:
21
-
22
- Ransack.configure do |config|
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
- If you'd like to support the continued development of Ransack, please consider
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 me know if you encounter anything that's broken or missing.
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 &copy; 2011 [Ernie Miller](http://twitter.com/erniemiller)
117
+ Copyright &copy; 2011 [Ernie Miller](http://twitter.com/erniemiller)
@@ -1,3 +1,4 @@
1
+ require 'active_record'
1
2
  require 'ransack/adapters/active_record/base'
2
3
  ActiveRecord::Base.extend Ransack::Adapters::ActiveRecord::Base
3
4
 
@@ -18,7 +18,10 @@ module Ransack
18
18
 
19
19
  def evaluate(search, opts = {})
20
20
  viz = Visitor.new
21
- relation = @object.except(:order).where(viz.accept(search.base)).order(viz.accept(search.sorts))
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.except(:order).where(viz.accept(search.base)).order(viz.accept(search.sorts))
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.table_aliases[join.left.name.downcase] = 1
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
@@ -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[:q] || {}.with_indifferent_access
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
- options.merge!(
54
- :q => search_params.merge(:s => "#{attr_name} #{new_dir}")
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
- url_for(options),
58
- html_options
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
@@ -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"
@@ -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)
@@ -1,3 +1,3 @@
1
1
  module Ransack
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -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@metautonomo.us"]
11
- s.homepage = "http://metautonomo.us/projects/ransack"
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.6.0'
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 &#9660;/ }
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\?q%5Bs%5D=name\+asc/}
32
- it { should match /sort_link desc/}
33
- it { should match /Full Name &#9660;/}
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
@@ -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' AND \("people"."name" = 'Ernie' OR "children_people_2"."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
@@ -44,4 +44,4 @@ RSpec::Matchers.define :have_attribute_method do |expected|
44
44
  match do |actual|
45
45
  actual.attribute_method?(expected)
46
46
  end
47
- end
47
+ end
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.6.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-01-20 00:00:00.000000000 Z
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: &70226024755600 !ruby/object:Gem::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: *70226024755600
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: &70226024754660 !ruby/object:Gem::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: *70226024754660
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: &70226024753760 !ruby/object:Gem::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: *70226024753760
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: &70226024753240 !ruby/object:Gem::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.6.0
70
+ version: 2.8.0
55
71
  type: :development
56
72
  prerelease: false
57
- version_requirements: *70226024753240
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: &70226024752660 !ruby/object:Gem::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: *70226024752660
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: &70226024768120 !ruby/object:Gem::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: *70226024768120
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: &70226024767020 !ruby/object:Gem::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: *70226024767020
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@metautonomo.us
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: http://metautonomo.us/projects/ransack
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.10
217
+ rubygems_version: 1.8.24
175
218
  signing_key:
176
219
  specification_version: 3
177
220
  summary: Object-based searching for ActiveRecord (currently).