sinatra-activerecord 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,94 @@
1
+ Sinatra ActiveRecord Extension
2
+ ========================
3
+
4
+ Extends [Sinatra](http://www.sinatrarb.com/) with a extension methods and Rake
5
+ tasks for dealing with a SQL database using the [ActiveRecord ORM](http://api.rubyonrails.org/).
6
+
7
+ Install the `sinatra-activerecord` gem along with one of the database adapters:
8
+
9
+ sudo gem install activerecord
10
+ sudo gem install sinatra-activerecord -s http://gems.gemcutter.org
11
+ sudo gem install sqlite3
12
+ sudo gem install mysql
13
+ sudo gem install postgres
14
+
15
+ adding this to your `Rakefile`
16
+
17
+ # require your app file first
18
+ require 'sinatra-ar-exmple-app'
19
+ require 'sinatra/activerecord/rake'
20
+
21
+ $ rake -T
22
+ rake db:create_migration # create an ActiveRecord migration in ./db/migrate
23
+ rake db:migrate # migrate your database
24
+
25
+ create a migration
26
+
27
+ $ rake db:create_migration NAME=create_foos
28
+ $ vim db/migrate/20090922043513_create_foos.rb
29
+
30
+ class CreateFoos < ActiveRecord::Migration
31
+ def self.up
32
+ create_table :foos do |t|
33
+ t.string :name
34
+ end
35
+ end
36
+
37
+ def self.down
38
+ end
39
+ end
40
+
41
+ run the migration
42
+
43
+ $ rake db:migrate
44
+
45
+ I like to split models out into a separate `database.rb` file and then
46
+ require it from the main app file, but you can plop
47
+ the following code in about anywhere and it'll work just fine:
48
+
49
+ require 'sinatra'
50
+ require 'sinatra/activerecord'
51
+
52
+ # Establish the database connection; or, omit this and use the DATABASE_URL
53
+ # environment variable or the default sqlite://<environment>.db as the connection string:
54
+ set :database, 'sqlite://foo.db'
55
+
56
+ # At this point, you can access the ActiveRecord::Base class using the
57
+ # "database" object:
58
+ puts "the foos table doesn't exist" if !database.table_exists?('foos')
59
+
60
+ # models just work ...
61
+ class Foo < ActiveRecord::Base
62
+ end
63
+
64
+ # see:
65
+ Foo.all
66
+
67
+ # access the models within the context of an HTTP request
68
+ get '/foos/:id' do
69
+ @foo = Foo.find(params[:id])
70
+ erb :foos
71
+ end
72
+
73
+ Copyright (c) 2009 Blake Mizerany
74
+
75
+ Permission is hereby granted, free of charge, to any person
76
+ obtaining a copy of this software and associated documentation
77
+ files (the "Software"), to deal in the Software without
78
+ restriction, including without limitation the rights to use,
79
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
80
+ copies of the Software, and to permit persons to whom the
81
+ Software is furnished to do so, subject to the following
82
+ conditions:
83
+
84
+ The above copyright notice and this permission notice shall be
85
+ included in all copies or substantial portions of the Software.
86
+
87
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
88
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
89
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
90
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
91
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
92
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
93
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
94
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,37 @@
1
+ require 'activerecord'
2
+ require 'fileutils'
3
+
4
+ namespace :db do
5
+ desc "migrate your database"
6
+ task :migrate do
7
+ ActiveRecord::Migrator.migrate(
8
+ 'db/migrate',
9
+ ENV["VERSION"] ? ENV["VERSION"].to_i : nil
10
+ )
11
+ end
12
+
13
+ desc "create an ActiveRecord migration in ./db/migrate"
14
+ task :create_migration do
15
+ name = ENV['NAME']
16
+ abort("no NAME specified. use `rake db:create_migration NAME=create_users`") if !name
17
+
18
+ migrations_dir = File.join("db", "migrate")
19
+ version = ENV["VERSION"] || Time.now.utc.strftime("%Y%m%d%H%M%S")
20
+ filename = "#{version}_#{name}.rb"
21
+ migration_name = name.gsub(/_(.)/) { $1.upcase }.gsub(/^(.)/) { $1.upcase }
22
+
23
+ FileUtils.mkdir_p(migrations_dir)
24
+
25
+ open(File.join(migrations_dir, filename), 'w') do |f|
26
+ f << (<<-EOS).gsub(" ", "")
27
+ class #{migration_name} < ActiveRecord::Migration
28
+ def self.up
29
+ end
30
+
31
+ def self.down
32
+ end
33
+ end
34
+ EOS
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,61 @@
1
+ require 'uri'
2
+ require 'time'
3
+ require 'sinatra/base'
4
+ require 'active_record'
5
+ require 'logger'
6
+
7
+ module Sinatra
8
+ module ActiveRecordHelper
9
+ def database
10
+ options.database
11
+ end
12
+ end
13
+
14
+ module ActiveRecordExtension
15
+ def database=(url)
16
+ @database = nil
17
+ set :database_url, url
18
+ database
19
+ end
20
+
21
+ def database
22
+ @database ||= (
23
+ url = URI(database_url)
24
+ ActiveRecord::Base.logger = activerecord_logger
25
+ ActiveRecord::Base.establish_connection(database_options)
26
+ ActiveRecord::Base
27
+ )
28
+ end
29
+
30
+ protected
31
+
32
+ def database_options
33
+ url = URI(database_url)
34
+ if url.scheme == "sqlite"
35
+ {
36
+ :adapter => "sqlite3",
37
+ :database => url.host
38
+ }
39
+ else
40
+ {
41
+ :adapter => url.scheme,
42
+ :host => url.host,
43
+ :port => url.port,
44
+ :database => url.path[1..-1],
45
+ :username => url.user,
46
+ :password => url.password
47
+ }
48
+ end.merge(database_extras)
49
+ end
50
+
51
+ def self.registered(app)
52
+ app.set :database_url, lambda { ENV['DATABASE_URL'] || "sqlite://#{environment}.db" }
53
+ app.set :database_extras, Hash.new
54
+ app.set :activerecord_logger, Logger.new(STDOUT)
55
+ app.database # force connection
56
+ app.helpers ActiveRecordHelper
57
+ end
58
+ end
59
+
60
+ register ActiveRecordExtension
61
+ end
@@ -0,0 +1,33 @@
1
+ Gem::Specification.new do |s|
2
+ s.specification_version = 2 if s.respond_to? :specification_version=
3
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
+
5
+ s.name = 'sinatra-activerecord'
6
+ s.version = '0.1.0'
7
+ s.date = '2009-09-21'
8
+
9
+ s.description = "Extends Sinatra with activerecord helpers for instant activerecord use"
10
+ s.summary = s.description
11
+
12
+ s.authors = ["Blake Mizerany"]
13
+ s.email = "blake.mizerany@gmail.com"
14
+
15
+ # = MANIFEST =
16
+ s.files = %w[
17
+ README.md
18
+ lib/sinatra/activerecord.rb
19
+ lib/sinatra/activerecord/rake.rb
20
+ sinatra-activerecord.gemspec
21
+ ]
22
+ # = MANIFEST =
23
+
24
+ s.extra_rdoc_files = %w[README.md]
25
+ s.add_dependency 'sinatra', '>= 0.9.4'
26
+
27
+ s.has_rdoc = true
28
+ s.homepage = "http://github.com/rtomayko/sinatra-activerecord"
29
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Sinatra::ActiveRecord"]
30
+ s.require_paths = %w[lib]
31
+ s.rubyforge_project = 'bmizerany'
32
+ s.rubygems_version = '1.1.1'
33
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-activerecord
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Blake Mizerany
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-21 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: sinatra
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.4
24
+ version:
25
+ description: Extends Sinatra with activerecord helpers for instant activerecord use
26
+ email: blake.mizerany@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README.md
33
+ files:
34
+ - README.md
35
+ - lib/sinatra/activerecord.rb
36
+ - lib/sinatra/activerecord/rake.rb
37
+ - sinatra-activerecord.gemspec
38
+ has_rdoc: true
39
+ homepage: http://github.com/rtomayko/sinatra-activerecord
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options:
44
+ - --line-numbers
45
+ - --inline-source
46
+ - --title
47
+ - Sinatra::ActiveRecord
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project: bmizerany
65
+ rubygems_version: 1.3.4
66
+ signing_key:
67
+ specification_version: 2
68
+ summary: Extends Sinatra with activerecord helpers for instant activerecord use
69
+ test_files: []
70
+