facebook_dialog 0.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/.gitignore +17 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +4 -0
- data/Rakefile +14 -0
- data/Readme.md +24 -0
- data/facebook_dialog.gemspec +25 -0
- data/lib/facebook_dialog/feed.rb +51 -0
- data/lib/facebook_dialog/railtie.rb +7 -0
- data/lib/facebook_dialog/script_helper.rb +17 -0
- data/lib/facebook_dialog/version.rb +4 -0
- data/lib/facebook_dialog.rb +18 -0
- data/spec/facebook_dialog/feed_spec.rb +38 -0
- data/spec/spec_helper.rb +3 -0
- metadata +122 -0
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use default@facebook_dialog --create
|
data/Gemfile
ADDED
data/Rakefile
ADDED
data/Readme.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#Facebook Dialog
|
2
|
+
|
3
|
+
A utility that makes it easy to integrate progressively enhanced facebook dialogs
|
4
|
+
|
5
|
+
```@ruby
|
6
|
+
FacebookDialog.api_key = "<your app_id/api key>"
|
7
|
+
|
8
|
+
#in a Rails View
|
9
|
+
<%= link_to "Share on Facebook" FacebookDialog::Feed.new({
|
10
|
+
redirect_uri: "http://www.example.com",
|
11
|
+
caption: "Something pretty awesome",
|
12
|
+
description: "Zomg! You won't believe what I found on the web."
|
13
|
+
}),
|
14
|
+
id: "share_on_facebook" %>
|
15
|
+
|
16
|
+
<%= facebook_js %>
|
17
|
+
<%= javascript_tag do %>
|
18
|
+
<%= fb_init_js %>
|
19
|
+
$("#share_on_facebook").click(function(e){
|
20
|
+
FB.ui(<%== Facebook::TopicShareUrl.new(resource).to_json %>);
|
21
|
+
});
|
22
|
+
<%- end -%>
|
23
|
+
```
|
24
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/facebook_dialog/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Dan Pickett"]
|
6
|
+
gem.email = ["dpickett@enlightsolutions.com"]
|
7
|
+
gem.description = %q{A utility for building progressively enhanced Facebook dialogs}
|
8
|
+
gem.summary = %q{Use ActiveModel serialization to keep html and javascript FB dialogs DRY}
|
9
|
+
gem.homepage = ""
|
10
|
+
|
11
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
12
|
+
gem.files = `git ls-files`.split("\n")
|
13
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
14
|
+
gem.name = "facebook_dialog"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = FacebookDialog::VERSION
|
17
|
+
|
18
|
+
gem.add_dependency "rack"
|
19
|
+
gem.add_dependency "activemodel"
|
20
|
+
gem.add_dependency "configatron"
|
21
|
+
gem.add_dependency "rake"
|
22
|
+
|
23
|
+
gem.add_development_dependency "rspec"
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module FacebookDialog
|
2
|
+
class Feed
|
3
|
+
FACEBOOK_BASE_URL = "http://www.facebook.com/dialog/feed"
|
4
|
+
include ActiveModel::Serializers::JSON
|
5
|
+
self.include_root_in_json = false
|
6
|
+
|
7
|
+
DEFAULTS = {
|
8
|
+
display: "popup"
|
9
|
+
}
|
10
|
+
|
11
|
+
#options
|
12
|
+
#redirect_uri
|
13
|
+
#display
|
14
|
+
#from
|
15
|
+
#to
|
16
|
+
#message
|
17
|
+
#link
|
18
|
+
#picture
|
19
|
+
#source
|
20
|
+
#name
|
21
|
+
#caption
|
22
|
+
#description
|
23
|
+
#properties
|
24
|
+
#actions
|
25
|
+
#ref
|
26
|
+
def initialize(options = {})
|
27
|
+
@options = options
|
28
|
+
end
|
29
|
+
|
30
|
+
def url
|
31
|
+
"#{FACEBOOK_BASE_URL}?#{Rack::Utils.build_query(query)}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def query
|
35
|
+
to_h.merge({
|
36
|
+
redirect_uri: @options[:redirect_uri] || @options[:link],
|
37
|
+
display: @options[:display] || "popup"
|
38
|
+
})
|
39
|
+
end
|
40
|
+
|
41
|
+
def serializable_hash(options = {})
|
42
|
+
to_h.merge({method: :feed})
|
43
|
+
end
|
44
|
+
|
45
|
+
HTML_ONLY_KEYS = [:redirect_uri, :display]
|
46
|
+
def to_h
|
47
|
+
@options.reject{|key, value| HTML_ONLY_KEYS.include?(key) }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module FacebookDialog
|
2
|
+
module ScriptHelper
|
3
|
+
def facebook_js
|
4
|
+
content_tag(:div, "", id: "fb-root") +
|
5
|
+
javascript_include_tag('http://connect.facebook.net/en_US/all.js')
|
6
|
+
end
|
7
|
+
|
8
|
+
def fb_init_js
|
9
|
+
"FB.init({
|
10
|
+
appId: '#{FacebookDialog.api_key}',
|
11
|
+
status: true,
|
12
|
+
cookies: true
|
13
|
+
});".html_safe
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "rack/utils"
|
2
|
+
require "active_model"
|
3
|
+
require "configatron"
|
4
|
+
|
5
|
+
require "facebook_dialog/version"
|
6
|
+
require "facebook_dialog/feed"
|
7
|
+
|
8
|
+
module FacebookDialog
|
9
|
+
def self.api_key
|
10
|
+
configatron.facebook_dialog.api_key
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.api_key=(api_key)
|
14
|
+
configatron.facebook_dialog.api_key = api_key
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
require "facebook_dialog/railtie" if defined?(Rails)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe FacebookDialog::Feed do
|
4
|
+
let(:redirect_uri) { "http://www.example.com" }
|
5
|
+
let(:title) { "Title! With. Special Characters" }
|
6
|
+
let(:caption) { "A Caption" }
|
7
|
+
let(:description) { "A description" }
|
8
|
+
let(:api_key) { "An Api Key" }
|
9
|
+
|
10
|
+
before(:each) do
|
11
|
+
FacebookDialog.api_key = api_key
|
12
|
+
end
|
13
|
+
|
14
|
+
subject do
|
15
|
+
FacebookDialog::Feed.new({
|
16
|
+
redirect_uri: redirect_uri,
|
17
|
+
title: title,
|
18
|
+
caption: caption,
|
19
|
+
description: description
|
20
|
+
})
|
21
|
+
end
|
22
|
+
|
23
|
+
its(:url) { should include(Rack::Utils.escape(redirect_uri)) }
|
24
|
+
its(:url) { should include(Rack::Utils.escape(title)) }
|
25
|
+
its(:url) { should include(Rack::Utils.escape(description)) }
|
26
|
+
its(:url) { should include(Rack::Utils.escape(caption)) }
|
27
|
+
|
28
|
+
its(:url) { should include("facebook.com") }
|
29
|
+
|
30
|
+
it "omits the redirect uri from the serialized hash" do
|
31
|
+
subject.serializable_hash.keys.should_not include(:redirect_uri)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "omits the display from the serialized hash" do
|
35
|
+
subject.serializable_hash.keys.should_not include(:display)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: facebook_dialog
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dan Pickett
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rack
|
16
|
+
requirement: &2156198440 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2156198440
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activemodel
|
27
|
+
requirement: &2156197860 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2156197860
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: configatron
|
38
|
+
requirement: &2156197340 !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: *2156197340
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: &2156196800 !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: *2156196800
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: rspec
|
60
|
+
requirement: &2156196060 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2156196060
|
69
|
+
description: A utility for building progressively enhanced Facebook dialogs
|
70
|
+
email:
|
71
|
+
- dpickett@enlightsolutions.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .rvmrc
|
79
|
+
- Gemfile
|
80
|
+
- Rakefile
|
81
|
+
- Readme.md
|
82
|
+
- facebook_dialog.gemspec
|
83
|
+
- lib/facebook_dialog.rb
|
84
|
+
- lib/facebook_dialog/feed.rb
|
85
|
+
- lib/facebook_dialog/railtie.rb
|
86
|
+
- lib/facebook_dialog/script_helper.rb
|
87
|
+
- lib/facebook_dialog/version.rb
|
88
|
+
- spec/facebook_dialog/feed_spec.rb
|
89
|
+
- spec/spec_helper.rb
|
90
|
+
homepage: ''
|
91
|
+
licenses: []
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
hash: -128552961892435604
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
segments:
|
112
|
+
- 0
|
113
|
+
hash: -128552961892435604
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 1.8.6
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: Use ActiveModel serialization to keep html and javascript FB dialogs DRY
|
120
|
+
test_files:
|
121
|
+
- spec/facebook_dialog/feed_spec.rb
|
122
|
+
- spec/spec_helper.rb
|