merb_sequel 0.4.3 → 0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -3,9 +3,9 @@ require "rake/gempackagetask"
3
3
 
4
4
  PLUGIN = "merb_sequel"
5
5
  NAME = "merb_sequel"
6
- VERSION = "0.4.3"
7
- AUTHOR = "Wayne E. Seguin"
8
- EMAIL = "wayneeseguin@gmail.com"
6
+ VERSION = "0.5"
7
+ AUTHOR = "Wayne E. Seguin, Lance Carlson"
8
+ EMAIL = "wayneeseguin@gmail.com, lancecarlson@gmail.com"
9
9
  HOMEPAGE = "http://merb-plugins.rubyforge.org/merb_sequel/"
10
10
  SUMMARY = "Merb plugin that provides support for Sequel and Sequel::Model"
11
11
 
@@ -23,7 +23,7 @@ specification = Gem::Specification.new do |spec|
23
23
  spec.require_path = "lib"
24
24
  spec.extra_rdoc_files = ["README", "LICENSE", 'TODO']
25
25
  # Dependencies
26
- spec.add_dependency("merb", ">= 0.4.2")
26
+ spec.add_dependency("merb", ">= 0.5")
27
27
  spec.add_dependency("sequel", ">= 1.0.0")
28
28
  spec.add_dependency("sequel_model", ">= 0.2")
29
29
  spec.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,specs,sequel_generators}/**/*")
@@ -3,9 +3,11 @@ require "fileutils"
3
3
  module Merb
4
4
  module Orms
5
5
  module Sequel
6
+
6
7
  class << self
7
- def config_file() MERB_ROOT / "config" / "database.yml" end
8
- def sample_dest() MERB_ROOT / "config" / "database.sample.yml" end
8
+
9
+ def config_file() Merb.root / "config" / "database.yml" end
10
+ def sample_dest() Merb.root / "config" / "database.sample.yml" end
9
11
  def sample_source() File.dirname(__FILE__) / "database.sample.yml" end
10
12
 
11
13
  def copy_sample_config
@@ -13,37 +15,42 @@ module Merb
13
15
  end
14
16
 
15
17
  def config
18
+
16
19
  @config ||=
17
- begin
18
- # Convert string keys to symbols
19
- full_config = Erubis.load_yaml_file(config_file)
20
- config = (Merb::Plugins.config[:merb_sequel] = {})
21
- (full_config[MERB_ENV.to_sym] || full_config[MERB_ENV]).each do |key, value|
22
- config[key.to_sym] = value
23
- end
24
- config
20
+ begin
21
+ # Convert string keys to symbols
22
+ full_config = Erubis.load_yaml_file(config_file)
23
+ config = (Merb::Plugins.config[:merb_sequel] = {})
24
+ (full_config[Merb.environment.to_sym] || full_config[Merb.environment]).each do |key, value|
25
+ config[key.to_sym] = value
25
26
  end
27
+ config
28
+ end
29
+
26
30
  end
27
31
 
28
32
  # Database connects as soon as the gem is loaded
29
33
  def connect
34
+
30
35
  require "sequel"
31
36
  require "sequel_model"
32
37
 
33
38
  if File.exists?(config_file)
34
39
  puts "#{Time.now.httpdate}: Connecting to the '#{config[:database]}' database on '#{config[:host]}' using '#{config[:adapter]}' ..."
35
40
  connection = ::Sequel.connect(config_options(config))
36
- MERB_LOGGER.error("Connection Error: #{e}") unless connection
41
+ Merb.logger.error("Connection Error: #{e}") unless connection
37
42
  connection
38
43
  else
39
44
  copy_sample_config
40
- puts "#{Time.now.httpdate}: No database.yml file found in #{MERB_ROOT}/config."
45
+ puts "#{Time.now.httpdate}: No database.yml file found in #{Merb.root}/config."
41
46
  puts "A sample file was created called config/database.sample.yml for you to copy and edit."
42
47
  exit(1)
43
48
  end
49
+
44
50
  end
45
51
 
46
52
  def config_options(config = {})
53
+
47
54
  options = {}
48
55
  options[:adapter] = (config[:adapter] || "sqlite")
49
56
  options[:host] = (config[:host] || "localhost")
@@ -53,20 +60,22 @@ module Merb
53
60
  options[:encoding] = (config[:encoding] || config[:charset])
54
61
  end
55
62
  options[:database] = config[:database] if config[:database]
56
- options[:logger] = MERB_LOGGER
63
+ options[:logger] = Merb.logger
57
64
  options
58
65
  end
59
66
 
60
67
  # Registering this ORM lets the user choose sequel as a session store
61
68
  # in merb.yml's session_store: option.
62
69
  def register_session_type
63
- Merb::Server.register_session_type("sequel",
70
+ Merb::BootLoader.register_session_type("sequel",
64
71
  "merb/session/sequel_session",
65
72
  "Using Sequel database sessions")
66
73
  end
67
74
 
68
75
  end
76
+
69
77
  end
78
+
70
79
  end
71
80
 
72
81
  end
@@ -1,43 +1,45 @@
1
- require 'base64'
1
+ require "base64"
2
2
 
3
3
  module Merb
4
+
4
5
  module SessionMixin
5
-
6
+
6
7
  def setup_session
7
- MERB_LOGGER.info("Setting up session")
8
+ Merb.logger.info("Setting up session")
8
9
  before = cookies[_session_id_key]
9
10
  request.session, cookies[_session_id_key] = Merb::SequelSession.persist(cookies[_session_id_key])
10
11
  @_fingerprint = Marshal.dump(request.session.data).hash
11
12
  @_new_cookie = cookies[_session_id_key] != before
12
13
  end
13
-
14
+
14
15
  def finalize_session
15
- MERB_LOGGER.info("Finalize session")
16
+ Merb.logger.info("Finalize session")
16
17
  request.session.save if @_fingerprint != Marshal.dump(request.session.data).hash
17
18
  set_cookie(_session_id_key, request.session.values[:session_id], _session_expiry) if (@_new_cookie || request.session.needs_new_cookie)
18
19
  end
19
-
20
+
20
21
  end
21
22
 
22
- table_name = (Merb::Plugins.config[:sequel][:session_table_name] || "sessions")
23
+ table_name = (Merb::Plugins.config[:merb_sequel][:session_table_name] || "sessions")
23
24
 
24
25
  class SequelSession < Sequel::Model(table_name.to_sym)
26
+
25
27
  set_schema do
26
28
  primary_key :id
27
29
  varchar :session_id
28
30
  varchar :data
29
31
  timestamp :created_at
30
32
  end
31
-
33
+
32
34
  attr_accessor :needs_new_cookie
33
-
35
+
34
36
  class << self
35
37
  # Generates a new session ID and creates a row for the new session in the database.
36
38
  def generate
37
39
  create(:session_id => Merb::SessionMixin::rand_uuid,
38
- :data => marshal({}), :created_at => Time.now)
40
+ :data => marshal({}), :created_at => Time.now)
39
41
  end
40
-
42
+
41
43
  # Gets the existing session based on the <tt>session_id</tt> available in cookies.
42
44
  # If none is found, generates a new session.
43
45
  def persist(session_id)
@@ -49,90 +51,91 @@ module Merb
49
51
  end
50
52
  [session, session.values[:session_id]]
51
53
  end
52
-
54
+
53
55
  # Don't try to reload ARStore::Session in dev mode.
54
56
  def reloadable? #:nodoc:
55
57
  false
56
58
  end
57
-
59
+
58
60
  def data_column_size_limit
59
61
  255
60
62
  end
61
-
63
+
62
64
  def marshal(data)
63
65
  Base64.encode64(Marshal.dump(data)) if data
64
66
  end
65
-
67
+
66
68
  def unmarshal(data)
67
69
  Marshal.load(Base64.decode64(data)) if data
68
70
  end
69
-
71
+
70
72
  alias :create_table! :create_table
71
73
  alias :drop_table! :drop_table
72
74
  end
73
-
75
+
74
76
  # Regenerate the Session ID
75
77
  def regenerate
76
78
  update_attributes(:session_id => Merb::SessionMixin::rand_uuid)
77
79
  self.needs_new_cookie = true
78
80
  end
79
-
81
+
80
82
  # Recreates the cookie with the default expiration time
81
83
  # Useful during log in for pushing back the expiration date
82
84
  def refresh_expiration
83
85
  self.needs_new_cookie = true
84
86
  end
85
-
87
+
86
88
  # Lazy-delete of session data
87
89
  def delete(key = nil)
88
90
  key ? self.data.delete(key) : self.data.clear
89
91
  end
90
-
92
+
91
93
  def [](key)
92
94
  data[key]
93
95
  end
94
-
96
+
95
97
  def []=(key, val)
96
98
  data[key] = val
97
99
  end
98
-
100
+
99
101
  def empty?
100
102
  data.empty?
101
103
  end
102
-
104
+
103
105
  def each(&b)
104
106
  data.each(&b)
105
107
  end
106
-
108
+
107
109
  # Lazy-unmarshal session state.
108
110
  def data
109
111
  @data ||= self.class.unmarshal(@values[:data]) || {}
110
112
  end
111
-
113
+
112
114
  # Has the session been loaded yet?
113
115
  def loaded?
114
116
  !! @data
115
117
  end
116
-
117
- private
118
-
118
+
119
+ private
120
+
119
121
  attr_writer :data
120
-
122
+
121
123
  before_save do # marshal_data!
122
124
  # return false if !loaded?
123
125
  @values[:data] = self.class.marshal(self.data)
124
126
  end
125
-
127
+
126
128
  # Ensures that the data about to be stored in the database is not
127
129
  # larger than the data storage column. Raises
128
130
  # ActionController::SessionOverflowError.
129
131
  # before_save do # raise_on_session_data_overflow!
130
- # return false if !loaded?
131
- # limit = self.class.data_column_size_limit
132
- # if loaded? and limit and read_attribute(@@data_column_name).size > limit
133
- # raise MerbController::SessionOverflowError
134
- # end
132
+ # return false if !loaded?
133
+ # limit = self.class.data_column_size_limit
134
+ # if loaded? and limit and read_attribute(@@data_column_name).size > limit
135
+ # raise MerbController::SessionOverflowError
136
+ # end
135
137
  # end
138
+
136
139
  end
137
140
 
138
141
  unless Sequel::Model.db.table_exists?(table_name.to_sym)
@@ -144,5 +147,5 @@ module Merb
144
147
 
145
148
  puts "Created sessions table."
146
149
  end
147
-
150
+
148
151
  end
data/lib/merb_sequel.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # make sure we're running inside Merb
2
2
  if defined?(Merb::Plugins)
3
- if Merb::Server.app_loaded?
3
+ if Merb::BootLoader.app_loaded?
4
4
  puts "Warning: The merb_sequel gem must be loaded before the application"
5
5
  else
6
6
  require "merb/orms/sequel/connection"
data/lib/merbtasks.rb CHANGED
@@ -16,7 +16,7 @@ namespace :sequel do
16
16
  desc "Creates session migration"
17
17
  task :create => :merb_env do
18
18
  # TODO: this should not use '001' always...
19
- dest = File.join(MERB_ROOT, "schema", "migrations","001_add_sessions_table.rb")
19
+ dest = File.join(Merb.root, "schema", "migrations","001_add_sessions_table.rb")
20
20
  source = File.join(File.dirname(__FILE__), "merb", "session","001_add_sessions_table.rb")
21
21
 
22
22
  FileUtils.cp source, dest unless File.exists?(dest)
metadata CHANGED
@@ -1,116 +1,109 @@
1
1
  --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
2
4
  name: merb_sequel
3
5
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
5
- platform: ruby
6
- authors:
7
- - Wayne E. Seguin
6
+ version: "0.5"
7
+ date: 2008-01-09 00:00:00 -08:00
8
+ summary: Merb plugin that provides support for Sequel and Sequel::Model
9
+ require_paths:
10
+ - lib
11
+ email: wayneeseguin@gmail.com, lancecarlson@gmail.com
12
+ homepage: http://merb-plugins.rubyforge.org/merb_sequel/
13
+ rubyforge_project:
14
+ description: Merb plugin that provides support for Sequel and Sequel::Model
8
15
  autorequire: merb_sequel
9
- bindir: bin
10
- cert_chain: []
11
-
12
- date: 2008-01-07 00:00:00 -05:00
13
16
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: merb
17
- version_requirement:
18
- version_requirements: !ruby/object:Gem::Requirement
19
- requirements:
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.4.2
23
- version:
24
- - !ruby/object:Gem::Dependency
25
- name: sequel
26
- version_requirement:
27
- version_requirements: !ruby/object:Gem::Requirement
28
- requirements:
29
- - - ">="
30
- - !ruby/object:Gem::Version
31
- version: 1.0.0
32
- version:
33
- - !ruby/object:Gem::Dependency
34
- name: sequel_model
35
- version_requirement:
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: "0.2"
41
- version:
42
- description: Merb plugin that provides support for Sequel and Sequel::Model
43
- email: wayneeseguin@gmail.com
44
- executables: []
45
-
46
- extensions: []
47
-
48
- extra_rdoc_files:
49
- - README
50
- - LICENSE
51
- - TODO
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Wayne E. Seguin, Lance Carlson
52
31
  files:
53
32
  - LICENSE
54
33
  - README
55
34
  - Rakefile
56
35
  - TODO
57
36
  - lib/merb
37
+ - lib/merb_sequel.rb
38
+ - lib/merbtasks.rb
58
39
  - lib/merb/orms
40
+ - lib/merb/session
59
41
  - lib/merb/orms/sequel
60
42
  - lib/merb/orms/sequel/connection.rb
61
43
  - lib/merb/orms/sequel/database.sample.yml
62
- - lib/merb/session
63
44
  - lib/merb/session/001_add_sessions_table.rb
64
45
  - lib/merb/session/sequel_session.rb
65
- - lib/merb_sequel.rb
66
- - lib/merbtasks.rb
67
46
  - specs/merb_sequel_spec.rb
68
47
  - specs/spec_helper.rb
69
48
  - sequel_generators/migration
49
+ - sequel_generators/model
50
+ - sequel_generators/resource_controller
70
51
  - sequel_generators/migration/migration_generator.rb
71
52
  - sequel_generators/migration/templates
72
- - sequel_generators/migration/templates/new_migration.erb
73
53
  - sequel_generators/migration/USAGE
74
- - sequel_generators/model
54
+ - sequel_generators/migration/templates/new_migration.erb
75
55
  - sequel_generators/model/model_generator.rb
76
56
  - sequel_generators/model/templates
77
- - sequel_generators/model/templates/sequel_model_template.erb
78
57
  - sequel_generators/model/USAGE
79
- - sequel_generators/resource_controller
58
+ - sequel_generators/model/templates/sequel_model_template.erb
80
59
  - sequel_generators/resource_controller/resource_controller_generator.rb
81
60
  - sequel_generators/resource_controller/templates
61
+ - sequel_generators/resource_controller/USAGE
82
62
  - sequel_generators/resource_controller/templates/controller.rb
83
63
  - sequel_generators/resource_controller/templates/edit.html.erb
84
64
  - sequel_generators/resource_controller/templates/helper.rb
85
65
  - sequel_generators/resource_controller/templates/index.html.erb
86
66
  - sequel_generators/resource_controller/templates/new.html.erb
87
67
  - sequel_generators/resource_controller/templates/show.html.erb
88
- - sequel_generators/resource_controller/USAGE
89
- has_rdoc: true
90
- homepage: http://merb-plugins.rubyforge.org/merb_sequel/
91
- post_install_message:
68
+ test_files: []
69
+
92
70
  rdoc_options: []
93
71
 
94
- require_paths:
95
- - lib
96
- required_ruby_version: !ruby/object:Gem::Requirement
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- version: "0"
101
- version:
102
- required_rubygems_version: !ruby/object:Gem::Requirement
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: "0"
107
- version:
108
- requirements: []
72
+ extra_rdoc_files:
73
+ - README
74
+ - LICENSE
75
+ - TODO
76
+ executables: []
109
77
 
110
- rubyforge_project:
111
- rubygems_version: 1.0.1
112
- signing_key:
113
- specification_version: 2
114
- summary: Merb plugin that provides support for Sequel and Sequel::Model
115
- test_files: []
78
+ extensions: []
79
+
80
+ requirements: []
116
81
 
82
+ dependencies:
83
+ - !ruby/object:Gem::Dependency
84
+ name: merb
85
+ version_requirement:
86
+ version_requirements: !ruby/object:Gem::Version::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0.5"
91
+ version:
92
+ - !ruby/object:Gem::Dependency
93
+ name: sequel
94
+ version_requirement:
95
+ version_requirements: !ruby/object:Gem::Version::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 1.0.0
100
+ version:
101
+ - !ruby/object:Gem::Dependency
102
+ name: sequel_model
103
+ version_requirement:
104
+ version_requirements: !ruby/object:Gem::Version::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: "0.2"
109
+ version: