trackoid 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -6,5 +6,5 @@ group :development do
6
6
  gem 'rake'
7
7
  gem 'jeweler'
8
8
  gem 'rspec', '>= 2.2.0'
9
- gem 'mocha'
9
+ gem 'mocha', '0.11.0'
10
10
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
@@ -2,9 +2,9 @@
2
2
  module Mongoid #:nodoc:
3
3
  module Tracking #:nodoc:
4
4
  module Aggregates
5
-
5
+
6
6
  DEPRECATED_TOKENS = ['hour', 'hours']
7
-
7
+
8
8
  # This module includes aggregate data extensions to Trackoid instances
9
9
  def self.included(base)
10
10
  base.class_eval do
@@ -21,7 +21,7 @@ module Mongoid #:nodoc:
21
21
  module ClassMethods
22
22
  # Defines an aggregate token to an already tracked model. It defines
23
23
  # a new mongoid model named after the original model.
24
- #
24
+ #
25
25
  # Example:
26
26
  #
27
27
  # <tt>class Page</tt>
@@ -36,7 +36,7 @@ module Mongoid #:nodoc:
36
36
  # A new model is defined as <tt>class PageAggregates</tt>
37
37
  #
38
38
  # This model has the following structure:
39
- #
39
+ #
40
40
  # <tt>belongs_to :page</tt>
41
41
  # <tt>field :ns, :type => String</tt>
42
42
  # <tt>field :key, :type => String</tt>
@@ -132,7 +132,7 @@ module Mongoid #:nodoc:
132
132
  def define_klass(&block)
133
133
  scope = internal_aggregates_name.split('::')
134
134
  klass = scope.pop
135
- scope = scope.inject(Kernel) {|scope, const_name| scope.const_get(const_name)}
135
+ scope = scope.inject(Object) {|scope, const_name| scope.const_get(const_name)}
136
136
  klass = scope.const_set(klass, Class.new)
137
137
  klass.class_eval(&block)
138
138
  end
@@ -152,7 +152,7 @@ module Mongoid #:nodoc:
152
152
  end
153
153
  end
154
154
  end
155
-
155
+
156
156
  end
157
157
  end
158
158
  end
@@ -7,8 +7,10 @@ module Mongoid #:nodoc:
7
7
  # field named after :field
8
8
  def self.included(base)
9
9
  base.class_eval do
10
- raise Errors::NotMongoid, "Must be included in a Mongoid::Document" unless self.ancestors.include? Mongoid::Document
11
-
10
+ unless self.ancestors.include? Mongoid::Document
11
+ raise Errors::NotMongoid, "Must be included in a Mongoid::Document"
12
+ end
13
+
12
14
  include Aggregates
13
15
  extend ClassMethods
14
16
 
@@ -7,7 +7,7 @@ class TestModel
7
7
  field :name # Dummy field
8
8
 
9
9
  # Note that references to "track" and "aggregate" in this test are mixed
10
- # for testing pourposes. Trackoid does not make any difference in the
10
+ # for testing purposes. Trackoid does not make any difference in the
11
11
  # declaration order of tracking fields and aggregate tokens.
12
12
  track :visits
13
13
  aggregate :browsers do |b| b.split.first.downcase if b; end
@@ -29,6 +29,34 @@ class SecondTestModel
29
29
  aggregate :aggregate_four do Time.now end
30
30
  end
31
31
 
32
+ # Namespaced models to test avoid name collisions
33
+ # Collitions may happen when declaring internal aggregate classes for a model
34
+ # which has the same name as other models in another namespace
35
+ module MyCompany
36
+ class TestPerson
37
+ include Mongoid::Document
38
+ include Mongoid::Tracking
39
+
40
+ field :my_name
41
+
42
+ track :logins
43
+ aggregate :initials do |n| n.to_s[0]; end
44
+ end
45
+ end
46
+
47
+ module YourCompany
48
+ class TestPerson
49
+ include Mongoid::Document
50
+ include Mongoid::Tracking
51
+
52
+ field :your_name
53
+
54
+ track :logins
55
+ aggregate :initials do |n| n.to_s[0]; end
56
+ end
57
+ end
58
+
59
+
32
60
  describe Mongoid::Tracking::Aggregates do
33
61
 
34
62
  before(:all) do
@@ -244,7 +272,7 @@ describe Mongoid::Tracking::Aggregates do
244
272
  @mock.visits("Google Chrome").inc
245
273
  @mock.visits.browsers.today.should =~ [["mozilla", 1], ["google", 1]]
246
274
  @mock.visits.referers.today.should =~ [["firefox", 1], ["chrome", 1]]
247
-
275
+
248
276
  # Just for testing array manipulations
249
277
  @mock.visits.browsers.today.inject(0) {|total, c| total + c.last }.should == 2
250
278
  end
@@ -440,4 +468,31 @@ describe Mongoid::Tracking::Aggregates do
440
468
  ]
441
469
  end
442
470
  end
471
+
472
+ describe "When using models with same name on different namespaces" do
473
+ before do
474
+ MyCompany::TestPerson.all.map(&:destroy)
475
+ MyCompany::TestPerson.create(:my_name => "twoixter")
476
+ @my_object_id = MyCompany::TestPerson.first.id
477
+ @my_mock = MyCompany::TestPerson.first
478
+ @my_mock.logins("ASCII").set(1, "2012-07-07")
479
+ @my_mock.logins("EBCDIC").set(1, "2012-07-07")
480
+
481
+ YourCompany::TestPerson.all.map(&:destroy)
482
+ YourCompany::TestPerson.create(:your_name => "test")
483
+ @your_object_id = YourCompany::TestPerson.first.id
484
+ @your_mock = YourCompany::TestPerson.first
485
+ @your_mock.logins("UTF8").set(1, "2012-07-07")
486
+ @your_mock.logins("LATIN1").set(1, "2012-07-07")
487
+ end
488
+
489
+ it "should be different objects" do
490
+ @my_mock.my_name.should_not == @your_mock.your_name
491
+ end
492
+
493
+ it "should yield different aggregates" do
494
+ @my_mock.logins.initials.on("2012-07-07").should =~ [["A", 1], ["E", 1]]
495
+ @your_mock.logins.initials.on("2012-07-07").should =~ [["U", 1], ["L", 1]]
496
+ end
497
+ end
443
498
  end
@@ -2,7 +2,8 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'rubygems'
4
4
 
5
- gem 'mocha', '>= 0.9.8'
5
+ # What is this doing here?
6
+ # gem 'mocha', '>= 0.9.8'
6
7
 
7
8
  require 'mocha'
8
9
  require 'mongoid'
@@ -36,6 +36,20 @@ describe Mongoid::Tracking do
36
36
  }.should_not raise_error
37
37
  end
38
38
 
39
+ it "should not raise errors when using to/as_json" do
40
+ mock = Test.new(:name => "Trackoid")
41
+ json_as = {}
42
+ json_to = ""
43
+
44
+ lambda {
45
+ json_as = mock.as_json(:except => :_id)
46
+ json_to = mock.to_json(:except => :_id)
47
+ }.should_not raise_error
48
+
49
+ json_as.should == { "name" => "Trackoid" }
50
+ json_to.should == "{\"name\":\"Trackoid\"}"
51
+ end
52
+
39
53
  describe "when creating a new field with stats" do
40
54
  before(:all) do
41
55
  @mock = Test.new
@@ -56,7 +70,7 @@ describe Mongoid::Tracking do
56
70
 
57
71
  it "should respond 'false' to field_changed? method" do
58
72
  # Ok, this test is not very relevant since it will return false even
59
- # if Trackid does not override it.
73
+ # if Trackoid does not override it.
60
74
  @mock.visits_changed?.should be_false
61
75
  end
62
76
 
@@ -79,7 +93,7 @@ describe Mongoid::Tracking do
79
93
  lambda { @mock.visits.inc }.should raise_error Mongoid::Errors::ModelNotSaved
80
94
  end
81
95
 
82
- it "shold create an empty hash as the internal representation" do
96
+ it "should create an empty hash as the internal representation" do
83
97
  @mock.visits.send(:_original_hash).should == {}
84
98
  end
85
99
 
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{trackoid}
8
- s.version = "0.3.7"
7
+ s.name = "trackoid"
8
+ s.version = "0.3.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jose Miguel Perez"]
12
- s.date = %q{2011-09-05}
13
- s.description = %q{Trackoid uses an embeddable approach to track analytics data using the poweful features of MongoDB for scalability}
14
- s.email = %q{josemiguel@perezruiz.com}
12
+ s.date = "2012-07-07"
13
+ s.description = "Trackoid uses an embeddable approach to track analytics data using the poweful features of MongoDB for scalability"
14
+ s.email = "josemiguel@perezruiz.com"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
17
  "README.rdoc"
@@ -46,13 +46,12 @@ Gem::Specification.new do |s|
46
46
  "spec/trackoid_spec.rb",
47
47
  "trackoid.gemspec"
48
48
  ]
49
- s.homepage = %q{http://github.com/twoixter/trackoid}
49
+ s.homepage = "http://github.com/twoixter/trackoid"
50
50
  s.require_paths = ["lib"]
51
- s.rubygems_version = %q{1.3.7}
52
- s.summary = %q{Trackoid is an easy scalable analytics tracker using MongoDB and Mongoid}
51
+ s.rubygems_version = "1.8.24"
52
+ s.summary = "Trackoid is an easy scalable analytics tracker using MongoDB and Mongoid"
53
53
 
54
54
  if s.respond_to? :specification_version then
55
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
56
55
  s.specification_version = 3
57
56
 
58
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -60,20 +59,20 @@ Gem::Specification.new do |s|
60
59
  s.add_development_dependency(%q<rake>, [">= 0"])
61
60
  s.add_development_dependency(%q<jeweler>, [">= 0"])
62
61
  s.add_development_dependency(%q<rspec>, [">= 2.2.0"])
63
- s.add_development_dependency(%q<mocha>, [">= 0"])
62
+ s.add_development_dependency(%q<mocha>, ["= 0.11.0"])
64
63
  else
65
64
  s.add_dependency(%q<mongoid>, [">= 2.1.0"])
66
65
  s.add_dependency(%q<rake>, [">= 0"])
67
66
  s.add_dependency(%q<jeweler>, [">= 0"])
68
67
  s.add_dependency(%q<rspec>, [">= 2.2.0"])
69
- s.add_dependency(%q<mocha>, [">= 0"])
68
+ s.add_dependency(%q<mocha>, ["= 0.11.0"])
70
69
  end
71
70
  else
72
71
  s.add_dependency(%q<mongoid>, [">= 2.1.0"])
73
72
  s.add_dependency(%q<rake>, [">= 0"])
74
73
  s.add_dependency(%q<jeweler>, [">= 0"])
75
74
  s.add_dependency(%q<rspec>, [">= 2.2.0"])
76
- s.add_dependency(%q<mocha>, [">= 0"])
75
+ s.add_dependency(%q<mocha>, ["= 0.11.0"])
77
76
  end
78
77
  end
79
78
 
metadata CHANGED
@@ -1,101 +1,105 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: trackoid
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 7
9
- version: 0.3.7
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.8
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Jose Miguel Perez
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-09-05 00:00:00 +02:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: mongoid
22
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 2
29
- - 1
30
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
31
21
  version: 2.1.0
32
22
  type: :runtime
33
23
  prerelease: false
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.1.0
30
+ - !ruby/object:Gem::Dependency
36
31
  name: rake
37
- requirement: &id002 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
38
33
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- segments:
43
- - 0
44
- version: "0"
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
45
38
  type: :development
46
39
  prerelease: false
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
49
47
  name: jeweler
50
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
51
49
  none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
58
54
  type: :development
59
55
  prerelease: false
60
- version_requirements: *id003
61
- - !ruby/object:Gem::Dependency
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
62
63
  name: rspec
63
- requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
64
65
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 2
70
- - 2
71
- - 0
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
72
69
  version: 2.2.0
73
70
  type: :development
74
71
  prerelease: false
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 2.2.0
78
+ - !ruby/object:Gem::Dependency
77
79
  name: mocha
78
- requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
79
81
  none: false
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- segments:
84
- - 0
85
- version: "0"
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 0.11.0
86
86
  type: :development
87
87
  prerelease: false
88
- version_requirements: *id005
89
- description: Trackoid uses an embeddable approach to track analytics data using the poweful features of MongoDB for scalability
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 0.11.0
94
+ description: Trackoid uses an embeddable approach to track analytics data using the
95
+ poweful features of MongoDB for scalability
90
96
  email: josemiguel@perezruiz.com
91
97
  executables: []
92
-
93
98
  extensions: []
94
-
95
- extra_rdoc_files:
99
+ extra_rdoc_files:
96
100
  - LICENSE
97
101
  - README.rdoc
98
- files:
102
+ files:
99
103
  - .document
100
104
  - .rspec
101
105
  - Gemfile
@@ -124,37 +128,28 @@ files:
124
128
  - spec/timezone_spec.rb
125
129
  - spec/trackoid_spec.rb
126
130
  - trackoid.gemspec
127
- has_rdoc: true
128
131
  homepage: http://github.com/twoixter/trackoid
129
132
  licenses: []
130
-
131
133
  post_install_message:
132
134
  rdoc_options: []
133
-
134
- require_paths:
135
+ require_paths:
135
136
  - lib
136
- required_ruby_version: !ruby/object:Gem::Requirement
137
+ required_ruby_version: !ruby/object:Gem::Requirement
137
138
  none: false
138
- requirements:
139
- - - ">="
140
- - !ruby/object:Gem::Version
141
- segments:
142
- - 0
143
- version: "0"
144
- required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
144
  none: false
146
- requirements:
147
- - - ">="
148
- - !ruby/object:Gem::Version
149
- segments:
150
- - 0
151
- version: "0"
145
+ requirements:
146
+ - - ! '>='
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
152
149
  requirements: []
153
-
154
150
  rubyforge_project:
155
- rubygems_version: 1.3.7
151
+ rubygems_version: 1.8.24
156
152
  signing_key:
157
153
  specification_version: 3
158
154
  summary: Trackoid is an easy scalable analytics tracker using MongoDB and Mongoid
159
155
  test_files: []
160
-