active_session 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/active_session/attribute_methods.rb +46 -0
- data/lib/active_session/errors.rb +0 -4
- data/lib/active_session/version.rb +1 -1
- data/lib/active_session.rb +33 -90
- data/test/models/user.rb +2 -2
- data/test/models/user_session.rb +2 -8
- metadata +6 -7
- data/test/basic_session_test.rb +0 -12
- data/test/models/basic_session.rb +0 -3
@@ -0,0 +1,46 @@
|
|
1
|
+
module ActiveSession
|
2
|
+
module AttributeMethods
|
3
|
+
def initialize(store, attributes = nil, options = {})
|
4
|
+
@store = store
|
5
|
+
@attributes = {}
|
6
|
+
assign_attributes(attributes, options) if attributes
|
7
|
+
yield self if block_given?
|
8
|
+
end
|
9
|
+
|
10
|
+
def attributes
|
11
|
+
@attributes
|
12
|
+
end
|
13
|
+
|
14
|
+
def attributes=(attributes)
|
15
|
+
assign_attributes(attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def assign_attributes(new_attributes, options = {})
|
19
|
+
return unless new_attributes
|
20
|
+
|
21
|
+
attributes = new_attributes.stringify_keys
|
22
|
+
|
23
|
+
unless options[:without_protection]
|
24
|
+
attributes = sanitize_for_mass_assignment(attributes, options.fetch(:as, :default))
|
25
|
+
end
|
26
|
+
|
27
|
+
attributes.each do |key, value|
|
28
|
+
if respond_to?("#{key}=")
|
29
|
+
send("#{key}=", value)
|
30
|
+
else
|
31
|
+
raise ActiveSession::UnknownAttributeError, "unknown attribute: #{key}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def attribute(attribute)
|
39
|
+
@attributes[attribute.to_sym]
|
40
|
+
end
|
41
|
+
|
42
|
+
def attribute=(attribute, value)
|
43
|
+
@attributes[attribute.to_sym] = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/active_session.rb
CHANGED
@@ -1,115 +1,58 @@
|
|
1
1
|
require "active_model"
|
2
|
-
require "active_support/concern"
|
3
2
|
require "active_support/core_ext"
|
3
|
+
require "active_session/attribute_methods"
|
4
4
|
require "active_session/errors"
|
5
5
|
|
6
6
|
module ActiveSession
|
7
|
-
|
7
|
+
def authenticates(name, options = {})
|
8
|
+
klass = options.fetch(:class_name, name.to_s.classify)
|
9
|
+
foreign_key = options.fetch(:foreign_key, "#{name}_id").to_sym
|
10
|
+
primary_key = options.fetch(:primary_key, "id").to_sym
|
11
|
+
finder_method = options.fetch(:finder_method, "find_for_authentication").to_sym
|
8
12
|
|
9
|
-
included do
|
10
13
|
extend ActiveModel::Naming
|
11
14
|
include ActiveModel::AttributeMethods
|
12
15
|
include ActiveModel::Conversion
|
13
16
|
include ActiveModel::MassAssignmentSecurity
|
14
17
|
include ActiveModel::Validations
|
15
18
|
|
16
|
-
|
17
|
-
attr_reader :attributes
|
18
|
-
|
19
|
-
cattr_accessor :store_key
|
20
|
-
self.store_key = :id
|
21
|
-
end
|
22
|
-
|
23
|
-
module ClassMethods
|
24
|
-
def clear_store(store)
|
25
|
-
store.delete(store_key)
|
26
|
-
end
|
27
|
-
|
28
|
-
def belongs_to(name, options = {})
|
29
|
-
klass = options.fetch(:class_name, name.to_s.classify)
|
30
|
-
foreign_key = options.fetch(:foreign_key, "#{name}_id")
|
31
|
-
|
32
|
-
class_eval <<-END, __FILE__, __LINE__ + 1
|
33
|
-
def #{name}
|
34
|
-
return @#{name} if defined?(@#{name})
|
35
|
-
@#{name} = #{klass}.find(#{foreign_key})
|
36
|
-
end
|
37
|
-
|
38
|
-
def #{name}=(model)
|
39
|
-
raise ActiveSession::AssociationTypeMismatch, "#{klass} expected, got \#\{model.class\}" unless model.nil? or model.is_a?(#{klass})
|
40
|
-
self.#{foreign_key} = model.try(:id)
|
41
|
-
end
|
42
|
-
|
43
|
-
def #{foreign_key}
|
44
|
-
@attributes[:#{foreign_key}]
|
45
|
-
end
|
46
|
-
|
47
|
-
def #{foreign_key}=(model_id)
|
48
|
-
remove_instance_variable("@#{name}") if instance_variable_defined?("@#{name}")
|
49
|
-
@attributes[:#{foreign_key}] = model_id
|
50
|
-
end
|
51
|
-
END
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
module InstanceMethods
|
56
|
-
def initialize(store, attributes = nil, options = {})
|
57
|
-
@store = store
|
58
|
-
@attributes = {}
|
59
|
-
assign_attributes(attributes, options) if attributes
|
60
|
-
yield self if block_given?
|
61
|
-
end
|
19
|
+
include AttributeMethods
|
62
20
|
|
63
|
-
|
64
|
-
assign_attributes(attributes)
|
65
|
-
end
|
66
|
-
|
67
|
-
def assign_attributes(new_attributes, options = {})
|
68
|
-
return unless new_attributes
|
21
|
+
attribute_method_suffix "", "="
|
69
22
|
|
70
|
-
|
23
|
+
validates name, :presence => true
|
71
24
|
|
72
|
-
|
73
|
-
|
25
|
+
class_eval <<-END, __FILE__, __LINE__ + 1
|
26
|
+
def #{name}
|
27
|
+
return @#{name} if defined?(@#{name})
|
28
|
+
@#{name} = #{klass}.#{finder_method}(:#{primary_key} => #{foreign_key})
|
74
29
|
end
|
75
30
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
else
|
80
|
-
raise ActiveSession::UnknownAttributeError, "unknown attribute: #{key}"
|
81
|
-
end
|
31
|
+
def #{name}=(model)
|
32
|
+
raise ActiveSession::AssociationTypeMismatch, "#{klass} expected, got \#{model.class}" unless model.nil? or model.is_a?(#{klass})
|
33
|
+
self.#{foreign_key} = model.try(:#{primary_key})
|
82
34
|
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def persisted?
|
86
|
-
@store[self.class.store_key].present? and @store[self.class.store_key] == store_value
|
87
|
-
end
|
88
|
-
|
89
|
-
def destroy
|
90
|
-
persisted? && self.class.clear_store(@store) && true
|
91
|
-
end
|
92
|
-
|
93
|
-
def store_value
|
94
|
-
raise ActiveSession::StoreValueNotDefined, "you have to override store_value method to return something useful (usually user_id)"
|
95
|
-
end
|
96
35
|
|
97
|
-
|
98
|
-
|
99
|
-
|
36
|
+
def #{foreign_key}
|
37
|
+
@attributes[:#{foreign_key}]
|
38
|
+
end
|
100
39
|
|
101
|
-
|
40
|
+
def #{foreign_key}=(model_id)
|
41
|
+
remove_instance_variable("@#{name}") if instance_variable_defined?("@#{name}")
|
42
|
+
@attributes[:#{foreign_key}] = model_id
|
43
|
+
end
|
102
44
|
|
103
|
-
|
104
|
-
|
105
|
-
|
45
|
+
def persisted?
|
46
|
+
@store[:#{foreign_key}].present? and @store[:#{foreign_key}] == #{foreign_key}
|
47
|
+
end
|
106
48
|
|
107
|
-
|
108
|
-
|
109
|
-
|
49
|
+
def destroy
|
50
|
+
persisted? && @store.delete(:#{foreign_key}) && true
|
51
|
+
end
|
110
52
|
|
111
|
-
|
112
|
-
|
113
|
-
|
53
|
+
def save
|
54
|
+
valid? && (@store[:#{foreign_key}] = #{foreign_key}) && true
|
55
|
+
end
|
56
|
+
END
|
114
57
|
end
|
115
58
|
end
|
data/test/models/user.rb
CHANGED
data/test/models/user_session.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_session
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2011-10-19 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
17
|
-
requirement: &
|
17
|
+
requirement: &16721260 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 3.1.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *16721260
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: activesupport
|
28
|
-
requirement: &
|
28
|
+
requirement: &16720720 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: 3.1.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *16720720
|
37
37
|
description: ActiveModel session
|
38
38
|
email:
|
39
39
|
- qoobaa@gmail.com
|
@@ -49,11 +49,10 @@ files:
|
|
49
49
|
- Rakefile
|
50
50
|
- active_session.gemspec
|
51
51
|
- lib/active_session.rb
|
52
|
+
- lib/active_session/attribute_methods.rb
|
52
53
|
- lib/active_session/errors.rb
|
53
54
|
- lib/active_session/version.rb
|
54
|
-
- test/basic_session_test.rb
|
55
55
|
- test/helper.rb
|
56
|
-
- test/models/basic_session.rb
|
57
56
|
- test/models/user.rb
|
58
57
|
- test/models/user_session.rb
|
59
58
|
- test/user_session_test.rb
|
data/test/basic_session_test.rb
DELETED