Ruby on Rails Monday, August 27, 2018

class UsersController < ApplicationController
before_action :logged_in_user, only: [:index, :edit, :update, :destroy,
:following, :followers]

before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: :destroy

def index
@users = User.where(activated: true).paginate(page: params[:page])
end

def show
@user = User.find(params[:id])
redirect_to root_url and return unless @user.activated?
end

def new
@user = User.new
end

def create
@user = User.new(user_params)
#@user = User.new(params[:subscription])
if @user.save_with_payment
@user.send_activation_email
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end

def edit
@user = User.find(params[:id])
end

def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end

def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
redirect_to users_url
end


private

def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end

# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end

# Confirms an admin user.
def admin_user
redirect_to(root_url) unless current_user.admin?
end

end
class User < ApplicationRecord

attr_accessor :remember_token, :activation_token, :reset_token, :stripe_card_token
before_save :downcase_email
before_create :create_activation_digest

validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }, allow_nil: true

def save_with_payment
if valid?
@amount = 2000

customer = Stripe::Customer.create(
:email => params[:stripeEmail],
:source => params[:stripeToken]
)

charge = Stripe::Charge.create(
:customer => customer.id,
:amount => @amount,
:description => 'Rails Stripe customer',
:currency => 'usd'
)
puts "Customer is #{customer}"
puts "Charge is #{charge}"
#customer = Stripe::Customer.create(description: email, card: stripe_card_token)
#puts "Customer is #{customer}"
self.stripe_customer_token = customer.id
save!
end

#rescue Stripe::InvalidRequestError => e
#logger.error "Stripe error while creating customer: #{e.message}"
#errors.add :base, "There was a problem with your credit card."
#false
end

# Returns the hash digest of the given string.
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end

# Returns a random token.
def User.new_token
SecureRandom.urlsafe_base64
end

# Remembers a user in the database for use in persistent sessions.
def remember
self.remember_token = User.new_token
update_attribute(:remember_digest, User.digest(remember_token))
end

# Returns true if the given token matches the digest.
def authenticated?(attribute, token)
digest = send("#{attribute}_digest")
return false if digest.nil?
BCrypt::Password.new(digest).is_password?(token)
end

# Forgets a user.
def forget
update_attribute(:remember_digest, nil)
end


# Activates an account.
def activate
update_columns(activated: true, activated_at: Time.zone.now)
end

# Sends activation email.
def send_activation_email
UserMailer.account_activation(self).deliver_now
end

# Sets the password reset attributes.
def create_reset_digest
self.reset_token = User.new_token
update_attribute(:reset_digest, User.digest(reset_token))
update_attribute(:reset_sent_at, Time.zone.now)
end

# Sends password reset email.
def send_password_reset_email
UserMailer.password_reset(self).deliver_now
end

# Returns true if a password reset has expired.
def password_reset_expired?
reset_sent_at < 2.hours.ago
end

# Returns a user's status feed.

private

# Converts email to all lower-case.
def downcase_email
email.downcase!
#self.email = email.downcase
end

# Creates and assigns the activation token and digest.
def create_activation_digest
self.activation_token = User.new_token
self.activation_digest = User.digest(activation_token)
end

end
Stripe.api_key = 'sk_test_t3fTSthCbyYJQofGSmZcB5Ws'
STRIPE_PUBLIC_KEY = 'pk_test_2rGQe79ZkKf1ZZlRSInaCNvW'




When I submit the form to Stripe

I am generating the stripe token.in 

POST /v1/tokens


Response body
{
"object": "token",
"card": {
"id": "card_1D2tSkISUkCPHLGnENkY88xy",
"object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "Visa",
"country": "US",
"cvc_check": "unchecked",
"dynamic_last4": null,
"exp_month": 8,
"exp_year": 2018,
"funding": "credit",
"last4": "4242",
"metadata": {
},
"name": null,
"tokenization_method": null
},
"client_ip": "125.239.133.236",
"created": 1535171606,
"livemode": false,
"type": "card",
"used": false
}

but its not showing up in

POST /v1/customers


Request POST body

The source variable with the stripe token should show below the email variable.

Any help would be appreciated as I gave some one E.B Adair California   Rails job which I could have kept.

Cheers Dave

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.


--
Dave Merrick

Daves Web Designs

Website http://www.daveswebdesigns.co.nz

Email merrickdav@gmail.com

Ph   03 216 2053

Cell 027 3089 169

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/CA%2B%3DMcKbt1qKb3CKwvB0WFXxo0ZFX7Ya1g9wyMdUgStN8sLLg%3Dg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment