facebook_app 0.0.3
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/Gemfile +4 -0
- data/Gemfile.lock +158 -0
- data/README.textile +52 -0
- data/Rakefile +1 -0
- data/app/assets/images/shared/ajax-loader.gif +0 -0
- data/app/assets/images/single_pixel.png +0 -0
- data/app/assets/javascripts/facebook_app.js +9 -0
- data/app/assets/javascripts/pages.coffee.erb +18 -0
- data/app/assets/stylesheets/admin.sass +13 -0
- data/app/assets/stylesheets/configurables.sass +11 -0
- data/app/assets/stylesheets/facebook_app.css +9 -0
- data/app/assets/stylesheets/layout.css.scss +280 -0
- data/app/assets/stylesheets/yui-3.4.1.css +7 -0
- data/app/controllers/facebook_app/achievements_controller.rb +21 -0
- data/app/controllers/facebook_app/admin_controller.rb +42 -0
- data/app/controllers/facebook_app/external_trackings_controller.rb +21 -0
- data/app/controllers/facebook_app/facebook_app_controller.rb +59 -0
- data/app/controllers/facebook_app/oauth_controller.rb +46 -0
- data/app/controllers/facebook_app/pages_controller.rb +14 -0
- data/app/helpers/facebook_app/application_helper.rb +55 -0
- data/app/mailers/.gitkeep +0 -0
- data/app/models/.gitkeep +0 -0
- data/app/models/facebook_app/conversion.rb +50 -0
- data/app/models/facebook_app/conversion_summary.rb +58 -0
- data/app/models/facebook_app/facebook_credentials.rb +56 -0
- data/app/models/facebook_app/infographic_server_communicator.rb +21 -0
- data/app/views/facebook_app/achievements/show.html.slim +12 -0
- data/app/views/facebook_app/admin/_conversion_stage.html.slim +5 -0
- data/app/views/facebook_app/admin/_spamalytics.html.slim +16 -0
- data/app/views/facebook_app/admin/new_fb_credentials.html.slim +10 -0
- data/app/views/facebook_app/admin/show.html.slim +28 -0
- data/app/views/facebook_app/external_trackings/test.html.slim +3 -0
- data/app/views/facebook_app/pages/privacy_policy.html.slim +49 -0
- data/app/views/facebook_app/pages/terms_of_service.html.slim +49 -0
- data/app/views/layouts/facebook_app.html.slim +17 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20111024214949_add_facebook_app.rb +29 -0
- data/facebook_app.gemspec +33 -0
- data/lib/facebook_app/engine.rb +15 -0
- data/lib/facebook_app/recipes.rb +39 -0
- data/lib/facebook_app/version.rb +3 -0
- data/lib/facebook_app.rb +15 -0
- data/lib/generators/facebook_app/install_generator.rb +19 -0
- data/lib/generators/facebook_app/templates/configurable.yml +79 -0
- data/lib/generators/facebook_app/templates/delayed_job +5 -0
- data/lib/generators/facebook_app/templates/seeds.rb +7 -0
- data/script/infographic.py +180 -0
- metadata +180 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
+
require "facebook_app/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |s|
|
|
6
|
+
s.name = "facebook_app"
|
|
7
|
+
s.version = FacebookApp::VERSION
|
|
8
|
+
s.authors = ["Jack Kinsella"]
|
|
9
|
+
s.email = ["jack.kinsella@gmail.com"]
|
|
10
|
+
s.homepage = ""
|
|
11
|
+
s.summary = %q{Base Facebook for rapid development of future Facebook applications}
|
|
12
|
+
s.description = %q{Includes authentication, tracking, and lots of convenience methods}
|
|
13
|
+
|
|
14
|
+
s.rubyforge_project = "facebook_app"
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split("\n")
|
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
19
|
+
s.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
# specify any dependencies here; for example:
|
|
22
|
+
# s.add_development_dependency "rspec"
|
|
23
|
+
s.add_runtime_dependency "rails", ">= 3.1"
|
|
24
|
+
s.add_runtime_dependency "delayed_job", "~> 2.1.0"
|
|
25
|
+
s.add_runtime_dependency "state_machine"
|
|
26
|
+
s.add_runtime_dependency "koala"
|
|
27
|
+
s.add_runtime_dependency "slim-rails"
|
|
28
|
+
s.add_runtime_dependency "rubber", "1.15.0"
|
|
29
|
+
s.add_runtime_dependency "configurable_engine"
|
|
30
|
+
s.add_runtime_dependency "formtastic"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require "facebook_app"
|
|
2
|
+
require "rails"
|
|
3
|
+
|
|
4
|
+
module FacebookApp
|
|
5
|
+
class Engine < Rails::Engine
|
|
6
|
+
engine_name :facebook_app
|
|
7
|
+
config.to_prepare do
|
|
8
|
+
|
|
9
|
+
Admin::ConfigurablesController.class_eval do
|
|
10
|
+
http_basic_authenticate_with :name => 'identified', :password => 'identified'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Capistrano::Configuration.instance.load do
|
|
2
|
+
namespace :log do
|
|
3
|
+
desc "Live tail of production log"
|
|
4
|
+
task :production, :roles => :app do
|
|
5
|
+
log_file_glob = rubber.get_env("FILE", "Log files to tail", true, "#{current_path}/log/production.log")
|
|
6
|
+
run "tail -qf #{log_file_glob}" do |channel, stream, data|
|
|
7
|
+
puts # for an extra line break before the host name
|
|
8
|
+
puts data
|
|
9
|
+
break if stream == :err
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
desc "Live tail of delayed job log"
|
|
13
|
+
task :delayed_job, :roles => :app do
|
|
14
|
+
log_file_glob = rubber.get_env("FILE", "Log files to tail", true, "#{current_path}/log/delayed_job.log")
|
|
15
|
+
run "tail -qf #{log_file_glob}" do |channel, stream, data|
|
|
16
|
+
puts # for an extra line break before the host name
|
|
17
|
+
puts data
|
|
18
|
+
break if stream == :err
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
desc "Live tail of nginx log"
|
|
22
|
+
task :nginx, :roles => :app do
|
|
23
|
+
log_file_glob = rubber.get_env("FILE", "Log files to tail", true, "/var/log/nginx/error.log")
|
|
24
|
+
run "tail -qf #{log_file_glob}" do |channel, stream, data|
|
|
25
|
+
puts # for an extra line break before the host name
|
|
26
|
+
puts data
|
|
27
|
+
break if stream == :err
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
desc "Seed Database"
|
|
32
|
+
task :seed_db, :roles => :app do
|
|
33
|
+
run "cd #{rubber_env.app_name}; bundle exec RAILS_ENV=production rake db:seed"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
after "deploy", "delayed_job:restart"
|
|
37
|
+
after "deploy:cold", "seed_db"
|
|
38
|
+
end
|
|
39
|
+
|
data/lib/facebook_app.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require "facebook_app/version"
|
|
2
|
+
|
|
3
|
+
module FacebookApp
|
|
4
|
+
if defined?(Rails)
|
|
5
|
+
require "facebook_app/engine"
|
|
6
|
+
require "formtastic"
|
|
7
|
+
require "delayed_job"
|
|
8
|
+
require "ostruct"
|
|
9
|
+
require "koala"
|
|
10
|
+
require "slim-rails"
|
|
11
|
+
require "rubber"
|
|
12
|
+
require "configurable_engine"
|
|
13
|
+
require "state_machine"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
module FacebookApp
|
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
|
4
|
+
include Rails::Generators::Migration
|
|
5
|
+
|
|
6
|
+
def self.source_root
|
|
7
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_configurable_file
|
|
11
|
+
copy_file 'configurable.yml', 'config/configurable.yml'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def remove_unwanted_files
|
|
15
|
+
remove_file "public/index.html"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
|
|
2
|
+
# This file controls what config variables you want to be able to allow your users
|
|
3
|
+
# to set, as well as those you'll be able to access from within the application.
|
|
4
|
+
#
|
|
5
|
+
# If you want to be able to access a string config[:site_title], for example:
|
|
6
|
+
#
|
|
7
|
+
# site_title:
|
|
8
|
+
# name: Site Title
|
|
9
|
+
# type: string
|
|
10
|
+
# default: My Site
|
|
11
|
+
#
|
|
12
|
+
# 'name' is the name that appears in the edit form
|
|
13
|
+
#
|
|
14
|
+
# 'type' can be 'string' for a text field, 'password' for a password field or 'text' for a text area
|
|
15
|
+
# 'type' defaults to 'string'
|
|
16
|
+
#
|
|
17
|
+
# 'default' is the default value to use if there's no entry in the database. Otherwise, nil will be returned
|
|
18
|
+
#
|
|
19
|
+
# Some Examples:
|
|
20
|
+
#
|
|
21
|
+
# site_title:
|
|
22
|
+
# name: Site Title
|
|
23
|
+
# default: My Site
|
|
24
|
+
# type: string
|
|
25
|
+
#
|
|
26
|
+
# site_description:
|
|
27
|
+
# name: Description for Google
|
|
28
|
+
# default: Lots of Awesomeness Here
|
|
29
|
+
# type: text
|
|
30
|
+
#
|
|
31
|
+
number_tagged_in_infographic:
|
|
32
|
+
name: Number of people tagged in the infographic
|
|
33
|
+
default: 3
|
|
34
|
+
type: integer
|
|
35
|
+
|
|
36
|
+
infographic_caption:
|
|
37
|
+
name: Photo caption text (you need to append the viral link, e.g. http://www.thedirtytruth.org?marketing_mode=viral
|
|
38
|
+
default: Find out the dirty truth about your friends at http://www.thedirtytruh.org/?marketing_mode=viral
|
|
39
|
+
type: text
|
|
40
|
+
|
|
41
|
+
like_infographic:
|
|
42
|
+
name: True if you want the software to automatically like the infographic as the user after he posts it
|
|
43
|
+
default: false
|
|
44
|
+
type: boolean
|
|
45
|
+
|
|
46
|
+
comment_on_infographic:
|
|
47
|
+
name: Write a comment on the infographic as the user
|
|
48
|
+
default: false
|
|
49
|
+
type: boolean
|
|
50
|
+
|
|
51
|
+
comment_on_infographic_text:
|
|
52
|
+
name: What the user says when he comments on the infographic as himself
|
|
53
|
+
default: Ha, so true.
|
|
54
|
+
type: string
|
|
55
|
+
|
|
56
|
+
app_name:
|
|
57
|
+
name: Name of application that the user sees (e.g. The Dirty Truth)
|
|
58
|
+
default: The Dirty Truth
|
|
59
|
+
type: string
|
|
60
|
+
|
|
61
|
+
analytics_code:
|
|
62
|
+
name: Analytics Code
|
|
63
|
+
default: UA-26376413-1
|
|
64
|
+
type: string
|
|
65
|
+
|
|
66
|
+
identified_tracking_link:
|
|
67
|
+
name: Identified Tracking Link with code
|
|
68
|
+
default: http://www.identified.com?fbg=1
|
|
69
|
+
type: string
|
|
70
|
+
|
|
71
|
+
facebook_permissions:
|
|
72
|
+
name: List of permissions required for Facebook
|
|
73
|
+
default: user_status,friends_status,read_stream,friends_events,user_events,publish_stream,user_photos
|
|
74
|
+
type: text
|
|
75
|
+
|
|
76
|
+
show_splash_page:
|
|
77
|
+
name: Show the splash page or redirect to main page
|
|
78
|
+
default: true
|
|
79
|
+
type: boolean
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# This file should contain all the record creation needed to seed the database with its default values.
|
|
2
|
+
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
|
3
|
+
|
|
4
|
+
# Create development app and initial Facebook credentials
|
|
5
|
+
puts "Ading default Facebook user accounts. These may be out of date."
|
|
6
|
+
FacebookApp::FB.create(:development => true, :app_id => "225198020866871", :secret => "c13ca68717af076f6832f4d38a6da48a", :app_url => "http://apps.facebook.com/the-better-frienddev", :email => "jack.kinsella@gmail.com", :password => "notteling" )
|
|
7
|
+
FacebookApp::FB.create(:development => false, :app_id => "178965915518857", :secret => "928b9a0edf812a236499bcc99da7a4bc", :app_url => 'https://apps.facebook.com/truthcanhurt', :email => "dummydata", :password => "dummydata")
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
|
|
3
|
+
# Render an HTML file to PNG and dump image tag locations as JSON.
|
|
4
|
+
# 4.7
|
|
5
|
+
# python script/infographic <infographic_url> <infographic_png> <infographic_json>
|
|
6
|
+
##
|
|
7
|
+
# Usage:
|
|
8
|
+
# python script/infographic <infographic_url> <infographic_png> <infographic_json>
|
|
9
|
+
#
|
|
10
|
+
# Gotchas:
|
|
11
|
+
# 1) A redirect for a URL blows it up
|
|
12
|
+
# 2) The png and json files must be prepended with their folders - e.g.
|
|
13
|
+
# "tmp/my_pic.png"
|
|
14
|
+
|
|
15
|
+
# The script will load the webpage located at <infographic_url> and render it as
|
|
16
|
+
# an image to the file <infographic_png>. It looks for any DOM elements in the
|
|
17
|
+
# page with a `data-tag-uid` attribute and dumps their metrics to a file in JSON
|
|
18
|
+
# format. The JSON file will be an array where each object represents one of
|
|
19
|
+
# the DOM elements with a `data-tag-uid` attribute. Each objet has the
|
|
20
|
+
# following attributes:
|
|
21
|
+
#
|
|
22
|
+
# uid: The UID of the Facebook user who should be tagged.
|
|
23
|
+
# top: The location of the top border of the tagged element as the number
|
|
24
|
+
# of pixels from the top.
|
|
25
|
+
# left: The location of the left border of the tagged element as the number
|
|
26
|
+
# of pixels from the left border of the page.
|
|
27
|
+
# width: The width in pixels of the tagged element.
|
|
28
|
+
# height: The height in pixels of the tagged element.
|
|
29
|
+
|
|
30
|
+
# QWebPage()
|
|
31
|
+
# Object to view and edit web documnets. Web Content, history of links
|
|
32
|
+
# navigation and so on.
|
|
33
|
+
# Part of QtWebKit
|
|
34
|
+
|
|
35
|
+
# mainFrame()
|
|
36
|
+
# returns the main frame of the page -> QWEBFRAME
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# QWebFramem
|
|
40
|
+
# contentsSize()
|
|
41
|
+
# reutrns a Qsize object of the size of the content in the frame
|
|
42
|
+
# render()
|
|
43
|
+
# redner the frame into painter
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
# Before you paint a QWebPage object, you need to set the size of the viewpost
|
|
47
|
+
# by calling setViewportSize. Then you invoked the main frame's render function
|
|
48
|
+
# (QWebFrame::render())
|
|
49
|
+
|
|
50
|
+
#QApplicattion
|
|
51
|
+
#exec_()
|
|
52
|
+
# Causes application to enter the main loop, which fetches events and sends
|
|
53
|
+
# them to objects
|
|
54
|
+
|
|
55
|
+
#Qimage
|
|
56
|
+
# Provides a hardward independent image representation that allows direct
|
|
57
|
+
# access to the pixel data and can be used as a paint device
|
|
58
|
+
#
|
|
59
|
+
# QPainted can write diectly onto mimages
|
|
60
|
+
#
|
|
61
|
+
# self.image = QImage(self.page.viewportSize(), QImage.Format_ARGB32)
|
|
62
|
+
# Instantiate an image with a given size(two dimensions size object: QSize) and
|
|
63
|
+
# Format (
|
|
64
|
+
|
|
65
|
+
#SIGNAL
|
|
66
|
+
# Signals are used for sommunication between objects. It is emitted when a
|
|
67
|
+
# particular event occurs
|
|
68
|
+
#self.page.connect(self.page, SIGNAL("loadFinished(bool)"), self.onLoadFinished)
|
|
69
|
+
# sender = self.page; signal is emitted signal (loadFinished); receive is
|
|
70
|
+
# object that recies it
|
|
71
|
+
#
|
|
72
|
+
# loadFinished signal is mitted when a QWebPage contents are loaded
|
|
73
|
+
# completely
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
#QPainter
|
|
78
|
+
#Happens between the begin() and end() methods
|
|
79
|
+
# e.g. qp = QpPainter(); qb.being(self); qp.drawText(event); qp.end()
|
|
80
|
+
# Passed into mainFrame here
|
|
81
|
+
|
|
82
|
+
import errno
|
|
83
|
+
import json
|
|
84
|
+
import os
|
|
85
|
+
import sys
|
|
86
|
+
import traceback
|
|
87
|
+
|
|
88
|
+
from PyQt4.QtCore import QUrl, SIGNAL
|
|
89
|
+
from PyQt4.QtGui import QApplication, QImage, QPainter
|
|
90
|
+
from PyQt4.QtWebKit import QWebPage
|
|
91
|
+
|
|
92
|
+
LOAD_TAGS_JS = """
|
|
93
|
+
var tags = [];
|
|
94
|
+
|
|
95
|
+
$("[data-tag-uid]").each(function () {
|
|
96
|
+
tags.push({
|
|
97
|
+
to : $(this).attr("data-tag-uid"),
|
|
98
|
+
x : $(this).position().left.toString(),
|
|
99
|
+
y : $(this).position().top.toString(),
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
JSON.stringify(tags);
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
class Infographic:
|
|
107
|
+
def __init__(self, url):
|
|
108
|
+
self.url = url
|
|
109
|
+
self.render()
|
|
110
|
+
|
|
111
|
+
def render(self):
|
|
112
|
+
self.app = QApplication([])
|
|
113
|
+
self.page = QWebPage()
|
|
114
|
+
|
|
115
|
+
self.page.connect(self.page, SIGNAL("loadFinished(bool)"), self.onLoadFinished)
|
|
116
|
+
self.page.mainFrame().load(QUrl(self.url))
|
|
117
|
+
retval = self.app.exec_()
|
|
118
|
+
del self.page
|
|
119
|
+
|
|
120
|
+
if retval != 0:
|
|
121
|
+
raise RuntimeError, "Could not load url: " + self.url
|
|
122
|
+
return retval
|
|
123
|
+
|
|
124
|
+
def onLoadFinished(self, result):
|
|
125
|
+
try:
|
|
126
|
+
if not result:
|
|
127
|
+
self.app.exit(1)
|
|
128
|
+
|
|
129
|
+
self.resize()
|
|
130
|
+
self.loadImage()
|
|
131
|
+
self.loadTags()
|
|
132
|
+
self.app.exit(0)
|
|
133
|
+
except:
|
|
134
|
+
traceback.print_exc()
|
|
135
|
+
self.app.exit(1)
|
|
136
|
+
|
|
137
|
+
def resize(self):
|
|
138
|
+
self.page.setViewportSize(self.page.mainFrame().contentsSize())
|
|
139
|
+
|
|
140
|
+
def loadImage(self):
|
|
141
|
+
self.image = QImage(self.page.viewportSize(), QImage.Format_ARGB32)
|
|
142
|
+
painter = QPainter(self.image)
|
|
143
|
+
|
|
144
|
+
self.page.mainFrame().render(painter)
|
|
145
|
+
painter.end()
|
|
146
|
+
|
|
147
|
+
def loadTags(self):
|
|
148
|
+
# XXX: This breaks with the version of Qt installed on production.
|
|
149
|
+
tags_json = str(self.page.mainFrame().evaluateJavaScript(LOAD_TAGS_JS).toString())
|
|
150
|
+
self.tags = json.loads(tags_json)
|
|
151
|
+
|
|
152
|
+
def mkdir_p(path):
|
|
153
|
+
try:
|
|
154
|
+
os.makedirs(path)
|
|
155
|
+
except OSError as detail:
|
|
156
|
+
if detail.errno == errno.EEXIST:
|
|
157
|
+
pass
|
|
158
|
+
else:
|
|
159
|
+
raise
|
|
160
|
+
|
|
161
|
+
def main(argv):
|
|
162
|
+
if len(argv) != 4:
|
|
163
|
+
sys.stderr.write("Usage: python script/infographic <infographic_url> <infographic_png> <infographic_json>\n")
|
|
164
|
+
sys.exit(1)
|
|
165
|
+
|
|
166
|
+
infographic_url = argv[1]
|
|
167
|
+
infographic_png = argv[2]
|
|
168
|
+
infographic_tags = argv[3]
|
|
169
|
+
|
|
170
|
+
mkdir_p(os.path.dirname(infographic_png))
|
|
171
|
+
mkdir_p(os.path.dirname(infographic_tags))
|
|
172
|
+
|
|
173
|
+
graphic = Infographic(infographic_url)
|
|
174
|
+
graphic.image.save(infographic_png)
|
|
175
|
+
|
|
176
|
+
with file(infographic_tags, "w") as tags_file:
|
|
177
|
+
json.dump(graphic.tags, tags_file)
|
|
178
|
+
|
|
179
|
+
if __name__ == "__main__":
|
|
180
|
+
main(sys.argv)
|
metadata
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: facebook_app
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.3
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Jack Kinsella
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2011-11-01 00:00:00.000000000Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: rails
|
|
16
|
+
requirement: &2153433820 !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '3.1'
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: *2153433820
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
26
|
+
name: delayed_job
|
|
27
|
+
requirement: &2153433320 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
29
|
+
requirements:
|
|
30
|
+
- - ~>
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 2.1.0
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: *2153433320
|
|
36
|
+
- !ruby/object:Gem::Dependency
|
|
37
|
+
name: state_machine
|
|
38
|
+
requirement: &2153432940 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
40
|
+
requirements:
|
|
41
|
+
- - ! '>='
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
44
|
+
type: :runtime
|
|
45
|
+
prerelease: false
|
|
46
|
+
version_requirements: *2153432940
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: koala
|
|
49
|
+
requirement: &2153432480 !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
type: :runtime
|
|
56
|
+
prerelease: false
|
|
57
|
+
version_requirements: *2153432480
|
|
58
|
+
- !ruby/object:Gem::Dependency
|
|
59
|
+
name: slim-rails
|
|
60
|
+
requirement: &2153432060 !ruby/object:Gem::Requirement
|
|
61
|
+
none: false
|
|
62
|
+
requirements:
|
|
63
|
+
- - ! '>='
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '0'
|
|
66
|
+
type: :runtime
|
|
67
|
+
prerelease: false
|
|
68
|
+
version_requirements: *2153432060
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rubber
|
|
71
|
+
requirement: &2153431560 !ruby/object:Gem::Requirement
|
|
72
|
+
none: false
|
|
73
|
+
requirements:
|
|
74
|
+
- - =
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: 1.15.0
|
|
77
|
+
type: :runtime
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: *2153431560
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
81
|
+
name: configurable_engine
|
|
82
|
+
requirement: &2153454940 !ruby/object:Gem::Requirement
|
|
83
|
+
none: false
|
|
84
|
+
requirements:
|
|
85
|
+
- - ! '>='
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '0'
|
|
88
|
+
type: :runtime
|
|
89
|
+
prerelease: false
|
|
90
|
+
version_requirements: *2153454940
|
|
91
|
+
- !ruby/object:Gem::Dependency
|
|
92
|
+
name: formtastic
|
|
93
|
+
requirement: &2153454480 !ruby/object:Gem::Requirement
|
|
94
|
+
none: false
|
|
95
|
+
requirements:
|
|
96
|
+
- - ! '>='
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '0'
|
|
99
|
+
type: :runtime
|
|
100
|
+
prerelease: false
|
|
101
|
+
version_requirements: *2153454480
|
|
102
|
+
description: Includes authentication, tracking, and lots of convenience methods
|
|
103
|
+
email:
|
|
104
|
+
- jack.kinsella@gmail.com
|
|
105
|
+
executables: []
|
|
106
|
+
extensions: []
|
|
107
|
+
extra_rdoc_files: []
|
|
108
|
+
files:
|
|
109
|
+
- Gemfile
|
|
110
|
+
- Gemfile.lock
|
|
111
|
+
- README.textile
|
|
112
|
+
- Rakefile
|
|
113
|
+
- app/assets/images/shared/ajax-loader.gif
|
|
114
|
+
- app/assets/images/single_pixel.png
|
|
115
|
+
- app/assets/javascripts/facebook_app.js
|
|
116
|
+
- app/assets/javascripts/pages.coffee.erb
|
|
117
|
+
- app/assets/stylesheets/admin.sass
|
|
118
|
+
- app/assets/stylesheets/configurables.sass
|
|
119
|
+
- app/assets/stylesheets/facebook_app.css
|
|
120
|
+
- app/assets/stylesheets/layout.css.scss
|
|
121
|
+
- app/assets/stylesheets/yui-3.4.1.css
|
|
122
|
+
- app/controllers/facebook_app/achievements_controller.rb
|
|
123
|
+
- app/controllers/facebook_app/admin_controller.rb
|
|
124
|
+
- app/controllers/facebook_app/external_trackings_controller.rb
|
|
125
|
+
- app/controllers/facebook_app/facebook_app_controller.rb
|
|
126
|
+
- app/controllers/facebook_app/oauth_controller.rb
|
|
127
|
+
- app/controllers/facebook_app/pages_controller.rb
|
|
128
|
+
- app/helpers/facebook_app/application_helper.rb
|
|
129
|
+
- app/mailers/.gitkeep
|
|
130
|
+
- app/models/.gitkeep
|
|
131
|
+
- app/models/facebook_app/conversion.rb
|
|
132
|
+
- app/models/facebook_app/conversion_summary.rb
|
|
133
|
+
- app/models/facebook_app/facebook_credentials.rb
|
|
134
|
+
- app/models/facebook_app/infographic_server_communicator.rb
|
|
135
|
+
- app/views/facebook_app/achievements/show.html.slim
|
|
136
|
+
- app/views/facebook_app/admin/_conversion_stage.html.slim
|
|
137
|
+
- app/views/facebook_app/admin/_spamalytics.html.slim
|
|
138
|
+
- app/views/facebook_app/admin/new_fb_credentials.html.slim
|
|
139
|
+
- app/views/facebook_app/admin/show.html.slim
|
|
140
|
+
- app/views/facebook_app/external_trackings/test.html.slim
|
|
141
|
+
- app/views/facebook_app/pages/privacy_policy.html.slim
|
|
142
|
+
- app/views/facebook_app/pages/terms_of_service.html.slim
|
|
143
|
+
- app/views/layouts/facebook_app.html.slim
|
|
144
|
+
- config/routes.rb
|
|
145
|
+
- db/migrate/20111024214949_add_facebook_app.rb
|
|
146
|
+
- facebook_app.gemspec
|
|
147
|
+
- lib/facebook_app.rb
|
|
148
|
+
- lib/facebook_app/engine.rb
|
|
149
|
+
- lib/facebook_app/recipes.rb
|
|
150
|
+
- lib/facebook_app/version.rb
|
|
151
|
+
- lib/generators/facebook_app/install_generator.rb
|
|
152
|
+
- lib/generators/facebook_app/templates/configurable.yml
|
|
153
|
+
- lib/generators/facebook_app/templates/delayed_job
|
|
154
|
+
- lib/generators/facebook_app/templates/seeds.rb
|
|
155
|
+
- script/infographic.py
|
|
156
|
+
homepage: ''
|
|
157
|
+
licenses: []
|
|
158
|
+
post_install_message:
|
|
159
|
+
rdoc_options: []
|
|
160
|
+
require_paths:
|
|
161
|
+
- lib
|
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
|
+
none: false
|
|
164
|
+
requirements:
|
|
165
|
+
- - ! '>='
|
|
166
|
+
- !ruby/object:Gem::Version
|
|
167
|
+
version: '0'
|
|
168
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
|
+
none: false
|
|
170
|
+
requirements:
|
|
171
|
+
- - ! '>='
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '0'
|
|
174
|
+
requirements: []
|
|
175
|
+
rubyforge_project: facebook_app
|
|
176
|
+
rubygems_version: 1.8.8
|
|
177
|
+
signing_key:
|
|
178
|
+
specification_version: 3
|
|
179
|
+
summary: Base Facebook for rapid development of future Facebook applications
|
|
180
|
+
test_files: []
|