mini_auth 0.1.0.pre

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ log/*
6
+
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rails", "~> 3.1.0"
data/README.md ADDED
@@ -0,0 +1,58 @@
1
+ mini_auth
2
+ =========
3
+
4
+ A minimal authentication module for Rails
5
+
6
+ Install
7
+ -------
8
+
9
+ Add to your Gemfile:
10
+
11
+ gem "mini_auth"
12
+
13
+ or install as a plugin
14
+
15
+ $ cd RAILS_ROOT
16
+ $ rails plugin install git://github.com/kuroda/mini_auth.git
17
+
18
+ Usage
19
+ -----
20
+
21
+ class CreateUsers < ActiveRecord::Migration
22
+ def change
23
+ create_table :users do |t|
24
+ t.string :name, :null => false
25
+ t.string :password_digest, :null => true
26
+
27
+ t.timestamps
28
+ end
29
+ end
30
+ end
31
+
32
+ class User < ActiveRecord::Base
33
+ include MiniAuth
34
+ end
35
+
36
+ a = User.new(:name => "alice", :password => "hotyoga")
37
+
38
+ a.save # => true
39
+ a.password_digest # => "$2a$10$F5YbEd..."
40
+ a.authenticate("hotyoga) # => true
41
+
42
+ a.update_attributes :name => "Alice"
43
+ a.authenticate("hotyoga") # => true
44
+
45
+ b = User.new(:name => "bob")
46
+
47
+ b.password = ""
48
+ b.valid? # => false
49
+ b.errors[:password] # => "can't be blank"
50
+
51
+ b.password = nil
52
+ b.valid? # => true
53
+ b.save!
54
+ b.password_digest # => nil
55
+ b.authenticate(nil) # => false
56
+
57
+ b.update_attributes :password_digest => 'dummy'
58
+ b.password_digest # => nil (unchanged)
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core'
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec) do |spec|
6
+ spec.pattern = FileList['spec/**/*_spec.rb']
7
+ end
8
+
9
+ task :default => :spec
@@ -0,0 +1,3 @@
1
+ module MiniAuth
2
+ VERSION = "0.1.0.pre"
3
+ end
data/lib/mini_auth.rb ADDED
@@ -0,0 +1,26 @@
1
+ require "mini_auth/version"
2
+ require "bcrypt"
3
+
4
+ module MiniAuth
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attr_accessor :password
9
+
10
+ validate do
11
+ if password && password.blank?
12
+ errors.add(:password, :blank)
13
+ end
14
+ end
15
+
16
+ before_save do
17
+ if password
18
+ self.password_digest = BCrypt::Password.create(password)
19
+ end
20
+ end
21
+ end
22
+
23
+ def authenticate(password)
24
+ password_digest && BCrypt::Password.new(password_digest) == password
25
+ end
26
+ end
data/mini_auth.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "mini_auth/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "mini_auth"
6
+ s.version = MiniAuth::VERSION
7
+ s.authors = ["Tsutomu Kuroda"]
8
+ s.email = ["t-kuroda@oiax.jp"]
9
+ s.homepage = ""
10
+ s.summary = %q{A minimal authentication module for Rails}
11
+ s.description = %q{A minimal authentication module for Rails}
12
+
13
+ s.rubyforge_project = "mini_auth"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_development_dependency "sqlite3"
21
+ s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rspec-rails"
23
+ s.add_runtime_dependency "bcrypt-ruby"
24
+ end
data/spec/fake_app.rb ADDED
@@ -0,0 +1,25 @@
1
+ # Establish connection to the database running on memory
2
+ ActiveRecord::Base.establish_connection(
3
+ :adapter => "sqlite3",
4
+ :database => ":memory:"
5
+ )
6
+
7
+ # Discard ActiveRecord's log
8
+ ActiveRecord::Base.logger = Logger.new('/dev/null')
9
+
10
+ # Define migration class
11
+ class CreateAllTables < ActiveRecord::Migration
12
+ def change
13
+ create_table(:users) { |t| t.string :name; t.string :password_digest }
14
+ end
15
+ end
16
+
17
+ # Run migrations
18
+ migration = CreateAllTables.new
19
+ migration.verbose = false
20
+ migration.change
21
+
22
+ # Models
23
+ class User < ActiveRecord::Base
24
+ include MiniAuth
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe "authenticate" do
4
+ it "should authenticate with a valid password" do
5
+ u = User.new(:name => 'alice', :password => 'hotyoga')
6
+ u.save!
7
+
8
+ u.authenticate('hotyoga').should be_true
9
+ end
10
+
11
+ it "should not authenticate with a wrong password" do
12
+ u = User.new(:name => 'alice', :password => 'hotyoga')
13
+ u.save!
14
+
15
+ u.authenticate('wrong').should be_false
16
+ end
17
+
18
+ it "should not authenticate with ni; password" do
19
+ u = User.new(:name => 'alice', :password => nil)
20
+ u.save!
21
+
22
+ u.authenticate(nil).should be_false
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe "password" do
4
+ it "should accept nil password" do
5
+ u = User.new(:name => 'alice', :password => nil)
6
+ u.should be_valid
7
+ end
8
+
9
+ it "should reject blank password" do
10
+ u = User.new(:name => 'alice', :password => '')
11
+ u.should_not be_valid
12
+ u.should have(1).error_on(:password)
13
+ u.errors[:password].first.should == "can't be blank"
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ # Configure Rails envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require "rails/all"
5
+ require "rspec/rails"
6
+ require "mini_auth"
7
+
8
+ # Pull in the fake rails app
9
+ require 'fake_app'
10
+
11
+ # Load support files
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ # Configure RSpec
15
+ RSpec.configure do |config|
16
+ require 'rspec/expectations'
17
+ config.include RSpec::Matchers
18
+ config.mock_with :rspec
19
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mini_auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.pre
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Tsutomu Kuroda
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sqlite3
16
+ requirement: &11513420 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *11513420
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &11512560 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *11512560
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec-rails
38
+ requirement: &11510640 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *11510640
47
+ - !ruby/object:Gem::Dependency
48
+ name: bcrypt-ruby
49
+ requirement: &11509260 !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: *11509260
58
+ description: A minimal authentication module for Rails
59
+ email:
60
+ - t-kuroda@oiax.jp
61
+ executables: []
62
+ extensions: []
63
+ extra_rdoc_files: []
64
+ files:
65
+ - .gitignore
66
+ - Gemfile
67
+ - README.md
68
+ - Rakefile
69
+ - lib/mini_auth.rb
70
+ - lib/mini_auth/version.rb
71
+ - mini_auth.gemspec
72
+ - spec/fake_app.rb
73
+ - spec/mini_auth/authenticate_spec.rb
74
+ - spec/mini_auth/password_spec.rb
75
+ - spec/spec_helper.rb
76
+ homepage: ''
77
+ licenses: []
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>'
92
+ - !ruby/object:Gem::Version
93
+ version: 1.3.1
94
+ requirements: []
95
+ rubyforge_project: mini_auth
96
+ rubygems_version: 1.8.10
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: A minimal authentication module for Rails
100
+ test_files: []