sequel-rails 0.1.8 → 0.4.0.pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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