appstats 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,5 @@ pkg/*
2
2
  *.gem
3
3
  .bundle
4
4
  db/migrate
5
+ doc
6
+ config
data/Gemfile CHANGED
@@ -2,3 +2,4 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in appstats.gemspec
4
4
  gemspec
5
+
data/Gemfile.lock CHANGED
@@ -1,33 +1,72 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- appstats (0.0.4)
5
- rails (= 2.3.8)
4
+ appstats (0.0.8)
5
+ rails (= 3.0.3)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  ZenTest (4.4.2)
11
- actionmailer (2.3.8)
12
- actionpack (= 2.3.8)
13
- actionpack (2.3.8)
14
- activesupport (= 2.3.8)
15
- rack (~> 1.1.0)
16
- activerecord (2.3.8)
17
- activesupport (= 2.3.8)
18
- activeresource (2.3.8)
19
- activesupport (= 2.3.8)
20
- activesupport (2.3.8)
11
+ abstract (1.0.0)
12
+ actionmailer (3.0.3)
13
+ actionpack (= 3.0.3)
14
+ mail (~> 2.2.9)
15
+ actionpack (3.0.3)
16
+ activemodel (= 3.0.3)
17
+ activesupport (= 3.0.3)
18
+ builder (~> 2.1.2)
19
+ erubis (~> 2.6.6)
20
+ i18n (~> 0.4)
21
+ rack (~> 1.2.1)
22
+ rack-mount (~> 0.6.13)
23
+ rack-test (~> 0.5.6)
24
+ tzinfo (~> 0.3.23)
25
+ activemodel (3.0.3)
26
+ activesupport (= 3.0.3)
27
+ builder (~> 2.1.2)
28
+ i18n (~> 0.4)
29
+ activerecord (3.0.3)
30
+ activemodel (= 3.0.3)
31
+ activesupport (= 3.0.3)
32
+ arel (~> 2.0.2)
33
+ tzinfo (~> 0.3.23)
34
+ activeresource (3.0.3)
35
+ activemodel (= 3.0.3)
36
+ activesupport (= 3.0.3)
37
+ activesupport (3.0.3)
38
+ arel (2.0.7)
39
+ builder (2.1.2)
21
40
  diff-lcs (1.1.2)
41
+ erubis (2.6.6)
42
+ abstract (>= 1.0.0)
43
+ i18n (0.5.0)
44
+ mail (2.2.14)
45
+ activesupport (>= 2.3.6)
46
+ i18n (>= 0.4.0)
47
+ mime-types (~> 1.16)
48
+ treetop (~> 1.4.8)
49
+ mime-types (1.16)
22
50
  mysql (2.8.1)
23
- rack (1.1.0)
24
- rails (2.3.8)
25
- actionmailer (= 2.3.8)
26
- actionpack (= 2.3.8)
27
- activerecord (= 2.3.8)
28
- activeresource (= 2.3.8)
29
- activesupport (= 2.3.8)
30
- rake (>= 0.8.3)
51
+ polyglot (0.3.1)
52
+ rack (1.2.1)
53
+ rack-mount (0.6.13)
54
+ rack (>= 1.0.0)
55
+ rack-test (0.5.7)
56
+ rack (>= 1.0)
57
+ rails (3.0.3)
58
+ actionmailer (= 3.0.3)
59
+ actionpack (= 3.0.3)
60
+ activerecord (= 3.0.3)
61
+ activeresource (= 3.0.3)
62
+ activesupport (= 3.0.3)
63
+ bundler (~> 1.0)
64
+ railties (= 3.0.3)
65
+ railties (3.0.3)
66
+ actionpack (= 3.0.3)
67
+ activesupport (= 3.0.3)
68
+ rake (>= 0.8.7)
69
+ thor (~> 0.14.4)
31
70
  rake (0.8.7)
32
71
  rspec (2.4.0)
33
72
  rspec-core (~> 2.4.0)
@@ -40,6 +79,10 @@ GEM
40
79
  standalone_migrations (0.3.0)
41
80
  activerecord
42
81
  rake
82
+ thor (0.14.6)
83
+ treetop (1.4.9)
84
+ polyglot (>= 0.3.1)
85
+ tzinfo (0.3.24)
43
86
 
44
87
  PLATFORMS
45
88
  ruby
@@ -48,6 +91,6 @@ DEPENDENCIES
48
91
  ZenTest
49
92
  appstats!
50
93
  mysql
51
- rails (= 2.3.8)
94
+ rails (= 3.0.3)
52
95
  rspec
53
96
  standalone_migrations
data/appstats.gemspec CHANGED
@@ -12,17 +12,16 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{Provide usage statistics about how your application is being used}
13
13
  s.description = %q{Provide usage statistics about how your application is being used}
14
14
 
15
- s.add_dependency('rails','2.3.8')
15
+ # Models are to be used in Rails 3 environment, but the logger can work with Rails 2 apps
16
+ # But, for testing appstats itself, you will need Rails 3
17
+ s.add_dependency('rails','>=2.3.0')
18
+ # s.add_dependency('rails','3.0.3')
16
19
 
17
20
  s.add_development_dependency('rspec')
18
21
  s.add_development_dependency('ZenTest')
19
22
  s.add_development_dependency('standalone_migrations')
20
23
  s.add_development_dependency('mysql')
21
24
 
22
- # only on a mac machine
23
- # s.add_development_dependency('autotest-fsevent')
24
-
25
-
26
25
  s.files = `git ls-files`.split("\n")
27
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
27
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
data/lib/appstats.rb CHANGED
@@ -1,7 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'active_record'
3
- require "#{File.dirname(__FILE__)}/appstats/appstats_entry"
3
+ require "#{File.dirname(__FILE__)}/appstats/entry"
4
4
  require "#{File.dirname(__FILE__)}/appstats/tasks"
5
+ require "#{File.dirname(__FILE__)}/appstats/logger"
6
+ require "#{File.dirname(__FILE__)}/appstats/code_injections"
5
7
 
6
8
  module Appstats
7
9
  # Your code goes here...
@@ -0,0 +1,7 @@
1
+ class Symbol
2
+ include Comparable
3
+
4
+ def <=>(other)
5
+ self.to_s <=> other.to_s
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+
2
+ module Appstats
3
+ class Entry < ActiveRecord::Base
4
+ set_table_name "appstats_entries"
5
+
6
+ attr_accessible :entry_type, :name, :description
7
+
8
+ def to_s
9
+ "Entry [type],[name],[description]"
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,103 @@
1
+
2
+ module Appstats
3
+ class Logger
4
+
5
+ def self.reset
6
+ @@filename_template = nil
7
+ @@default_contexts = nil
8
+ end
9
+
10
+ def self.default_contexts
11
+ @@default_contexts ||= {}
12
+ @@default_contexts
13
+ end
14
+
15
+ def self.filename_template=(value)
16
+ @@filename_template = value
17
+ end
18
+
19
+ def self.filename_template
20
+ @@filename_template ||= 'appstats'
21
+ @@filename_template
22
+ end
23
+
24
+ def self.filename
25
+ "#{filename_template}_#{today}.log"
26
+ end
27
+
28
+ def self.raw_write(text)
29
+ File.open(filename, "a") { |f| f.write("#{text}\n") }
30
+ end
31
+
32
+ def self.raw_read
33
+ return [] unless File.exists?(filename)
34
+ File.open(filename,"r").readlines.collect { |line| line.strip }
35
+ end
36
+
37
+ def self.entry_to_s(action,contexts = {})
38
+ contexts = contexts.merge(default_contexts)
39
+ section_delimiter, assign_delimiter, newline_delimiter = determine_delimiters(contexts.merge(:action => action))
40
+ answer = "#{Appstats::VERSION} setup[#{section_delimiter},#{assign_delimiter},#{newline_delimiter}] "
41
+ answer += "#{now} action#{assign_delimiter}#{action}"
42
+ contexts.keys.sort.each do |key|
43
+ answer += " #{section_delimiter} #{key}#{assign_delimiter}#{contexts[key]}"
44
+ end
45
+ answer
46
+ end
47
+
48
+ def self.entry_to_hash(action_and_contexts)
49
+ hash = { :action => "UNKNOWN_ACTION", :raw_input => action_and_contexts }
50
+ return hash if action_and_contexts.nil?
51
+ setup = action_and_contexts.match(/(.*?) setup\[(.*?),(.*?),(.*?)\] (.*? .*?) (.*)/)
52
+ return hash if setup.nil?
53
+ hash.delete(:raw_input)
54
+ full, version, section_delimiter, assign_delimiter, newline_delimiter, timestamp, input = setup.to_a
55
+
56
+ hash[:timestamp] = timestamp
57
+ input.split(section_delimiter).each do |pair|
58
+ key,value = pair.strip.split(assign_delimiter)
59
+ hash[key.to_sym] = value
60
+ end
61
+ hash
62
+ end
63
+
64
+ def self.entry(action,contexts = {})
65
+ raw_write(entry_to_s(action,contexts))
66
+ end
67
+
68
+ def self.today
69
+ "#{Time.now.strftime('%Y-%m-%d')}"
70
+ end
71
+
72
+ def self.now
73
+ "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
74
+ end
75
+
76
+ private
77
+
78
+ def self.determine_delimiters(lookups)
79
+ section_delimiter = ":"
80
+ assign_delimiter = "="
81
+ newline_delimiter = "-n"
82
+
83
+ lookups.each do |pair|
84
+ name = pair[1]
85
+ while(name.include?(section_delimiter))
86
+ section_delimiter += ":"
87
+ end
88
+ while(name.include?(assign_delimiter))
89
+ assign_delimiter += "="
90
+ end
91
+ while(name.include?(newline_delimiter))
92
+ newline_delimiter = "-#{newline_delimiter}"
93
+ end
94
+ end
95
+ [section_delimiter,assign_delimiter,newline_delimiter]
96
+ end
97
+
98
+
99
+ end
100
+ end
101
+
102
+
103
+
@@ -2,46 +2,61 @@ require 'rake'
2
2
  require 'rake/tasklib'
3
3
  require 'logger'
4
4
 
5
- class AppstatsTasks < ::Rake::TaskLib
6
- attr_accessor :name, :base, :vendor, :config, :schema, :env, :default_env, :verbose, :log_level
5
+ module Appstats
6
+ def self.table_name() "mice" end
7
7
 
8
- def initialize(name = :appstats)
9
- @name = name
10
- base = File.expand_path('.')
11
- here = File.expand_path(File.dirname(File.dirname(File.dirname((__FILE__)))))
12
- @base = base
13
- @vendor = "#{here}/vendor"
14
- @gem_migrations = "#{here}/db/migrations"
15
- @app_migrate = "#{base}/db/migrate"
16
- @config = "#{base}/db/config.yml"
17
- @schema = "#{base}/db/schema.rb"
18
- @env = 'DB'
19
- @default_env = 'development'
20
- @verbose = true
21
- @log_level = Logger::ERROR
22
- yield self if block_given?
23
- # Add to load_path every "lib/" directory in vendor
24
- Dir["#{vendor}/**/lib"].each{|p| $LOAD_PATH << p }
25
- define
26
- end
8
+ class Tasks < ::Rake::TaskLib
9
+ attr_accessor :name, :base, :vendor, :config, :schema, :env, :default_env, :verbose, :log_level
10
+
11
+ def initialize(name = :appstats)
12
+ @name = name
13
+ base = File.expand_path('.')
14
+ here = File.expand_path(File.dirname(File.dirname(File.dirname((__FILE__)))))
15
+ @base = base
16
+ @vendor = "#{here}/vendor"
17
+ @gem_migrations = "#{here}/db/migrations"
18
+ @app_migrate = "#{base}/db/migrate"
19
+ @config = "#{base}/db/config.yml"
20
+ @schema = "#{base}/db/schema.rb"
21
+ @appstats_initializer = "#{base}/config/initializers/appstats.rb"
22
+ @appstats_initializer_template = "#{here}/lib/templates/appstats_config.rb"
23
+ @env = 'DB'
24
+ @default_env = 'development'
25
+ @verbose = true
26
+ @log_level = Logger::ERROR
27
+ yield self if block_given?
28
+ # Add to load_path every "lib/" directory in vendor
29
+ Dir["#{vendor}/**/lib"].each{|p| $LOAD_PATH << p }
30
+ define
31
+ end
27
32
 
28
- def define
29
- namespace :appstats do
30
-
31
- desc "Install or upgrade this gem (adds migration files, etc)"
32
- task :install do
33
- puts "#{File.dirname((__FILE__))}"
34
- unless File.exists?(@app_migrate)
35
- puts "Creating migrate directory"
36
- mkdir @app_migrate
33
+ def define
34
+ namespace :appstats do
35
+ namespace :install do
36
+ desc "Install the migrations for this gem (for the database aspect of the gem)"
37
+ task :migrations do
38
+ unless File.exists?(@app_migrate)
39
+ puts "Creating migrate directory"
40
+ mkdir @app_migrate
41
+ end
42
+ puts "Moving migrations files from:\n> #{@gem_migrations}\nTo\n> #{@app_migrate}"
43
+ system "cp -R #{@gem_migrations}/* #{@app_migrate}"
44
+ end
45
+
46
+ desc "Install the logger for this gem (for application instances that log statistics)"
47
+ task :logger do
48
+ if File.exists?(@appstats_initializer)
49
+ puts "Initialize [#{@appstats_initializer}] already exists, creating example file [#{@appstats_initializer}.example] to see any new changes since you last installed this gem"
50
+ system "cp -R #{@appstats_initializer_template} #{@appstats_initializer}.example"
51
+ else
52
+ puts "Creating default initializer [#{@appstats_initializer}]"
53
+ system "cp -R #{@appstats_initializer_template} #{@appstats_initializer}"
54
+ end
55
+ end
37
56
  end
38
- puts "Moving migrations files from:\n> #{@gem_migrations}\nTo\n> #{@app_migrate}"
39
- system "cp -R #{@gem_migrations}/* #{@app_migrate}"
40
57
  end
41
-
42
58
  end
43
59
  end
44
-
45
60
  end
46
61
 
47
- AppstatsTasks.new
62
+ Appstats::Tasks.new
@@ -1,3 +1,3 @@
1
1
  module Appstats
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -0,0 +1,3 @@
1
+
2
+ Appstats::Logger.filename_template = "my_appstats"
3
+ Appstats::Logger.default_contexts[:app_name] = "YOUR_APP_NAME_HERE"
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ module Appstats
4
+ describe Entry do
5
+
6
+ describe "#initialize" do
7
+
8
+ before(:each) do
9
+ @entry = Appstats::Entry.new
10
+ end
11
+
12
+ it "should set entry_type to nil" do
13
+ @entry.entry_type.should == nil
14
+ end
15
+
16
+ it "should set name to nil" do
17
+ @entry.name.should == nil
18
+ end
19
+
20
+ it "should set description to nil" do
21
+ @entry.description.should == nil
22
+ end
23
+
24
+ it "should set on constructor" do
25
+ entry = Appstats::Entry.new(:entry_type => 'a', :name => 'b', :description => 'c')
26
+ entry.entry_type.should == 'a'
27
+ entry.name.should == 'b'
28
+
29
+ end
30
+
31
+ end
32
+
33
+ describe "#to_s" do
34
+
35
+ before(:each) do
36
+ @entry = Appstats::Entry.new
37
+ end
38
+
39
+ it "should run the test" do
40
+ @entry.to_s.should == 'Entry [type],[name],[description]'
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,200 @@
1
+ require 'spec_helper'
2
+
3
+ module Appstats
4
+ describe Logger do
5
+
6
+ before(:each) do
7
+ Appstats::Logger.reset
8
+ Time.stub!(:now).and_return(Time.parse('2010-09-21 23:15:20'))
9
+ end
10
+
11
+ after(:each) do
12
+ File.delete(Appstats::Logger.filename) if File.exists?(Appstats::Logger.filename)
13
+ end
14
+
15
+ describe "#initialize" do
16
+
17
+ end
18
+
19
+ describe "#reset" do
20
+
21
+ it "should unset filename_template" do
22
+ Appstats::Logger.filename_template = "blah"
23
+ Appstats::Logger.reset
24
+ Appstats::Logger.filename_template.should == "appstats"
25
+ end
26
+
27
+ it "should unset default contexts" do
28
+ Appstats::Logger.default_contexts[:blah] = "x"
29
+ Appstats::Logger.reset
30
+ Appstats::Logger.default_contexts.empty?.should be_true
31
+ end
32
+
33
+ end
34
+
35
+ describe "#filename" do
36
+
37
+ it "should be based on daily timestamp" do
38
+ Appstats::Logger.filename.should == 'appstats_2010-09-21.log'
39
+ end
40
+
41
+ it "should support full paths" do
42
+ Appstats::Logger.filename_template = "/a/b/appstats"
43
+ Appstats::Logger.filename.should == '/a/b/appstats_2010-09-21.log'
44
+ end
45
+
46
+ end
47
+
48
+ describe "#filename_template" do
49
+
50
+ it "should default to appstats" do
51
+ Appstats::Logger.filename_template.should == "appstats"
52
+ end
53
+
54
+ it "should be settable" do
55
+ Appstats::Logger.filename_template = "blah"
56
+ Appstats::Logger.filename_template.should == "blah"
57
+ end
58
+
59
+ end
60
+
61
+ describe "#raw_read" do
62
+
63
+ it "should return empty if file does not exist" do
64
+ File.exists?(Appstats::Logger.filename).should == false
65
+ Appstats::Logger.raw_read.should == []
66
+ end
67
+
68
+ it "should read all data" do
69
+ Appstats::Logger.raw_write("abc")
70
+ Appstats::Logger.raw_write("def")
71
+ Appstats::Logger.raw_read.should == ["abc","def"]
72
+ end
73
+
74
+ end
75
+
76
+ describe "#raw_write" do
77
+
78
+ it "should create the file if it doesn't exist" do
79
+ File.exists?("appstats_2010-09-21.log").should == false
80
+ Appstats::Logger.raw_write("abc")
81
+ File.exists?("appstats_2010-09-21.log").should == true
82
+ end
83
+
84
+ it "should save text as is" do
85
+ Appstats::Logger.raw_write("abc")
86
+ Appstats::Logger.raw_write("def")
87
+ Appstats::Logger.raw_read.should == ["abc","def"]
88
+ end
89
+
90
+ end
91
+
92
+ describe "#now" do
93
+
94
+ it "should return a formatted date" do
95
+ Appstats::Logger.now.should == "2010-09-21 23:15:20"
96
+ end
97
+
98
+ end
99
+
100
+ describe "#today" do
101
+
102
+ it "should return a formatted date" do
103
+ Appstats::Logger.today.should == "2010-09-21"
104
+ end
105
+
106
+ end
107
+
108
+ describe "#entry" do
109
+
110
+ it "should outlien the to_s" do
111
+ Appstats::Logger.stub!(:entry_to_s).with("address_search",{}).and_return("entry_to_s called")
112
+ Appstats::Logger.entry("address_search")
113
+ Appstats::Logger.raw_read.should == ["entry_to_s called"]
114
+ end
115
+
116
+ end
117
+
118
+ describe "#entry_to_hash" do
119
+
120
+ it "should handle nil" do
121
+ Appstats::Logger.entry_to_hash(nil).should == { :action => "UNKNOWN_ACTION", :raw_input => nil }
122
+ end
123
+
124
+ it "should fail softly with invalid data" do
125
+ Appstats::Logger.entry_to_hash("blah").should == { :action => "UNKNOWN_ACTION", :raw_input => "blah" }
126
+ end
127
+
128
+ it "should handle a statistics entry" do
129
+ expected = { :action => "address_search", :timestamp => "2010-09-21 23:15:20" }
130
+ actual = Appstats::Logger.entry_to_hash("0.0.8 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search")
131
+ actual.should == expected
132
+ end
133
+
134
+ it "should handle contexts" do
135
+ expected = { :action => "address_filter", :timestamp => "2010-09-21 23:15:20", :server => "Live", :app_name => 'Market' }
136
+ actual = Appstats::Logger.entry_to_hash("0.0.8 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live")
137
+ actual.should == expected
138
+ end
139
+
140
+ it "should handle actions with the delimiter (and change the delimiter)" do
141
+ expected = { :action => "address:=search-n", :timestamp => "2010-09-21 23:15:20" }
142
+ actual = Appstats::Logger.entry_to_hash("0.0.8 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n")
143
+ actual.should == expected
144
+
145
+ expected = { :action => "address::search==--n", :timestamp => "2010-09-21 23:15:20" }
146
+ actual = Appstats::Logger.entry_to_hash("0.0.8 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n")
147
+ actual.should == expected
148
+ end
149
+
150
+ it "should handle contexts with the delimiter (and change the delimiter)" do
151
+ expected = { :action => "address", :timestamp => "2010-09-21 23:15:20", :server => "market:eval=-n" }
152
+ actual = Appstats::Logger.entry_to_hash("0.0.8 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n")
153
+ actual.should == expected
154
+ end
155
+
156
+
157
+ end
158
+
159
+ describe "#entry_to_s" do
160
+
161
+ it "should handle a statistics entry" do
162
+ expected = "0.0.8 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search"
163
+ actual = Appstats::Logger.entry_to_s("address_search")
164
+ actual.should == expected
165
+ end
166
+
167
+ it "should handle default contexts" do
168
+ Appstats::Logger.default_contexts[:app_name] = "market"
169
+ expected = "0.0.8 setup[:,=,-n] 2010-09-21 23:15:20 action=address_search : app_name=market"
170
+ actual = Appstats::Logger.entry_to_s("address_search")
171
+ actual.should == expected
172
+ end
173
+
174
+ it "should handle contexts (and sort them by symbol)" do
175
+ expected = "0.0.8 setup[:,=,-n] 2010-09-21 23:15:20 action=address_filter : app_name=Market : server=Live"
176
+ actual = Appstats::Logger.entry_to_s("address_filter", { :server => "Live", :app_name => 'Market' })
177
+ actual.should == expected
178
+ end
179
+
180
+ it "should handle actions with the delimiter (and change the delimiter)" do
181
+ expected = "0.0.8 setup[::,==,--n] 2010-09-21 23:15:20 action==address:=search-n"
182
+ actual = Appstats::Logger.entry_to_s("address:=search-n")
183
+ actual.should == expected
184
+
185
+ expected = "0.0.8 setup[:::,===,---n] 2010-09-21 23:15:20 action===address::search==--n"
186
+ actual = Appstats::Logger.entry_to_s("address::search==--n")
187
+ actual.should == expected
188
+ end
189
+
190
+ it "should handle contexts with the delimiter (and change the delimiter)" do
191
+ expected = "0.0.8 setup[::,==,--n] 2010-09-21 23:15:20 action==address :: server==market:eval=-n"
192
+ actual = Appstats::Logger.entry_to_s("address", :server => 'market:eval=-n')
193
+ actual.should == expected
194
+ end
195
+
196
+ end
197
+
198
+
199
+ end
200
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: appstats
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew Forward
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-05 00:00:00 -05:00
18
+ date: 2011-01-20 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -24,14 +24,14 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - "="
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 19
29
+ hash: 3
30
30
  segments:
31
31
  - 2
32
32
  - 3
33
- - 8
34
- version: 2.3.8
33
+ - 0
34
+ version: 2.3.0
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
@@ -113,9 +113,12 @@ files:
113
113
  - db/migrations/20110105221941_create_appstats_entries.rb
114
114
  - db/schema.rb
115
115
  - lib/appstats.rb
116
- - lib/appstats/appstats_entry.rb
116
+ - lib/appstats/code_injections.rb
117
+ - lib/appstats/entry.rb
118
+ - lib/appstats/logger.rb
117
119
  - lib/appstats/tasks.rb
118
120
  - lib/appstats/version.rb
121
+ - lib/templates/appstats_config.rb
119
122
  - pkg/appstats-0.0.1.gem
120
123
  - pkg/appstats-0.0.1.tgz
121
124
  - pkg/appstats-0.0.1/History.txt
@@ -132,8 +135,9 @@ files:
132
135
  - script/console
133
136
  - script/destroy
134
137
  - script/generate
135
- - spec/appstats_entry_spec.rb
136
138
  - spec/appstats_spec.rb
139
+ - spec/entry_spec.rb
140
+ - spec/logger_spec.rb
137
141
  - spec/spec_helper.rb
138
142
  has_rdoc: true
139
143
  homepage: http://github.com/aforward/appstats
@@ -170,6 +174,7 @@ signing_key:
170
174
  specification_version: 3
171
175
  summary: Provide usage statistics about how your application is being used
172
176
  test_files:
173
- - spec/appstats_entry_spec.rb
174
177
  - spec/appstats_spec.rb
178
+ - spec/entry_spec.rb
179
+ - spec/logger_spec.rb
175
180
  - spec/spec_helper.rb
@@ -1,10 +0,0 @@
1
- class AppstatsEntry < ActiveRecord::Base
2
-
3
- attr_accessible :entry_type, :name, :description
4
-
5
-
6
- def to_s
7
- "Entry [type],[name],[description]"
8
- end
9
-
10
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe AppstatsEntry do
4
-
5
- describe "#initialize" do
6
-
7
- before(:each) do
8
- @entry = AppstatsEntry.new
9
- end
10
-
11
- it "should set entry_type to nil" do
12
- @entry.entry_type.should == nil
13
- end
14
-
15
- it "should set name to nil" do
16
- @entry.name.should == nil
17
- end
18
-
19
- it "should set description to nil" do
20
- @entry.description.should == nil
21
- end
22
-
23
- it "should set on constructor" do
24
- entry = AppstatsEntry.new(:entry_type => 'a', :name => 'b', :description => 'c')
25
- entry.entry_type.should == 'a'
26
- entry.name.should == 'b'
27
- entry.description.should == 'c'
28
- end
29
-
30
- end
31
-
32
- describe "#to_s" do
33
-
34
- before(:each) do
35
- @entry = AppstatsEntry.new
36
- end
37
-
38
- it "should run the test" do
39
- @entry.to_s.should == 'Entry [type],[name],[description]'
40
- end
41
- end
42
- end