sequel-rails 0.1.8 → 0.4.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.gitignore +1 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +13 -16
  5. data/History.md +142 -0
  6. data/README.md +124 -0
  7. data/Rakefile +6 -30
  8. data/config.ru +7 -0
  9. data/lib/generators/sequel.rb +11 -8
  10. data/lib/generators/sequel/migration/migration_generator.rb +36 -11
  11. data/lib/generators/sequel/migration/templates/migration.rb.erb +48 -0
  12. data/lib/generators/sequel/model/model_generator.rb +8 -2
  13. data/lib/generators/sequel/model/templates/migration.rb.erb +16 -0
  14. data/lib/generators/sequel/model/templates/{model.rb → model.rb.erb} +4 -1
  15. data/lib/generators/sequel/observer/observer_generator.rb +2 -2
  16. data/lib/generators/sequel/observer/templates/{observer.rb → observer.rb.erb} +0 -0
  17. data/lib/sequel-rails.rb +1 -1
  18. data/lib/sequel_rails.rb +2 -0
  19. data/lib/sequel_rails/configuration.rb +64 -0
  20. data/lib/sequel_rails/migrations.rb +22 -0
  21. data/lib/sequel_rails/railtie.rb +94 -0
  22. data/lib/sequel_rails/railties/controller_runtime.rb +40 -0
  23. data/lib/sequel_rails/railties/database.rake +175 -0
  24. data/lib/sequel_rails/railties/i18n_support.rb +10 -0
  25. data/lib/sequel_rails/railties/log_subscriber.rb +56 -0
  26. data/lib/sequel_rails/sequel/database/active_support_notification.rb +28 -0
  27. data/lib/sequel_rails/sequel/plugins/rails_extensions.rb +35 -0
  28. data/lib/sequel_rails/session_store.rb +80 -0
  29. data/lib/sequel_rails/storage.rb +58 -0
  30. data/lib/sequel_rails/storage/abstract.rb +52 -0
  31. data/lib/sequel_rails/storage/jdbc.rb +45 -0
  32. data/lib/sequel_rails/storage/mysql.rb +31 -0
  33. data/lib/sequel_rails/storage/mysql2.rb +6 -0
  34. data/lib/sequel_rails/storage/postgres.rb +22 -0
  35. data/lib/sequel_rails/storage/sqlite.rb +26 -0
  36. data/lib/sequel_rails/version.rb +3 -0
  37. data/sequel-rails.gemspec +22 -86
  38. data/spec/internal/app/models/user.rb +2 -0
  39. data/spec/internal/config/database.yml +7 -0
  40. data/spec/internal/config/routes.rb +3 -0
  41. data/spec/internal/db/schema.rb +8 -0
  42. data/spec/internal/public/favicon.ico +0 -0
  43. data/spec/lib/generators/sequel/migration_spec.rb +256 -0
  44. data/spec/lib/sequel_rails/railtie_spec.rb +85 -0
  45. data/spec/lib/sequel_rails/railties/log_subscriber_spec.rb +29 -0
  46. data/spec/lib/sequel_rails/storage_spec.rb +108 -0
  47. data/spec/spec_helper.rb +30 -16
  48. data/tasks/spec.rake +63 -29
  49. metadata +194 -142
  50. data/CHANGELOG +0 -15
  51. data/README.rdoc +0 -86
  52. data/VERSION +0 -1
  53. data/autotest/discover.rb +0 -1
  54. data/lib/generators/sequel/migration/templates/migration.rb +0 -16
  55. data/lib/sequel-rails/configuration.rb +0 -61
  56. data/lib/sequel-rails/migrations.rb +0 -30
  57. data/lib/sequel-rails/railtie.rb +0 -90
  58. data/lib/sequel-rails/railties/benchmarking_mixin.rb +0 -23
  59. data/lib/sequel-rails/railties/controller_runtime.rb +0 -43
  60. data/lib/sequel-rails/railties/database.rake +0 -148
  61. data/lib/sequel-rails/railties/i18n_support.rb +0 -12
  62. data/lib/sequel-rails/railties/log_subscriber.rb +0 -31
  63. data/lib/sequel-rails/runtime.rb +0 -14
  64. data/lib/sequel-rails/session_store.rb +0 -82
  65. data/lib/sequel-rails/setup.rb +0 -19
  66. data/lib/sequel-rails/storage.rb +0 -210
  67. data/spec/rcov.opts +0 -6
  68. data/spec/setup_spec.rb +0 -7
  69. data/spec/spec.opts +0 -4
  70. data/tasks/ci.rake +0 -1
  71. data/tasks/clean.rake +0 -6
  72. data/tasks/metrics.rake +0 -37
  73. data/tasks/yard.rake +0 -9
  74. data/tasks/yardstick.rake +0 -20
@@ -1,12 +0,0 @@
1
- module Rails
2
- module Sequel
3
-
4
- module I18nSupport
5
- # Set the i18n scope to overwrite ActiveModel.
6
- def i18n_scope #:nodoc:
7
- :sequel
8
- end
9
- end
10
-
11
- end
12
- end
@@ -1,31 +0,0 @@
1
- module Sequel
2
- module Railties
3
-
4
- class LogSubscriber < ActiveSupport::LogSubscriber
5
-
6
- def sql(event)
7
- name = '%s (%.1fms)' % [event.payload[:name], event.duration]
8
- sql = event.payload[:sql].squeeze(' ')
9
-
10
- if odd?
11
- name = color(name, :cyan, true)
12
- sql = color(sql, nil, true)
13
- else
14
- name = color(name, :magenta, true)
15
- end
16
-
17
- debug " #{name} #{sql}"
18
- end
19
-
20
- def odd?
21
- @odd_or_even = !@odd_or_even
22
- end
23
-
24
- def logger
25
- ::Rails::Sequel.configuration.logger
26
- end
27
-
28
- end
29
-
30
- end
31
- end
@@ -1,14 +0,0 @@
1
- module Rails
2
- module Sequel
3
-
4
- class << self
5
- def reset_runtime
6
- @runtime ||= 0
7
-
8
- rt, @runtime = @runtime, 0
9
- rt
10
- end
11
- end
12
-
13
- end
14
- end
@@ -1,82 +0,0 @@
1
- require 'sequel'
2
-
3
- # Implements Sequel-specific session store.
4
-
5
- module Rails
6
- module Sequel
7
-
8
- class SessionStore < ActionDispatch::Session::AbstractStore
9
-
10
- class Session < ::Sequel::Model
11
-
12
- # property :id, Serial
13
- # property :session_id, String, :required => true, :unique => true, :unique_index => true
14
- # property :data, Object, :required => true, :default => ActiveSupport::Base64.encode64(Marshal.dump({}))
15
- # property :updated_at, DateTime, :required => false, :index => true
16
-
17
- class << self
18
-
19
- def auto_migrate!
20
- self.db.create_table :sessions do
21
- primary_key :id
22
- column :session_id, String,
23
- :null => false,
24
- :unique => true,
25
- :index => true
26
-
27
- column :data, :text,
28
- :null => false
29
-
30
- column :updated_at, DateTime,
31
- :null => true,
32
- :index => true
33
- end
34
- end
35
-
36
- end
37
-
38
- def self.name
39
- 'session'
40
- end
41
-
42
- end
43
-
44
- SESSION_RECORD_KEY = 'rack.session.record'.freeze
45
-
46
- cattr_accessor :session_class
47
- self.session_class = Session
48
-
49
- private
50
-
51
- def get_session(env, sid)
52
- sid ||= generate_sid
53
- session = find_session(sid)
54
- env[SESSION_RECORD_KEY] = session
55
- [ sid, session.data ]
56
- end
57
-
58
- def set_session(env, sid, session_data)
59
- session = get_session_resource(env, sid)
60
- session.data = session_data
61
- session.updated_at = Time.now if session.dirty?
62
- session.save
63
- end
64
-
65
- def get_session_resource(env, sid)
66
- if env[ENV_SESSION_OPTIONS_KEY][:id].nil?
67
- env[SESSION_RECORD_KEY] = find_session(sid)
68
- else
69
- env[SESSION_RECORD_KEY] ||= find_session(sid)
70
- end
71
- end
72
-
73
- def find_session(sid)
74
- klass = self.class.session_class
75
-
76
- klass.where(:session_id => sid).first || klass.new(:session_id => sid)
77
- end
78
-
79
- end
80
-
81
- end
82
- end
@@ -1,19 +0,0 @@
1
- require 'active_support/core_ext/hash/except'
2
-
3
- require 'sequel/extensions/migration'
4
-
5
- require 'sequel-rails/configuration'
6
- require 'sequel-rails/runtime'
7
- require 'sequel-rails/railties/benchmarking_mixin'
8
-
9
- module Rails
10
- module Sequel
11
-
12
- def self.setup(environment)
13
- puts "[sequel] Setting up the #{environment.inspect} environment:"
14
-
15
- ::Sequel.connect({:logger => configuration.logger}.merge(::Rails::Sequel.configuration.environment_for(environment.to_s)))
16
- end
17
-
18
- end
19
- end
@@ -1,210 +0,0 @@
1
- module Rails
2
- module Sequel
3
-
4
- def self.storage
5
- Storage
6
- end
7
-
8
- class Storage
9
- attr_reader :config
10
-
11
- def self.create_all
12
- with_local_repositories { |config| create_environment(config) }
13
- end
14
-
15
- def self.drop_all
16
- with_local_repositories { |config| drop_environment(config) }
17
- end
18
-
19
- def self.create_environment(config)
20
- new(config).create
21
- end
22
-
23
- def self.drop_environment(config)
24
- new(config).drop
25
- end
26
-
27
- def self.new(config)
28
- config = Rails::Sequel.configuration.environments[config.to_s] unless config.kind_of?(Hash)
29
-
30
- klass = lookup_class(config['adapter'])
31
- if klass.equal?(self)
32
- super(config)
33
- else
34
- klass.new(config)
35
- end
36
- end
37
-
38
- class << self
39
- private
40
-
41
- def with_local_repositories
42
- Rails::Sequel.configuration.environments.each_value do |config|
43
- if config['host'].blank? || %w[ 127.0.0.1 localhost ].include?(config['host'])
44
- yield(config)
45
- else
46
- puts "This task only modifies local databases. #{config['database']} is on a remote host."
47
- end
48
- end
49
- end
50
-
51
- def lookup_class(adapter)
52
- klass_name = adapter.camelize.to_sym
53
-
54
- unless Storage.const_defined?(klass_name)
55
- raise "Adapter #{adapter} not supported (#{klass_name.inspect})"
56
- end
57
-
58
- const_get(klass_name)
59
- end
60
-
61
- end
62
-
63
- def initialize(config)
64
- @config = config
65
- end
66
-
67
- def create
68
- _create
69
- puts "[sequel] Created database '#{database}'"
70
- end
71
-
72
- def drop
73
- _drop
74
- puts "[sequel] Dropped database '#{database}'"
75
- end
76
-
77
- def database
78
- @database ||= config['database'] || config['path']
79
- end
80
-
81
- def username
82
- @username ||= config['username'] || ''
83
- end
84
-
85
- def password
86
- @password ||= config['password'] || ''
87
- end
88
-
89
- def charset
90
- @charset ||= config['charset'] || ENV['CHARSET'] || 'utf8'
91
- end
92
-
93
- class Sqlite < Storage
94
- def _create
95
- return if in_memory?
96
- ::Sequel.connect(config.merge('database' => path))
97
- end
98
-
99
- def _drop
100
- return if in_memory?
101
- path.unlink if path.file?
102
- end
103
-
104
- private
105
-
106
- def in_memory?
107
- database == ':memory:'
108
- end
109
-
110
- def path
111
- @path ||= Pathname(File.expand_path(database, Rails.root))
112
- end
113
-
114
- end
115
-
116
- class Mysql < Storage
117
- def _create
118
- execute("CREATE DATABASE IF NOT EXISTS `#{database}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
119
- end
120
-
121
- def _drop
122
- execute("DROP DATABASE IF EXISTS `#{database}`")
123
- end
124
-
125
- private
126
-
127
- def execute(statement)
128
- system(
129
- 'mysql',
130
- (username.blank? ? '' : "--user=#{username}"),
131
- (password.blank? ? '' : "--password=#{password}"),
132
- '-e',
133
- statement
134
- )
135
- end
136
-
137
- def collation
138
- @collation ||= config['collation'] || ENV['COLLATION'] || 'utf8_unicode_ci'
139
- end
140
-
141
- end
142
-
143
- class Postgres < Storage
144
- def _create
145
- system(
146
- 'createdb',
147
- '-E',
148
- charset,
149
- '-U',
150
- username,
151
- database
152
- )
153
- end
154
-
155
- def _drop
156
- system(
157
- 'dropdb',
158
- '-U',
159
- username,
160
- database
161
- )
162
- end
163
- end
164
-
165
- class Jdbc < Storage
166
-
167
- def _is_mysql?
168
- database.match(/^jdbc:mysql/)
169
- end
170
-
171
- def _root_url
172
- database.scan /^jdbc:mysql:\/\/\w*:?\d*/
173
- end
174
-
175
- def db_name
176
- database.scan(/^jdbc:mysql:\/\/\w+:?\d*\/(\w+)/).flatten.first
177
- end
178
-
179
- def _params
180
- database.scan /\?.*$/
181
- end
182
-
183
- def _create
184
- if _is_mysql?
185
- ::Sequel.connect("#{_root_url}#{_params}") do |db|
186
- db.execute("CREATE DATABASE IF NOT EXISTS `#{db_name}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
187
- end
188
- end
189
- end
190
-
191
- def _drop
192
- if _is_mysql?
193
- ::Sequel.connect("#{_root_url}#{_params}") do |db|
194
- db.execute("DROP DATABASE IF EXISTS `#{db_name}`")
195
- end
196
- end
197
- end
198
-
199
- private
200
-
201
- def collation
202
- @collation ||= config['collation'] || ENV['COLLATION'] || 'utf8_unicode_ci'
203
- end
204
-
205
-
206
- end
207
-
208
- end
209
- end
210
- end
data/spec/rcov.opts DELETED
@@ -1,6 +0,0 @@
1
- --exclude-only "spec\/,^\/"
2
- --sort coverage
3
- --callsites
4
- --xrefs
5
- --profile
6
- --text-summary
data/spec/setup_spec.rb DELETED
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Rails::Sequel::Setup" do
4
- it "fails" do
5
- # fail "hey buddy, you should probably rename this file and start specing for real"
6
- end
7
- end
data/spec/spec.opts DELETED
@@ -1,4 +0,0 @@
1
- --color
2
- --loadby random
3
- --format profile
4
- --backtrace
data/tasks/ci.rake DELETED
@@ -1 +0,0 @@
1
- task :ci => [ 'metrics:all' ]
data/tasks/clean.rake DELETED
@@ -1,6 +0,0 @@
1
- require 'rake/clean'
2
-
3
- File.foreach('.gitignore') do |line|
4
- line.strip!
5
- CLOBBER << line unless line.empty? || line[0, 1] == '#'
6
- end
data/tasks/metrics.rake DELETED
@@ -1,37 +0,0 @@
1
- begin
2
- require 'metric_fu'
3
- rescue LoadError
4
- namespace :metrics do
5
- task :all do
6
- abort 'metric_fu is not available. In order to run metrics:all, you must: gem install metric_fu'
7
- end
8
- end
9
- end
10
-
11
- begin
12
- require 'reek/adapters/rake_task'
13
-
14
- Reek::RakeTask.new do |t|
15
- t.fail_on_error = true
16
- t.verbose = false
17
- t.source_files = 'lib/**/*.rb'
18
- end
19
- rescue LoadError
20
- task :reek do
21
- abort 'Reek is not available. In order to run reek, you must: gem install reek'
22
- end
23
- end
24
-
25
- begin
26
- require 'roodi'
27
- require 'rake/tasklib'
28
- require 'roodi_task'
29
-
30
- RoodiTask.new do |t|
31
- t.verbose = false
32
- end
33
- rescue LoadError
34
- task :roodi do
35
- abort 'Roodi is not available. In order to run roodi, you must: gem install roodi'
36
- end
37
- end