Class: Sorcery::Adapters::DataMapperAdapter

Inherits:
BaseAdapter
  • Object
show all
Defined in:
lib/sorcery/adapters/data_mapper_adapter.rb

Defined Under Namespace

Modules: Wrapper

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseAdapter

from, #initialize

Constructor Details

This class inherits a constructor from Sorcery::Adapters::BaseAdapter

Class Method Details

.define_callback(time, event, method_name, options = {}) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 62

def define_callback(time, event, method_name, options={})
  event = :valid? if event == :validation
  condition = options[:if]

  user_klass = @klass

  block = Proc.new do |record|
    if condition.nil?
      send(method_name)
    elsif condition.respond_to?(:call)
      send(method_name) if condition.call(self)
    elsif condition.is_a? Symbol
      send(method_name) if send(condition)
    end
  end

  @klass.send(time, event, &block)
end

.define_field(name, type, options = {}) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 49

def define_field(name, type, options={})
  @klass.property name, type, options.slice(:length, :default)

  # Workaround local timezone retrieval problem NOTE dm-core issue #193
  if type == Time
    @klass.send(:alias_method, "orig_#{name}", name)
    @klass.send :define_method, name do
      t = send("orig_#{name}")
      t && Time.new(t.year, t.month, t.day, t.hour, t.min, t.sec, 0)
    end
  end
end

.delete_allObject



85
86
87
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 85

def delete_all
  @klass.destroy
end

.find(id) ⇒ Object



81
82
83
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 81

def find(id)
  @klass.get(id)
end

.find_by_activation_token(token) ⇒ Object



119
120
121
122
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 119

def find_by_activation_token(token)
  user = @klass.first(@klass.sorcery_config.activation_token_attribute_name => token)
  !!user ? @klass.get(user.id) : nil
end

.find_by_credentials(credentials) ⇒ Object

NOTE DM Adapter dependent DM creates MySQL tables case insensitive by default datamapper.lighthouseapp.com/projects/20609-datamapper/tickets/1105



93
94
95
96
97
98
99
100
101
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 93

def find_by_credentials(credentials)
  credential = credentials[0].dup
  credential.downcase! if @klass.sorcery_config.downcase_username_before_authenticating
  @klass.sorcery_config.username_attribute_names.each do |name|
    @user = @klass.first(name => credential)
    break if @user
  end
  !!@user ? @klass.get(@user.id) : nil
end

.find_by_email(email) ⇒ Object



147
148
149
150
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 147

def find_by_email(email)
  user = @klass.first(@klass.sorcery_config.email_attribute_name => email)
  !!user ? @klass.get(user.id) : nil
end

.find_by_id(id) ⇒ Object



113
114
115
116
117
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 113

def find_by_id(id)
  @klass.get(id)
rescue ::DataMapper::ObjectNotFoundError
  nil
end

.find_by_oauth_credentials(provider, uid) ⇒ Object



103
104
105
106
107
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 103

def find_by_oauth_credentials(provider, uid)
  @user_config = ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
  user = @klass.first(@user_config.provider_attribute_name => provider, @user_config.provider_uid_attribute_name => uid)
  !!user ? @klass.get(user.id) : nil
end

.find_by_remember_me_token(token) ⇒ Object



124
125
126
127
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 124

def find_by_remember_me_token(token)
  user = @klass.first(@klass.sorcery_config.remember_me_token_attribute_name => token)
  !!user ? @klass.get(user.id) : nil
end

.find_by_sorcery_token(token_attr_name, token) ⇒ Object



142
143
144
145
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 142

def find_by_sorcery_token(token_attr_name, token)
  user = @klass.first(token_attr_name => token)
  !!user ? @klass.get(user.id) : nil
end

.find_by_token(token_attr_name, token) ⇒ Object



109
110
111
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 109

def find_by_token(token_attr_name, token)
  @klass.first(token_attr_name => token)
end

.find_by_username(username) ⇒ Object



129
130
131
132
133
134
135
136
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 129

def find_by_username(username)
  user = nil
  @klass.sorcery_config.username_attribute_names.each do |name|
    user = @klass.first(name => username)
    break if user
  end
  !!user ? @klass.get(user.id) : nil
end

.get_current_usersObject

NOTE DM Adapter dependent



154
155
156
157
158
159
160
161
162
163
164
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 154

def get_current_users
  unless @klass.repository.adapter.is_a?(::DataMapper::Adapters::MysqlAdapter)
    raise 'Unsupported DataMapper Adapter'
  end
  config = @klass.sorcery_config
  ret = @klass.all(config.last_logout_at_attribute_name => nil) |
        @klass.all(config.last_activity_at_attribute_name.gt => config.last_logout_at_attribute_name)
  ret = ret.all(config.last_activity_at_attribute_name.not => nil)
  ret = ret.all(config.last_activity_at_attribute_name.gt => config.activity_timeout.seconds.ago.utc)
  ret
end

.transaction(&blk) ⇒ Object



138
139
140
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 138

def transaction(&blk)
  @klass.tap(&blk)
end

.verify_submodules_compatibility!Object



166
167
168
169
170
171
172
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 166

def verify_submodules_compatibility!
  active_submodules = [::Sorcery::Controller::Config.submodules].flatten

  if active_submodules.include?(:activity_logging) && !repository.adapter.is_a?(::DataMapper::Adapters::MysqlAdapter)
    raise "DataMapper adapter compatibility error, please check documentation"
  end
end

Instance Method Details

#increment(attr) ⇒ Object



22
23
24
25
26
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 22

def increment(attr)
  @model[attr] ||= 0
  @model[attr] += 1
  @model
end

#save(options = {}) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 40

def save(options = {})
  if options.key?(:validate) && !options[:validate]
    @model.save!
  else
    @model.save
  end
end

#update_attribute(name, value) ⇒ Object



36
37
38
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 36

def update_attribute(name, value)
  update_attributes(name => value)
end

#update_attributes(attrs) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/sorcery/adapters/data_mapper_adapter.rb', line 28

def update_attributes(attrs)
  attrs.each do |name, value|
    value = value.utc if value.is_a?(ActiveSupport::TimeWithZone)
    @model.send(:"#{name}=", value)
  end
  @model.class.get(@model.id).update(attrs)
end