ts-datetime-delta 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +16 -7
- data/lib/thinking_sphinx/deltas/datetime_delta.rb +50 -32
- data/lib/thinking_sphinx/deltas/datetime_delta/tasks.rb +3 -14
- data/spec/spec_helper.rb +5 -4
- data/spec/thinking_sphinx/deltas/datetime_delta_spec.rb +42 -32
- metadata +68 -28
- data/features/support/database.yml +0 -5
data/README.textile
CHANGED
@@ -4,16 +4,20 @@ h2. Installation
|
|
4
4
|
|
5
5
|
You'll need Thinking Sphinx 1.3.0 or later.
|
6
6
|
|
7
|
-
<pre><code>gem install ts-datetime-delta
|
7
|
+
<pre><code>gem install ts-datetime-delta</code></pre>
|
8
8
|
|
9
|
-
In your
|
9
|
+
In your Gemfile, you can use it like so:
|
10
|
+
|
11
|
+
<pre><code>gem 'ts-datetime-delta', '~> 1.0.2',
|
12
|
+
:require => 'thinking_sphinx/deltas/datetime_delta'</code></pre>
|
13
|
+
|
14
|
+
Or if you're still on Rails 2, then put this in your @environment.rb@ file with the rest of your gem dependencies:
|
10
15
|
|
11
16
|
<pre><code>config.gem 'ts-datetime-delta',
|
12
17
|
:lib => 'thinking_sphinx/deltas/datetime_delta'
|
13
|
-
:version => '>= 1.0.0'
|
14
|
-
:source => 'http://gemcutter.org'</code></pre>
|
18
|
+
:version => '>= 1.0.0'</code></pre>
|
15
19
|
|
16
|
-
|
20
|
+
No matter which version of Rails, you'll need to add the following line to the bottom of your @Rakefile@:
|
17
21
|
|
18
22
|
<pre><code>require 'thinking_sphinx/deltas/datetime_delta/tasks'</code></pre>
|
19
23
|
|
@@ -23,7 +27,7 @@ For the indexes you want to use this delta approach, make sure you set that up i
|
|
23
27
|
|
24
28
|
<pre><code>define_index do
|
25
29
|
# ...
|
26
|
-
|
30
|
+
|
27
31
|
set_property :delta => :datetime
|
28
32
|
end</code></pre>
|
29
33
|
|
@@ -45,6 +49,11 @@ The shorthand version is:
|
|
45
49
|
|
46
50
|
<pre><code>rake ts:in:delta</code></pre>
|
47
51
|
|
52
|
+
h2. Contributors
|
53
|
+
|
54
|
+
* "W. Andrew Loe III":http://andrewloe.com/ - Environment variable for disabling merging.
|
55
|
+
* "Kirill Maximov":http://kirblog.idetalk.com - Handling nil timestamp column values for toggled checks.
|
56
|
+
|
48
57
|
h2. Copyright
|
49
58
|
|
50
|
-
Copyright (c) 2009 Pat Allan, and released under an MIT Licence.
|
59
|
+
Copyright (c) 2009-2012 Pat Allan, and released under an MIT Licence.
|
@@ -1,121 +1,139 @@
|
|
1
1
|
# Datetime Deltas for Thinking Sphinx
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# This documentation is aimed at those reading the code. If you're looking for
|
4
4
|
# a guide to Thinking Sphinx and/or deltas, I recommend you start with the
|
5
5
|
# Thinking Sphinx site instead - or the README for this library at the very
|
6
6
|
# least.
|
7
|
-
#
|
7
|
+
#
|
8
8
|
# @author Patrick Allan
|
9
9
|
# @see http://ts.freelancing-gods.com Thinking Sphinx
|
10
|
-
#
|
10
|
+
#
|
11
11
|
class ThinkingSphinx::Deltas::DatetimeDelta < ThinkingSphinx::Deltas::DefaultDelta
|
12
12
|
attr_accessor :column, :threshold
|
13
|
-
|
13
|
+
|
14
|
+
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
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
14
29
|
# Initialises the Delta object for the given index and settings. All handled
|
15
30
|
# by Thinking Sphinx, so you shouldn't need to call this method yourself in
|
16
31
|
# general day-to-day situations.
|
17
|
-
#
|
32
|
+
#
|
18
33
|
# @example
|
19
34
|
# ThinkingSphinx::Deltas::DatetimeDelta.new index,
|
20
35
|
# :delta_column => :updated_at,
|
21
36
|
# :threshold => 1.day
|
22
|
-
#
|
37
|
+
#
|
23
38
|
# @param [ThinkingSphinx::Index] index the index using this delta object
|
24
39
|
# @param [Hash] options a hash of options for the index
|
25
40
|
# @option options [Symbol] :delta_column (:updated_at) The column to use for
|
26
41
|
# tracking when a record has changed. Default to :updated_at.
|
27
42
|
# @option options [Integer] :threshold (1.day) The window of time to store
|
28
43
|
# changes for, in seconds. Defaults to one day.
|
29
|
-
#
|
44
|
+
#
|
30
45
|
def initialize(index, options = {})
|
31
46
|
@index = index
|
32
47
|
@column = options.delete(:delta_column) || :updated_at
|
33
48
|
@threshold = options.delete(:threshold) || 1.day
|
34
49
|
end
|
35
|
-
|
50
|
+
|
36
51
|
# Does absolutely nothing, beyond returning true. Thinking Sphinx expects
|
37
52
|
# this method, though, and we don't want to use the inherited behaviour from
|
38
53
|
# DefaultDelta.
|
39
|
-
#
|
54
|
+
#
|
40
55
|
# All the real indexing logic is done by the delayed_index method.
|
41
|
-
#
|
56
|
+
#
|
42
57
|
# @param [Class] model the ActiveRecord model to index.
|
43
58
|
# @param [ActiveRecord::Base] instance the instance of the given model that
|
44
59
|
# has changed. Optional.
|
45
60
|
# @return [Boolean] true
|
46
61
|
# @see #delayed_index
|
47
|
-
#
|
62
|
+
#
|
48
63
|
def index(model, instance = nil)
|
49
64
|
# do nothing
|
50
65
|
true
|
51
66
|
end
|
52
|
-
|
67
|
+
|
53
68
|
# Processes the delta index for the given model, and then merges the relevant
|
54
69
|
# core and delta indexes together. By default, the output of these indexer
|
55
70
|
# commands are printed to stdout. If you'd rather it didn't, set
|
56
71
|
# ThinkingSphinx.suppress_delta_output to true.
|
57
|
-
#
|
72
|
+
#
|
58
73
|
# @param [Class] model the ActiveRecord model to index
|
59
74
|
# @return [Boolean] true
|
60
|
-
#
|
75
|
+
#
|
61
76
|
def delayed_index(model)
|
62
77
|
config = ThinkingSphinx::Configuration.instance
|
63
78
|
rotate = ThinkingSphinx.sphinx_running? ? " --rotate" : ""
|
64
|
-
|
79
|
+
|
65
80
|
output = `#{config.bin_path}#{config.indexer_binary_name} --config #{config.config_file}#{rotate} #{model.delta_index_names.join(' ')}`
|
66
|
-
|
81
|
+
|
82
|
+
|
67
83
|
model.sphinx_indexes.select(&:delta?).each do |index|
|
68
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`
|
69
|
-
end
|
85
|
+
end unless ENV['DISABLE_MERGE'] == 'true'
|
86
|
+
|
70
87
|
puts output unless ThinkingSphinx.suppress_delta_output?
|
71
|
-
|
88
|
+
|
72
89
|
true
|
73
90
|
end
|
74
|
-
|
91
|
+
|
75
92
|
# Toggles the given instance to be flagged as part of the next delta indexing.
|
76
93
|
# For datetime deltas, this means do nothing at all.
|
77
|
-
#
|
94
|
+
#
|
78
95
|
# @param [ActiveRecord::Base] instance the instance to be toggled
|
79
|
-
#
|
96
|
+
#
|
80
97
|
def toggle(instance)
|
81
98
|
# do nothing
|
82
99
|
end
|
83
|
-
|
100
|
+
|
84
101
|
# Report whether a given instance is considered toggled (part of the next
|
85
102
|
# delta process). For datetime deltas, this is true if the delta column
|
86
103
|
# (updated_at by default) has a value within the threshold. Otherwise, false
|
87
104
|
# is returned.
|
88
|
-
#
|
105
|
+
#
|
89
106
|
# @param [ActiveRecord::Base] instance the instance to check
|
90
107
|
# @return [Boolean] True if within the threshold window, otherwise false.
|
91
|
-
#
|
108
|
+
#
|
92
109
|
def toggled(instance)
|
93
|
-
instance.send(@column)
|
110
|
+
res = instance.send(@column)
|
111
|
+
res && (res > @threshold.ago)
|
94
112
|
end
|
95
|
-
|
113
|
+
|
96
114
|
# Returns the SQL query that resets the model data after a normal index. For
|
97
115
|
# datetime deltas, nothing needs to be done, so this method returns nil.
|
98
|
-
#
|
116
|
+
#
|
99
117
|
# @param [Class] model The ActiveRecord model that is requesting the query
|
100
118
|
# @return [NilClass] Always nil
|
101
|
-
#
|
119
|
+
#
|
102
120
|
def reset_query(model)
|
103
121
|
nil
|
104
122
|
end
|
105
|
-
|
123
|
+
|
106
124
|
# A SQL condition (as part of the WHERE clause) that limits the result set to
|
107
125
|
# just the delta data, or all data, depending on whether the toggled argument
|
108
|
-
# is true or not. For datetime deltas, the former value is a check on the
|
126
|
+
# is true or not. For datetime deltas, the former value is a check on the
|
109
127
|
# delta column being within the threshold. In the latter's case, no condition
|
110
128
|
# is needed, so nil is returned.
|
111
|
-
#
|
129
|
+
#
|
112
130
|
# @param [Class] model The ActiveRecord model to generate the SQL condition
|
113
131
|
# for.
|
114
132
|
# @param [Boolean] toggled Whether the query should request delta documents or
|
115
133
|
# all documents.
|
116
134
|
# @return [String, NilClass] The SQL condition if the toggled version is
|
117
135
|
# requested, otherwise nil.
|
118
|
-
#
|
136
|
+
#
|
119
137
|
def clause(model, toggled)
|
120
138
|
if toggled
|
121
139
|
"#{model.quoted_table_name}.#{model.connection.quote_column_name(@column.to_s)}" +
|
@@ -1,26 +1,15 @@
|
|
1
1
|
namespace :thinking_sphinx do
|
2
2
|
namespace :index do
|
3
|
-
desc "Index Thinking Sphinx datetime delta
|
3
|
+
desc "Index Thinking Sphinx datetime delta indices"
|
4
4
|
task :delta => :app_env do
|
5
|
-
ThinkingSphinx.
|
6
|
-
model.constantize
|
7
|
-
}.select { |model|
|
8
|
-
model.define_indexes
|
9
|
-
model.delta_indexed_by_sphinx?
|
10
|
-
}.each do |model|
|
11
|
-
model.sphinx_indexes.select { |index|
|
12
|
-
index.delta? && index.delta_object.respond_to?(:delayed_index)
|
13
|
-
}.each { |index|
|
14
|
-
index.delta_object.delayed_index(index.model)
|
15
|
-
}
|
16
|
-
end
|
5
|
+
ThinkingSphinx::Deltas::DatetimeDelta.index
|
17
6
|
end
|
18
7
|
end
|
19
8
|
end
|
20
9
|
|
21
10
|
namespace :ts do
|
22
11
|
namespace :in do
|
23
|
-
desc "Index Thinking Sphinx datetime delta
|
12
|
+
desc "Index Thinking Sphinx datetime delta indices"
|
24
13
|
task :delta => "thinking_sphinx:index:delta"
|
25
14
|
end
|
26
15
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
|
-
require '
|
5
|
-
require 'spec/autorun'
|
4
|
+
require 'rspec'
|
6
5
|
|
7
|
-
require
|
6
|
+
require 'active_support'
|
7
|
+
require 'active_support/time'
|
8
|
+
require 'thinking_sphinx'
|
8
9
|
require 'thinking_sphinx/deltas/datetime_delta'
|
9
10
|
|
10
|
-
|
11
|
+
RSpec.configure do |config|
|
11
12
|
#
|
12
13
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'spec/spec_helper'
|
1
|
+
require './spec/spec_helper'
|
2
2
|
|
3
3
|
describe ThinkingSphinx::Deltas::DatetimeDelta do
|
4
4
|
before :each do
|
@@ -6,32 +6,34 @@ describe ThinkingSphinx::Deltas::DatetimeDelta do
|
|
6
6
|
stub('index'), {}
|
7
7
|
)
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
describe '#index' do
|
11
11
|
it "should do nothing to the model" do
|
12
12
|
@datetime_delta.index(stub('model'))
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
it "should do nothing to the instance, if provided" do
|
16
16
|
@datetime_delta.index(stub('model'), stub('instance'))
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
it "should make no system calls" do
|
20
20
|
@datetime_delta.stub! :` => true
|
21
21
|
@datetime_delta.stub! :system => true
|
22
|
-
|
22
|
+
|
23
23
|
@datetime_delta.should_not_receive(:`)
|
24
24
|
@datetime_delta.should_not_receive(:system)
|
25
|
-
|
25
|
+
|
26
26
|
@datetime_delta.index(stub('model'), stub('instance'))
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
it "should return true" do
|
30
30
|
@datetime_delta.index(stub('model')).should be_true
|
31
31
|
end
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
describe '#delayed_index' do
|
35
|
+
let(:root) { File.expand_path File.dirname(__FILE__) + '/../../..' }
|
36
|
+
|
35
37
|
before :each do
|
36
38
|
@index = stub('index',
|
37
39
|
:delta? => true,
|
@@ -44,92 +46,100 @@ describe ThinkingSphinx::Deltas::DatetimeDelta do
|
|
44
46
|
:delta_index_names => ['foo_delta'],
|
45
47
|
:sphinx_indexes => [@index]
|
46
48
|
)
|
47
|
-
|
49
|
+
|
48
50
|
ThinkingSphinx.suppress_delta_output = false
|
49
|
-
|
51
|
+
|
50
52
|
@datetime_delta.stub! :` => ""
|
51
53
|
@datetime_delta.stub! :puts => nil
|
52
54
|
end
|
53
|
-
|
55
|
+
|
54
56
|
it "should process the delta index for the given model" do
|
55
57
|
@datetime_delta.should_receive(:`).
|
56
|
-
with(
|
57
|
-
|
58
|
+
with("indexer --config /config/development.sphinx.conf foo_delta")
|
59
|
+
|
58
60
|
@datetime_delta.delayed_index(@model)
|
59
61
|
end
|
60
|
-
|
62
|
+
|
61
63
|
it "should merge the core and delta indexes for the given model" do
|
62
|
-
@datetime_delta.should_receive(:`).with(
|
63
|
-
|
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
|
+
|
64
66
|
@datetime_delta.delayed_index(@model)
|
65
67
|
end
|
66
|
-
|
68
|
+
|
67
69
|
it "should include --rotate if Sphinx is running" do
|
68
70
|
ThinkingSphinx.stub!(:sphinx_running? => true)
|
69
71
|
@datetime_delta.should_receive(:`) do |command|
|
70
72
|
command.should match(/\s--rotate\s/)
|
73
|
+
'output'
|
71
74
|
end
|
72
|
-
|
75
|
+
|
73
76
|
@datetime_delta.delayed_index(@model)
|
74
77
|
end
|
75
|
-
|
78
|
+
|
76
79
|
it "should output the details by default" do
|
77
80
|
@datetime_delta.should_receive(:puts)
|
78
|
-
|
81
|
+
|
79
82
|
@datetime_delta.delayed_index(@model)
|
80
83
|
end
|
81
|
-
|
84
|
+
|
82
85
|
it "should hide the details if suppressing delta output" do
|
83
86
|
ThinkingSphinx.suppress_delta_output = true
|
84
87
|
@datetime_delta.should_not_receive(:puts)
|
85
|
-
|
88
|
+
|
86
89
|
@datetime_delta.delayed_index(@model)
|
87
90
|
end
|
88
91
|
end
|
89
|
-
|
92
|
+
|
90
93
|
describe '#toggle' do
|
91
94
|
it "should do nothing to the instance" do
|
92
95
|
@datetime_delta.toggle(stub('instance'))
|
93
96
|
end
|
94
97
|
end
|
95
|
-
|
98
|
+
|
96
99
|
describe '#toggled' do
|
97
100
|
it "should return true if the column value is more recent than the threshold" do
|
98
101
|
instance = stub('instance', :updated_at => 20.minutes.ago)
|
99
102
|
@datetime_delta.threshold = 30.minutes
|
100
|
-
|
103
|
+
|
101
104
|
@datetime_delta.toggled(instance).should be_true
|
102
105
|
end
|
103
|
-
|
106
|
+
|
104
107
|
it "should return false if the column value is older than the threshold" do
|
105
108
|
instance = stub('instance', :updated_at => 30.minutes.ago)
|
106
109
|
@datetime_delta.threshold = 20.minutes
|
107
|
-
|
110
|
+
|
111
|
+
@datetime_delta.toggled(instance).should be_false
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should return false if the column value is null" do
|
115
|
+
instance = stub('instance', :updated_at => nil)
|
116
|
+
@datetime_delta.threshold = 20.minutes
|
117
|
+
|
108
118
|
@datetime_delta.toggled(instance).should be_false
|
109
119
|
end
|
110
120
|
end
|
111
|
-
|
121
|
+
|
112
122
|
describe '#reset_query' do
|
113
123
|
it "should be nil" do
|
114
124
|
@datetime_delta.reset_query(@model).should be_nil
|
115
125
|
end
|
116
126
|
end
|
117
|
-
|
127
|
+
|
118
128
|
describe '#clause' do
|
119
129
|
before :each do
|
120
130
|
@model = stub('model', :connection => stub('connection'))
|
121
131
|
@model.stub!(:quoted_table_name => '`foo`')
|
122
132
|
@model.connection.stub!(:quote_column_name => '`updated_at`')
|
123
|
-
|
133
|
+
|
124
134
|
@datetime_delta.stub!(
|
125
135
|
:adapter => stub('adapter', :time_difference => 'time_difference')
|
126
136
|
)
|
127
137
|
end
|
128
|
-
|
138
|
+
|
129
139
|
it "should return nil if not for the toggled results" do
|
130
140
|
@datetime_delta.clause(@model, false).should be_nil
|
131
141
|
end
|
132
|
-
|
142
|
+
|
133
143
|
it "should return only records within the threshold" do
|
134
144
|
@datetime_delta.clause(@model, true).
|
135
145
|
should == '`foo`.`updated_at` > time_difference'
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ts-datetime-delta
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 17
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 1.0.3
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Pat Allan
|
@@ -9,49 +15,68 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
18
|
+
date: 2012-06-11 00:00:00 Z
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: thinking-sphinx
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ">="
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 11
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 3
|
32
|
+
- 8
|
23
33
|
version: 1.3.8
|
24
|
-
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: rspec
|
27
|
-
|
28
|
-
|
29
|
-
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
30
41
|
requirements:
|
31
42
|
- - ">="
|
32
43
|
- !ruby/object:Gem::Version
|
44
|
+
hash: 13
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 2
|
48
|
+
- 9
|
33
49
|
version: 1.2.9
|
34
|
-
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
35
52
|
- !ruby/object:Gem::Dependency
|
36
53
|
name: yard
|
37
|
-
|
38
|
-
|
39
|
-
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
40
57
|
requirements:
|
41
58
|
- - ">="
|
42
59
|
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
43
63
|
version: "0"
|
44
|
-
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
45
66
|
- !ruby/object:Gem::Dependency
|
46
67
|
name: cucumber
|
47
|
-
|
48
|
-
|
49
|
-
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
50
71
|
requirements:
|
51
72
|
- - ">="
|
52
73
|
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
53
77
|
version: "0"
|
54
|
-
|
78
|
+
type: :development
|
79
|
+
version_requirements: *id004
|
55
80
|
description: Manage delta indexes via datetime columns for Thinking Sphinx
|
56
81
|
email: pat@freelancing-gods.com
|
57
82
|
executables: []
|
@@ -66,44 +91,59 @@ files:
|
|
66
91
|
- README.textile
|
67
92
|
- lib/thinking_sphinx/deltas/datetime_delta.rb
|
68
93
|
- lib/thinking_sphinx/deltas/datetime_delta/tasks.rb
|
69
|
-
|
94
|
+
- features/step_definitions/common_steps.rb
|
95
|
+
- features/step_definitions/datetime_delta_steps.rb
|
96
|
+
- features/support/db/fixtures/thetas.rb
|
97
|
+
- features/support/db/migrations/create_thetas.rb
|
98
|
+
- features/support/env.rb
|
99
|
+
- features/support/models/theta.rb
|
100
|
+
- features/datetime_deltas.feature
|
101
|
+
- features/support/database.example.yml
|
102
|
+
- spec/spec.opts
|
103
|
+
- spec/spec_helper.rb
|
104
|
+
- spec/thinking_sphinx/deltas/datetime_delta_spec.rb
|
70
105
|
homepage: http://github.com/freelancing-god/ts-datetime-delta
|
71
106
|
licenses: []
|
72
107
|
|
73
108
|
post_install_message:
|
74
|
-
rdoc_options:
|
75
|
-
|
109
|
+
rdoc_options: []
|
110
|
+
|
76
111
|
require_paths:
|
77
112
|
- lib
|
78
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
79
115
|
requirements:
|
80
116
|
- - ">="
|
81
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
82
121
|
version: "0"
|
83
|
-
version:
|
84
122
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
85
124
|
requirements:
|
86
125
|
- - ">="
|
87
126
|
- !ruby/object:Gem::Version
|
127
|
+
hash: 3
|
128
|
+
segments:
|
129
|
+
- 0
|
88
130
|
version: "0"
|
89
|
-
version:
|
90
131
|
requirements: []
|
91
132
|
|
92
133
|
rubyforge_project:
|
93
|
-
rubygems_version: 1.
|
134
|
+
rubygems_version: 1.8.16
|
94
135
|
signing_key:
|
95
136
|
specification_version: 3
|
96
137
|
summary: Thinking Sphinx - Datetime Deltas
|
97
138
|
test_files:
|
98
|
-
- features/datetime_deltas.feature
|
99
139
|
- features/step_definitions/common_steps.rb
|
100
140
|
- features/step_definitions/datetime_delta_steps.rb
|
101
|
-
- features/support/database.example.yml
|
102
|
-
- features/support/database.yml
|
103
141
|
- features/support/db/fixtures/thetas.rb
|
104
142
|
- features/support/db/migrations/create_thetas.rb
|
105
143
|
- features/support/env.rb
|
106
144
|
- features/support/models/theta.rb
|
145
|
+
- features/datetime_deltas.feature
|
146
|
+
- features/support/database.example.yml
|
107
147
|
- spec/spec.opts
|
108
148
|
- spec/spec_helper.rb
|
109
149
|
- spec/thinking_sphinx/deltas/datetime_delta_spec.rb
|