kpi 0.3.1 → 0.3.3

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/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"