kpi 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -70,9 +70,11 @@ To collect all statistics and send an email to you just call:
70
70
  def title; "Your daily report"; end
71
71
  # ...
72
72
  end
73
+ * You can use Whenever gem to generate periodic reports
73
74
 
74
75
  == Todo
75
76
 
77
+ * Generators for configuration and reports
76
78
  * Database persistence - storing reports in different databases: PostgreSQL & Mongo prioritized
77
79
  * Controllers & views allowing to review stored reports
78
80
  * More tests ;)
@@ -1,28 +1,13 @@
1
1
  module KPI
2
2
  module Report
3
3
  class Base
4
- @@do_not_memoize = [:initialize, :collect!, :entries, :time, :title]
5
4
  extend KPI::Report::SuppressMemoization
6
5
  extend ActiveSupport::Memoizable
7
-
8
- def self.method_added(name)
9
- unless self.method_blacklisted?(name) || suppressed_memoization?
10
- self.defined_kpis << name
11
- suppress_memoization { memoize name }
12
- end
13
- end
14
-
15
- def self.method_blacklisted?(name)
16
- @@do_not_memoize.include?(name) || name =~ /_unmemoized_/
17
- end
18
6
 
19
- def self.defined_kpis
20
- @kpi_methods ||= []
21
- end
22
-
23
- def self.collect_and_send!
24
- KPI::Mailer.report(self.new.tap(&:collect!)).deliver
25
- end
7
+ include KPI::Report::DynamicDefinitions
8
+ include KPI::Report::MailDelivery
9
+
10
+ blacklist :initialize, :collect!, :entries, :time, :title
26
11
 
27
12
  def initialize(time=Time.now)
28
13
  @time = time
@@ -31,7 +16,7 @@ module KPI
31
16
 
32
17
  def collect!
33
18
  self.class.defined_kpis.each {|kpi_method| send(kpi_method) }
34
- self.class.defined_kpis.count
19
+ self
35
20
  end
36
21
 
37
22
  def entries
@@ -0,0 +1,34 @@
1
+ module KPI
2
+ module Report
3
+ module DynamicDefinitions
4
+ module ClassMethods
5
+ def method_added(name)
6
+ unless self.method_blacklisted?(name) || suppressed_memoization?
7
+ self.defined_kpis << name
8
+ suppress_memoization { memoize name }
9
+ end
10
+ end
11
+
12
+ def method_blacklisted?(name)
13
+ not_kpi_methods.include?(name) || name =~ /_unmemoized_/
14
+ end
15
+
16
+ def blacklist(*methods)
17
+ not_kpi_methods.push *methods
18
+ end
19
+
20
+ def defined_kpis
21
+ @kpi_methods ||= []
22
+ end
23
+
24
+ def not_kpi_methods
25
+ @not_kpi_methods ||= []
26
+ end
27
+ end
28
+
29
+ def self.included(base)
30
+ base.send(:extend, ClassMethods)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ module KPI
2
+ module Report
3
+ module MailDelivery
4
+ def self.included(base)
5
+ base.class_eval do
6
+ blacklist :send!
7
+ end
8
+ end
9
+
10
+ def send!
11
+ KPI::Mailer.report(self.collect!).deliver
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate kpi Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,14 @@
1
+ module KPI
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ namespace "kpi:install"
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ desc "Creates a KPI initializer."
7
+
8
+ def copy_initializer
9
+ template "initializer.rb", "config/initializers/kpi.rb"
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,8 @@
1
+ module KPI
2
+ module Generators
3
+ class KPIGenerator < Rails::Generators::NamedBase
4
+ namespace "kpi"
5
+ source_root File.expand_path("../templates", __FILE__)
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ KPI.configure do |c|
2
+ # Your application name
3
+ # It appears in email subjects and inside email body
4
+ c.app_name = "Your app name"
5
+
6
+ # "from" field of KPI emails
7
+ c.mail_from = "kpi@yourapp.com"
8
+
9
+ # "to" field of KPI emails
10
+ c.mail_to = "example@example.com"
11
+ end
@@ -0,0 +1,22 @@
1
+ module KPI
2
+ module Configuration
3
+ def self.included(base)
4
+ base.class_eval do
5
+
6
+ mattr_accessor :app_name
7
+ @@app_name = "Your app"
8
+
9
+ mattr_accessor :mail_from
10
+ @@mail_from = "example@example.com"
11
+
12
+ mattr_accessor :mail_to
13
+ @@mail_to = "example@example.com"
14
+
15
+ def self.configure
16
+ yield self
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/kpi.rb CHANGED
@@ -1,16 +1,6 @@
1
1
  module KPI
2
2
  require 'engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
3
3
 
4
- mattr_accessor :app_name
5
- @@app_name = "Your app"
6
-
7
- mattr_accessor :mail_from
8
- @@mail_from = "example@example.com"
9
-
10
- mattr_accessor :mail_to
11
- @@mail_to = "example@example.com"
12
-
13
- def self.configure
14
- yield self
15
- end
4
+ require 'kpi/configuration'
5
+ include KPI::Configuration
16
6
  end
data/spec/spec_helper.rb CHANGED
@@ -9,8 +9,11 @@ require 'kpi'
9
9
  # in ./support/ and its subdirectories.
10
10
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
11
11
 
12
+ require File.join(File.dirname(__FILE__), '..', 'lib/kpi/configuration')
12
13
  require File.join(File.dirname(__FILE__), '..', 'app/models/kpi/entry')
14
+ require File.join(File.dirname(__FILE__), '..', 'app/models/kpi/report/dynamic_definitions')
13
15
  require File.join(File.dirname(__FILE__), '..', 'app/models/kpi/report/suppress_memoization')
16
+ require File.join(File.dirname(__FILE__), '..', 'app/models/kpi/report/mail_delivery')
14
17
  require File.join(File.dirname(__FILE__), '..', 'app/models/kpi/report/base')
15
18
  require File.join(File.dirname(__FILE__), '..', 'app/mailers/kpi/mailer')
16
19
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: kpi
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.1
5
+ version: 0.3.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Artur Roszczyk
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-21 00:00:00 +01:00
13
+ date: 2011-04-14 00:00:00 +02:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ~>
22
22
  - !ruby/object:Gem::Version
23
- version: 3.0.0
23
+ version: "3.0"
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: *id001
@@ -31,7 +31,7 @@ dependencies:
31
31
  requirements:
32
32
  - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: 3.0.0
34
+ version: "3.0"
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: *id002
@@ -53,7 +53,7 @@ dependencies:
53
53
  requirements:
54
54
  - - ~>
55
55
  - !ruby/object:Gem::Version
56
- version: 1.0.0
56
+ version: "1.0"
57
57
  type: :development
58
58
  prerelease: false
59
59
  version_requirements: *id004
@@ -92,10 +92,17 @@ files:
92
92
  - app/mailers/kpi/mailer.rb
93
93
  - app/models/kpi/entry.rb
94
94
  - app/models/kpi/report/base.rb
95
+ - app/models/kpi/report/dynamic_definitions.rb
96
+ - app/models/kpi/report/mail_delivery.rb
95
97
  - app/models/kpi/report/suppress_memoization.rb
96
98
  - app/views/kpi/mailer/report.html.erb
97
99
  - lib/engine.rb
100
+ - lib/generators/kpi/USAGE
101
+ - lib/generators/kpi/install_generator.rb
102
+ - lib/generators/kpi/kpi_generator.rb
103
+ - lib/generators/kpi/templates/initializer.rb
98
104
  - lib/kpi.rb
105
+ - lib/kpi/configuration.rb
99
106
  - LICENSE.txt
100
107
  - README.rdoc
101
108
  - spec/models/kpi/report/base_spec.rb
@@ -114,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
121
  requirements:
115
122
  - - ">="
116
123
  - !ruby/object:Gem::Version
117
- hash: -914412323094170311
124
+ hash: -1444204594839301290
118
125
  segments:
119
126
  - 0
120
127
  version: "0"