ts-datetime-delta 1.0.3 → 2.0.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.
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: