metry 2.0.0 → 2.0.1

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.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 2.0.1 / 2009-08-08
2
+
3
+ * Handle native ObjectID's correctly.
4
+
1
5
  === 2.0.0 / 2009-08-07
2
6
 
3
7
  * Switched to MongoDB for persistence.
data/Rakefile CHANGED
@@ -20,4 +20,4 @@ task :radiant_features do
20
20
  end
21
21
  end
22
22
 
23
- task :test => [:basic_features, :radiant_features]
23
+ task :default => [:basic_features, :radiant_features]
@@ -22,7 +22,7 @@ module Metry
22
22
 
23
23
  unless env["metry.ignore"] == "true"
24
24
  event["status"] = status.to_s
25
- event["visitor"] = visitor['_id']
25
+ event["visitor"] = visitor['_id'].to_s
26
26
  @storage.add_event(event)
27
27
  end
28
28
 
@@ -47,7 +47,7 @@ module Metry
47
47
  def save_visitor(response, visitor)
48
48
  @storage.save_visitor(visitor)
49
49
  response.set_cookie(COOKIE,
50
- :value => visitor['_id'],
50
+ :value => visitor['_id'].to_s,
51
51
  :expires => (Time.now+(60*60*24*365*20)),
52
52
  :path => '/')
53
53
  end
data/lib/metry/storage.rb CHANGED
@@ -30,7 +30,7 @@ module Metry
30
30
  end
31
31
 
32
32
  def visitor(id)
33
- @db.collection('visitors').find(:_id => id).next_object
33
+ @db.collection('visitors').find(prep_selector('_id' => id)).next_object
34
34
  end
35
35
 
36
36
  def visitor_count
@@ -46,7 +46,7 @@ module Metry
46
46
  end
47
47
 
48
48
  def save_visitor(visitor)
49
- @db.collection('visitors').repsert({:_id => visitor["_id"]}, visitor)
49
+ @db.collection('visitors').repsert(prep_selector('_id' => visitor["_id"]), visitor)
50
50
  end
51
51
 
52
52
  def add_event(event)
@@ -54,7 +54,7 @@ module Metry
54
54
  end
55
55
 
56
56
  def event(id)
57
- @db.collection('events').find(:_id => id).next_object
57
+ @db.collection('events').find(prep_selector('_id' => id)).next_object
58
58
  end
59
59
 
60
60
  def event_count
@@ -62,11 +62,11 @@ module Metry
62
62
  end
63
63
 
64
64
  def events_for(visitor)
65
- @db.collection('events').find(:visitor => visitor)
65
+ @db.collection('events').find('visitor' => visitor)
66
66
  end
67
67
 
68
68
  def last_events(count=1)
69
- @db.collection('events').find({}, :limit => count, :sort => {:time => 1}).to_a
69
+ @db.collection('events').find({}, :limit => count, :sort => {'time' => 1}).to_a
70
70
  end
71
71
 
72
72
  def all_events(*find_options)
@@ -86,6 +86,20 @@ module Metry
86
86
  @key_factory.clear if @key_factory
87
87
  end
88
88
 
89
+ private
90
+
91
+ def prep_selector(selector)
92
+ if self.class.predictable_keys?
93
+ selector
94
+ elsif id = selector['_id']
95
+ case id
96
+ when String
97
+ selector['_id'] = ObjectID.from_string(id)
98
+ end
99
+ end
100
+ selector
101
+ end
102
+
89
103
  class PredictableKeyFactory
90
104
  def initialize
91
105
  clear
data/lib/metry.rb CHANGED
@@ -6,7 +6,7 @@ require 'metry/experiment'
6
6
  require 'metry/psycho'
7
7
 
8
8
  module Metry
9
- VERSION = '2.0.0'
9
+ VERSION = '2.0.1'
10
10
 
11
11
  def self.init(dbname)
12
12
  @storage = Storage.new(dbname)
data/test/test_storage.rb CHANGED
@@ -10,5 +10,10 @@ class TestTokyo < Test::Unit::TestCase
10
10
  should "be empty" do
11
11
  assert_equal 0, @storage.event_count
12
12
  end
13
+
14
+ should "handle object ids" do
15
+ v = @storage.new_visitor
16
+ assert_equal v, @storage.visitor(v['_id'].to_s)
17
+ end
13
18
  end
14
19
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metry
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathaniel Talbott