tiddle 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bcae34825a51917726a62d76e0c12f219c3bdaff
4
- data.tar.gz: 7a63e0436d50cdddfa99407d87ef89101491043f
3
+ metadata.gz: b4c58a31ce7dbf835432646bbecf480fe467fede
4
+ data.tar.gz: 9f23863b1154a07e6a25e1a8c461d0d9f77d991b
5
5
  SHA512:
6
- metadata.gz: 0506dea0acf421a88fe9b7d225851a095e1095c0d4c69e7e04a0055b92ba2e2945c69f8cf729fe7efdd0c00f3edbad33caebc3c0ef1d2d30977d9bbff3863484
7
- data.tar.gz: df27a7199bf7690edd4c6a988e86a9358489ae36f24b07b53f8d8a1121db8069f872ea5a7e9d498744a32848ea9993381b4a3c96f81934b26ffaa0b1648651aa
6
+ metadata.gz: 8a6672cc79273f211699428066c75f1dfa3bc2adb7202e93f919bd8b4d93dd7835e0cd834356a92e51251e0d02100399c173a754dcb42a5c932e9923c0ff27cc
7
+ data.tar.gz: 92ddb425b8042af5df79e4feac473ca2518affa947f92253047957d65e6465c77efbb3fb63d98283622f5dce80c7fca8f4e9186078638185c0be19253564f8f2
@@ -0,0 +1,23 @@
1
+ AllCops:
2
+ Include:
3
+ - 'lib'
4
+ - 'spec'
5
+ Exclude:
6
+ - 'spec/rails_app/**/*'
7
+ - 'spec/spec_helper.rb'
8
+ Style/StringLiterals:
9
+ Enabled: false
10
+ Style/EmptyLinesAroundBlockBody:
11
+ Enabled: false
12
+ Style/BracesAroundHashParameters:
13
+ EnforcedStyle: context_dependent
14
+ Style/Documentation:
15
+ Enabled: false
16
+ Style/EmptyLinesAroundClassBody:
17
+ Enabled: false
18
+ Style/IndentationConsistency:
19
+ Enabled: false
20
+ Style/EmptyLinesAroundModuleBody:
21
+ Enabled: false
22
+ Style/MultilineOperationIndentation:
23
+ EnforcedStyle: indented
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - "2.2.0"
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Tiddle
2
2
 
3
+ [![Build Status](https://travis-ci.org/adamniedzielski/tiddle.svg?branch=master)](https://travis-ci.org/adamniedzielski/tiddle)
4
+ [![Coverage Status](https://coveralls.io/repos/adamniedzielski/tiddle/badge.svg?branch=master)](https://coveralls.io/r/adamniedzielski/tiddle?branch=master)
5
+ [![Code Climate](https://codeclimate.com/github/adamniedzielski/tiddle/badges/gpa.svg)](https://codeclimate.com/github/adamniedzielski/tiddle)
6
+
3
7
  Tiddle provides Devise strategy for token authentication in API-only Ruby on Rails applications. Its main feature is **support for multiple tokens per user**.
4
8
 
5
9
  Tiddle is lightweight and non-configurable. It does what it has to do and leaves some manual implementation to you.
@@ -50,7 +54,7 @@ class Users::SessionsController < Devise::SessionsController
50
54
 
51
55
  def create
52
56
  [...]
53
- token = Tiddle.create_and_return_token(resource)
57
+ token = Tiddle.create_and_return_token(resource, request)
54
58
  render json: { authentication_token: token }
55
59
  end
56
60
 
data/Rakefile CHANGED
@@ -1,5 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rspec/core/rake_task'
3
- RSpec::Core::RakeTask.new(:spec)
3
+ require 'rubocop/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(spec: :rubocop)
6
+ RuboCop::RakeTask.new(:rubocop) do |task|
7
+ task.fail_on_error = false
8
+ end
4
9
 
5
10
  task :default => :spec
@@ -18,7 +18,7 @@ module Tiddle
18
18
  end
19
19
  end
20
20
 
21
- Devise::add_module :token_authenticatable,
22
- model: 'tiddle/model',
23
- strategy: true,
24
- no_input: true
21
+ Devise.add_module :token_authenticatable,
22
+ model: 'tiddle/model',
23
+ strategy: true,
24
+ no_input: true
@@ -21,7 +21,7 @@ module Devise
21
21
  end
22
22
 
23
23
  def valid?
24
- email_from_headers.present? && token_from_headers.present?
24
+ email_from_headers.present? && token_from_headers.present?
25
25
  end
26
26
 
27
27
  def store?
@@ -11,24 +11,31 @@ module Tiddle
11
11
  end
12
12
 
13
13
  def create_and_return_token(resource, request)
14
- token = resource.authentication_tokens.
15
- create! body: generate_token,
16
- last_used_at: DateTime.current,
17
- ip_address: request.remote_ip,
18
- user_agent: request.user_agent
14
+ token = resource.authentication_tokens
15
+ .create! body: generate_token,
16
+ last_used_at: DateTime.current,
17
+ ip_address: request.remote_ip,
18
+ user_agent: request.user_agent
19
19
 
20
20
  token.body
21
21
  end
22
22
 
23
23
  def expire_token(resource, request)
24
- resource.authentication_tokens.where(body: request.headers["X-#{resource.model_name.to_s.upcase}-TOKEN"]).take!.destroy
24
+ resource.authentication_tokens
25
+ .where(body: request.headers["X-#{resource.model_name.to_s.upcase}-TOKEN"])
26
+ .take!
27
+ .destroy
25
28
  end
26
29
 
27
30
  def purge_old_tokens(resource)
28
- resource.authentication_tokens.order(last_used_at: :desc).offset(maximum_tokens_per_user).destroy_all
31
+ resource.authentication_tokens
32
+ .order(last_used_at: :desc)
33
+ .offset(maximum_tokens_per_user)
34
+ .destroy_all
29
35
  end
30
36
 
31
37
  private
38
+
32
39
  attr_accessor :maximum_tokens_per_user
33
40
 
34
41
  def generate_token
@@ -1,3 +1,3 @@
1
1
  module Tiddle
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,3 +1,14 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start do
9
+ add_filter "/spec/"
10
+ end
11
+
1
12
  ENV["RAILS_ENV"] = 'test'
2
13
  ENV["DATABASE_URL"] = "sqlite3:db/test.sqlite3"
3
14
 
@@ -8,7 +8,8 @@ describe "Authentication using Tiddle strategy", type: :request do
8
8
  context "with valid email and token" do
9
9
 
10
10
  it "allows to access endpoints which require authentication" do
11
- get secrets_path, {}, { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => @token }
11
+ get secrets_path, {},
12
+ { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => @token }
12
13
  expect(response.status).to eq 200
13
14
  end
14
15
 
@@ -17,12 +18,14 @@ describe "Authentication using Tiddle strategy", type: :request do
17
18
  context "when token was last used more than hour ago" do
18
19
 
19
20
  before do
20
- @user.authentication_tokens.last.update_attribute(:last_used_at, 2.hours.ago)
21
+ @user.authentication_tokens.last
22
+ .update_attribute(:last_used_at, 2.hours.ago)
21
23
  end
22
24
 
23
25
  it "updates last_used_at field" do
24
26
  expect do
25
- get secrets_path, {}, { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => @token }
27
+ get secrets_path, {},
28
+ { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => @token }
26
29
  end.to change { @user.authentication_tokens.last.last_used_at }
27
30
  end
28
31
  end
@@ -35,7 +38,8 @@ describe "Authentication using Tiddle strategy", type: :request do
35
38
 
36
39
  it "does not update last_used_at field" do
37
40
  expect do
38
- get secrets_path, {}, { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => @token }
41
+ get secrets_path, {},
42
+ { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => @token }
39
43
  end.not_to change { @user.authentication_tokens.last.last_used_at }
40
44
  end
41
45
  end
@@ -44,7 +48,8 @@ describe "Authentication using Tiddle strategy", type: :request do
44
48
  context "when email contains uppercase letters" do
45
49
 
46
50
  it "converts email to lower case and authenticates user" do
47
- get secrets_path, {}, { "X-USER-EMAIL" => "TEST@example.com", "X-USER-TOKEN" => @token }
51
+ get secrets_path, {},
52
+ { "X-USER-EMAIL" => "TEST@example.com", "X-USER-TOKEN" => @token }
48
53
  expect(response.status).to eq 200
49
54
  end
50
55
  end
@@ -53,7 +58,8 @@ describe "Authentication using Tiddle strategy", type: :request do
53
58
  context "with invalid email and valid token" do
54
59
 
55
60
  it "does not allow to access endpoints which require authentication" do
56
- get secrets_path, {}, { "X-USER-EMAIL" => "wrong@example.com", "X-USER-TOKEN" => @token }
61
+ get secrets_path, {},
62
+ { "X-USER-EMAIL" => "wrong@example.com", "X-USER-TOKEN" => @token }
57
63
  expect(response.status).to eq 401
58
64
  end
59
65
  end
@@ -61,7 +67,8 @@ describe "Authentication using Tiddle strategy", type: :request do
61
67
  context "with valid email and invalid token" do
62
68
 
63
69
  it "does not allow to access endpoints which require authentication" do
64
- get secrets_path, {}, { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => "wrong" }
70
+ get secrets_path, {},
71
+ { "X-USER-EMAIL" => "test@example.com", "X-USER-TOKEN" => "wrong" }
65
72
  expect(response.status).to eq 401
66
73
  end
67
74
  end
@@ -19,16 +19,19 @@ describe Tiddle do
19
19
 
20
20
  it "sets last_used_at field" do
21
21
  Tiddle.create_and_return_token(@user, FakeRequest.new)
22
- expect(@user.authentication_tokens.last.last_used_at).to be_within(1).of(DateTime.current)
22
+ expect(@user.authentication_tokens.last.last_used_at)
23
+ .to be_within(1).of(DateTime.current)
23
24
  end
24
25
 
25
26
  it "saves ip address" do
26
- Tiddle.create_and_return_token(@user, FakeRequest.new(remote_ip: "123.101.54.1"))
27
+ Tiddle.create_and_return_token @user,
28
+ FakeRequest.new(remote_ip: "123.101.54.1")
27
29
  expect(@user.authentication_tokens.last.ip_address).to eq "123.101.54.1"
28
30
  end
29
31
 
30
32
  it "saves user agent" do
31
- Tiddle.create_and_return_token(@user, FakeRequest.new(user_agent: "Internet Explorer 4.0"))
33
+ Tiddle.create_and_return_token @user,
34
+ FakeRequest.new(user_agent: "Internet Explorer 4.0")
32
35
  expect(@user.authentication_tokens.last.user_agent).to eq "Internet Explorer 4.0"
33
36
  end
34
37
  end
@@ -26,4 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency "rspec-rails"
27
27
  spec.add_development_dependency "rails", "~> 4.2.0"
28
28
  spec.add_development_dependency "sqlite3"
29
+ spec.add_development_dependency "coveralls"
30
+ spec.add_development_dependency "simplecov"
31
+ spec.add_development_dependency "rubocop"
29
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiddle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Niedzielski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-08 00:00:00.000000000 Z
11
+ date: 2015-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -108,6 +108,48 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
111
153
  description:
112
154
  email:
113
155
  - adamsunday@gmail.com
@@ -117,6 +159,8 @@ extra_rdoc_files: []
117
159
  files:
118
160
  - ".gitignore"
119
161
  - ".rspec"
162
+ - ".rubocop.yml"
163
+ - ".travis.yml"
120
164
  - Gemfile
121
165
  - LICENSE.txt
122
166
  - README.md