mince 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d691deea536ba372175b37a2c0172b19b444de75
4
- data.tar.gz: 6273bb8e9b649e122f162ce7c95df290486cf961
3
+ metadata.gz: 3ddaa9a9ed2495663343af3ef6e5e4b111b339a5
4
+ data.tar.gz: a37f65f96b0229e038cd83f4a2dc8a3b77fcda17
5
5
  SHA512:
6
- metadata.gz: 8b840fbc99a80dc42e94767738877a0fa5fa71b9ae20fbe9bcda8bdb9e33b265dcabe7761c17d9d8180d68b0f8ecceca2f57168a4315743b2dc48b08ece356bb
7
- data.tar.gz: 5eb6ee075cc5808d319a4689ba47740f711b82344c37394fa02f641d2eb2555f9055d95a23a02d2990608b27a084e5d151a89c4ba4bfc2d674298f5521ab1861
6
+ metadata.gz: 762a3fd86f01138c9a5b423eb738021347171ac3a21a9947531e2aee04e4c4ebde19c3e362dd894e115b35853463cbe4ec19098cb058e96aa89f754d13fce1b4
7
+ data.tar.gz: dabf7116329ad47e90a056f8a15d8a0705558e1a2294f9a92e9b2ae7450e606e8edfae8c725483bd1647534106dfc7ffdb5bcf1e9fc2a62dc02ac759462ed96d
@@ -190,7 +190,7 @@ module Mince # :nodoc:
190
190
  translate_each_from_interface interface.get_all_for_key_with_value(data_collection, field, value)
191
191
  end
192
192
 
193
- # Finds all recurds that match a set of key / value pairs
193
+ # Finds all records that match a set of key / value pairs
194
194
  #
195
195
  # @param [Hash] hash a hash of field / value pairs to query records for
196
196
  # @returns [Array] the set of records matching all key / value pairs
@@ -198,6 +198,15 @@ module Mince # :nodoc:
198
198
  translate_each_from_interface interface.get_by_params(data_collection, hash)
199
199
  end
200
200
 
201
+ # Finds all records that match a set of key / value pairs
202
+ #
203
+ # @param [Symbol] field the field to query for
204
+ # @param [*] Time object to find all records where field is less than value
205
+ # @returns [Array] the set of records matching all key / value pairs
206
+ def all_before(field, value)
207
+ translate_each_from_interface interface.all_before(data_collection, field, value)
208
+ end
209
+
201
210
  # Finds One record that matches all of the field / value pairs
202
211
  #
203
212
  # @param [Hash] hash the hash to query for
@@ -48,6 +48,11 @@ module Mince
48
48
  a = data_model.find(id)
49
49
  new a if a
50
50
  end
51
+
52
+ # Returns all models where the field has a value that is less than the given value
53
+ def all_before(field, value)
54
+ data_model.all_before(field, value).map{|a| new(a) }
55
+ end
51
56
  end
52
57
  end
53
58
  end
@@ -2,10 +2,10 @@ require_relative '../../mince'
2
2
 
3
3
  # = Shared example for a Mince Interface
4
4
  #
5
- # This is an Rspec Shared Example. It provides the ability to test
5
+ # This is an Rspec Shared Example. It provides the ability to test
6
6
  # shared behavior of objects without duplication.
7
7
  #
8
- # Use this shared example as documentation on what API a mince data interface
8
+ # Use this shared example as documentation on what API a mince data interface
9
9
  # must implement and as a specification and integration test while developing
10
10
  # your mince data interface.
11
11
  #
@@ -15,7 +15,7 @@ require_relative '../../mince'
15
15
  # as a gem dependency in my library (in your Gemfile or gemspec file). I would
16
16
  # add Rspec, create a new spec file at spec/integration/mince_interface_spec.rb
17
17
  # with the following contents
18
- #
18
+ #
19
19
  # require_relative '../../lib/my_mince_mysql'
20
20
  # require 'mince/shared_examples/interface_example'
21
21
  #
@@ -26,9 +26,9 @@ require_relative '../../mince'
26
26
  #
27
27
  # it_behaves_like 'a mince interface'
28
28
  # end
29
- #
29
+ #
30
30
  # Run your spec
31
- #
31
+ #
32
32
  # bundle exec spec rspec/integration/mince_inerface_spect.rb
33
33
  #
34
34
  # Make the failures pass, when there are no failures your interface is fully
@@ -42,9 +42,9 @@ shared_examples_for 'a mince interface' do
42
42
  let(:interface) { Mince::Config.interface }
43
43
  let(:primary_key) { interface.primary_key }
44
44
 
45
- let(:data1) { { primary_key => 1, field_1: 'value 1', field_2: 3, field_3: [1, 2, 3], shared_between_1_and_2: 'awesome_value', :some_array => [1, 2, 3, 4]} }
46
- let(:data2) { { primary_key => 2, field_1: 'value 1.2', field_2: 6, shared_between_1_and_2: 'awesome_value', :some_array => [4, 5, 6]} }
47
- let(:data3) { { primary_key => 3, field_1: 'value 3', field_2: 9, shared_between_1_and_2: 'not the same as 1 and 2', :some_array => [1, 7]} }
45
+ let(:data1) { { primary_key => 1, field_1: 'value 1', field_2: 3, field_3: [1, 2, 3], shared_between_1_and_2: 'awesome_value', :some_array => [1, 2, 3, 4], created_at: (Time.now.utc - 500000) } }
46
+ let(:data2) { { primary_key => 2, field_1: 'value 1.2', field_2: 6, shared_between_1_and_2: 'awesome_value', :some_array => [4, 5, 6], created_at: (Time.now.utc - 1000) } }
47
+ let(:data3) { { primary_key => 3, field_1: 'value 3', field_2: 9, shared_between_1_and_2: 'not the same as 1 and 2', :some_array => [1, 7], created_at: (Time.now.utc - 50) } }
48
48
 
49
49
  before do
50
50
  interface.clear
@@ -57,7 +57,7 @@ shared_examples_for 'a mince interface' do
57
57
  end
58
58
 
59
59
  describe "Generating a primary key" do
60
- subject do
60
+ subject do
61
61
  (1..number_of_records).map do |salt|
62
62
  interface.generate_unique_id(salt)
63
63
  end
@@ -80,7 +80,7 @@ shared_examples_for 'a mince interface' do
80
80
 
81
81
  it 'can delete a collection' do
82
82
  interface.delete_collection(:some_collection)
83
-
83
+
84
84
  interface.find_all(:some_collection).to_a.should == []
85
85
  end
86
86
 
@@ -128,6 +128,10 @@ shared_examples_for 'a mince interface' do
128
128
  convert_each(interface.get_all_for_key_with_value(:some_collection, :shared_between_1_and_2, 'awesome_value')).should == convert_each([data1, data2])
129
129
  end
130
130
 
131
+ it 'can get all records for a field before a given time' do
132
+ convert_each(interface.all_before(:some_collection, :created_at, Time.now.utc - 500)).should == convert_each([data1, data2])
133
+ end
134
+
131
135
  it 'can get all records where a value includes any of a set of values' do
132
136
  interface.containing_any(:some_collection, :some_array, []).to_a.should == []
133
137
  convert_each(interface.containing_any(:some_collection, :some_array, [7, 2, 3])).should == convert_each([data1, data3])
@@ -167,7 +171,11 @@ shared_examples_for 'a mince interface' do
167
171
  end
168
172
 
169
173
  def convert(hash)
170
- HashWithIndifferentAccess.new(hash)
174
+ HashWithIndifferentAccess.new(hash).tap do |h|
175
+ if h[:created_at]
176
+ h[:created_at] = h[:created_at].to_s
177
+ end
178
+ end
171
179
  end
172
180
 
173
181
  def convert_each(ary)
@@ -5,7 +5,7 @@ module Mince
5
5
  end
6
6
 
7
7
  def self.minor
8
- 2
8
+ 3
9
9
  end
10
10
 
11
11
  def self.patch
@@ -51,6 +51,34 @@ shared_examples_for 'a model using mince model finders' do
51
51
  it { should == models }
52
52
  end
53
53
 
54
+ describe 'finding all before a given time for a given field' do
55
+ subject { klass.all_before(field, time) }
56
+
57
+ let(:field) { mock }
58
+ let(:time) { mock }
59
+
60
+ before do
61
+ klass.data_model.stub(:all_before).with(field, time).and_return(data)
62
+ end
63
+
64
+ context 'when records exist' do
65
+ let(:data) { [mock] }
66
+ let(:model) { mock }
67
+
68
+ before do
69
+ klass.stub(:new).with(data.first).and_return(model)
70
+ end
71
+
72
+ it { should == [model] }
73
+ end
74
+
75
+ context 'when a record does not exist' do
76
+ let(:data) { [] }
77
+
78
+ it { should be_empty }
79
+ end
80
+ end
81
+
54
82
  describe 'finding all by fields by a given hash' do
55
83
  subject { klass.all_by_fields(hash) }
56
84
 
@@ -60,7 +88,7 @@ shared_examples_for 'a model using mince model finders' do
60
88
  klass.data_model.stub(:all_by_fields).with(hash).and_return(data)
61
89
  end
62
90
 
63
- context 'when a record exists' do
91
+ context 'when records exist' do
64
92
  let(:data) { [mock] }
65
93
  let(:model) { mock }
66
94
 
@@ -237,6 +237,19 @@ describe Mince::DataModel, 'Class Methods' do
237
237
  end
238
238
  end
239
239
 
240
+ describe "getting all data models where the field contains a value before the given time" do
241
+ let(:data_model) { {primary_key => 'some id'} }
242
+ let(:expected_data_models) { [HashWithIndifferentAccess.new({:id => 'some id', primary_key => 'some id'})] }
243
+ let(:data_models) { [data_model] }
244
+ subject { described_class.all_before(:some_field, 'some time') }
245
+
246
+ it 'returns the stored data models' do
247
+ interface.should_receive(:all_before).with(collection_name, :some_field, 'some time').and_return(data_models)
248
+
249
+ subject.should == expected_data_models
250
+ end
251
+ end
252
+
240
253
  describe "removing a value from an array for a data model" do
241
254
  let(:data_model_id) { '1234567' }
242
255
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mince
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Simpson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-25 00:00:00.000000000 Z
12
+ date: 2013-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -115,28 +115,28 @@ dependencies:
115
115
  requirements:
116
116
  - - ~>
117
117
  - !ruby/object:Gem::Version
118
- version: '1.2'
118
+ version: '1.6'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
123
  - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: '1.2'
125
+ version: '1.6'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: hashy_db
128
128
  requirement: !ruby/object:Gem::Requirement
129
129
  requirements:
130
130
  - - ~>
131
131
  - !ruby/object:Gem::Version
132
- version: '2.0'
132
+ version: '2.1'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - ~>
138
138
  - !ruby/object:Gem::Version
139
- version: '2.0'
139
+ version: '2.1'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: rb-fsevent
142
142
  requirement: !ruby/object:Gem::Requirement