nulogy-sequel-rails 0.3.8

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 (36) hide show
  1. data/.document +5 -0
  2. data/.gitignore +29 -0
  3. data/Gemfile +3 -0
  4. data/History.md +77 -0
  5. data/LICENSE +20 -0
  6. data/README.rdoc +102 -0
  7. data/Rakefile +9 -0
  8. data/lib/rails/generators/sequel/active_model.rb +39 -0
  9. data/lib/rails/generators/sequel/base.rb +26 -0
  10. data/lib/rails/generators/sequel/generated_attribute_ext.rb +9 -0
  11. data/lib/rails/generators/sequel/migration/migration_generator.rb +43 -0
  12. data/lib/rails/generators/sequel/migration/templates/migration.rb +48 -0
  13. data/lib/rails/generators/sequel/model/model_generator.rb +28 -0
  14. data/lib/rails/generators/sequel/model/templates/migration.rb +14 -0
  15. data/lib/rails/generators/sequel/model/templates/model.rb +6 -0
  16. data/lib/rails/generators/sequel/observer/observer_generator.rb +16 -0
  17. data/lib/rails/generators/sequel/observer/templates/observer.rb +4 -0
  18. data/lib/rails/generators/sequel.rb +9 -0
  19. data/lib/sequel/plugins/rails_extensions.rb +25 -0
  20. data/lib/sequel/rails/configuration.rb +56 -0
  21. data/lib/sequel/rails/core.rb +50 -0
  22. data/lib/sequel/rails/ext.rb +25 -0
  23. data/lib/sequel/rails/log_subscriber.rb +71 -0
  24. data/lib/sequel/rails/migrations.rb +22 -0
  25. data/lib/sequel/rails/railtie.rb +76 -0
  26. data/lib/sequel/rails/railties/controller_runtime.rb +48 -0
  27. data/lib/sequel/rails/railties/database.rake +185 -0
  28. data/lib/sequel/rails/railties/i18n_support.rb +9 -0
  29. data/lib/sequel/rails/session_store.rb +69 -0
  30. data/lib/sequel/rails/setup.rb +14 -0
  31. data/lib/sequel/rails/storage.rb +225 -0
  32. data/lib/sequel/rails/version.rb +6 -0
  33. data/lib/sequel/rails.rb +26 -0
  34. data/lib/sequel-rails.rb +2 -0
  35. data/nulogy-sequel-rails.gemspec +19 -0
  36. metadata +101 -0
@@ -0,0 +1,225 @@
1
+
2
+ # TODO: Review this class, document
3
+
4
+ module Sequel
5
+ module Rails
6
+
7
+ def self.storage
8
+ Storage
9
+ end
10
+
11
+ class Storage
12
+ attr_reader :config
13
+
14
+ def self.create_all
15
+ with_local_repositories { |config| create_environment(config) }
16
+ end
17
+
18
+ def self.drop_all
19
+ with_local_repositories { |config| drop_environment(config) }
20
+ end
21
+
22
+ def self.create_environment(config)
23
+ new(config).create
24
+ end
25
+
26
+ def self.drop_environment(config)
27
+ new(config).drop
28
+ end
29
+
30
+ def self.new(config)
31
+ config = Sequel::Rails.configuration.db_config_for(config) unless config.kind_of?(Hash)
32
+
33
+ klass = lookup_class(config['adapter'])
34
+ if klass.equal?(self)
35
+ super(config)
36
+ else
37
+ klass.new(config)
38
+ end
39
+ end
40
+
41
+ class << self
42
+ private
43
+
44
+ def with_local_repositories
45
+ Sequel::Rails.configuration.db_environments.each_value do |config|
46
+ next if config['database'].blank?
47
+ if config['host'].blank? || %w[ 127.0.0.1 localhost ].include?(config['host'])
48
+ yield(config)
49
+ else
50
+ puts "This task only modifies local databases. #{config['database']} is on a remote host."
51
+ end
52
+ end
53
+ end
54
+
55
+ def lookup_class(adapter)
56
+ klass_name = adapter.camelize.to_sym
57
+
58
+ unless Storage.const_defined?(klass_name)
59
+ raise "Adapter #{adapter} not supported (#{klass_name.inspect})"
60
+ end
61
+
62
+ const_get(klass_name)
63
+ end
64
+
65
+ end
66
+
67
+ def initialize(config)
68
+ @config = config
69
+ end
70
+
71
+ def create
72
+ _create
73
+ puts "[sequel] Created database '#{database}'"
74
+ end
75
+
76
+ def drop
77
+ Sequel::Model.db.disconnect
78
+ _drop
79
+ puts "[sequel] Dropped database '#{database}'"
80
+ end
81
+
82
+ def database
83
+ @database ||= config['database'] || config['path']
84
+ end
85
+
86
+ def username
87
+ @username ||= config['username'] || config['user'] || ''
88
+ end
89
+
90
+ def password
91
+ @password ||= config['password'] || ''
92
+ end
93
+
94
+ def host
95
+ @host ||= config['host'] || ''
96
+ end
97
+
98
+ def port
99
+ @port ||= config['port'] || ''
100
+ end
101
+
102
+ def owner
103
+ @owner ||= config['owner'] || ''
104
+ end
105
+
106
+ def charset
107
+ @charset ||= config['charset'] || ENV['CHARSET'] || 'utf8'
108
+ end
109
+
110
+ class Sqlite < Storage
111
+ def _create
112
+ return if in_memory?
113
+ Sequel.connect(config.merge('database' => path))
114
+ end
115
+
116
+ def _drop
117
+ return if in_memory?
118
+ path.unlink if path.file?
119
+ end
120
+
121
+ private
122
+
123
+ def in_memory?
124
+ database == ':memory:'
125
+ end
126
+
127
+ def path
128
+ @path ||= Pathname(File.expand_path(database, ::Rails.root))
129
+ end
130
+
131
+ end
132
+
133
+ class Mysql < Storage
134
+ def _create
135
+ execute("CREATE DATABASE IF NOT EXISTS `#{database}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
136
+ end
137
+
138
+ def _drop
139
+ execute("DROP DATABASE IF EXISTS `#{database}`")
140
+ end
141
+
142
+ private
143
+
144
+ def execute(statement)
145
+ commands = ["mysql"]
146
+ commands << "--user" << username unless username.blank?
147
+ commands << "--password=#{password}" unless password.blank?
148
+ commands << "--host" << host unless host.blank?
149
+ commands << "-e" << statement
150
+ system(*commands)
151
+ end
152
+
153
+ def collation
154
+ @collation ||= config['collation'] || ENV['COLLATION'] || 'utf8_unicode_ci'
155
+ end
156
+
157
+ end
158
+ class Mysql2 < Mysql
159
+ end
160
+
161
+ class Postgres < Storage
162
+ def _create
163
+ ENV["PGPASSWORD"] = password unless password.blank?
164
+ commands = ["createdb", "--encoding", charset]
165
+ commands << "--username" << username unless username.blank?
166
+ commands << "--owner" << owner unless owner.blank?
167
+ commands << "--port" << port unless port.blank?
168
+ commands << "--host" << host unless host.blank?
169
+ commands << database
170
+ res = system(*commands)
171
+ ENV["PGPASSWORD"] = nil
172
+ res
173
+ end
174
+
175
+ def _drop
176
+ system("dropdb", "-U", username, database)
177
+ end
178
+ end
179
+
180
+ class Jdbc < Storage
181
+
182
+ def _is_mysql?
183
+ database.match(/^jdbc:mysql/)
184
+ end
185
+
186
+ def _root_url
187
+ database.scan /^jdbc:mysql:\/\/\w*:?\d*/
188
+ end
189
+
190
+ def db_name
191
+ database.scan(/^jdbc:mysql:\/\/\w+:?\d*\/(\w+)/).flatten.first
192
+ end
193
+
194
+ def _params
195
+ database.scan /\?.*$/
196
+ end
197
+
198
+ def _create
199
+ if _is_mysql?
200
+ Sequel.connect("#{_root_url}#{_params}") do |db|
201
+ db.execute("CREATE DATABASE IF NOT EXISTS `#{db_name}` DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}")
202
+ end
203
+ end
204
+ end
205
+
206
+ def _drop
207
+ if _is_mysql?
208
+ Sequel.connect("#{_root_url}#{_params}") do |db|
209
+ db.execute("DROP DATABASE IF EXISTS `#{db_name}`")
210
+ end
211
+ end
212
+ end
213
+
214
+ private
215
+
216
+ def collation
217
+ @collation ||= config['collation'] || ENV['COLLATION'] || 'utf8_unicode_ci'
218
+ end
219
+
220
+
221
+ end
222
+
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,6 @@
1
+ module Sequel
2
+ module Rails
3
+ VERSION = '0.3.8'
4
+ def self.version; VERSION; end
5
+ end
6
+ end
@@ -0,0 +1,26 @@
1
+
2
+ require File.expand_path('../rails/core', __FILE__)
3
+
4
+ module Sequel::Rails
5
+ def self.configuration
6
+ Configuration
7
+ end
8
+
9
+ def self.connect(environment)
10
+ @db = Sequel.connect(configuration.db_config_for(environment))
11
+ end
12
+
13
+ def self.db
14
+ @db
15
+ end
16
+
17
+ def self.connected?
18
+ !!@db
19
+ end
20
+
21
+ require libpath('sequel/rails/ext')
22
+ require libpath('sequel/rails/configuration')
23
+ require libpath('sequel/rails/log_subscriber')
24
+ require libpath('sequel/rails/railtie')
25
+ end
26
+
@@ -0,0 +1,2 @@
1
+
2
+ require 'sequel/rails'
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require File.expand_path('../lib/sequel/rails/version', __FILE__)
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "nulogy-sequel-rails"
7
+ s.version = Sequel::Rails.version
8
+ s.authors = ["Brasten Sager (brasten)", "Jonathan TRON", "Elliot Winkler", "Nulogy"]
9
+ s.email = ["brasten@gmail.com", "jonathan.tron@thetalentbox.com", "elliot.winkler@gmail.com"]
10
+ s.homepage = "https://github.com/nulogy/sequel-rails"
11
+ s.description = "Ruby gem for integrating Sequel with your Rails 3 app"
12
+ s.summary = "Ruby gem for integrating Sequel with your Rails 3 app"
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_paths = ["lib"]
17
+
18
+ s.add_runtime_dependency("sequel", ["~> 3.28"])
19
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nulogy-sequel-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.8
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Brasten Sager (brasten)
9
+ - Jonathan TRON
10
+ - Elliot Winkler
11
+ - Nulogy
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+ date: 2012-09-19 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: sequel
19
+ requirement: !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ~>
23
+ - !ruby/object:Gem::Version
24
+ version: '3.28'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.28'
33
+ description: Ruby gem for integrating Sequel with your Rails 3 app
34
+ email:
35
+ - brasten@gmail.com
36
+ - jonathan.tron@thetalentbox.com
37
+ - elliot.winkler@gmail.com
38
+ executables: []
39
+ extensions: []
40
+ extra_rdoc_files: []
41
+ files:
42
+ - .document
43
+ - .gitignore
44
+ - Gemfile
45
+ - History.md
46
+ - LICENSE
47
+ - README.rdoc
48
+ - Rakefile
49
+ - lib/rails/generators/sequel.rb
50
+ - lib/rails/generators/sequel/active_model.rb
51
+ - lib/rails/generators/sequel/base.rb
52
+ - lib/rails/generators/sequel/generated_attribute_ext.rb
53
+ - lib/rails/generators/sequel/migration/migration_generator.rb
54
+ - lib/rails/generators/sequel/migration/templates/migration.rb
55
+ - lib/rails/generators/sequel/model/model_generator.rb
56
+ - lib/rails/generators/sequel/model/templates/migration.rb
57
+ - lib/rails/generators/sequel/model/templates/model.rb
58
+ - lib/rails/generators/sequel/observer/observer_generator.rb
59
+ - lib/rails/generators/sequel/observer/templates/observer.rb
60
+ - lib/sequel-rails.rb
61
+ - lib/sequel/plugins/rails_extensions.rb
62
+ - lib/sequel/rails.rb
63
+ - lib/sequel/rails/configuration.rb
64
+ - lib/sequel/rails/core.rb
65
+ - lib/sequel/rails/ext.rb
66
+ - lib/sequel/rails/log_subscriber.rb
67
+ - lib/sequel/rails/migrations.rb
68
+ - lib/sequel/rails/railtie.rb
69
+ - lib/sequel/rails/railties/controller_runtime.rb
70
+ - lib/sequel/rails/railties/database.rake
71
+ - lib/sequel/rails/railties/i18n_support.rb
72
+ - lib/sequel/rails/session_store.rb
73
+ - lib/sequel/rails/setup.rb
74
+ - lib/sequel/rails/storage.rb
75
+ - lib/sequel/rails/version.rb
76
+ - nulogy-sequel-rails.gemspec
77
+ homepage: https://github.com/nulogy/sequel-rails
78
+ licenses: []
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ requirements: []
96
+ rubyforge_project:
97
+ rubygems_version: 1.8.24
98
+ signing_key:
99
+ specification_version: 3
100
+ summary: Ruby gem for integrating Sequel with your Rails 3 app
101
+ test_files: []