happyfunjuice 0.0.1.beta.2 → 0.1.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
@@ -1,15 +1,23 @@
|
|
1
1
|
module Happyfunjuice
|
2
|
-
mattr_accessor :activity_list
|
2
|
+
mattr_accessor :activity_list, :activity_meta
|
3
3
|
@@activity_list = {}
|
4
|
+
@@activity_meta = {}
|
4
5
|
|
5
6
|
DEFAULT_PER_PAGE = 50
|
6
|
-
MAX_PER_PAGE = 1000
|
7
7
|
|
8
8
|
class << self
|
9
9
|
def push_activity( key, scope, opts={}, &block )
|
10
10
|
Happyfunjuice.activity_list[key.to_sym] = Happyfunjuice::Activity.new( key, scope, opts, &block )
|
11
11
|
end
|
12
12
|
|
13
|
+
def set_field_meta( key, field, opts={} )
|
14
|
+
@@activity_meta[key] ||= {}
|
15
|
+
@@activity_meta[key][field] ||= {}
|
16
|
+
opts.each do |k,v|
|
17
|
+
@@activity_meta[key][field][k] = v
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
13
21
|
# Query the list of activities. Data and metadata combined into one method since the
|
14
22
|
# queries are otherwise identical.
|
15
23
|
#
|
@@ -26,21 +34,26 @@ module Happyfunjuice
|
|
26
34
|
def activities( opts = {} )
|
27
35
|
# Default options
|
28
36
|
opts.reverse_merge!({
|
29
|
-
page:
|
37
|
+
page:nil,
|
30
38
|
per_page: DEFAULT_PER_PAGE,
|
39
|
+
since:nil, # The beginning of time
|
31
40
|
type: nil,
|
32
41
|
include_metadata: true,
|
33
42
|
query_activities: true
|
34
43
|
})
|
35
44
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
if opts[:page].nil?
|
46
|
+
_per_page = nil
|
47
|
+
_page = nil
|
48
|
+
else
|
49
|
+
_per_page = [(opts[:per_page] || DEFAULT_PER_PAGE).to_i,1].max
|
50
|
+
_page = [opts[:page].to_i || 1,1].max
|
51
|
+
end
|
41
52
|
|
42
53
|
ret = {}
|
43
54
|
|
55
|
+
_since = Time.zone.at(opts[:since].try(:to_i)) rescue nil
|
56
|
+
|
44
57
|
# Choose specified activity or else all activities
|
45
58
|
types = [(opts[:type].to_sym rescue nil)].reject(&:nil?)
|
46
59
|
types = Happyfunjuice.activity_list.keys if types.empty?
|
@@ -56,7 +69,7 @@ module Happyfunjuice
|
|
56
69
|
activity = Happyfunjuice.activity_list[k]
|
57
70
|
|
58
71
|
_ret = {}
|
59
|
-
_ret.merge!({data: activity.query(_page,_per_page)}) if opts[:query_activities]
|
72
|
+
_ret.merge!({data: activity.query(_page,_per_page,_since)}) if opts[:query_activities]
|
60
73
|
_ret.merge!({metadata: activity.metadata }) if opts[:include_metadata]
|
61
74
|
|
62
75
|
ret[k] = _ret
|
@@ -82,20 +95,30 @@ module Happyfunjuice
|
|
82
95
|
block.yield(@scope.new).keys
|
83
96
|
end
|
84
97
|
|
85
|
-
# Execute the query.
|
86
|
-
|
87
|
-
|
88
|
-
|
98
|
+
# Execute the query.
|
99
|
+
def query( page, limit, _since )
|
100
|
+
_scope = scope.reorder("id desc")
|
101
|
+
_scope = _scope.reorder("#{@options[:time_column]} desc") unless @options[:time_column].nil?
|
102
|
+
_scope = _scope.where("#{@options[:time_column] || 'created_at'} > ?",_since) unless _since.nil?
|
103
|
+
_scope = _scope.limit(limit).offset((page-1)*limit) unless page.nil? or limit.nil?
|
104
|
+
|
105
|
+
_scope.collect do |activity|
|
89
106
|
block.yield activity
|
90
107
|
end
|
91
108
|
end
|
92
109
|
|
93
110
|
# Metadata for this activity
|
94
111
|
def metadata
|
112
|
+
activity_meta = Happyfunjuice.activity_meta[self.key.to_sym] || {}
|
113
|
+
field_meta = {}
|
114
|
+
fields.each do |field|
|
115
|
+
field_meta[field] = activity_meta[field] || {}
|
116
|
+
end
|
117
|
+
|
95
118
|
{
|
96
|
-
key: @key,
|
119
|
+
#key: @key, # There shouldn't be any need to specify this since the value of this key is this hash
|
97
120
|
name: @options[:name] || @key.to_s.humanize,
|
98
|
-
fields:
|
121
|
+
fields: field_meta
|
99
122
|
}
|
100
123
|
end
|
101
124
|
end
|
data/lib/happyfunjuice/config.rb
CHANGED
@@ -3,6 +3,9 @@ module Happyfunjuice
|
|
3
3
|
class << self
|
4
4
|
|
5
5
|
def setup( &block )
|
6
|
+
|
7
|
+
# Add option for this later. Filter now.
|
8
|
+
Rails.configuration.filter_parameters += [:api_key]
|
6
9
|
|
7
10
|
# This MUST happen after initialization otherwise configuration variables
|
8
11
|
# are not known to the models at the time activity reports are configured:
|
@@ -37,6 +40,10 @@ module Happyfunjuice
|
|
37
40
|
Happyfunjuice.push_activity( key, scope, opts, &block )
|
38
41
|
end
|
39
42
|
|
43
|
+
def meta( key, field, opts={} )
|
44
|
+
Happyfunjuice.set_field_meta( key, field, opts )
|
45
|
+
end
|
46
|
+
|
40
47
|
def mailer= value
|
41
48
|
unless %w( mailchimp sendgrid ).include? value.downcase
|
42
49
|
raise ArgumentError.new('Mailer host must be either sendgrid or mailchimp. Choose one and reconfigure it later if necessary.')
|
data/lib/happyfunjuice/routes.rb
CHANGED
@@ -19,8 +19,8 @@ module ActionDispatch::Routing
|
|
19
19
|
|
20
20
|
def activities
|
21
21
|
@mapper.namespace :happyfunjuice do
|
22
|
-
@mapper.
|
23
|
-
@mapper.
|
22
|
+
@mapper.match ':api_version/activities' => 'happyfunjuice#activities', :via=>:post
|
23
|
+
@mapper.match ':api_version/metadata' => 'happyfunjuice#metadata', :via=>:post
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: happyfunjuice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.1.0.beta.1
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-05-
|
13
|
+
date: 2013-05-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: haml
|