Module: Activr

Includes:
Configuration
Defined in:
lib/activr.rb,
lib/activr/async.rb,
lib/activr/utils.rb,
lib/activr/entity.rb,
lib/activr/railtie.rb,
lib/activr/storage.rb,
lib/activr/version.rb,
lib/activr/activity.rb,
lib/activr/registry.rb,
lib/activr/timeline.rb,
lib/activr/rails_ctx.rb,
lib/activr/dispatcher.rb,
lib/activr/configuration.rb,
lib/generators/activr/activity_generator.rb,
lib/generators/activr/timeline_generator.rb

Overview

Manage activity feeds

Defined Under Namespace

Modules: Async, Configuration, Generators Classes: Activity, Dispatcher, Entity, RailsCtx, Railtie, Registry, Storage, Timeline, Utils

Constant Summary collapse

VERSION =

Activr version

'1.0.1'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerLogger

Returns A logger instance.

Returns:

  • (Logger)

    A logger instance



66
67
68
69
70
71
72
73
74
# File 'lib/activr.rb', line 66

def logger
  @logger ||= begin
    result = Logger.new(STDOUT)
    result.formatter = proc do |severity, datetime, progname, msg|
      "[#{datetime.strftime('%Y-%m-%d %H:%M:%S')}] #{severity} [activr] #{msg}\n"
    end
    result
  end
end

Class Method Details

.activities(limit, options = { }) ⇒ Array<Activity>

Note:

If you use others selectors then ‘limit’ argument and ‘skip’ option then you have to setup corresponding indexes in database.

Find latest activities

Parameters:

  • limit (Integer)

    Max number of activities to find

  • options (Hash) (defaults to: { })

    Options hash

Options Hash (options):

  • :skip (Integer)

    Number of activities to skip (default: 0)

  • :before (Time)

    Find activities generated before that datetime (excluding)

  • :after (Time)

    Find activities generated after that datetime (excluding)

  • :entities (Hash{Sym=>String})

    Filter by entities values (empty means ‘all values’)

  • :only (Array<Class>)

    Find only these activities

  • :except (Array<Class>)

    Skip these activities

Returns:

  • (Array<Activity>)

    An array of activities



167
168
169
170
171
# File 'lib/activr.rb', line 167

def activities(limit, options = { })
  options = self.normalize_query_options(options)

  Activr.storage.find_activities(limit, options)
end

.activities_count(options = { }) ⇒ Integer

Note:

If you use one of options selectors then you have to setup corresponding indexes in database.

Count number of activities

Parameters:

  • options (Hash) (defaults to: { })

    Options hash

Options Hash (options):

  • :before (Time)

    Find activities generated before that datetime (excluding)

  • :after (Time)

    Find activities generated after that datetime (excluding)

  • :entities (Hash{Sym=>String})

    Filter by entities values (empty means ‘all values’)

  • :only (Array<Class>)

    Find only these activities

  • :except (Array<Class>)

    Skip these activities

Returns:

  • (Integer)

    Number of activities



174
175
176
177
178
# File 'lib/activr.rb', line 174

def activities_count(options = { })
  options = self.normalize_query_options(options)

  Activr.storage.count_activities(options)
end

.activities_pathString

Path to activities classes directory

Returns:

  • (String)

    Directory path



79
80
81
# File 'lib/activr.rb', line 79

def activities_path
  File.join(Activr.config.app_path, "activities")
end

.configure {|Configuration| ... } ⇒ Object

Configuration sugar

Examples:

Activr.configure do |config|
  config.app_path      = File.join(File.dirname(__FILE__), "app")
  config.mongodb[:uri] = "mongodb://#{rspec_mongo_host}:#{rspec_mongo_port}/#{rspec_mongo_db}"
end

Yields:



56
57
58
# File 'lib/activr.rb', line 56

def configure
  yield self.config
end

.dispatch!(activity, options = { }) ⇒ Activity

Dispatch an activity

Parameters:

  • activity (Activity)

    Activity instance to dispatch

  • options (Hash) (defaults to: { })

    Options hash

Options Hash (options):

  • :skip_dup_period (Integer)

    Activity is skipped if a duplicate one is found in that period of time, in seconds (default: ‘Activr.config.skip_dup_period`)

Returns:



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/activr.rb', line 117

def dispatch!(activity, options = { })
  # default options
  options = {
    :skip_dup_period => Activr.config.skip_dup_period,
  }.merge(options)

  # check for duplicates
  skip_it = options[:skip_dup_period] && (options[:skip_dup_period] > 0) &&
            (Activr.storage.count_duplicate_activities(activity, Time.now - options[:skip_dup_period]) > 0)

  if !skip_it
    if !activity.stored?
      # store activity in main collection
      activity.store!
    end

    # check if storing failed
    if activity.stored?
      Activr::Async.hook(:route_activity, activity)
    end
  end

  activity
end

.dispatcherDispatcher

Dispatcher singleton

Returns:



107
108
109
# File 'lib/activr.rb', line 107

def dispatcher
  @dispatcher ||= Activr::Dispatcher.new
end

.normalize_query_options(options) ⇒ Hash

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Normalize query options

Parameters:

  • options (Hash)

    Options to normalize

Returns:

  • (Hash)

    Normalized options



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/activr.rb', line 148

def normalize_query_options(options)
  result = { }

  options.each do |key, value|
    key = key.to_sym

    if Activr.registry.entities_names.include?(key)
      # extract entities from options
      result[:entities] ||= { }
      result[:entities][key] = value
    else
      result[key] = value
    end
  end

  result
end

.registryRegistry

Registry singleton

Returns:



93
94
95
# File 'lib/activr.rb', line 93

def registry
  @registy ||= Activr::Registry.new
end

.sentence(text, bindings = { }) ⇒ String

Render a sentence

Parameters:

  • text (String)

    Sentence to render

  • bindings (Hash) (defaults to: { })

    Sentence bindings

Returns:

  • (String)

    Rendered sentence



194
195
196
197
198
199
200
201
202
# File 'lib/activr.rb', line 194

def sentence(text, bindings = { })
  # render
  result = Activr::Utils.render_mustache(text, bindings)

  # strip whitespaces
  result.strip!

  result
end

.setupObject

Setup registry



61
62
63
# File 'lib/activr.rb', line 61

def setup
  self.registry.setup
end

.storageStorage

Storage singleton

Returns:



100
101
102
# File 'lib/activr.rb', line 100

def storage
  @storage ||= Activr::Storage.new
end

.timeline(timeline_class, recipient) ⇒ Timeline

Get a timeline instance

Parameters:

  • timeline_class (Class)

    Timeline class

  • recipient (String|Object)

    Recipient instance or recipient id

Returns:



185
186
187
# File 'lib/activr.rb', line 185

def timeline(timeline_class, recipient)
  timeline_class.new(recipient)
end

.timelines_pathString

Path to timelines classes directory

Returns:

  • (String)

    Directory path



86
87
88
# File 'lib/activr.rb', line 86

def timelines_path
  File.join(Activr.config.app_path, "timelines")
end