trackablaze 0.1.0 → 0.1.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.
@@ -11,14 +11,18 @@ module Trackablaze
11
11
  Trackablaze::Tracker.load_trackers
12
12
  config = YAML::load( File.open( file ) )
13
13
 
14
- results = Trackablaze::Tracker.run_trackers(config)
14
+ tracker_items = []
15
+ config.each do |c|
16
+ tracker_items << Trackablaze::TrackerItem.new(c)
17
+ end
18
+
19
+ results = Trackablaze::TrackerItem.run(tracker_items)
15
20
 
16
- (0..config.length-1).each do |n|
17
- c = config[n]
18
- tracker_name = c.keys.first
19
- puts "[ #{Trackablaze::Tracker.trackers[tracker_name].title} ]".center(75,'-')
20
- puts "params: #{c[tracker_name]['params']}"
21
- puts "results: #{results[n]}"
21
+ tracker_items.each do |tracker_item|
22
+ puts "[ #{tracker_item.title} ]".center(75,'-')
23
+ puts "Key: #{tracker_item.key}"
24
+ puts "params: #{tracker_item.params}"
25
+ puts "results: #{results[tracker_item.key]}"
22
26
  end
23
27
  end
24
28
  end
@@ -1,6 +1,19 @@
1
1
  module Trackablaze
2
2
  class Tracker
3
3
 
4
+ # A string that uniquely identifies this instance of the tracker
5
+ # This is to optimize multiple instances that are exactly the same
6
+ # e.g. if 100 people want to track amolk's twitter account, the tracker can
7
+ # be run only once, optimizing calls to Twitter API.
8
+ def self.key(config)
9
+ # By default we use all params and metrics
10
+ sb = []
11
+ sb.push(self.handle)
12
+ sb.push(config['params'].flatten) if config['params']
13
+ sb.push((config['metrics'] || default_metrics).flatten)
14
+ sb.flatten.join('_')
15
+ end
16
+
4
17
  class << self
5
18
  attr_accessor :trackers
6
19
 
@@ -9,36 +22,7 @@ module Trackablaze
9
22
  Trackablaze::Tracker.subclasses.each do |t|
10
23
  @trackers[t.handle] = t
11
24
  end
12
- end
13
-
14
- # This function takes config object, similar in structure to a loaded yml config file
15
- def run_trackers(config)
16
- results = []
17
- trackers = {}
18
- index = 0
19
- config.each do |tracker_node|
20
- tracker_name = tracker_node.keys.first
21
- trackers[tracker_name] ||= []
22
- tracker_config = tracker_node.values.first
23
- tracker_config['index'] = index
24
- trackers[tracker_name] << tracker_config
25
- index += 1
26
- end
27
-
28
- trackers.each do |tracker_name, tracker_configs|
29
- tracker = Trackablaze::Tracker.trackers[tracker_name].new
30
-
31
- tracker_config_index = 0
32
- tracker.get_metrics(tracker_configs).each do |tracker_result|
33
- index = tracker_configs[tracker_config_index]['index']
34
- results[index] = tracker_result
35
- tracker_config_index += 1
36
- end
37
- end
38
-
39
- return results
40
- end
41
-
25
+ end
42
26
  end
43
27
 
44
28
  def self.handle
@@ -62,11 +46,8 @@ module Trackablaze
62
46
  end
63
47
 
64
48
  def add_error(metrics, error, field = nil)
65
- puts "ADDING ERROR #{error} on #{field}"
66
49
  metrics['errors'] ||= []
67
50
  metrics['errors'].push({:error => error, :field => field})
68
-
69
- puts "ADDED ERROR #{metrics.inspect}"
70
51
  end
71
52
 
72
53
  end
@@ -0,0 +1,54 @@
1
+ module Trackablaze
2
+ class TrackerItem
3
+ attr_accessor :name, :config, :params, :metrics, :tracker_class
4
+ def initialize(config)
5
+ @name = config.keys[0]
6
+ @tracker_class = Trackablaze::Tracker.trackers[self.name]
7
+ @config = config[self.name]
8
+ @params = self.config['params']
9
+ @metrics = self.config['metrics'] || @tracker_class.default_metrics
10
+ end
11
+
12
+ def key()
13
+ @key ||= tracker_class.key(config)
14
+ end
15
+
16
+ def title
17
+ @tracker_class.title
18
+ end
19
+
20
+ # This function takes config object, similar in structure to a loaded yml config file
21
+ def self.run(tracker_items)
22
+ Trackablaze::Tracker.load_trackers
23
+
24
+ results = {}
25
+
26
+ # Dedup tracker items using unique key
27
+ unique_tracker_items = tracker_items.uniq {|ti| ti.key}
28
+
29
+ # Gather up all unique tracker_items for a given tracker
30
+ tracker_items_by_tracker = {}
31
+ unique_tracker_items.each do |tracker_item|
32
+ tracker_name = tracker_item.name
33
+
34
+ tracker_items_by_tracker[tracker_name] ||= []
35
+ tracker_items_by_tracker[tracker_name] << tracker_item
36
+ end
37
+
38
+ # Run one tracker at a time
39
+ tracker_items_by_tracker.each do |tracker_name, items|
40
+ tracker = items.first.tracker_class.new
41
+ tracker_results = tracker.get_metrics(items)
42
+
43
+ # Store results by tracker item key
44
+ (0..items.length-1).each do |index|
45
+ item = items[index]
46
+ results[item.key] = tracker_results[index]
47
+ end
48
+ end
49
+
50
+ # All keys should have results now, return results
51
+ return results
52
+ end
53
+ end
54
+ end
data/lib/trackablaze.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'trackablaze/utils'
2
2
  require 'trackablaze/command'
3
+ require 'trackablaze/tracker_item'
3
4
  require 'trackablaze/tracker'
4
5
 
5
6
  Dir[File.dirname(__FILE__) + '/../trackers/*.rb'].each do |path|
@@ -2,21 +2,20 @@ require 'mini_fb'
2
2
 
3
3
  module Trackablaze
4
4
  class FacebookPage < Tracker
5
- def get_metrics(configs)
6
- configs.collect {|c| get_metrics_single(c)}
5
+ def get_metrics(tracker_items)
6
+ tracker_items.collect {|tracker_item| get_metrics_single(tracker_item)}
7
7
  end
8
8
 
9
- def get_metrics_single(config)
10
- params, metrics_keys = config['params'], config['metrics']
9
+ def get_metrics_single(tracker_item)
11
10
  metrics = {}
12
11
 
13
- if (params["page_id"].nil?)
12
+ if (tracker_item.params["page_id"].nil?)
14
13
  add_error(metrics, "No Facebook page ID supplied", "page_id")
15
14
  return metrics
16
15
  end
17
16
 
18
17
  begin
19
- page_info = MiniFB.get(nil, params["page_id"])
18
+ page_info = MiniFB.get(nil, tracker_item.params["page_id"])
20
19
  rescue
21
20
  page_info = {}
22
21
  end
@@ -25,11 +24,9 @@ module Trackablaze
25
24
  add_error(metrics, "Invalid Facebook page ID supplied", "page_id")
26
25
  return metrics
27
26
  end
28
-
29
- metrics_keys ||= FacebookPage.default_metrics
30
27
 
31
- metrics_keys.each do |metrics_key|
32
- metrics[metrics_key] = page_info[metrics_key]
28
+ tracker_item.metrics.each do |metric|
29
+ metrics[metric] = page_info[metric]
33
30
  end
34
31
 
35
32
  metrics
data/trackers/twitter.rb CHANGED
@@ -2,22 +2,21 @@ require 'twitter'
2
2
 
3
3
  module Trackablaze
4
4
  class Twitter < Tracker
5
- def get_metrics(configs)
6
- configs.collect {|c| get_metrics_single(c)}
5
+ def get_metrics(tracker_items)
6
+ tracker_items.collect {|tracker_item| get_metrics_single(tracker_item)}
7
7
  end
8
8
 
9
- def get_metrics_single(config)
10
- params, metrics_keys = config['params'], config['metrics']
9
+ def get_metrics_single(tracker_item)
11
10
  metrics = {}
12
11
 
13
- if (params["handle"].nil? || params["handle"].empty?)
12
+ if (tracker_item.params["handle"].nil? || tracker_item.params["handle"].empty?)
14
13
  add_error(metrics, "No handle supplied", "handle")
15
14
  return metrics
16
15
  end
17
16
 
18
17
  user = nil
19
18
  begin
20
- user = ::Twitter.user(params["handle"])
19
+ user = ::Twitter.user(tracker_item.params["handle"])
21
20
  rescue
22
21
  end
23
22
 
@@ -25,12 +24,9 @@ module Trackablaze
25
24
  add_error(metrics, "Invalid handle supplied", "handle")
26
25
  return metrics
27
26
  end
28
-
29
- metrics_keys ||= Twitter.default_metrics
30
27
 
31
- metrics_keys.each do |metrics_key|
32
- value = user[metrics_key]
33
- metrics[metrics_key] = value
28
+ tracker_item.metrics.each do |metric|
29
+ metrics[metric] = user[metric]
34
30
  end
35
31
 
36
32
  metrics
data/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Trackablaze
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: trackablaze
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.1.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - Amol Kelkar
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-12 00:00:00 -07:00
13
+ date: 2011-06-15 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -113,6 +113,7 @@ extra_rdoc_files: []
113
113
  files:
114
114
  - lib/trackablaze/command.rb
115
115
  - lib/trackablaze/tracker.rb
116
+ - lib/trackablaze/tracker_item.rb
116
117
  - lib/trackablaze/utils.rb
117
118
  - lib/trackablaze.rb
118
119
  - trackers/facebook_page.rb