fluidfeatures-rails 0.2.0 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/fluidfeatures/rails/version.rb +1 -1
- data/lib/fluidfeatures/rails.rb +47 -13
- metadata +2 -2
data/lib/fluidfeatures/rails.rb
CHANGED
@@ -118,25 +118,58 @@ module FluidFeatures
|
|
118
118
|
# This will depend on the user_id and how many users each
|
119
119
|
# feature is enabled for.
|
120
120
|
#
|
121
|
-
def self.get_user_features(
|
122
|
-
|
123
|
-
|
121
|
+
def self.get_user_features(user)
|
122
|
+
|
123
|
+
if not user
|
124
|
+
raise "user object should be a Hash"
|
125
|
+
end
|
126
|
+
if not user[:id]
|
127
|
+
raise "user does not contain :id field"
|
128
|
+
end
|
129
|
+
|
130
|
+
# extract just attribute ids into simple hash
|
131
|
+
attribute_ids = {
|
132
|
+
:anonymous => !!user[:anonymous]
|
133
|
+
}
|
134
|
+
[:unique, :cohorts].each do |attr_type|
|
135
|
+
if user.has_key? attr_type
|
136
|
+
user[attr_type].each do |attr_key, attr|
|
137
|
+
if attr.is_a? Hash
|
138
|
+
if attr.has_key? :id
|
139
|
+
attribute_ids[attr_key] = attr[:id]
|
140
|
+
end
|
141
|
+
else
|
142
|
+
attribute_ids[attr_key] = attr
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
124
146
|
end
|
147
|
+
|
148
|
+
# normalize attributes ids as strings
|
149
|
+
attribute_ids.each do |attr_key, attr_id|
|
150
|
+
if attr_id.is_a? FalseClass or attr_id.is_a? TrueClass
|
151
|
+
attribute_ids[attr_key] = attr_id.to_s.downcase
|
152
|
+
elsif not attr_id.is_a? String
|
153
|
+
attribute_ids[attr_key] = attr_id.to_s
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
125
157
|
features = {}
|
126
158
|
fetch_start_time = Time.now
|
127
159
|
begin
|
128
|
-
uri = URI(@@baseuri
|
129
|
-
|
160
|
+
uri = URI("#{@@baseuri}/app/#{@@app_id}/user/#{user[:id]}/features")
|
161
|
+
uri.query = URI.encode_www_form( attribute_ids )
|
162
|
+
request = Net::HTTP::Get.new "#{uri.path}?#{uri.query}"
|
130
163
|
request["Accept"] = "application/json"
|
131
164
|
request['AUTHORIZATION'] = @@secret
|
132
165
|
response = @@http.request request
|
133
166
|
if response.is_a?(Net::HTTPSuccess)
|
134
167
|
features = JSON.parse(response.body)
|
135
168
|
else
|
136
|
-
::Rails.logger.error "[
|
169
|
+
::Rails.logger.error "[#{response.code}] Failed to get user features : #{uri} : #{response.body}"
|
137
170
|
end
|
138
171
|
rescue
|
139
|
-
::Rails.logger.error "Request to get user features failed : "
|
172
|
+
::Rails.logger.error "Request to get user features failed : #{uri}"
|
140
173
|
raise
|
141
174
|
end
|
142
175
|
@@last_fetch_duration = Time.now - fetch_start_time
|
@@ -220,6 +253,7 @@ module ActionController
|
|
220
253
|
end
|
221
254
|
else
|
222
255
|
# We're an anonymous user
|
256
|
+
user[:anonymous] = true
|
223
257
|
|
224
258
|
# if we were not given a user[:id] for this anonymous user, then get
|
225
259
|
# it from an existing cookie or create a new one.
|
@@ -313,7 +347,8 @@ module ActionController
|
|
313
347
|
# Returns the features enabled for this request's user.
|
314
348
|
#
|
315
349
|
def fluidfeatures_retrieve_user_features
|
316
|
-
|
350
|
+
user = fluidfeatures_user
|
351
|
+
@ff_features = FluidFeatures::Rails.get_user_features(user)
|
317
352
|
end
|
318
353
|
|
319
354
|
#
|
@@ -341,11 +376,10 @@ module ActionController
|
|
341
376
|
},
|
342
377
|
:url => url
|
343
378
|
}
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
(payload[:user] ||= {})[:attributes] = fluidfeatures_user[:attributes]
|
379
|
+
[:name, :anonymous, :unique, :cohorts].each do |key|
|
380
|
+
if fluidfeatures_user[key]
|
381
|
+
(payload[:user] ||= {})[key] = fluidfeatures_user[key]
|
382
|
+
end
|
349
383
|
end
|
350
384
|
FluidFeatures::Rails.log_request(fluidfeatures_user[:id], payload)
|
351
385
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluidfeatures-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: persistent_http
|