atreides 2.0.0 → 2.0.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.
- data/app/assets/javascripts/atreides/admin.facebook.js +137 -0
- data/app/assets/javascripts/atreides/admin.js +1 -0
- data/app/assets/javascripts/atreides/admin_base.js.erb +26 -0
- data/app/controllers/admin/atreides/facebook_controller.rb +38 -0
- data/app/controllers/atreides/admin_home_controller.rb +10 -6
- data/app/models/atreides/facebook_user.rb +103 -0
- data/app/models/atreides/preferences.rb +31 -0
- data/app/views/admin/atreides/facebook/index.html.haml +29 -0
- data/app/views/layouts/admin.html.haml +3 -0
- data/config/locales/en.yml +1 -0
- data/config/routes.rb +4 -0
- data/lib/atreides/version.rb +1 -1
- data/lib/generators/atreides/atreides_generator.rb +1 -1
- data/lib/generators/templates/create_preferences.rb +14 -0
- data/lib/generators/templates/settings.yml +2 -30
- metadata +110 -89
@@ -0,0 +1,137 @@
|
|
1
|
+
$(function(){
|
2
|
+
if ( $(".authenticate-facebook").length ) {
|
3
|
+
|
4
|
+
var $permissions = ["read_insights","manage_pages"]
|
5
|
+
|
6
|
+
function status(msg,angry){
|
7
|
+
$("#status").css({
|
8
|
+
"padding": "10px 15px",
|
9
|
+
"width": "69%"
|
10
|
+
});
|
11
|
+
|
12
|
+
if ( angry ){
|
13
|
+
$("#status").css({
|
14
|
+
"background":"#ffaaaa",
|
15
|
+
border: "1px solid #ff6666"
|
16
|
+
})
|
17
|
+
} else {
|
18
|
+
$("#status").css({
|
19
|
+
"background":"#aaffaa",
|
20
|
+
border: "1px solid #44dd44"
|
21
|
+
})
|
22
|
+
}
|
23
|
+
$("#status").text(msg)
|
24
|
+
}
|
25
|
+
|
26
|
+
$(".deauthenticate-facebook").on("click", function(e){
|
27
|
+
e.preventDefault();
|
28
|
+
FB.logout(function(response){
|
29
|
+
$(".access-container").hide();
|
30
|
+
$(".login-container").show();
|
31
|
+
})
|
32
|
+
})
|
33
|
+
|
34
|
+
|
35
|
+
function checkPermissions(neededPerms, f, params, done){
|
36
|
+
console.log("checking permissions")
|
37
|
+
FB.api('/me/permissions', function(reponde) {
|
38
|
+
var permsArray = reponde.data[0];
|
39
|
+
var reUpPerms = new Array();
|
40
|
+
console.log(permsArray)
|
41
|
+
for(i in neededPerms){
|
42
|
+
if ( permsArray[neededPerms[i]] == null && typeof(neededPerms[i]) == "string") {
|
43
|
+
reUpPerms.push(neededPerms[i]);
|
44
|
+
}
|
45
|
+
}
|
46
|
+
if (reUpPerms.length > 0) {
|
47
|
+
FB.login(function(response){
|
48
|
+
if (done){
|
49
|
+
status("Please accept all permissions to continue.", true)
|
50
|
+
return false;
|
51
|
+
}
|
52
|
+
// Recheck, just in case the user didn't accept something.
|
53
|
+
checkPermissions(neededPerms, f, params, true);
|
54
|
+
}, {scope: neededPerms.join(",")});
|
55
|
+
} else {
|
56
|
+
f.apply(this, params)
|
57
|
+
}
|
58
|
+
});
|
59
|
+
}
|
60
|
+
|
61
|
+
function dealWithResponse(response, checked){
|
62
|
+
|
63
|
+
console.log(response)
|
64
|
+
|
65
|
+
if ( response.status == "connected" ) {
|
66
|
+
status("Connected to facebook")
|
67
|
+
|
68
|
+
// Check for permissions
|
69
|
+
if (!checked){
|
70
|
+
checkPermissions($permissions, dealWithResponse, [response, true])
|
71
|
+
} else {
|
72
|
+
var authResponse = response.authResponse,
|
73
|
+
accessToken = authResponse.accessToken,
|
74
|
+
userId = authResponse.userID,
|
75
|
+
expiry = authResponse.expiresIn;
|
76
|
+
|
77
|
+
// First, get extended token.
|
78
|
+
$.post("/admin/facebook",
|
79
|
+
{
|
80
|
+
access_token: accessToken,
|
81
|
+
user_id: userId,
|
82
|
+
authenticity_token: $.token,
|
83
|
+
expiry: expiry
|
84
|
+
}
|
85
|
+
).success(function(){
|
86
|
+
status("Token successfully stored.")
|
87
|
+
setTimeout(function(){window.location.href = "/admin/"}, 500)
|
88
|
+
}).error(function(){
|
89
|
+
status("There was a problem updating the page token. Please ensure that you are an admin on Facebook page you are trying to collect analytics for.", true)
|
90
|
+
})
|
91
|
+
}
|
92
|
+
} else if (response.status == "not_authorized") {
|
93
|
+
status("Please accept the terms in the facebook dialog", true)
|
94
|
+
} else {
|
95
|
+
status("There was an error authorizing: " + response.status, true)
|
96
|
+
}
|
97
|
+
}
|
98
|
+
|
99
|
+
|
100
|
+
$("a.authenticate-facebook").on("click", function(e){
|
101
|
+
e.preventDefault();
|
102
|
+
FB.getLoginStatus(function(response){
|
103
|
+
if ( response.status == "connected" ){
|
104
|
+
dealWithResponse(response)
|
105
|
+
} else {
|
106
|
+
$("p.login-container").show();
|
107
|
+
}
|
108
|
+
})
|
109
|
+
})
|
110
|
+
|
111
|
+
$("a.fb-login").on("click", function(e){
|
112
|
+
e.preventDefault();
|
113
|
+
FB.login(function(response){
|
114
|
+
if (response.status == "connected"){
|
115
|
+
$(".access-container").show();
|
116
|
+
$(".login-container").hide();
|
117
|
+
} else {
|
118
|
+
// nothing
|
119
|
+
}
|
120
|
+
})
|
121
|
+
})
|
122
|
+
|
123
|
+
|
124
|
+
setTimeout(function(){
|
125
|
+
// Choose which link to show.
|
126
|
+
FB.getLoginStatus(function(response){
|
127
|
+
if ( response.status != "unknown" ) {
|
128
|
+
$(".access-container").show();
|
129
|
+
} else if ( response.status == "unknown" ) {
|
130
|
+
$(".login-container").show();
|
131
|
+
}
|
132
|
+
})
|
133
|
+
}, 500)
|
134
|
+
|
135
|
+
|
136
|
+
}
|
137
|
+
});
|
@@ -11,6 +11,32 @@
|
|
11
11
|
*
|
12
12
|
*/
|
13
13
|
|
14
|
+
$.token = function(){
|
15
|
+
return $("meta[name='csrf-token']").attr("content");
|
16
|
+
}
|
17
|
+
|
18
|
+
$.removeDiacriticalMarks = function(string) {
|
19
|
+
var dictionary = {"a":["\xaa","\xe0","\xe1","\xe2","\xe3","\xe4","\xe5","\u0101","\u0103","\u0105","\u01ce","\u0201","\u0203","\u0227","\u1d43","\u1e01","\u1e9a","\u1ea1","\u1ea3","\u2090","\uff41"],"A":["\xc0","\xc1","\xc2","\xc3","\xc4","\xc5","\u0100","\u0102","\u0104","\u01cd","\u0200","\u0202","\u0226","\u1d2c","\u1e00","\u1ea0","\u1ea2","\uff21"],"b":["\u1d47","\u1e03","\u1e05","\u1e07","\uff42"],"B":["\u1d2e","\u1e02","\u1e04","\u1e06","\uff22"],"c":["\xe7","\u0107","\u0109","\u010b","\u010d","\u1d9c","\u217d","\uff43"],"C":["\xc7","\u0106","\u0108","\u010a","\u010c","\u216d","\uff23"],"d":["\u010f","\u1d48","\u1e0b","\u1e0d","\u1e0f","\u1e11","\u1e13","\u217e","\uff44"],"D":["\u010e","\u1d30","\u1e0a","\u1e0c","\u1e0e","\u1e10","\u1e12","\u216e","\uff24"],"e":["\xe8","\xe9","\xea","\xeb","\u0113","\u0115","\u0117","\u0119","\u011b","\u0205","\u0207","\u0229","\u1d49","\u1e19","\u1e1b","\u1eb9","\u1ebb","\u1ebd","\u2091","\uff45"],"E":["\xc8","\xc9","\xca","\xcb","\u0112","\u0114","\u0116","\u0118","\u011a","\u0204","\u0206","\u0228","\u1d31","\u1e18","\u1e1a","\u1eb8","\u1eba","\u1ebc","\uff25"],"f":["\u1da0","\u1e1f","\uff46"],"F":["\u1e1e","\u2109","\uff26"],"g":["\u011d","\u011f","\u0121","\u0123","\u01e7","\u01f5","\u1d4d","\u1e21","\uff47"],"G":["\u011c","\u011e","\u0120","\u0122","\u01e6","\u01f4","\u1d33","\u1e20","\uff27"],"h":["\u0125","\u021f","\u02b0","\u1e23","\u1e25","\u1e27","\u1e29","\u1e2b","\u1e96","\u210e","\uff48"],"H":["\u0124","\u021e","\u1d34","\u1e22","\u1e24","\u1e26","\u1e28","\u1e2a","\uff28"],"i":["\xec","\xed","\xee","\xef","\u0129","\u012b","\u012d","\u012f","\u01d0","\u0209","\u020b","\u1d62","\u1e2d","\u1ec9","\u1ecb","\u2071","\uff49"],"I":["\xcc","\xcd","\xce","\xcf","\u0128","\u012a","\u012c","\u012e","\u0130","\u01cf","\u0208","\u020a","\u1d35","\u1e2c","\u1ec8","\u1eca","\uff29"],"j":["\u0135","\u01f0","\u02b2","\uff4a"],"J":["\u0134","\u1d36","\uff2a"],"k":["\u0137","\u01e9","\u1d4f","\u1e31","\u1e33","\u1e35","\uff4b"],"K":["\u0136","\u01e8","\u1d37","\u1e30","\u1e32","\u1e34","\u212a","\uff2b"],"l":["\u013a","\u013c","\u013e","\u02e1","\u0140","\u1e37","\u1e3b","\u1e3d","\u217c","\uff4c"],"L":["\u0139","\u013b","\u013d","\u1d38","\u1e36","\u1e3a","\u1e3c","\u216c","\uff2c"],"m":["\u1d50","\u1e3f","\u1e41","\u1e43","\u217f","\uff4d"],"M":["\u1d39","\u1e3e","\u1e40","\u1e42","\u216f","\uff2d"],"n":["\xf1","\u0144","\u0146","\u0148","\u0149","\u1e45","\u1e47","\u1e49","\u1e4b","\uff4e"],"N":["\xd1","\u0143","\u0145","\u0147","\u1d3a","\u1e44","\u1e46","\u1e48","\u1e4a","\uff2e"],"o":["\xba","\xf2","\xf3","\xf4","\xf5","\xf6","\u014d","\u014f","\u0151","\u01d2","\u01eb","\u020d","\u020f","\u022f","\u1d52","\u1ecd","\u1ecf","\uff4f"],"O":["\xd2","\xd3","\xd4","\xd6","\xd5","\u014c","\u014e","\u0150","\u01d1","\u01ea","\u020c","\u020e","\u022e","\u1d3c","\u1ecc","\u1ece","\uff2f"],"p":["\u1d56","\u1e55","\u1e57","\uff50"],"P":["\u1d3e","\u1e54","\u1e56","\uff30"],"q":["\uff51"],"Q":["\uff31"],"r":["\u0155","\u0157","\u0159","\u0211","\u0213","\u02b3","\u1d63","\u1e59","\u1e5a","\u1e5b","\u1e5f","\uff52"],"R":["\u0154","\u0156","\u0158","\u0210","\u0212","\u1d3f","\u1e58","\u1e5e","\uff32"],"s":["\u015b","\u015d","\u015f","\u0161","\u0219","\u1e61","\u1e63","\uff53"],"S":["\u015a","\u015c","\u015e","\u0160","\u0218","\u1e60","\u1e62","\uff33"],"t":["\u0163","\u0165","\u021b","\u1d57","\u1e6b","\u1e6d","\u1e6f","\u1e71","\u1e97","\uff54"],"T":["\u0162","\u0164","\u021a","\u1d40","\u1e6a","\u1e6c","\u1e6e","\u1e70","\uff34"],"u":["\xf9","\xfa","\xfb","\xfc","\u0169","\u016b","\u016d","\u016f","\u0171","\u01b0","\u01d4","\u0215","\u0217","\u1d58","\u1d64","\u1e73","\u1e75","\u1e77","\u1ee5","\u1ee7","\uff55"],"U":["\xd9","\xda","\xdc","\xdb","\u0168","\u016a","\u016c","\u016e","\u0170","\u0172","\u01af","\u01d3","\u0214","\u0216","\u1d41","\u1e72","\u1e74","\u1e76","\u1ee4","\u1ee6","\uff35"],"v":["\u1e7d","\u1e7f","\u1d5b","\u1d65","\uff56"],"V":["\u1e7c","\u1e7e","\u2c7d","\uff36"],"w":["\u0175","\u02b7","\u1e81","\u1e83","\u1e85","\u1e87","\u1e89","\u1e98","\uff57"],"W":["\u0174","\u1d42","\u1e80","\u1e82","\u1e84","\u1e86","\u1e88","\uff37"],"x":["\u02e3","\u1e8b","\u1e8d","\u2093","\uff58"],"X":["\u1e8a","\u1e8c","\uff38"],"y":["\xfd","\xff","\u0177","\u0233","\u02b8","\u1e8f","\u1e99","\u1ef3","\u1ef5","\u1ef7","\u1ef9","\uff59"],"Y":["\xdd","\u0176","\u0178","\u0232","\u1e8e","\u1ef2","\u1ef4","\u1ef6","\u1ef8","\uff39"],"z":["\u017a","\u017c","\u017e","\u1e91","\u1e93","\u1e95","\uff5a"],"Z":["\u0179","\u017b","\u017d","\u1e90","\u1e92","\u1e94","\uff3a"]},
|
20
|
+
map = {}, chars, char, pattern = "", i, l;
|
21
|
+
for (char in dictionary) {
|
22
|
+
chars = dictionary[char];
|
23
|
+
for (i=0,l=chars.length; i<l; i++) {
|
24
|
+
map[chars[i]] = char;
|
25
|
+
pattern += chars[i];
|
26
|
+
}
|
27
|
+
}
|
28
|
+
pattern = new RegExp( "[" + pattern + "]", 'gi');
|
29
|
+
// return function(string) {
|
30
|
+
// return string ? string.replace(pattern, function(char){
|
31
|
+
// return char in map ? map[char] : char;
|
32
|
+
// }) : string;
|
33
|
+
// };
|
34
|
+
|
35
|
+
return string ? string.replace(pattern, function(char){
|
36
|
+
return char in map ? map[char] : char;
|
37
|
+
}) : string;
|
38
|
+
}
|
39
|
+
|
14
40
|
jQuery.fn.bindAll = function(options) {
|
15
41
|
var $this = this;
|
16
42
|
jQuery.each(options, function(key, val){
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Admin::Atreides::FacebookController < ApplicationController
|
2
|
+
|
3
|
+
layout 'admin'
|
4
|
+
|
5
|
+
rescue_from CanCan::AccessDenied do |exception|
|
6
|
+
Rails.logger.info "AdminController: CanCan::AccessDenied #{exception.inspect}, admin?: #{current_user && !current_user.admin?}; #{current_user.inspect}"
|
7
|
+
if current_user && !current_user.admin?
|
8
|
+
@message = exception.message
|
9
|
+
render 'admin/common/access_denied'
|
10
|
+
else
|
11
|
+
if atreides_setup?
|
12
|
+
redirect_to new_user_session_path, :notice => exception.message
|
13
|
+
else
|
14
|
+
redirect_to atreides_setup_path
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def index
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
Atreides::FacebookUser.find_or_create(params)
|
25
|
+
if Atreides::FacebookUser.authorize_page(Settings.facebook.page_id)
|
26
|
+
render :nothing => true, :status => :ok
|
27
|
+
else
|
28
|
+
render :nothing => true, :status => :error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def destroy
|
33
|
+
Atreides::FacebookUser.clear
|
34
|
+
redirect_to("/admin/facebook")
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
@@ -59,13 +59,13 @@ class Atreides::AdminHomeController < Atreides::ApplicationController
|
|
59
59
|
# TODO: parameterize the dates
|
60
60
|
if params[:since]
|
61
61
|
@since = Date.parse(params[:since]).beginning_of_day.to_date
|
62
|
-
@until = (@since + 31.days).beginning_of_day.to_date
|
63
|
-
@until = Date.today if @until > Date.today
|
64
62
|
else
|
65
63
|
@since = 1.month.ago.beginning_of_day.to_date
|
66
|
-
@until = Time.now.beginning_of_day.to_day
|
67
64
|
end
|
68
65
|
|
66
|
+
@until = Time.now.end_of_month.beginning_of_day.to_date
|
67
|
+
@until = Date.today - 1.day if @until > Date.today
|
68
|
+
|
69
69
|
puts "From #{@since.to_s} to #{@until.to_s}"
|
70
70
|
|
71
71
|
@report_name = report_name = params[:report].to_sym
|
@@ -82,7 +82,7 @@ class Atreides::AdminHomeController < Atreides::ApplicationController
|
|
82
82
|
@tweets = Atreides::Tweet.analytics(@since)
|
83
83
|
when :fb_page_views
|
84
84
|
# Facebook insights API
|
85
|
-
if Settings.facebook &&
|
85
|
+
if Settings.facebook && fb_page_token && Settings.facebook.page_id
|
86
86
|
# @fb_page_views = fb.get(Settings.facebook.page_id, :type => 'insights/page_views/day', :params => {:since => @since})
|
87
87
|
@fb_page_views = fetch_with_caching(5.minutes) do
|
88
88
|
fb.get(Settings.facebook.page_id, :type => 'insights/page_impressions/day', :params => {:since => @since})
|
@@ -90,7 +90,7 @@ class Atreides::AdminHomeController < Atreides::ApplicationController
|
|
90
90
|
end
|
91
91
|
when :fb_page_likes
|
92
92
|
# Facebook insights API
|
93
|
-
if Settings.facebook &&
|
93
|
+
if Settings.facebook && fb_page_token && Settings.facebook.page_id
|
94
94
|
# @fb_page_likes = fb.get(Settings.facebook.page_id, :type => 'insights/page_like_adds/day', :params => {:since => @since})
|
95
95
|
@fb_page_likes = fetch_with_caching(5.minutes) do
|
96
96
|
fb.get(Settings.facebook.page_id, :type => 'insights/page_fan_adds/day', :params => {:since => @since})
|
@@ -194,7 +194,11 @@ class Atreides::AdminHomeController < Atreides::ApplicationController
|
|
194
194
|
|
195
195
|
def fb
|
196
196
|
MiniFB.disable_logging
|
197
|
-
@fb ||= MiniFB::OAuthSession.new(
|
197
|
+
@fb ||= MiniFB::OAuthSession.new(fb_page_token)
|
198
|
+
end
|
199
|
+
|
200
|
+
def fb_page_token
|
201
|
+
@page_token ||= Atreides::Preference.get("facebook.page_token")
|
198
202
|
end
|
199
203
|
|
200
204
|
def fetch_with_caching(duration, &block)
|
@@ -0,0 +1,103 @@
|
|
1
|
+
class Atreides::FacebookUser
|
2
|
+
|
3
|
+
class << self
|
4
|
+
|
5
|
+
def clear
|
6
|
+
["user_id", "access_token", "expiration", "page_token"].each do |key|
|
7
|
+
Atreides::Preference.set("facebook.#{key}",nil)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def find_or_create(params)
|
12
|
+
Rails.logger.debug("[FacebookUser] find_or_create")
|
13
|
+
access_token = params[:access_token]
|
14
|
+
user_id = params[:user_id]
|
15
|
+
expiration = params[:expiry]
|
16
|
+
|
17
|
+
# if !has_valid_token?
|
18
|
+
# Current user is invalid or does not exist
|
19
|
+
Rails.logger.debug("[FacebookUser] determined invalid token")
|
20
|
+
# See if we can get an extended token
|
21
|
+
token_hash = extend_token(access_token)
|
22
|
+
if token_hash["status"] == "ok"
|
23
|
+
Rails.logger.debug("[FacebookUser] got extended token")
|
24
|
+
access_token = token_hash["access_token"]
|
25
|
+
expiration = token_hash["expires"]
|
26
|
+
else
|
27
|
+
Rails.logger.debug("[FacebookUser] did not get extended token")
|
28
|
+
end
|
29
|
+
|
30
|
+
expiration_date = Time.now + expiration.to_i
|
31
|
+
expiration_string = expiration_date.to_s(:db)
|
32
|
+
|
33
|
+
fb_pref("user_id", user_id)
|
34
|
+
fb_pref("access_token", access_token)
|
35
|
+
fb_pref("expiration", expiration_string)
|
36
|
+
Rails.logger.debug("[FacebookUser] set all vars")
|
37
|
+
# else
|
38
|
+
# Rails.logger.debug("[FacebookUser] token is valid")
|
39
|
+
# end
|
40
|
+
|
41
|
+
Rails.logger.debug("[FacebookUser] leaving")
|
42
|
+
true
|
43
|
+
end
|
44
|
+
|
45
|
+
# def has_valid_token?
|
46
|
+
# !(fb_pref("access_token").blank? || current_token_expired?)
|
47
|
+
# end
|
48
|
+
|
49
|
+
def current_token_expired?
|
50
|
+
return true if fb_pref("expiration").blank?
|
51
|
+
Time.parse(fb_pref("expiration")) < Time.now
|
52
|
+
end
|
53
|
+
|
54
|
+
# Returns @response
|
55
|
+
# @response is a hash with either keys => ["access_token", "expires", "status"] or keys => ["status"]
|
56
|
+
# You may check for errors with ["status"] == "error"
|
57
|
+
def extend_token(token)
|
58
|
+
begin
|
59
|
+
response = MiniFB.fb_exchange_token(Settings.facebook.app_id, Settings.facebook.app_secret, token)
|
60
|
+
response["status"] = "ok"
|
61
|
+
response
|
62
|
+
rescue => e
|
63
|
+
{"status" => "error"}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def authorize_page(page_id)
|
68
|
+
Rails.logger.debug("[FacebookUser] authorize_page")
|
69
|
+
response = fb.get(fb_pref("user_id"), :type => "accounts/#{page_id}")
|
70
|
+
found = false
|
71
|
+
response.data.each do |account|
|
72
|
+
Rails.logger.debug("[FacebookUser] checking account #{account.id}")
|
73
|
+
if account.id.to_s == page_id.to_s
|
74
|
+
Rails.logger.debug("[FacebookUser] found account #{account.id}")
|
75
|
+
fb_pref("page_token", account.access_token)
|
76
|
+
found = true
|
77
|
+
break
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
found
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def fb
|
87
|
+
MiniFB.disable_logging
|
88
|
+
MiniFB::OAuthSession.new(fb_pref("access_token"))
|
89
|
+
end
|
90
|
+
|
91
|
+
def fb_pref(key,value = nil)
|
92
|
+
if value.nil?
|
93
|
+
Atreides::Preference.get("facebook.#{key}")
|
94
|
+
else
|
95
|
+
Atreides::Preference.set("facebook.#{key}",value)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class Atreides::Preferences < Atreides::Base
|
2
|
+
|
3
|
+
#
|
4
|
+
# Constants
|
5
|
+
#
|
6
|
+
|
7
|
+
#
|
8
|
+
# Associatons
|
9
|
+
#
|
10
|
+
|
11
|
+
#
|
12
|
+
# Validations
|
13
|
+
#
|
14
|
+
|
15
|
+
#
|
16
|
+
# Callbacks
|
17
|
+
#
|
18
|
+
|
19
|
+
|
20
|
+
#
|
21
|
+
# Class Methods
|
22
|
+
#
|
23
|
+
class << self
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Instance Methods
|
28
|
+
#
|
29
|
+
|
30
|
+
include Atreides::Extendable
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
- content_for :js do
|
2
|
+
:javascript
|
3
|
+
(function(d, s, id) {
|
4
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
5
|
+
if (d.getElementById(id)) return;
|
6
|
+
js = d.createElement(s); js.id = id;
|
7
|
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=#{Settings.facebook.app_id}";
|
8
|
+
fjs.parentNode.insertBefore(js, fjs);
|
9
|
+
}(document, 'script', 'facebook-jssdk'));
|
10
|
+
|
11
|
+
- content_for :sidebar do
|
12
|
+
%ul
|
13
|
+
%li
|
14
|
+
%a.deauthenticate-facebook{:href => "javascript:;"}Clear current Facebook session
|
15
|
+
This will enable you to log in to a different account
|
16
|
+
%li{:style => "padding-top: 15px"}
|
17
|
+
%hr
|
18
|
+
%li
|
19
|
+
%a.clear-system{:href => "/admin/facebook", :"data-method" => "delete"} Un-associate account
|
20
|
+
Remove account currently associated with Pace Admin Analytics
|
21
|
+
|
22
|
+
%h2 Facebook Analytics Setup
|
23
|
+
%p#status
|
24
|
+
%p
|
25
|
+
If you are an admin for the Pace Facebook page and the analytics aren't working, follow the directions below:
|
26
|
+
%p.login-container{:style => "display: none;"}
|
27
|
+
%a.fb-login{:href => "javascript:;"} Click here to log into Facebook and then authenticate
|
28
|
+
%p.access-container{:style => "display: none;"}
|
29
|
+
%a.authenticate-facebook{:href => "javascript:;"} Click here to authenticate
|
@@ -11,6 +11,7 @@
|
|
11
11
|
= csrf_meta_tag
|
12
12
|
= yield :head
|
13
13
|
%body
|
14
|
+
#fb-root
|
14
15
|
.container
|
15
16
|
#header
|
16
17
|
#nav
|
@@ -21,6 +22,8 @@
|
|
21
22
|
%li.nav-users= link_to_unless_current ttt(:'.users'), admin_users_path
|
22
23
|
%li.nav-github= link_to_unless_current ttt(:'.github'), admin_github_path
|
23
24
|
%li.nav-logout= link_to_unless_current ttt(:'.logout'), destroy_user_session_path
|
25
|
+
- if current_user.admin?
|
26
|
+
%li.nav-facebook= link_to_unless_current ttt(:'.facebook'), admin_facebook_path
|
24
27
|
%li.nav-search
|
25
28
|
= semantic_form_for Atreides::Post.new, :url => admin_search_path, :html => {:method => :get, :class => "auto-hide-text", :id => "admin_search"} do |f|
|
26
29
|
= link_to_function image_tag("atreides/admin/search_icon.png"), ''
|
data/config/locales/en.yml
CHANGED
data/config/routes.rb
CHANGED
@@ -21,6 +21,10 @@ Rails.application.routes.draw do
|
|
21
21
|
post '/admin/setup/', :to => "atreides/admin_home#setup!", :as => :atreides_do_setup
|
22
22
|
|
23
23
|
namespace :admin do
|
24
|
+
get "facebook" => "atreides/facebook#index", :as => :facebook
|
25
|
+
post "facebook" => "atreides/facebook#update", :as => :update_facebook
|
26
|
+
delete "facebook" => "atreides/facebook#destroy", :as => :destroy_facebook
|
27
|
+
|
24
28
|
resources :posts, :controller => "atreides/posts" do
|
25
29
|
collection do
|
26
30
|
match ':state/:month/:year(.:format)', :to => "atreides/posts#index", :as => :filter, :constraints => { :state => "published", :year => /\d{4}/, :month => /\d{1,2}/ }
|
data/lib/atreides/version.rb
CHANGED
@@ -32,7 +32,7 @@ module Atreides
|
|
32
32
|
create_features create_products create_line_items create_links
|
33
33
|
create_votes create_tweets create_sessions create_sites
|
34
34
|
create_content_parts add_userid_to_resources devise_create_users
|
35
|
-
add_role_to_users).each do |f|
|
35
|
+
add_role_to_users, create_preferences).each do |f|
|
36
36
|
src = "#{f}.rb"
|
37
37
|
dst = "db/migrate/#{src}"
|
38
38
|
migration_template(src, dst) rescue puts $!
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreatePreferences < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :preferences, :force => true do |t|
|
4
|
+
t.string :key, :limit => 512
|
5
|
+
t.text :value, :default => ''
|
6
|
+
t.timestamps
|
7
|
+
end
|
8
|
+
add_index :preferences, :key
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
drop_table :preferences
|
13
|
+
end
|
14
|
+
end
|
@@ -28,36 +28,13 @@ common: &common
|
|
28
28
|
user_token:
|
29
29
|
user_secret:
|
30
30
|
facebook:
|
31
|
-
# GoTo:
|
32
|
-
# http://graph.facebook.com/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL
|
33
|
-
# -> Get code param and save as the token
|
34
|
-
# GoTo:
|
35
|
-
# https://graph.facebook.com/oauth/access_token?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&client_secret=CLIENT_SECRET&code=CODE
|
36
|
-
# -> Put resulting access_token into user_token val below
|
37
|
-
# -> Create a OAuth access_token object with: access_token = OAuth2::AccessToken.new(client, Settings.facebook.user_token)
|
38
|
-
# -> Get your page's access_token with: access_token.get("/me/accounts")
|
39
|
-
# -> Put the page's access_token into page_token below
|
40
|
-
secret_key:
|
41
|
-
api_key:
|
42
|
-
code:
|
43
|
-
user_token:
|
44
|
-
page_token:
|
45
31
|
page_id:
|
46
32
|
app_id:
|
33
|
+
app_secret:
|
47
34
|
twitter:
|
48
35
|
login:
|
49
36
|
consumer_key:
|
50
37
|
consumer_secret:
|
51
|
-
# oauth = Twitter::OAuth.new(Settings.twitter.consumer_key, Settings.twitter.consumer_secret, :sign_in => true)
|
52
|
-
# oauth.set_callback_url(app.root_url(:host => Settings.domain))
|
53
|
-
# rtoken = oauth.request_token.token
|
54
|
-
# rsecret = oauth.request_token.secret
|
55
|
-
# oauth.request_token.authorize_url
|
56
|
-
# -- Go to above URL and sign-in/approve the app and retrieve the verifier param from the return-to-app URL
|
57
|
-
# oauth_verifier = VERIFIER_KEY
|
58
|
-
# oauth.authorize_from_request(rtoken, rsecret, oauth_verifier)
|
59
|
-
# oauth.access_token.token -> use below
|
60
|
-
# oauth.access_token.secret -> use below
|
61
38
|
app_user_token:
|
62
39
|
app_user_secret:
|
63
40
|
search_for: atreides OR "The 88" OR "Le 88"
|
@@ -100,11 +77,6 @@ production:
|
|
100
77
|
profile_id:
|
101
78
|
domain: atreides.com
|
102
79
|
facebook:
|
103
|
-
|
104
|
-
secret_key:
|
105
|
-
api_key:
|
106
|
-
code:
|
107
|
-
user_token:
|
108
|
-
page_token:
|
80
|
+
app_secret:
|
109
81
|
page_id:
|
110
82
|
app_id:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atreides
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,26 +9,42 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aasm
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 3.0.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: acts-as-taggable-on
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.3.3
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.3.3
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: acts_as_commentable
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
33
49
|
none: false
|
34
50
|
requirements:
|
@@ -44,7 +60,7 @@ dependencies:
|
|
44
60
|
- !ruby/object:Gem::Version
|
45
61
|
version: '0'
|
46
62
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
63
|
+
name: analytical
|
48
64
|
requirement: !ruby/object:Gem::Requirement
|
49
65
|
none: false
|
50
66
|
requirements:
|
@@ -124,7 +140,7 @@ dependencies:
|
|
124
140
|
- !ruby/object:Gem::Version
|
125
141
|
version: '0'
|
126
142
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
143
|
+
name: chrisle-gattica
|
128
144
|
requirement: !ruby/object:Gem::Requirement
|
129
145
|
none: false
|
130
146
|
requirements:
|
@@ -140,7 +156,7 @@ dependencies:
|
|
140
156
|
- !ruby/object:Gem::Version
|
141
157
|
version: '0'
|
142
158
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
159
|
+
name: coffee-rails
|
144
160
|
requirement: !ruby/object:Gem::Requirement
|
145
161
|
none: false
|
146
162
|
requirements:
|
@@ -156,7 +172,7 @@ dependencies:
|
|
156
172
|
- !ruby/object:Gem::Version
|
157
173
|
version: '0'
|
158
174
|
- !ruby/object:Gem::Dependency
|
159
|
-
name:
|
175
|
+
name: coffee-script
|
160
176
|
requirement: !ruby/object:Gem::Requirement
|
161
177
|
none: false
|
162
178
|
requirements:
|
@@ -172,7 +188,7 @@ dependencies:
|
|
172
188
|
- !ruby/object:Gem::Version
|
173
189
|
version: '0'
|
174
190
|
- !ruby/object:Gem::Dependency
|
175
|
-
name:
|
191
|
+
name: delayed_job_active_record
|
176
192
|
requirement: !ruby/object:Gem::Requirement
|
177
193
|
none: false
|
178
194
|
requirements:
|
@@ -188,23 +204,23 @@ dependencies:
|
|
188
204
|
- !ruby/object:Gem::Version
|
189
205
|
version: '0'
|
190
206
|
- !ruby/object:Gem::Dependency
|
191
|
-
name:
|
207
|
+
name: devise
|
192
208
|
requirement: !ruby/object:Gem::Requirement
|
193
209
|
none: false
|
194
210
|
requirements:
|
195
|
-
- -
|
211
|
+
- - ~>
|
196
212
|
- !ruby/object:Gem::Version
|
197
|
-
version:
|
213
|
+
version: 2.1.2
|
198
214
|
type: :runtime
|
199
215
|
prerelease: false
|
200
216
|
version_requirements: !ruby/object:Gem::Requirement
|
201
217
|
none: false
|
202
218
|
requirements:
|
203
|
-
- -
|
219
|
+
- - ~>
|
204
220
|
- !ruby/object:Gem::Version
|
205
|
-
version:
|
221
|
+
version: 2.1.2
|
206
222
|
- !ruby/object:Gem::Dependency
|
207
|
-
name:
|
223
|
+
name: disqussion
|
208
224
|
requirement: !ruby/object:Gem::Requirement
|
209
225
|
none: false
|
210
226
|
requirements:
|
@@ -220,7 +236,7 @@ dependencies:
|
|
220
236
|
- !ruby/object:Gem::Version
|
221
237
|
version: '0'
|
222
238
|
- !ruby/object:Gem::Dependency
|
223
|
-
name:
|
239
|
+
name: dropbox-sdk
|
224
240
|
requirement: !ruby/object:Gem::Requirement
|
225
241
|
none: false
|
226
242
|
requirements:
|
@@ -236,7 +252,7 @@ dependencies:
|
|
236
252
|
- !ruby/object:Gem::Version
|
237
253
|
version: '0'
|
238
254
|
- !ruby/object:Gem::Dependency
|
239
|
-
name:
|
255
|
+
name: dynamic_form
|
240
256
|
requirement: !ruby/object:Gem::Requirement
|
241
257
|
none: false
|
242
258
|
requirements:
|
@@ -252,7 +268,7 @@ dependencies:
|
|
252
268
|
- !ruby/object:Gem::Version
|
253
269
|
version: '0'
|
254
270
|
- !ruby/object:Gem::Dependency
|
255
|
-
name:
|
271
|
+
name: em-http-request
|
256
272
|
requirement: !ruby/object:Gem::Requirement
|
257
273
|
none: false
|
258
274
|
requirements:
|
@@ -268,7 +284,7 @@ dependencies:
|
|
268
284
|
- !ruby/object:Gem::Version
|
269
285
|
version: '0'
|
270
286
|
- !ruby/object:Gem::Dependency
|
271
|
-
name:
|
287
|
+
name: em-net-http
|
272
288
|
requirement: !ruby/object:Gem::Requirement
|
273
289
|
none: false
|
274
290
|
requirements:
|
@@ -284,7 +300,7 @@ dependencies:
|
|
284
300
|
- !ruby/object:Gem::Version
|
285
301
|
version: '0'
|
286
302
|
- !ruby/object:Gem::Dependency
|
287
|
-
name:
|
303
|
+
name: em-synchrony
|
288
304
|
requirement: !ruby/object:Gem::Requirement
|
289
305
|
none: false
|
290
306
|
requirements:
|
@@ -300,23 +316,23 @@ dependencies:
|
|
300
316
|
- !ruby/object:Gem::Version
|
301
317
|
version: '0'
|
302
318
|
- !ruby/object:Gem::Dependency
|
303
|
-
name:
|
319
|
+
name: formtastic
|
304
320
|
requirement: !ruby/object:Gem::Requirement
|
305
321
|
none: false
|
306
322
|
requirements:
|
307
|
-
- -
|
323
|
+
- - ~>
|
308
324
|
- !ruby/object:Gem::Version
|
309
|
-
version:
|
325
|
+
version: 2.2.1
|
310
326
|
type: :runtime
|
311
327
|
prerelease: false
|
312
328
|
version_requirements: !ruby/object:Gem::Requirement
|
313
329
|
none: false
|
314
330
|
requirements:
|
315
|
-
- -
|
331
|
+
- - ~>
|
316
332
|
- !ruby/object:Gem::Version
|
317
|
-
version:
|
333
|
+
version: 2.2.1
|
318
334
|
- !ruby/object:Gem::Dependency
|
319
|
-
name:
|
335
|
+
name: grackle
|
320
336
|
requirement: !ruby/object:Gem::Requirement
|
321
337
|
none: false
|
322
338
|
requirements:
|
@@ -332,7 +348,7 @@ dependencies:
|
|
332
348
|
- !ruby/object:Gem::Version
|
333
349
|
version: '0'
|
334
350
|
- !ruby/object:Gem::Dependency
|
335
|
-
name:
|
351
|
+
name: haml
|
336
352
|
requirement: !ruby/object:Gem::Requirement
|
337
353
|
none: false
|
338
354
|
requirements:
|
@@ -348,7 +364,7 @@ dependencies:
|
|
348
364
|
- !ruby/object:Gem::Version
|
349
365
|
version: '0'
|
350
366
|
- !ruby/object:Gem::Dependency
|
351
|
-
name:
|
367
|
+
name: has_scope
|
352
368
|
requirement: !ruby/object:Gem::Requirement
|
353
369
|
none: false
|
354
370
|
requirements:
|
@@ -364,7 +380,7 @@ dependencies:
|
|
364
380
|
- !ruby/object:Gem::Version
|
365
381
|
version: '0'
|
366
382
|
- !ruby/object:Gem::Dependency
|
367
|
-
name:
|
383
|
+
name: htmlentities
|
368
384
|
requirement: !ruby/object:Gem::Requirement
|
369
385
|
none: false
|
370
386
|
requirements:
|
@@ -380,7 +396,7 @@ dependencies:
|
|
380
396
|
- !ruby/object:Gem::Version
|
381
397
|
version: '0'
|
382
398
|
- !ruby/object:Gem::Dependency
|
383
|
-
name:
|
399
|
+
name: inherited_resources
|
384
400
|
requirement: !ruby/object:Gem::Requirement
|
385
401
|
none: false
|
386
402
|
requirements:
|
@@ -396,7 +412,7 @@ dependencies:
|
|
396
412
|
- !ruby/object:Gem::Version
|
397
413
|
version: '0'
|
398
414
|
- !ruby/object:Gem::Dependency
|
399
|
-
name:
|
415
|
+
name: jquery-rails
|
400
416
|
requirement: !ruby/object:Gem::Requirement
|
401
417
|
none: false
|
402
418
|
requirements:
|
@@ -412,39 +428,39 @@ dependencies:
|
|
412
428
|
- !ruby/object:Gem::Version
|
413
429
|
version: '0'
|
414
430
|
- !ruby/object:Gem::Dependency
|
415
|
-
name:
|
431
|
+
name: mini_fb
|
416
432
|
requirement: !ruby/object:Gem::Requirement
|
417
433
|
none: false
|
418
434
|
requirements:
|
419
|
-
- -
|
435
|
+
- - ! '>='
|
420
436
|
- !ruby/object:Gem::Version
|
421
|
-
version: '
|
437
|
+
version: '0'
|
422
438
|
type: :runtime
|
423
439
|
prerelease: false
|
424
440
|
version_requirements: !ruby/object:Gem::Requirement
|
425
441
|
none: false
|
426
442
|
requirements:
|
427
|
-
- -
|
443
|
+
- - ! '>='
|
428
444
|
- !ruby/object:Gem::Version
|
429
|
-
version: '
|
445
|
+
version: '0'
|
430
446
|
- !ruby/object:Gem::Dependency
|
431
|
-
name:
|
447
|
+
name: multi_json
|
432
448
|
requirement: !ruby/object:Gem::Requirement
|
433
449
|
none: false
|
434
450
|
requirements:
|
435
|
-
- -
|
451
|
+
- - ~>
|
436
452
|
- !ruby/object:Gem::Version
|
437
|
-
version: '
|
453
|
+
version: '1.3'
|
438
454
|
type: :runtime
|
439
455
|
prerelease: false
|
440
456
|
version_requirements: !ruby/object:Gem::Requirement
|
441
457
|
none: false
|
442
458
|
requirements:
|
443
|
-
- -
|
459
|
+
- - ~>
|
444
460
|
- !ruby/object:Gem::Version
|
445
|
-
version: '
|
461
|
+
version: '1.3'
|
446
462
|
- !ruby/object:Gem::Dependency
|
447
|
-
name:
|
463
|
+
name: nokogiri
|
448
464
|
requirement: !ruby/object:Gem::Requirement
|
449
465
|
none: false
|
450
466
|
requirements:
|
@@ -460,7 +476,7 @@ dependencies:
|
|
460
476
|
- !ruby/object:Gem::Version
|
461
477
|
version: '0'
|
462
478
|
- !ruby/object:Gem::Dependency
|
463
|
-
name:
|
479
|
+
name: oauth2
|
464
480
|
requirement: !ruby/object:Gem::Requirement
|
465
481
|
none: false
|
466
482
|
requirements:
|
@@ -476,7 +492,7 @@ dependencies:
|
|
476
492
|
- !ruby/object:Gem::Version
|
477
493
|
version: '0'
|
478
494
|
- !ruby/object:Gem::Dependency
|
479
|
-
name:
|
495
|
+
name: oembed_links
|
480
496
|
requirement: !ruby/object:Gem::Requirement
|
481
497
|
none: false
|
482
498
|
requirements:
|
@@ -492,7 +508,7 @@ dependencies:
|
|
492
508
|
- !ruby/object:Gem::Version
|
493
509
|
version: '0'
|
494
510
|
- !ruby/object:Gem::Dependency
|
495
|
-
name:
|
511
|
+
name: paperclip
|
496
512
|
requirement: !ruby/object:Gem::Requirement
|
497
513
|
none: false
|
498
514
|
requirements:
|
@@ -508,23 +524,23 @@ dependencies:
|
|
508
524
|
- !ruby/object:Gem::Version
|
509
525
|
version: '0'
|
510
526
|
- !ruby/object:Gem::Dependency
|
511
|
-
name:
|
527
|
+
name: rails
|
512
528
|
requirement: !ruby/object:Gem::Requirement
|
513
529
|
none: false
|
514
530
|
requirements:
|
515
|
-
- -
|
531
|
+
- - ~>
|
516
532
|
- !ruby/object:Gem::Version
|
517
|
-
version: '0'
|
533
|
+
version: '3.0'
|
518
534
|
type: :runtime
|
519
535
|
prerelease: false
|
520
536
|
version_requirements: !ruby/object:Gem::Requirement
|
521
537
|
none: false
|
522
538
|
requirements:
|
523
|
-
- -
|
539
|
+
- - ~>
|
524
540
|
- !ruby/object:Gem::Version
|
525
|
-
version: '0'
|
541
|
+
version: '3.0'
|
526
542
|
- !ruby/object:Gem::Dependency
|
527
|
-
name:
|
543
|
+
name: rack-fiber_pool
|
528
544
|
requirement: !ruby/object:Gem::Requirement
|
529
545
|
none: false
|
530
546
|
requirements:
|
@@ -540,7 +556,7 @@ dependencies:
|
|
540
556
|
- !ruby/object:Gem::Version
|
541
557
|
version: '0'
|
542
558
|
- !ruby/object:Gem::Dependency
|
543
|
-
name:
|
559
|
+
name: redcarpet
|
544
560
|
requirement: !ruby/object:Gem::Requirement
|
545
561
|
none: false
|
546
562
|
requirements:
|
@@ -556,23 +572,23 @@ dependencies:
|
|
556
572
|
- !ruby/object:Gem::Version
|
557
573
|
version: '0'
|
558
574
|
- !ruby/object:Gem::Dependency
|
559
|
-
name:
|
575
|
+
name: responders
|
560
576
|
requirement: !ruby/object:Gem::Requirement
|
561
577
|
none: false
|
562
578
|
requirements:
|
563
|
-
- -
|
579
|
+
- - ! '>='
|
564
580
|
- !ruby/object:Gem::Version
|
565
|
-
version:
|
581
|
+
version: '0'
|
566
582
|
type: :runtime
|
567
583
|
prerelease: false
|
568
584
|
version_requirements: !ruby/object:Gem::Requirement
|
569
585
|
none: false
|
570
586
|
requirements:
|
571
|
-
- -
|
587
|
+
- - ! '>='
|
572
588
|
- !ruby/object:Gem::Version
|
573
|
-
version:
|
589
|
+
version: '0'
|
574
590
|
- !ruby/object:Gem::Dependency
|
575
|
-
name:
|
591
|
+
name: sass-rails
|
576
592
|
requirement: !ruby/object:Gem::Requirement
|
577
593
|
none: false
|
578
594
|
requirements:
|
@@ -588,7 +604,7 @@ dependencies:
|
|
588
604
|
- !ruby/object:Gem::Version
|
589
605
|
version: '0'
|
590
606
|
- !ruby/object:Gem::Dependency
|
591
|
-
name:
|
607
|
+
name: settingslogic
|
592
608
|
requirement: !ruby/object:Gem::Requirement
|
593
609
|
none: false
|
594
610
|
requirements:
|
@@ -604,7 +620,7 @@ dependencies:
|
|
604
620
|
- !ruby/object:Gem::Version
|
605
621
|
version: '0'
|
606
622
|
- !ruby/object:Gem::Dependency
|
607
|
-
name:
|
623
|
+
name: tumblr-api
|
608
624
|
requirement: !ruby/object:Gem::Requirement
|
609
625
|
none: false
|
610
626
|
requirements:
|
@@ -620,55 +636,55 @@ dependencies:
|
|
620
636
|
- !ruby/object:Gem::Version
|
621
637
|
version: '0'
|
622
638
|
- !ruby/object:Gem::Dependency
|
623
|
-
name:
|
639
|
+
name: tweetstream
|
624
640
|
requirement: !ruby/object:Gem::Requirement
|
625
641
|
none: false
|
626
642
|
requirements:
|
627
|
-
- -
|
643
|
+
- - ~>
|
628
644
|
- !ruby/object:Gem::Version
|
629
|
-
version:
|
645
|
+
version: 2.1.0
|
630
646
|
type: :runtime
|
631
647
|
prerelease: false
|
632
648
|
version_requirements: !ruby/object:Gem::Requirement
|
633
649
|
none: false
|
634
650
|
requirements:
|
635
|
-
- -
|
651
|
+
- - ~>
|
636
652
|
- !ruby/object:Gem::Version
|
637
|
-
version:
|
653
|
+
version: 2.1.0
|
638
654
|
- !ruby/object:Gem::Dependency
|
639
|
-
name:
|
655
|
+
name: twitter
|
640
656
|
requirement: !ruby/object:Gem::Requirement
|
641
657
|
none: false
|
642
658
|
requirements:
|
643
|
-
- -
|
659
|
+
- - ~>
|
644
660
|
- !ruby/object:Gem::Version
|
645
|
-
version:
|
661
|
+
version: 3.6.0
|
646
662
|
type: :runtime
|
647
663
|
prerelease: false
|
648
664
|
version_requirements: !ruby/object:Gem::Requirement
|
649
665
|
none: false
|
650
666
|
requirements:
|
651
|
-
- -
|
667
|
+
- - ~>
|
652
668
|
- !ruby/object:Gem::Version
|
653
|
-
version:
|
669
|
+
version: 3.6.0
|
654
670
|
- !ruby/object:Gem::Dependency
|
655
|
-
name:
|
671
|
+
name: uglifier
|
656
672
|
requirement: !ruby/object:Gem::Requirement
|
657
673
|
none: false
|
658
674
|
requirements:
|
659
|
-
- -
|
675
|
+
- - ~>
|
660
676
|
- !ruby/object:Gem::Version
|
661
|
-
version:
|
677
|
+
version: 1.2.7
|
662
678
|
type: :runtime
|
663
679
|
prerelease: false
|
664
680
|
version_requirements: !ruby/object:Gem::Requirement
|
665
681
|
none: false
|
666
682
|
requirements:
|
667
|
-
- -
|
683
|
+
- - ~>
|
668
684
|
- !ruby/object:Gem::Version
|
669
|
-
version:
|
685
|
+
version: 1.2.7
|
670
686
|
- !ruby/object:Gem::Dependency
|
671
|
-
name:
|
687
|
+
name: unicode_utils
|
672
688
|
requirement: !ruby/object:Gem::Requirement
|
673
689
|
none: false
|
674
690
|
requirements:
|
@@ -684,7 +700,7 @@ dependencies:
|
|
684
700
|
- !ruby/object:Gem::Version
|
685
701
|
version: '0'
|
686
702
|
- !ruby/object:Gem::Dependency
|
687
|
-
name:
|
703
|
+
name: validates_email_format_of
|
688
704
|
requirement: !ruby/object:Gem::Requirement
|
689
705
|
none: false
|
690
706
|
requirements:
|
@@ -700,23 +716,23 @@ dependencies:
|
|
700
716
|
- !ruby/object:Gem::Version
|
701
717
|
version: '0'
|
702
718
|
- !ruby/object:Gem::Dependency
|
703
|
-
name:
|
719
|
+
name: will_paginate
|
704
720
|
requirement: !ruby/object:Gem::Requirement
|
705
721
|
none: false
|
706
722
|
requirements:
|
707
|
-
- -
|
723
|
+
- - ~>
|
708
724
|
- !ruby/object:Gem::Version
|
709
|
-
version:
|
725
|
+
version: 3.0.3
|
710
726
|
type: :runtime
|
711
727
|
prerelease: false
|
712
728
|
version_requirements: !ruby/object:Gem::Requirement
|
713
729
|
none: false
|
714
730
|
requirements:
|
715
|
-
- -
|
731
|
+
- - ~>
|
716
732
|
- !ruby/object:Gem::Version
|
717
|
-
version:
|
733
|
+
version: 3.0.3
|
718
734
|
- !ruby/object:Gem::Dependency
|
719
|
-
name:
|
735
|
+
name: yajl-ruby
|
720
736
|
requirement: !ruby/object:Gem::Requirement
|
721
737
|
none: false
|
722
738
|
requirements:
|
@@ -732,7 +748,7 @@ dependencies:
|
|
732
748
|
- !ruby/object:Gem::Version
|
733
749
|
version: '0'
|
734
750
|
- !ruby/object:Gem::Dependency
|
735
|
-
name:
|
751
|
+
name: yard
|
736
752
|
requirement: !ruby/object:Gem::Requirement
|
737
753
|
none: false
|
738
754
|
requirements:
|
@@ -1115,8 +1131,7 @@ dependencies:
|
|
1115
1131
|
- - ! '>='
|
1116
1132
|
- !ruby/object:Gem::Version
|
1117
1133
|
version: '0'
|
1118
|
-
description: Atreides is an engine providing a evented CMS following a KISS principle
|
1119
|
-
updated for Heroku
|
1134
|
+
description: Atreides is an engine providing a evented CMS following a KISS principle
|
1120
1135
|
email:
|
1121
1136
|
- hello@lovethe88.com
|
1122
1137
|
executables: []
|
@@ -1218,6 +1233,7 @@ files:
|
|
1218
1233
|
- lib/generators/templates/create_pages.rb
|
1219
1234
|
- lib/generators/templates/create_photos.rb
|
1220
1235
|
- lib/generators/templates/create_posts.rb
|
1236
|
+
- lib/generators/templates/create_preferences.rb
|
1221
1237
|
- lib/generators/templates/create_products.rb
|
1222
1238
|
- lib/generators/templates/create_sessions.rb
|
1223
1239
|
- lib/generators/templates/create_sites.rb
|
@@ -1240,6 +1256,7 @@ files:
|
|
1240
1256
|
- lib/tasks/cucumber.rake
|
1241
1257
|
- lib/tasks/tasks.rake
|
1242
1258
|
- lib/tasks/yard.rake
|
1259
|
+
- app/assets/javascripts/atreides/admin.facebook.js
|
1243
1260
|
- app/assets/javascripts/atreides/admin.js
|
1244
1261
|
- app/assets/javascripts/atreides/admin_base.js.erb
|
1245
1262
|
- app/assets/javascripts/atreides/admin_edit.js
|
@@ -1260,6 +1277,7 @@ files:
|
|
1260
1277
|
- app/controllers/admin/atreides/comments_controller.rb
|
1261
1278
|
- app/controllers/admin/atreides/content_parts_controller.rb
|
1262
1279
|
- app/controllers/admin/atreides/dropbox_controller.rb
|
1280
|
+
- app/controllers/admin/atreides/facebook_controller.rb
|
1263
1281
|
- app/controllers/admin/atreides/features_controller.rb
|
1264
1282
|
- app/controllers/admin/atreides/github_controller.rb
|
1265
1283
|
- app/controllers/admin/atreides/links_controller.rb
|
@@ -1309,6 +1327,7 @@ files:
|
|
1309
1327
|
- app/models/atreides/ability.rb
|
1310
1328
|
- app/models/atreides/comment.rb
|
1311
1329
|
- app/models/atreides/content_part.rb
|
1330
|
+
- app/models/atreides/facebook_user.rb
|
1312
1331
|
- app/models/atreides/feature.rb
|
1313
1332
|
- app/models/atreides/github.rb
|
1314
1333
|
- app/models/atreides/like.rb
|
@@ -1319,6 +1338,7 @@ files:
|
|
1319
1338
|
- app/models/atreides/page.rb
|
1320
1339
|
- app/models/atreides/photo.rb
|
1321
1340
|
- app/models/atreides/post.rb
|
1341
|
+
- app/models/atreides/preferences.rb
|
1322
1342
|
- app/models/atreides/product.rb
|
1323
1343
|
- app/models/atreides/site.rb
|
1324
1344
|
- app/models/atreides/size.rb
|
@@ -1347,6 +1367,7 @@ files:
|
|
1347
1367
|
- app/views/admin/atreides/dropbox/_uploader.html.haml
|
1348
1368
|
- app/views/admin/atreides/dropbox/list.html.haml
|
1349
1369
|
- app/views/admin/atreides/dropbox/setup.html.haml
|
1370
|
+
- app/views/admin/atreides/facebook/index.html.haml
|
1350
1371
|
- app/views/admin/atreides/features/_form.html.haml
|
1351
1372
|
- app/views/admin/atreides/features/edit.html.haml
|
1352
1373
|
- app/views/admin/atreides/features/index.html.haml
|
@@ -1431,7 +1452,7 @@ files:
|
|
1431
1452
|
- config/routes.rb
|
1432
1453
|
- LICENSE
|
1433
1454
|
- README.rdoc
|
1434
|
-
homepage: http://
|
1455
|
+
homepage: http://the88.github.com/Atreides/
|
1435
1456
|
licenses: []
|
1436
1457
|
post_install_message:
|
1437
1458
|
rdoc_options: []
|