atreides 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|