ts-datetime-delta 1.0.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1087cb59f57d80d265ea1f197eb5ab703c4a1d3c
4
+ data.tar.gz: 47e5e40cbd3d6e78956cf4963ccbcf199110e168
5
+ SHA512:
6
+ metadata.gz: e2f7d1406550a8eca218769752b276eae4b762fc61ef1162bcb73b4b21ff71fa3a98e4b757cc5cb8a8fe20ccc1c7a62fb2255868b7281ca31498dae26d50fd8d
7
+ data.tar.gz: 97b77e7deab112a317769ba3d0d8684291241adfaaac8f6b7d428b9677121643ffa65d82f7d2e3d750a87a2751f0995819cfdb1a1887e6fb018bc31e8aa51972
data/README.textile CHANGED
@@ -2,20 +2,20 @@ h1. Datetime Deltas for Thinking Sphinx
2
2
 
3
3
  h2. Installation
4
4
 
5
- You'll need Thinking Sphinx 1.3.0 or later.
5
+ You'll need Thinking Sphinx 1.3.0 or later (v3 is now supported since the 2.0.0 release of this gem).
6
6
 
7
7
  <pre><code>gem install ts-datetime-delta</code></pre>
8
8
 
9
9
  In your Gemfile, you can use it like so:
10
10
 
11
- <pre><code>gem 'ts-datetime-delta', '~> 1.0.2',
11
+ <pre><code>gem 'ts-datetime-delta', '~> 2.0.0',
12
12
  :require => 'thinking_sphinx/deltas/datetime_delta'</code></pre>
13
13
 
14
14
  Or if you're still on Rails 2, then put this in your @environment.rb@ file with the rest of your gem dependencies:
15
15
 
16
16
  <pre><code>config.gem 'ts-datetime-delta',
17
17
  :lib => 'thinking_sphinx/deltas/datetime_delta'
18
- :version => '>= 1.0.0'</code></pre>
18
+ :version => '>= 2.0.0'</code></pre>
19
19
 
20
20
  No matter which version of Rails, you'll need to add the following line to the bottom of your @Rakefile@:
21
21
 
@@ -23,7 +23,16 @@ No matter which version of Rails, you'll need to add the following line to the b
23
23
 
24
24
  h2. Usage
25
25
 
26
- For the indexes you want to use this delta approach, make sure you set that up in their @define_index@ blocks.
26
+ For the indexes you want to use this delta approach, make sure you set that up in your index definition. For Thinking Sphinx v3, that'll look like this:
27
+
28
+ <pre><code>ThinkingSphinx::Index.define(:book,
29
+ :with => :active_record,
30
+ :delta => ThinkingSphinx::Deltas::DatetimeDelta
31
+ ) do
32
+ # ...
33
+ end</code></pre>
34
+
35
+ But for Thinking Sphinx v1/v2, it belongs within your @define_index@ blocks:
27
36
 
28
37
  <pre><code>define_index do
29
38
  # ...
@@ -33,6 +42,18 @@ end</code></pre>
33
42
 
34
43
  If you want to use a column other than @updated_at@, you can specify it using the @:delta_column@ option. The same goes for the threshold, which defaults to one day.
35
44
 
45
+ Again, Thinking Sphinx v3 expects these options outside the block:
46
+
47
+ <pre><code>ThinkingSphinx::Index.define(:book,
48
+ :with => :active_record,
49
+ :delta => ThinkingSphinx::Deltas::DatetimeDelta,
50
+ :delta_options => {:threshold => 1.hour, :delta_column => :changed_at}
51
+ ) do
52
+ # ...
53
+ end</code></pre>
54
+
55
+ But Thinking Sphinx v1/v2 it goes within the @define_index@ block:
56
+
36
57
  <pre><code>set_property :delta => :datetime,
37
58
  :threshold => 1.hour,
38
59
  :delta_column => :changed_at</code></pre>
@@ -53,7 +74,9 @@ h2. Contributors
53
74
 
54
75
  * "W. Andrew Loe III":http://andrewloe.com/ - Environment variable for disabling merging.
55
76
  * "Kirill Maximov":http://kirblog.idetalk.com - Handling nil timestamp column values for toggled checks.
77
+ * "Timo Virkkala":https://github.com/weetu - Thinking Sphinx v3 compatibility,fix for null timestamps.
78
+ * "Cedric Maion":https://github.com/cmaion - Fix for keeping custom options persisted.
56
79
 
57
80
  h2. Copyright
58
81
 
59
- Copyright (c) 2009-2012 Pat Allan, and released under an MIT Licence.
82
+ Copyright (c) 2009-2014 Pat Allan, and released under an MIT Licence.
@@ -10,42 +10,49 @@
10
10
  #
11
11
  class ThinkingSphinx::Deltas::DatetimeDelta < ThinkingSphinx::Deltas::DefaultDelta
12
12
  attr_accessor :column, :threshold
13
+ attr_reader :adapter
13
14
 
14
15
  def self.index
15
- ThinkingSphinx.context.indexed_models.collect { |model|
16
- model.constantize
17
- }.select { |model|
18
- model.define_indexes
19
- model.delta_indexed_by_sphinx?
20
- }.each do |model|
21
- model.sphinx_indexes.select { |index|
22
- index.delta? && index.delta_object.respond_to?(:delayed_index)
23
- }.each { |index|
24
- index.delta_object.delayed_index(index.model)
25
- }
16
+ if ThinkingSphinx.respond_to?(:context) # Thinking Sphinx v2
17
+ ThinkingSphinx.context.indexed_models.collect { |model|
18
+ model.constantize
19
+ }.select { |model|
20
+ model.define_indexes
21
+ model.delta_indexed_by_sphinx?
22
+ }.each do |model|
23
+ model.sphinx_indexes.select { |index|
24
+ index.delta? && index.delta_object.respond_to?(:delayed_index)
25
+ }.each { |index|
26
+ index.delta_object.delayed_index(index.model)
27
+ }
28
+ end
29
+ else # Thinking Sphinx v3
30
+ configuration = ThinkingSphinx::Configuration.instance
31
+ configuration.preload_indices
32
+ configuration.indices.each do |index|
33
+ if (index.delta?)
34
+ if (index.delta_processor.respond_to?(:delayed_index))
35
+ index.delta_processor.delayed_index(index)
36
+ end
37
+ end
38
+ end
26
39
  end
27
40
  end
28
41
 
29
42
  # Initialises the Delta object for the given index and settings. All handled
30
43
  # by Thinking Sphinx, so you shouldn't need to call this method yourself in
31
44
  # general day-to-day situations.
32
- #
33
- # @example
34
- # ThinkingSphinx::Deltas::DatetimeDelta.new index,
35
- # :delta_column => :updated_at,
36
- # :threshold => 1.day
37
- #
38
- # @param [ThinkingSphinx::Index] index the index using this delta object
39
- # @param [Hash] options a hash of options for the index
40
- # @option options [Symbol] :delta_column (:updated_at) The column to use for
41
- # tracking when a record has changed. Default to :updated_at.
42
- # @option options [Integer] :threshold (1.day) The window of time to store
43
- # changes for, in seconds. Defaults to one day.
44
- #
45
- def initialize(index, options = {})
46
- @index = index
47
- @column = options.delete(:delta_column) || :updated_at
48
- @threshold = options.delete(:threshold) || 1.day
45
+ # @param arg Depending on the version of Thinking Sphinx
46
+ # For TS v2: the index
47
+ # For TS v3: the database adapter
48
+ def initialize(arg, options = {})
49
+ if ThinkingSphinx.respond_to?(:context) # Thinking Sphinx v2
50
+ @index = arg
51
+ else # Thinking Sphinx v3
52
+ @adapter = arg
53
+ end
54
+ @column = options[:column] || :updated_at
55
+ @threshold = options[:threshold] || 1.day
49
56
  end
50
57
 
51
58
  # Does absolutely nothing, beyond returning true. Thinking Sphinx expects
@@ -54,37 +61,49 @@ class ThinkingSphinx::Deltas::DatetimeDelta < ThinkingSphinx::Deltas::DefaultDel
54
61
  #
55
62
  # All the real indexing logic is done by the delayed_index method.
56
63
  #
57
- # @param [Class] model the ActiveRecord model to index.
58
- # @param [ActiveRecord::Base] instance the instance of the given model that
59
- # has changed. Optional.
60
- # @return [Boolean] true
61
- # @see #delayed_index
62
- #
63
- def index(model, instance = nil)
64
+ def index(arg, instance=nil)
64
65
  # do nothing
65
66
  true
66
67
  end
67
68
 
68
- # Processes the delta index for the given model, and then merges the relevant
69
+ # Processes the given delta index, and then merges the relevant
69
70
  # core and delta indexes together. By default, the output of these indexer
70
71
  # commands are printed to stdout. If you'd rather it didn't, set
71
- # ThinkingSphinx.suppress_delta_output to true.
72
+ # config.settings['quiet_deltas'] to true.
72
73
  #
73
- # @param [Class] model the ActiveRecord model to index
74
+ # @param arg Depending on the version of Thinking Sphinx
75
+ # For TS v2: the ActiveRecord model to index
76
+ # For TS v3: the delta index to index
74
77
  # @return [Boolean] true
75
78
  #
76
- def delayed_index(model)
79
+ def delayed_index(arg)
77
80
  config = ThinkingSphinx::Configuration.instance
78
- rotate = ThinkingSphinx.sphinx_running? ? " --rotate" : ""
81
+ if ThinkingSphinx.respond_to?(:context) # Thinking Sphinx v2
82
+ model = arg
83
+ rotate = ThinkingSphinx.sphinx_running? ? " --rotate" : ""
84
+ output = `#{config.bin_path}#{config.indexer_binary_name} --config #{config.config_file}#{rotate} #{model.delta_index_names.join(' ')}`
79
85
 
80
- output = `#{config.bin_path}#{config.indexer_binary_name} --config #{config.config_file}#{rotate} #{model.delta_index_names.join(' ')}`
86
+ model.sphinx_indexes.select(&:delta?).each do |index|
87
+ output += `#{config.bin_path}#{config.indexer_binary_name} --config #{config.config_file}#{rotate} --merge #{index.core_name} #{index.delta_name} --merge-dst-range sphinx_deleted 0 0`
88
+ end unless ENV['DISABLE_MERGE'] == 'true'
81
89
 
90
+ puts output unless ThinkingSphinx.suppress_delta_output?
91
+ else # Thinking Sphinx v3
92
+ delta_index = arg
93
+ controller = config.controller
94
+ output = controller.index(delta_index.name)
95
+ output = "" unless output.is_a?(String) # Riddle::Controller.index may return true, false, nil or String, depending on its options[:verbose] value
96
+ rotate = (controller.running? ? ' --rotate' : '')
82
97
 
83
- model.sphinx_indexes.select(&:delta?).each do |index|
84
- output += `#{config.bin_path}#{config.indexer_binary_name} --config #{config.config_file}#{rotate} --merge #{index.core_name} #{index.delta_name} --merge-dst-range sphinx_deleted 0 0`
85
- end unless ENV['DISABLE_MERGE'] == 'true'
98
+ unless(ENV['DISABLE_MERGE'] == 'true')
99
+ core_index = config.indices.select{|idx|idx.reference == delta_index.reference && idx.delta? == false}.first
100
+ if (core_index)
101
+ output += `#{controller.bin_path}#{controller.indexer_binary_name} --config #{config.configuration_file}#{rotate} --merge #{core_index.name} #{delta_index.name} --merge-dst-range sphinx_deleted 0 0`
102
+ end
103
+ end
86
104
 
87
- puts output unless ThinkingSphinx.suppress_delta_output?
105
+ puts output unless config.settings['quiet_deltas']
106
+ end
88
107
 
89
108
  true
90
109
  end
@@ -106,18 +125,18 @@ class ThinkingSphinx::Deltas::DatetimeDelta < ThinkingSphinx::Deltas::DefaultDel
106
125
  # @param [ActiveRecord::Base] instance the instance to check
107
126
  # @return [Boolean] True if within the threshold window, otherwise false.
108
127
  #
109
- def toggled(instance)
128
+ def toggled?(instance)
110
129
  res = instance.send(@column)
111
130
  res && (res > @threshold.ago)
112
131
  end
132
+ alias_method :toggled, :toggled?
113
133
 
114
134
  # Returns the SQL query that resets the model data after a normal index. For
115
135
  # datetime deltas, nothing needs to be done, so this method returns nil.
116
136
  #
117
- # @param [Class] model The ActiveRecord model that is requesting the query
118
137
  # @return [NilClass] Always nil
119
138
  #
120
- def reset_query(model)
139
+ def reset_query(model=nil)
121
140
  nil
122
141
  end
123
142
 
@@ -127,17 +146,28 @@ class ThinkingSphinx::Deltas::DatetimeDelta < ThinkingSphinx::Deltas::DefaultDel
127
146
  # delta column being within the threshold. In the latter's case, no condition
128
147
  # is needed, so nil is returned.
129
148
  #
130
- # @param [Class] model The ActiveRecord model to generate the SQL condition
131
- # for.
132
- # @param [Boolean] toggled Whether the query should request delta documents or
133
- # all documents.
134
- # @return [String, NilClass] The SQL condition if the toggled version is
135
- # requested, otherwise nil.
136
- #
137
- def clause(model, toggled)
138
- if toggled
139
- "#{model.quoted_table_name}.#{model.connection.quote_column_name(@column.to_s)}" +
140
- " > #{adapter.time_difference(@threshold)}"
149
+ # @param args Depends on version of Thinking Sphinx:
150
+ # For ThinkingSphinx v2 this should be: def clause(model, is_delta)
151
+ # For ThinkingSphinx v3 this should be: def clause(is_delta=false)
152
+ # @param [Class] model: The ActiveRecord model for which the clause is for
153
+ # @param [Boolean] is_delta: Whether the clause is for the core or delta index
154
+ # @return [String, NilClass] The SQL condition if the is_delta is true,
155
+ # otherwise nil
156
+ def clause(*args)
157
+ model = (args.length >= 2 ? args[0] : nil)
158
+ is_delta = (args.length >= 2 ? args[1] : args[0]) || false
159
+
160
+ table_name = (model.nil? ? adapter.quoted_table_name : model.quoted_table_name)
161
+ column_name = (model.nil? ? adapter.quote(@column.to_s) : model.connection.quote_column_name(@column.to_s))
162
+
163
+ if is_delta
164
+ if adapter.class.name.downcase[/postgres/]
165
+ "#{table_name}.#{column_name} > current_timestamp - interval '#{@threshold} seconds'"
166
+ elsif adapter.class.name.downcase[/mysql/]
167
+ "#{table_name}.#{column_name} > DATE_SUB(NOW(), INTERVAL #{@threshold} SECOND)"
168
+ else
169
+ raise 'Unknown adapter type.'
170
+ end
141
171
  else
142
172
  nil
143
173
  end
@@ -1,7 +1,11 @@
1
1
  namespace :thinking_sphinx do
2
2
  namespace :index do
3
3
  desc "Index Thinking Sphinx datetime delta indices"
4
- task :delta => :app_env do
4
+ # task :delta => :app_env do
5
+ task :delta => (
6
+ (ThinkingSphinx.constants.include?(:Version) and ThinkingSphinx::Version.to_f < 3) \
7
+ ? :app_env
8
+ : :environment) do
5
9
  ThinkingSphinx::Deltas::DatetimeDelta.index
6
10
  end
7
11
  end
@@ -12,4 +16,8 @@ namespace :ts do
12
16
  desc "Index Thinking Sphinx datetime delta indices"
13
17
  task :delta => "thinking_sphinx:index:delta"
14
18
  end
19
+ namespace :index do
20
+ desc "Index Thinking Sphinx datetime delta indices"
21
+ task :delta => "thinking_sphinx:index:delta"
22
+ end
15
23
  end
@@ -2,32 +2,36 @@ require './spec/spec_helper'
2
2
 
3
3
  describe ThinkingSphinx::Deltas::DatetimeDelta do
4
4
  before :each do
5
- @datetime_delta = ThinkingSphinx::Deltas::DatetimeDelta.new(
6
- stub('index'), {}
7
- )
5
+ @sphinx_version = (ThinkingSphinx.constants.include?(:Version) ? ThinkingSphinx::Version : '3.0.0').to_f
6
+
7
+ if @sphinx_version < 3
8
+ @datetime_delta = ThinkingSphinx::Deltas::DatetimeDelta.new(double('index'), {})
9
+ else
10
+ @datetime_delta = ThinkingSphinx::Deltas::DatetimeDelta.new(double('adapter'), {})
11
+ end
8
12
  end
9
13
 
10
14
  describe '#index' do
11
15
  it "should do nothing to the model" do
12
- @datetime_delta.index(stub('model'))
16
+ @datetime_delta.index(double('model'))
13
17
  end
14
18
 
15
19
  it "should do nothing to the instance, if provided" do
16
- @datetime_delta.index(stub('model'), stub('instance'))
20
+ @datetime_delta.index(double('model'), double('instance'))
17
21
  end
18
22
 
19
23
  it "should make no system calls" do
20
- @datetime_delta.stub! :` => true
21
- @datetime_delta.stub! :system => true
24
+ @datetime_delta.stub :` => true
25
+ @datetime_delta.stub :system => true
22
26
 
23
27
  @datetime_delta.should_not_receive(:`)
24
28
  @datetime_delta.should_not_receive(:system)
25
29
 
26
- @datetime_delta.index(stub('model'), stub('instance'))
30
+ @datetime_delta.index(double('model'), double('instance'))
27
31
  end
28
32
 
29
33
  it "should return true" do
30
- @datetime_delta.index(stub('model')).should be_true
34
+ @datetime_delta.index(double('model')).should be_true
31
35
  end
32
36
  end
33
37
 
@@ -35,45 +39,73 @@ describe ThinkingSphinx::Deltas::DatetimeDelta do
35
39
  let(:root) { File.expand_path File.dirname(__FILE__) + '/../../..' }
36
40
 
37
41
  before :each do
38
- @index = stub('index',
42
+ @index = double('index',
39
43
  :delta? => true,
44
+ :name => 'foo_delta',
40
45
  :core_name => 'foo_core',
41
- :delta_name => 'foo_delta'
46
+ :delta_name => 'foo_delta',
47
+ :reference => 'foo',
42
48
  )
43
- @model = stub('foo',
49
+ @model = double('foo',
44
50
  :name => 'foo',
45
51
  :source_of_sphinx_index => @model,
46
52
  :delta_index_names => ['foo_delta'],
47
- :sphinx_indexes => [@index]
53
+ :sphinx_indexes => [@index],
48
54
  )
49
55
 
50
- ThinkingSphinx.suppress_delta_output = false
56
+ #ThinkingSphinx.suppress_delta_output = false
51
57
 
52
- @datetime_delta.stub! :` => ""
53
- @datetime_delta.stub! :puts => nil
58
+ @datetime_delta.stub :` => ""
59
+ @datetime_delta.stub :puts => nil
60
+
61
+ @controller = ThinkingSphinx::Configuration.instance.controller
62
+ @controller.stub :` => ""
63
+ @controller.stub :system => true
54
64
  end
55
65
 
56
66
  it "should process the delta index for the given model" do
57
- @datetime_delta.should_receive(:`).
58
- with("indexer --config /config/development.sphinx.conf foo_delta")
59
-
60
- @datetime_delta.delayed_index(@model)
67
+ if @sphinx_version < 3
68
+ @datetime_delta.should_receive(:`).
69
+ with("indexer --config /config/development.sphinx.conf foo_delta")
70
+
71
+ @datetime_delta.delayed_index(@model)
72
+ else
73
+ @controller.stub :index => ""
74
+ @controller.should_receive(:index).with(@index.name)
75
+ @datetime_delta.delayed_index(@index)
76
+ end
61
77
  end
62
78
 
63
79
  it "should merge the core and delta indexes for the given model" do
64
- @datetime_delta.should_receive(:`).with("indexer --config /config/development.sphinx.conf --merge foo_core foo_delta --merge-dst-range sphinx_deleted 0 0")
65
-
66
- @datetime_delta.delayed_index(@model)
80
+ @datetime_delta.should_receive(:`).with(/indexer --config \S+ --merge foo_core foo_delta --merge-dst-range sphinx_deleted 0 0/)
81
+ if @sphinx_version < 3
82
+ @datetime_delta.delayed_index(@model)
83
+ else
84
+ core_index = double('index',
85
+ :delta? => false,
86
+ :name => 'foo_core',
87
+ :reference => 'foo',
88
+ )
89
+ ThinkingSphinx::Configuration.instance.stub :indices => [core_index, @index]
90
+ @datetime_delta.delayed_index(@index)
91
+ end
67
92
  end
68
93
 
69
94
  it "should include --rotate if Sphinx is running" do
70
- ThinkingSphinx.stub!(:sphinx_running? => true)
71
- @datetime_delta.should_receive(:`) do |command|
72
- command.should match(/\s--rotate\s/)
73
- 'output'
95
+ if @sphinx_version < 3
96
+ ThinkingSphinx.stub(:sphinx_running? => true)
97
+ @datetime_delta.should_receive(:`) do |command|
98
+ command.should match(/\s--rotate\s/)
99
+ 'output'
100
+ end
101
+
102
+ @datetime_delta.delayed_index(@model)
103
+ else
104
+ @controller.stub :running? => true
105
+ @controller.should_receive(:`).with(/indexer.*--rotate/)
106
+
107
+ @datetime_delta.delayed_index(@index)
74
108
  end
75
-
76
- @datetime_delta.delayed_index(@model)
77
109
  end
78
110
 
79
111
  it "should output the details by default" do
@@ -83,7 +115,11 @@ describe ThinkingSphinx::Deltas::DatetimeDelta do
83
115
  end
84
116
 
85
117
  it "should hide the details if suppressing delta output" do
86
- ThinkingSphinx.suppress_delta_output = true
118
+ if @sphinx_version < 3
119
+ ThinkingSphinx.suppress_delta_output = true
120
+ else
121
+ ThinkingSphinx::Configuration.instance.settings['quiet_deltas'] = true
122
+ end
87
123
  @datetime_delta.should_not_receive(:puts)
88
124
 
89
125
  @datetime_delta.delayed_index(@model)
@@ -92,27 +128,27 @@ describe ThinkingSphinx::Deltas::DatetimeDelta do
92
128
 
93
129
  describe '#toggle' do
94
130
  it "should do nothing to the instance" do
95
- @datetime_delta.toggle(stub('instance'))
131
+ @datetime_delta.toggle(double('instance'))
96
132
  end
97
133
  end
98
134
 
99
135
  describe '#toggled' do
100
136
  it "should return true if the column value is more recent than the threshold" do
101
- instance = stub('instance', :updated_at => 20.minutes.ago)
137
+ instance = double('instance', :updated_at => 20.minutes.ago)
102
138
  @datetime_delta.threshold = 30.minutes
103
139
 
104
140
  @datetime_delta.toggled(instance).should be_true
105
141
  end
106
142
 
107
143
  it "should return false if the column value is older than the threshold" do
108
- instance = stub('instance', :updated_at => 30.minutes.ago)
144
+ instance = double('instance', :updated_at => 30.minutes.ago)
109
145
  @datetime_delta.threshold = 20.minutes
110
146
 
111
147
  @datetime_delta.toggled(instance).should be_false
112
148
  end
113
149
 
114
150
  it "should return false if the column value is null" do
115
- instance = stub('instance', :updated_at => nil)
151
+ instance = double('instance', :updated_at => nil)
116
152
  @datetime_delta.threshold = 20.minutes
117
153
 
118
154
  @datetime_delta.toggled(instance).should be_false
@@ -127,12 +163,12 @@ describe ThinkingSphinx::Deltas::DatetimeDelta do
127
163
 
128
164
  describe '#clause' do
129
165
  before :each do
130
- @model = stub('model', :connection => stub('connection'))
131
- @model.stub!(:quoted_table_name => '`foo`')
132
- @model.connection.stub!(:quote_column_name => '`updated_at`')
166
+ @model = double('model', :connection => double('connection'))
167
+ @model.stub(:quoted_table_name => '`foo`')
168
+ @model.connection.stub(:quote_column_name => '`updated_at`')
133
169
 
134
- @datetime_delta.stub!(
135
- :adapter => stub('adapter', :time_difference => 'time_difference')
170
+ @datetime_delta.stub(
171
+ :adapter => double('adapter', :time_difference => 'time_difference')
136
172
  )
137
173
  end
138
174
 
metadata CHANGED
@@ -1,141 +1,119 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ts-datetime-delta
3
- version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 3
10
- version: 1.0.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Pat Allan
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-06-11 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-07-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: thinking-sphinx
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 11
29
- segments:
30
- - 1
31
- - 3
32
- - 8
18
+ - !ruby/object:Gem::Version
33
19
  version: 1.3.8
34
20
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: rspec
38
21
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
42
31
  - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 13
45
- segments:
46
- - 1
47
- - 2
48
- - 9
32
+ - !ruby/object:Gem::Version
49
33
  version: 1.2.9
50
34
  type: :development
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: yard
54
35
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
58
38
  - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 3
61
- segments:
62
- - 0
63
- version: "0"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.9
41
+ - !ruby/object:Gem::Dependency
42
+ name: yard
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
64
48
  type: :development
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: cucumber
68
49
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cucumber
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
72
59
  - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 3
75
- segments:
76
- - 0
77
- version: "0"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
78
62
  type: :development
79
- version_requirements: *id004
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
80
69
  description: Manage delta indexes via datetime columns for Thinking Sphinx
81
70
  email: pat@freelancing-gods.com
82
71
  executables: []
83
-
84
72
  extensions: []
85
-
86
- extra_rdoc_files:
73
+ extra_rdoc_files:
87
74
  - LICENSE
88
75
  - README.textile
89
- files:
76
+ files:
90
77
  - LICENSE
91
78
  - README.textile
92
- - lib/thinking_sphinx/deltas/datetime_delta.rb
93
- - lib/thinking_sphinx/deltas/datetime_delta/tasks.rb
79
+ - features/datetime_deltas.feature
94
80
  - features/step_definitions/common_steps.rb
95
81
  - features/step_definitions/datetime_delta_steps.rb
82
+ - features/support/database.example.yml
96
83
  - features/support/db/fixtures/thetas.rb
97
84
  - features/support/db/migrations/create_thetas.rb
98
85
  - features/support/env.rb
99
86
  - features/support/models/theta.rb
100
- - features/datetime_deltas.feature
101
- - features/support/database.example.yml
87
+ - lib/thinking_sphinx/deltas/datetime_delta.rb
88
+ - lib/thinking_sphinx/deltas/datetime_delta/tasks.rb
102
89
  - spec/spec.opts
103
90
  - spec/spec_helper.rb
104
91
  - spec/thinking_sphinx/deltas/datetime_delta_spec.rb
105
92
  homepage: http://github.com/freelancing-god/ts-datetime-delta
106
- licenses: []
107
-
93
+ licenses:
94
+ - MIT
95
+ metadata: {}
108
96
  post_install_message:
109
97
  rdoc_options: []
110
-
111
- require_paths:
98
+ require_paths:
112
99
  - lib
113
- required_ruby_version: !ruby/object:Gem::Requirement
114
- none: false
115
- requirements:
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
116
102
  - - ">="
117
- - !ruby/object:Gem::Version
118
- hash: 3
119
- segments:
120
- - 0
121
- version: "0"
122
- required_rubygems_version: !ruby/object:Gem::Requirement
123
- none: false
124
- requirements:
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
125
107
  - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 3
128
- segments:
129
- - 0
130
- version: "0"
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
131
110
  requirements: []
132
-
133
111
  rubyforge_project:
134
- rubygems_version: 1.8.16
112
+ rubygems_version: 2.3.0
135
113
  signing_key:
136
- specification_version: 3
114
+ specification_version: 4
137
115
  summary: Thinking Sphinx - Datetime Deltas
138
- test_files:
116
+ test_files:
139
117
  - features/step_definitions/common_steps.rb
140
118
  - features/step_definitions/datetime_delta_steps.rb
141
119
  - features/support/db/fixtures/thetas.rb
@@ -147,3 +125,4 @@ test_files:
147
125
  - spec/spec.opts
148
126
  - spec/spec_helper.rb
149
127
  - spec/thinking_sphinx/deltas/datetime_delta_spec.rb
128
+ has_rdoc: