acts_as_connectable 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +2 -0
  4. data/acts_as_connectable.gemspec +24 -0
  5. data/app/controllers/authentications_controller.rb +43 -0
  6. data/app/helpers/layout_helper.erb +18 -0
  7. data/app/models/authentication.rb +16 -0
  8. data/app/views/authentications/index.html.erb +31 -0
  9. data/config/initializers/omniauth.rb +87 -0
  10. data/config/providers.yml +26 -0
  11. data/db/migrate/create_authentications.rb +20 -0
  12. data/lib/acts_as_connectable.rb +23 -0
  13. data/lib/acts_as_connectable/version.rb +3 -0
  14. data/lib/application_controller.rb +26 -0
  15. data/lib/application_helper.rb +7 -0
  16. data/lib/engine.rb +10 -0
  17. data/lib/generators/acts_as_connectable/acts_as_connectable_generator.rb +9 -0
  18. data/lib/generators/acts_as_connectable/install_generator.rb +48 -0
  19. data/public/images/acts_as_connectable/aol_128.png +0 -0
  20. data/public/images/acts_as_connectable/aol_256.png +0 -0
  21. data/public/images/acts_as_connectable/aol_32.png +0 -0
  22. data/public/images/acts_as_connectable/aol_64.png +0 -0
  23. data/public/images/acts_as_connectable/basecamp_128.png +0 -0
  24. data/public/images/acts_as_connectable/basecamp_256.png +0 -0
  25. data/public/images/acts_as_connectable/basecamp_32.png +0 -0
  26. data/public/images/acts_as_connectable/basecamp_64.png +0 -0
  27. data/public/images/acts_as_connectable/campfire_128.png +0 -0
  28. data/public/images/acts_as_connectable/campfire_256.png +0 -0
  29. data/public/images/acts_as_connectable/campfire_32.png +0 -0
  30. data/public/images/acts_as_connectable/campfire_64.png +0 -0
  31. data/public/images/acts_as_connectable/facebook_128.png +0 -0
  32. data/public/images/acts_as_connectable/facebook_256.png +0 -0
  33. data/public/images/acts_as_connectable/facebook_32.png +0 -0
  34. data/public/images/acts_as_connectable/facebook_64.png +0 -0
  35. data/public/images/acts_as_connectable/github_128.png +0 -0
  36. data/public/images/acts_as_connectable/github_256.png +0 -0
  37. data/public/images/acts_as_connectable/github_32.png +0 -0
  38. data/public/images/acts_as_connectable/github_64.png +0 -0
  39. data/public/images/acts_as_connectable/google_128.png +0 -0
  40. data/public/images/acts_as_connectable/google_256.png +0 -0
  41. data/public/images/acts_as_connectable/google_32.png +0 -0
  42. data/public/images/acts_as_connectable/google_64.png +0 -0
  43. data/public/images/acts_as_connectable/linkedin_128.png +0 -0
  44. data/public/images/acts_as_connectable/linkedin_256.png +0 -0
  45. data/public/images/acts_as_connectable/linkedin_32.png +0 -0
  46. data/public/images/acts_as_connectable/linkedin_64.png +0 -0
  47. data/public/images/acts_as_connectable/myspace_128.png +0 -0
  48. data/public/images/acts_as_connectable/myspace_256.png +0 -0
  49. data/public/images/acts_as_connectable/myspace_32.png +0 -0
  50. data/public/images/acts_as_connectable/myspace_64.png +0 -0
  51. data/public/images/acts_as_connectable/openid_128.png +0 -0
  52. data/public/images/acts_as_connectable/openid_256.png +0 -0
  53. data/public/images/acts_as_connectable/openid_32.png +0 -0
  54. data/public/images/acts_as_connectable/openid_64.png +0 -0
  55. data/public/images/acts_as_connectable/presently_128.png +0 -0
  56. data/public/images/acts_as_connectable/presently_256.png +0 -0
  57. data/public/images/acts_as_connectable/presently_32.png +0 -0
  58. data/public/images/acts_as_connectable/presently_64.png +0 -0
  59. data/public/images/acts_as_connectable/rails.png +0 -0
  60. data/public/images/acts_as_connectable/twitter_128.png +0 -0
  61. data/public/images/acts_as_connectable/twitter_256.png +0 -0
  62. data/public/images/acts_as_connectable/twitter_32.png +0 -0
  63. data/public/images/acts_as_connectable/twitter_64.png +0 -0
  64. data/public/images/acts_as_connectable/yahoo_128.png +0 -0
  65. data/public/images/acts_as_connectable/yahoo_256.png +0 -0
  66. data/public/images/acts_as_connectable/yahoo_32.png +0 -0
  67. data/public/images/acts_as_connectable/yahoo_64.png +0 -0
  68. metadata +160 -0
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in acts_as_connectable.gemspec
4
+ gemspec
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "acts_as_connectable/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "acts_as_connectable"
7
+ s.version = ActsAsConnectable::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Cody Swann"]
10
+ s.email = ["cody@gunnertech.com"]
11
+ s.homepage = "http://gunnertech.com"
12
+ s.summary = %q{A gem for wiring models, polymorphically, to social accounts using omniAuth and devise}
13
+ s.description = %q{Aids in configuring OmniAuth and desvise}
14
+
15
+ s.rubyforge_project = "acts_as_connectable"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency('omniauth', '>= 0.1.6')
23
+ s.add_dependency('devise', '>= 1.1.5')
24
+ end
@@ -0,0 +1,43 @@
1
+ class AuthenticationsController < ApplicationController
2
+
3
+ unloadable
4
+
5
+ def index
6
+ @authentications = current_user.authentications if current_user
7
+ end
8
+
9
+ def create
10
+ omniauth = request.env["omniauth.auth"]
11
+ if omniauth
12
+ uid = (omniauth['uid']||omniauth['extra']['access_token'].params['member_id'])
13
+ authentication = Authentication.find_by_provider_and_authenticationable_type_and_uid(omniauth['provider'], uid)
14
+ if authentication
15
+ flash[:notice] = "Signed in successfully."
16
+ sign_in_and_redirect(:user, authentication.user)
17
+ elsif current_user
18
+ current_user.authentications.create!(:provider => omniauth['provider'], :uid => uid, :token => omniauth['credentials']['token'], :secret => omniauth['credentials']['secret'])
19
+ flash[:notice] = "Authentication successful."
20
+ redirect_to authentications_url
21
+ else
22
+ user = User.new
23
+ user.apply_omniauth(omniauth)
24
+ if user.save
25
+ flash[:notice] = "Signed in successfully."
26
+ sign_in_and_redirect(:user, user)
27
+ else
28
+ session[:omniauth] = omniauth.except('extra')
29
+ redirect_to new_user_registration_url
30
+ end
31
+ end
32
+ else
33
+ redirect_to root_url
34
+ end
35
+ end
36
+
37
+ def destroy
38
+ @authentication = current_user.authentications.find(params[:id])
39
+ @authentication.destroy
40
+ flash[:notice] = "Successfully destroyed authentication."
41
+ redirect_to authentications_url
42
+ end
43
+ end
@@ -0,0 +1,18 @@
1
+ module LayoutHelper
2
+ def title(page_title, show_title = true)
3
+ content_for(:title) { page_title.to_s }
4
+ @show_title = show_title
5
+ end
6
+
7
+ def show_title?
8
+ @show_title
9
+ end
10
+
11
+ def stylesheet(*args)
12
+ content_for(:head) { stylesheet_link_tag(*args) }
13
+ end
14
+
15
+ def javascript(*args)
16
+ content_for(:head) { javascript_include_tag(*args) }
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ class Authentication < ActiveRecord::Base
2
+ PROVIDER_CONFIG = YAML.load_file("#{::Rails.root.to_s}/config/providers.yml")[::Rails.env]
3
+
4
+ belongs_to :user
5
+
6
+ validates :provider, :presence => true, :length => 1..64
7
+ validates :uid, :presence => true, :length => 1..128
8
+ validates :token, :length => 0..128, :allow_blank => true
9
+ validates :secret, :length => 0..128, :allow_blank => true
10
+
11
+ for p in PROVIDER_CONFIG['providers']
12
+ scope p['name'].to_sym, where(:provider => p['name'])
13
+ end
14
+
15
+ attr_accessible :user_id, :provider, :uid, :token, :secret
16
+ end
@@ -0,0 +1,31 @@
1
+
2
+ <% title "Sign In" %>
3
+ <% if @authentications %>
4
+ <% unless @authentications.empty? %>
5
+ <p><strong>You can sign in to this account using:</strong></p>
6
+ <div class="authentications">
7
+ <% for authentication in @authentications %>
8
+ <div class="authentication">
9
+ <%= image_tag "acts_as_connectable/#{authentication.provider}_32.png", :size => "32x32" %>
10
+ <div class="provider"><%= authentication.provider.titleize %></div>
11
+ <div class="uid"><%= authentication.uid %></div>
12
+ <%= link_to "X", authentication, :confirm => 'Are you sure you want to remove this authentication option?', :method => :delete, :class => "remove" %>
13
+ </div>
14
+ <% end %>
15
+ <div class="clear"></div>
16
+ </div>
17
+ <% end %>
18
+ <p><strong>Add another service to sign in with:</strong></p>
19
+ <% else %>
20
+ <p><strong>Sign in through one of these services:</strong></p>
21
+ <% end %>
22
+
23
+ <a href="/auth/twitter" class="auth_provider">
24
+ <%= image_tag "acts_as_connectable/twitter_64.png", :size => "64x64", :alt => "Twitter" %>Twitter</a>
25
+ <a href="/auth/facebook" class="auth_provider">
26
+ <%= image_tag "acts_as_connectable/facebook_64.png", :size => "64x64", :alt => "Facebook" %>Facebook</a>
27
+ <a href="/auth/google_apps" class="auth_provider">
28
+ <%= image_tag "acts_as_connectable/google_64.png", :size => "64x64", :alt => "Google" %>Google</a>
29
+ <a href="/auth/open_id" class="auth_provider">
30
+ <%= image_tag "acts_as_connectable/openid_64.png", :size => "64x64", :alt => "OpenID" %>OpenID</a>
31
+ <div class="clear"></div>
@@ -0,0 +1,87 @@
1
+ module OmniAuth
2
+ module Strategies
3
+ #
4
+ # Authenticate to Flickr
5
+ #
6
+ # @example Basic Usage
7
+ #
8
+ # use OmniAuth::Strategies::Flickr, 'API Key', 'Secret Key', :scope => 'read'
9
+ class Flickr
10
+ include OmniAuth::Strategy
11
+ attr_accessor :api_key, :secret_key, :options
12
+
13
+ # error catching, based on OAuth2 callback
14
+ class CallbackError < StandardError
15
+ attr_accessor :error, :error_reason
16
+ def initialize(error, error_reason)
17
+ self.error = error
18
+ self.error_reason = error_reason
19
+ end
20
+ end
21
+
22
+ # @param [Rack Application] app standard middleware application parameter
23
+ # @param [String] api_key the application id as [registered on Flickr](http://www.flickr.com/services/apps/)
24
+ # @param [String] secret_key the application secret as [registered on Flickr](http://www.flickr.com/services/apps/)
25
+ # @option options ['read','write','delete] :scope ('read') the scope of your authorization request; must be `read` or 'write' or 'delete'
26
+ def initialize(app, api_key, secret_key, options = {})
27
+ super(app, :flickr)
28
+ @api_key = api_key
29
+ @secret_key = secret_key
30
+ @options = {:scope => 'read'}.merge(options)
31
+ end
32
+
33
+ protected
34
+
35
+ def request_phase
36
+ params = { :api_key => api_key, :perms => options[:scope] }
37
+ params[:api_sig] = flickr_sign(params)
38
+ query_string = params.collect{ |key,value| "#{key}=#{Rack::Utils.escape(value)}" }.join('&')
39
+ redirect "http://flickr.com/services/auth/?#{query_string}"
40
+ end
41
+
42
+ def callback_phase
43
+ params = { :api_key => api_key, :method => 'flickr.auth.getToken', :frob => request.params['frob'], :format => 'json', :nojsoncallback => '1' }
44
+ params[:api_sig] = flickr_sign(params)
45
+
46
+ response = RestClient.get('http://api.flickr.com/services/rest/', { :params => params })
47
+ auth = MultiJson.decode(response.to_s)
48
+ raise CallbackError.new(auth['code'],auth['message']) if auth['stat'] == 'fail'
49
+
50
+ @user = auth['auth']['user']
51
+ @access_token = auth['auth']['token']['_content']
52
+
53
+ super
54
+ rescue CallbackError => e
55
+ fail!(:invalid_response, e)
56
+ end
57
+
58
+ def auth_hash
59
+ OmniAuth::Utils.deep_merge(super, {
60
+ 'uid' => @user['nsid'],
61
+ 'credentials' => { 'token' => @access_token },
62
+ 'user_info' => @user,
63
+ 'extra' => { 'user_hash' => @user }
64
+ })
65
+ end
66
+
67
+ def flickr_sign(params)
68
+ Digest::MD5.hexdigest(secret_key + params.sort{|a,b| a[0].to_s <=> b[0].to_s }.flatten.join)
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+
75
+ module ProvidersConfig
76
+ end
77
+
78
+ Rails.application.config.middleware.use OmniAuth::Builder do
79
+ PROVIDER_CONFIG = YAML.load_file("#{::Rails.root.to_s}/config/providers.yml")[::Rails.env]
80
+ for p in PROVIDER_CONFIG['providers']
81
+ provider p['name'], p['key'], p['secret']
82
+ ProvidersConfig.const_set(p['name'].classify.upcase,{
83
+ :key => p['key'],
84
+ :secret => p['secret']
85
+ })
86
+ end
87
+ end
@@ -0,0 +1,26 @@
1
+ defaults: &defaults
2
+ providers:
3
+ - name: twitter
4
+ key: qLDNyJWYR4uwgVlQ1Z3A
5
+ secret: EZlvNgye1feUDvF9Mn6XyNgYfILBEfIe17K5xKZyBs
6
+ - name: facebook
7
+ key: 141623055893054 #aka app_id
8
+ secret: 2adbbdd1c5a28f3fac021c5cd1a59f47
9
+ - name: foursquare
10
+ key: ZFJLIRWR5VAAS2M3ANVXBGJJ2W0LVOG003W52E0M5JWUV5MP
11
+ secret: V2XZFYRUEVCU1EI4LCDYNCADX43NEJERJENRLYIL0APSALZ2
12
+ - name: flickr
13
+ key: 598bcfd26c5091db5b68713f5126dc26
14
+ secret: 7cc1ace805d88475
15
+ - name: meetup
16
+ key: 776E306E6B28327449134646BBF89807
17
+ secret: 4CB887C5918F48F3ADE8E0E931F74B70
18
+
19
+ development:
20
+ <<: *defaults
21
+
22
+ test:
23
+ <<: *defaults
24
+
25
+ production:
26
+ <<: *defaults
@@ -0,0 +1,20 @@
1
+ class ActsAsConnectableCreateAuthentications < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :authentications do |t|
4
+ t.references :authenticationable, :polymorphic => true
5
+ t.string :provider, :null => false, :limit => 64
6
+ t.string :uid, :null => false, :limit => 128
7
+ t.string :token, :limit => 128
8
+ t.string :secret, :limit => 128
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :authentications, [:authenticationable_id, :authenticationable_type], :name => "index_authentications_on_a_id_a_type"
13
+ add_index :authentications, :provider
14
+ add_index :authentications, [:provider, :authenticationable_type, :uid]
15
+ end
16
+
17
+ def self.down
18
+ drop_table :authentications
19
+ end
20
+ end
@@ -0,0 +1,23 @@
1
+ module ActsAsConnectable
2
+ # Default way to setup ActsAsConnectable. Run rails generate acts_as_connectable:install
3
+ # to create a fresh initializer with all configuration values.
4
+ def self.setup
5
+ yield self
6
+ end
7
+
8
+ def self.included(base)
9
+ base.extend ClassMethods
10
+ def base.apply_omniauth(omniauth)
11
+ authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
12
+ end
13
+ end
14
+
15
+ module ClassMethods
16
+ def acts_as_connectable(*args)
17
+ has_many :authentications, {:as => :authenticationable, :dependent => :destroy, :class_name => "Authentication"}
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+ ActiveRecord::Base.send(:include, ActsAsConnectable)
@@ -0,0 +1,3 @@
1
+ module ActsAsConnectable
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,26 @@
1
+ module ActsAsConnectable
2
+ ## Define ControllerMethods
3
+ module Controller
4
+ ## this one manages the usual self.included, klass_eval stuff
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_filter :test_controller_instance_method
9
+ end
10
+
11
+ module InstanceMethods
12
+ def test_controller_instance_method
13
+ puts "###### This text is coming from an application_controller before_filter that is being declared and triggered from inside the engine. This before_filter is automatically integrated in when the engine is installed into an app. Look inside lib/application_controller.rb to find it. ######"
14
+ end
15
+
16
+ # This method is available inside application_controller but it is not being
17
+ # automatically executed. Notice the before_filter line above that is automatically
18
+ # executing the first method.
19
+ def second_controller_instance_method
20
+ puts "###### This method is not automatically run inside application_controller, but it is available inside application_controller. To see this example add 'before_filter :second_controller_instance_method' at the top of your app's application_controller.rb ######"
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ ::ActionController::Base.send :include, ActsAsConnectable::Controller
@@ -0,0 +1,7 @@
1
+ module ApplicationHelper
2
+
3
+ def app_wide_helper_method
4
+ "this output is from an app-wide helper method that is declared within the gem"
5
+ end
6
+
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'rails'
2
+ require 'action_controller'
3
+ require 'application_helper'
4
+
5
+ module ActsAsConnectable
6
+ class Engine < Rails::Engine
7
+
8
+
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ module ActsAsConnectable
2
+ module Generators
3
+ class ActsAsConnectableGenerator < Rails::Generators::NamedBase
4
+ namespace "acts_as_connectable"
5
+ source_root File.expand_path("../templates", __FILE__)
6
+
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,48 @@
1
+ module ActsAsConnectable
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ def copy_initializer
7
+ copy_file "../../../../config/initializers/omniauth.rb", "config/initializers/omniauth.rb"
8
+ end
9
+
10
+ def copy_providers
11
+ copy_file "../../../../config/providers.yml", "config/providers.yml"
12
+ end
13
+
14
+ def copy_controllers
15
+ copy_file "../../../../app/controllers/authentications_controller.rb", "app/controllers/authentications_controller.rb"
16
+ end
17
+
18
+ def copy_models
19
+ copy_file "../../../../app/models/authentication.rb", "app/models/authentication.rb"
20
+ end
21
+
22
+ def copy_helpers
23
+ copy_file "../../../../app/helpers/layout_helper.rb", "app/helpers/layout_helper.rb"
24
+ end
25
+
26
+ def copy_views
27
+ directory "../../../../app/views/authentications", "app/views/authentications"
28
+ end
29
+
30
+ def copy_assets
31
+ directory "../../../../public/images/acts_as_connectable", "public/images/acts_as_connectable"
32
+ end
33
+
34
+ def copy_migration
35
+ #copy_file "../../../../db/migrate/create_authentications.rb", "db/migrate/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}_acts_as_connectable_create_authentications.rb"
36
+ end
37
+
38
+ def show_readme
39
+ #readme "README" if behavior == :invoke
40
+ end
41
+
42
+ def copy_routes
43
+ route "match '/auth/:provider/callback' => 'authentications#create'"
44
+ route "resources :authentications"
45
+ end
46
+ end
47
+ end
48
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_connectable
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 2
9
+ version: 0.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Cody Swann
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-14 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: omniauth
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ - 1
31
+ - 6
32
+ version: 0.1.6
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: devise
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 1
45
+ - 1
46
+ - 5
47
+ version: 1.1.5
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ description: Aids in configuring OmniAuth and desvise
51
+ email:
52
+ - cody@gunnertech.com
53
+ executables: []
54
+
55
+ extensions: []
56
+
57
+ extra_rdoc_files: []
58
+
59
+ files:
60
+ - .gitignore
61
+ - Gemfile
62
+ - Rakefile
63
+ - acts_as_connectable.gemspec
64
+ - app/controllers/authentications_controller.rb
65
+ - app/helpers/layout_helper.erb
66
+ - app/models/authentication.rb
67
+ - app/views/authentications/index.html.erb
68
+ - config/initializers/omniauth.rb
69
+ - config/providers.yml
70
+ - db/migrate/create_authentications.rb
71
+ - lib/acts_as_connectable.rb
72
+ - lib/acts_as_connectable/version.rb
73
+ - lib/application_controller.rb
74
+ - lib/application_helper.rb
75
+ - lib/engine.rb
76
+ - lib/generators/acts_as_connectable/acts_as_connectable_generator.rb
77
+ - lib/generators/acts_as_connectable/install_generator.rb
78
+ - public/images/acts_as_connectable/aol_128.png
79
+ - public/images/acts_as_connectable/aol_256.png
80
+ - public/images/acts_as_connectable/aol_32.png
81
+ - public/images/acts_as_connectable/aol_64.png
82
+ - public/images/acts_as_connectable/basecamp_128.png
83
+ - public/images/acts_as_connectable/basecamp_256.png
84
+ - public/images/acts_as_connectable/basecamp_32.png
85
+ - public/images/acts_as_connectable/basecamp_64.png
86
+ - public/images/acts_as_connectable/campfire_128.png
87
+ - public/images/acts_as_connectable/campfire_256.png
88
+ - public/images/acts_as_connectable/campfire_32.png
89
+ - public/images/acts_as_connectable/campfire_64.png
90
+ - public/images/acts_as_connectable/facebook_128.png
91
+ - public/images/acts_as_connectable/facebook_256.png
92
+ - public/images/acts_as_connectable/facebook_32.png
93
+ - public/images/acts_as_connectable/facebook_64.png
94
+ - public/images/acts_as_connectable/github_128.png
95
+ - public/images/acts_as_connectable/github_256.png
96
+ - public/images/acts_as_connectable/github_32.png
97
+ - public/images/acts_as_connectable/github_64.png
98
+ - public/images/acts_as_connectable/google_128.png
99
+ - public/images/acts_as_connectable/google_256.png
100
+ - public/images/acts_as_connectable/google_32.png
101
+ - public/images/acts_as_connectable/google_64.png
102
+ - public/images/acts_as_connectable/linkedin_128.png
103
+ - public/images/acts_as_connectable/linkedin_256.png
104
+ - public/images/acts_as_connectable/linkedin_32.png
105
+ - public/images/acts_as_connectable/linkedin_64.png
106
+ - public/images/acts_as_connectable/myspace_128.png
107
+ - public/images/acts_as_connectable/myspace_256.png
108
+ - public/images/acts_as_connectable/myspace_32.png
109
+ - public/images/acts_as_connectable/myspace_64.png
110
+ - public/images/acts_as_connectable/openid_128.png
111
+ - public/images/acts_as_connectable/openid_256.png
112
+ - public/images/acts_as_connectable/openid_32.png
113
+ - public/images/acts_as_connectable/openid_64.png
114
+ - public/images/acts_as_connectable/presently_128.png
115
+ - public/images/acts_as_connectable/presently_256.png
116
+ - public/images/acts_as_connectable/presently_32.png
117
+ - public/images/acts_as_connectable/presently_64.png
118
+ - public/images/acts_as_connectable/rails.png
119
+ - public/images/acts_as_connectable/twitter_128.png
120
+ - public/images/acts_as_connectable/twitter_256.png
121
+ - public/images/acts_as_connectable/twitter_32.png
122
+ - public/images/acts_as_connectable/twitter_64.png
123
+ - public/images/acts_as_connectable/yahoo_128.png
124
+ - public/images/acts_as_connectable/yahoo_256.png
125
+ - public/images/acts_as_connectable/yahoo_32.png
126
+ - public/images/acts_as_connectable/yahoo_64.png
127
+ has_rdoc: true
128
+ homepage: http://gunnertech.com
129
+ licenses: []
130
+
131
+ post_install_message:
132
+ rdoc_options: []
133
+
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ segments:
142
+ - 0
143
+ version: "0"
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ segments:
150
+ - 0
151
+ version: "0"
152
+ requirements: []
153
+
154
+ rubyforge_project: acts_as_connectable
155
+ rubygems_version: 1.3.7
156
+ signing_key:
157
+ specification_version: 3
158
+ summary: A gem for wiring models, polymorphically, to social accounts using omniAuth and devise
159
+ test_files: []
160
+