happyfunjuice 0.0.1.beta.2 → 0.1.0.beta.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.
@@ -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
|