headstart 0.7.0 → 0.8.0

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/Rakefile CHANGED
@@ -13,7 +13,7 @@ begin
13
13
  gem.authors = ["Bran Burridge"]
14
14
  gem.files = FileList["[A-Z]*", "{app,config,generators,lib,shoulda_macros,rails}/**/*"]
15
15
 
16
- gem.add_dependency "mini_fb", '=0.2.2'
16
+ gem.add_dependency "mini_fb", '=1.1.3'
17
17
  gem.add_dependency "delayed_job", '=1.8.4'
18
18
  gem.add_dependency "mad_mimi_mailer", '=0.0.7'
19
19
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.8.0
@@ -6,6 +6,7 @@ class Headstart::SessionsController < ApplicationController
6
6
  filter_parameter_logging :password
7
7
 
8
8
  def new
9
+ @oauth_url = MiniFB.oauth_url(Headstart.configuration.facebook_app_id, get_full_app_path + "/sessions/create", :scope=>MiniFB.scopes.join(","))
9
10
  render :template => 'sessions/new'
10
11
  end
11
12
 
@@ -13,8 +14,7 @@ class Headstart::SessionsController < ApplicationController
13
14
  @user = if params[:session]
14
15
  ::User.authenticate(params[:session][:email], params[:session][:password])
15
16
  else
16
- ::User.find_facebook_user(cookies[Headstart.configuration.facebook_api_key + "_session_key"],
17
- cookies[Headstart.configuration.facebook_api_key + "_user"])
17
+ ::User.find_facebook_user(params['code'], get_full_app_path)
18
18
  end
19
19
 
20
20
  if @user.nil?
@@ -23,8 +23,9 @@ class Headstart::SessionsController < ApplicationController
23
23
  else
24
24
  if @user.email_confirmed?
25
25
  flash_success_after_create
26
- else
26
+ elsif @user.email_confirmation_sent_at.blank?
27
27
  ::HeadstartMailer.deliver_welcome(@user)
28
+ @user.update_attribute(:email_confirmation_sent_at, Time.now)
28
29
  flash_notice_after_create
29
30
  end
30
31
  sign_in(@user)
@@ -1,5 +1,5 @@
1
1
  class GenericMailer < ActionMailer::Base
2
-
2
+
3
3
  def change_password(user)
4
4
  from Headstart.configuration.mailer_sender
5
5
  recipients user.email
@@ -9,6 +9,7 @@ class GenericMailer < ActionMailer::Base
9
9
  body :url => edit_user_password_url(user,
10
10
  :token => user.password_reset_token,
11
11
  :escape => false)
12
+ content_type "text/html"
12
13
  end
13
14
 
14
15
  def welcome(user)
@@ -18,14 +19,7 @@ class GenericMailer < ActionMailer::Base
18
19
  :scope => [:headstart, :models, :headstart_mailer],
19
20
  :default => "Welcome")
20
21
  body :user => user
22
+ content_type "text/html"
21
23
  end
22
24
 
23
- def confirmation(user)
24
- from Headstart.configuration.mailer_sender
25
- recipients user.email
26
- subject I18n.t(:confirmation,
27
- :scope => [:headstart, :models, :headstart_mailer],
28
- :default => "Account confirmation")
29
- body :user => user
30
- end
31
25
  end
@@ -27,18 +27,14 @@
27
27
  <%= link_to "Forgot password?", new_password_path %>
28
28
 
29
29
  <%= form.submit "Sign in", :disable_with => "Please wait..." %>
30
- <%- if Headstart.configuration.use_facebook_connect -%>
31
- or <fb:login-button onlogin="facebook_onlogin();" length="long" v="2" size="large"></fb:login-button>
32
- <%- end -%>
30
+
33
31
  </div>
34
32
  <% end %>
35
33
 
36
34
 
37
-
38
35
  <%- if Headstart.configuration.use_facebook_connect -%>
39
- <script type="text/javascript">
40
- FB.init("<%= Headstart.configuration.facebook_api_key %>", "xd_receiver.html", {
41
- permsToRequestOnConnect : "email",
42
- });
43
- </script>
36
+ <div style="margin-top:20px">
37
+ <%= link_to image_tag("facebook_login.png"), @oauth_url %>
38
+ </div>
44
39
  <%- end -%>
40
+
@@ -11,6 +11,7 @@
11
11
  <%= form.label :last_name %>
12
12
  <%= form.text_field :last_name %>
13
13
  </p>
14
+ <%- if current_user.blank? || current_user.facebook_uid.blank? -%>
14
15
  <p class="password_field">
15
16
  <%= form.label :password %>
16
17
  <%= form.password_field :password %>
@@ -19,3 +20,8 @@
19
20
  <%= form.label :password_confirmation, "Confirm password" %>
20
21
  <%= form.password_field :password_confirmation %>
21
22
  </p>
23
+ <% end %>
24
+ <p class="text_field">
25
+ <%= form.label :avatar %>
26
+ <input id="photo" name="user[avatar]" type="file"/>
27
+ </p>
@@ -1,7 +1,7 @@
1
1
  <% content_for :title do %>Edit My Profile<% end %>
2
2
  <h2>Edit My Profile</h2>
3
3
 
4
- <% form_for @user do |form| %>
4
+ <% form_for @user, :html => { :enctype => "multipart/form-data"} do |form| %>
5
5
  <%= render :partial => '/users/form', :object => form %>
6
6
  <%= form.submit 'Save', :disable_with => 'Please wait...' %>
7
7
  <% end %>
@@ -1,7 +1,7 @@
1
1
  <% content_for :title do %>Sign up<% end %>
2
2
  <h2>Sign up</h2>
3
3
 
4
- <% form_for @user do |form| %>
4
+ <% form_for @user, :html => { :enctype => "multipart/form-data"} do |form| %>
5
5
  <%= render :partial => '/users/form', :object => form %>
6
6
  <%= form.submit 'Sign up', :disable_with => 'Please wait...' %>
7
7
  <% end %>
@@ -1,8 +1,10 @@
1
1
  <h2>My Profile</h2>
2
2
 
3
+ <%= image_tag avatar_url(@user) %>
4
+
3
5
  <div id="user_profile">
4
6
  <b>First Name:</b> <%=h @user.first_name %><br/>
5
7
  <b>Last Name:</b> <%=h @user.last_name %><br/>
6
8
  <b>Email:</b> <%=h @user.email %><br/>
7
- <%= link_to 'Edit', edit_user_path(@user) %>
9
+ <% if signed_in? && current_user.id == @user.id %><%= link_to 'Edit', edit_user_path(current_user) %><% end %>
8
10
  </div>
@@ -40,6 +40,8 @@ class HeadstartGenerator < Rails::Generator::Base
40
40
  return content
41
41
  end'
42
42
 
43
+ m.file "app/helpers/users_helper.rb", "app/helpers/users_helper.rb"
44
+
43
45
  m.directory File.join("public", "stylesheets")
44
46
  m.file "style.css", "public/stylesheets/style.css"
45
47
  m.file "report.css", "public/stylesheets/report.css"
@@ -1,7 +1,7 @@
1
1
  <!-- Woopra Code Start -->
2
2
  <script type="text/javascript" src="//static.woopra.com/js/woopra.v2.js"></script>
3
3
  <script type="text/javascript">
4
- <% if logged_in? %>
4
+ <% if signed_in? %>
5
5
  woopraTracker.addVisitorProperty("name", '<%= current_user.name %>');
6
6
  woopraTracker.addVisitorProperty("email", '<%= current_user.email %>');
7
7
  <% end %>
@@ -0,0 +1,10 @@
1
+ module UsersHelper
2
+
3
+ def avatar_url(user)
4
+ if user.facebook_uid.present?
5
+ return "http://graph.facebook.com/#{user.facebook_uid}/picture?type=square"
6
+ else
7
+ return user.avatar.url(:thumb)
8
+ end
9
+ end
10
+ end
@@ -76,8 +76,8 @@
76
76
 
77
77
  <% if ENV["RAILS_ENV"] == "production" %>
78
78
  <% if Settings.woopra.present? %><%= render :partial => 'layouts/woopra' %><% end %>
79
- <% if Settings.google_analytics.present? %><%= render :partial => 'layouts/google_analytics' %>
79
+ <% if Settings.google_analytics.present? %><%= render :partial => 'layouts/google_analytics' %><% end %>
80
80
  <% end %>
81
-
81
+ <!-- $zendesk -->
82
82
  </body>
83
83
  </html>
@@ -11,6 +11,7 @@ begin
11
11
  config.use_delayed_job = configuration[:use_delayed_job]
12
12
  config.facebook_api_key = configuration[:facebook_api_key]
13
13
  config.facebook_secret_key = configuration[:facebook_secret_key]
14
+ config.facebook_app_id = configuration[:facebook_app_id]
14
15
  end
15
16
 
16
17
  if configuration[:madmimi_username].present? && configuration[:madmimi_api_key].present?
@@ -15,31 +15,45 @@
15
15
  #
16
16
 
17
17
  development:
18
- mailer_sender: donotreply@example.com
18
+ mailer_sender: $mailer_sender
19
19
  madmimi_username:
20
20
  madmimi_api_key:
21
21
  impersonation_hash:
22
- use_facebook_connect: false
22
+ use_facebook_connect: $use_facebook_connect
23
23
  use_delayed_job: $delayed_job
24
- facebook_api_key:
25
- facebook_secret_key:
24
+ facebook_api_key: $facebook_api_key
25
+ facebook_secret_key: $facebook_secret_key
26
+ facebook_app_id: $facebook_app_id
26
27
 
28
+ staging:
29
+ mailer_sender: $mailer_sender
30
+ madmimi_username:
31
+ madmimi_api_key:
32
+ impersonation_hash:
33
+ use_facebook_connect: $use_facebook_connect
34
+ use_delayed_job: $delayed_job
35
+ facebook_api_key: $facebook_api_key
36
+ facebook_secret_key: $facebook_secret_key
37
+ facebook_app_id: $facebook_app_id
38
+
27
39
  test:
28
- mailer_sender: donotreply@example.com
40
+ mailer_sender: $mailer_sender
29
41
  madmimi_username:
30
42
  madmimi_api_key:
31
43
  impersonation_hash:
32
- use_facebook_connect: false
44
+ use_facebook_connect: $use_facebook_connect
33
45
  use_delayed_job: $delayed_job
34
- facebook_api_key:
35
- facebook_secret_key:
46
+ facebook_api_key: $facebook_api_key
47
+ facebook_secret_key: $facebook_secret_key
48
+ facebook_app_id: $facebook_app_id
36
49
 
37
50
  production:
38
- mailer_sender: donotreply@example.com
51
+ mailer_sender: $mailer_sender
39
52
  madmimi_username:
40
53
  madmimi_api_key:
41
54
  impersonation_hash:
42
- use_facebook_connect: false
55
+ use_facebook_connect: $use_facebook_connect
43
56
  use_delayed_job: $delayed_job
44
- facebook_api_key:
45
- facebook_secret_key:
57
+ facebook_api_key: $facebook_api_key
58
+ facebook_secret_key: $facebook_secret_key
59
+ facebook_app_id: $facebook_app_id
@@ -12,6 +12,13 @@ class HeadstartCreateUsers < ActiveRecord::Migration
12
12
  t.string :password_reset_token, :limit => 128
13
13
  t.string :confirmation_token, :limit => 128
14
14
  t.boolean :email_confirmed, :default => false, :null => false
15
+ t.boolean :email_confirmation_sent_at, :datetime
16
+
17
+ t.string :avatar_file_name
18
+ t.string :avatar_content_type
19
+ t.integer :avatar_file_size
20
+ t.datetime :avatar_updated_at
21
+
15
22
  t.timestamps
16
23
  end
17
24
 
@@ -1,3 +1,7 @@
1
1
  class User < ActiveRecord::Base
2
2
  include Headstart::User
3
+
4
+ # If we don't want the originals, add , :original => "1x1"
5
+ has_attached_file :avatar, :styles => { :thumb => "50x50#", :mid => "200x300" }, :storage => :s3, :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
6
+ :path => ":class/:id/:style.:extension", :default_url => "/images/missing.jpg"
3
7
  end
@@ -9,16 +9,23 @@ module Headstart
9
9
  module ClassMethods
10
10
  def self.extended(controller)
11
11
  controller.helper_method :current_user, :signed_in?,
12
- :signed_out?, :impersonating?
12
+ :signed_out?, :impersonating?,
13
+ :get_full_app_path
13
14
  controller.hide_action :current_user, :current_user=,
14
15
  :signed_in?, :signed_out?,
15
16
  :sign_in, :sign_out,
16
17
  :authenticate, :deny_access,
17
- :impersonating?
18
+ :impersonating?, :get_full_app_path
18
19
  end
19
20
  end
20
21
 
21
22
  module InstanceMethods
23
+
24
+
25
+ def get_full_app_path
26
+ return "http://" + APP_CONFIG[:domain]
27
+ end
28
+
22
29
  # User in the current cookie
23
30
  #
24
31
  # @return [User, nil]
@@ -97,7 +104,7 @@ module Headstart
97
104
 
98
105
 
99
106
  protected
100
-
107
+
101
108
  def user_from_cookie
102
109
  if token = cookies[:remember_token]
103
110
  ::User.find_by_remember_token(token)
@@ -5,6 +5,7 @@ module Headstart
5
5
  attr_accessor :use_facebook_connect
6
6
  attr_accessor :facebook_api_key
7
7
  attr_accessor :facebook_secret_key
8
+ attr_accessor :facebook_app_id
8
9
  attr_accessor :use_delayed_job
9
10
 
10
11
  def initialize
@@ -250,24 +250,24 @@ module Headstart
250
250
  return user if user.authenticated?(password)
251
251
  end
252
252
 
253
- def find_facebook_user(facebook_session, facebook_uid)
254
- return nil unless Headstart.configuration.use_facebook_connect && facebook_session && facebook_uid
255
-
253
+ def find_facebook_user(facebook_code, full_app_path)
254
+ return nil unless Headstart.configuration.use_facebook_connect && facebook_code
255
+
256
256
  begin
257
- facebook_user = MiniFB::Session.new(Headstart.configuration.facebook_api_key,
258
- Headstart.configuration.facebook_secret_key,
259
- facebook_session, facebook_uid).user
257
+ access_token_hash = MiniFB.oauth_access_token(Headstart.configuration.facebook_app_id, full_app_path + "/sessions/create", Headstart.configuration.facebook_secret_key, facebook_code)
258
+ @response_hash = MiniFB.get(access_token_hash['access_token'], 'me', :type=> nil, :metadata=>true)
259
+ @response_hash["user"] == @response_hash.user
260
260
  rescue MiniFB::FaceBookError
261
- facebook_user = nil
261
+ @response_hash = nil
262
262
  end
263
- return nil unless facebook_user
264
-
265
- user = ::User.find_by_facebook_uid(facebook_uid) || ::User.find_by_email(facebook_user['email']) || ::User.new
263
+ return nil unless @response_hash
264
+
265
+ user = ::User.find_by_facebook_uid(@response_hash['id']) || ::User.find_by_email(@response_hash['email']) || ::User.new
266
266
  user.tap do |user|
267
- user.facebook_uid = facebook_uid
268
- user.email = facebook_user['email']
269
- user.first_name = facebook_user['first_name']
270
- user.last_name = facebook_user['last_name']
267
+ user.facebook_uid = @response_hash['id']
268
+ user.email = @response_hash['email']
269
+ user.first_name = @response_hash['first_name']
270
+ user.last_name = @response_hash['last_name']
271
271
  user.save
272
272
  end
273
273
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: headstart
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 63
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 7
8
+ - 8
9
9
  - 0
10
- version: 0.7.0
10
+ version: 0.8.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bran Burridge
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-22 00:00:00 -04:00
18
+ date: 2010-10-11 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,12 +26,12 @@ dependencies:
26
26
  requirements:
27
27
  - - "="
28
28
  - !ruby/object:Gem::Version
29
- hash: 19
29
+ hash: 21
30
30
  segments:
31
- - 0
32
- - 2
33
- - 2
34
- version: 0.2.2
31
+ - 1
32
+ - 1
33
+ - 3
34
+ version: 1.1.3
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
@@ -125,6 +125,7 @@ files:
125
125
  - generators/headstart/templates/add.png
126
126
  - generators/headstart/templates/app/controllers/sessions_controller.rb
127
127
  - generators/headstart/templates/app/helpers/application_helper.rb
128
+ - generators/headstart/templates/app/helpers/users_helper.rb
128
129
  - generators/headstart/templates/app/views/sessions/index.html.erb
129
130
  - generators/headstart/templates/application.html.erb
130
131
  - generators/headstart/templates/application_edit.png