grape-activerecord 0.0.8 → 1.0.0
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.
- checksums.yaml +4 -4
- data/README.md +56 -0
- data/lib/grape/activerecord.rb +2 -1
- data/lib/grape/activerecord/activerecord.rb +16 -30
- data/lib/grape/activerecord/defaults.rb +8 -0
- data/lib/grape/activerecord/rake/activerecord_4.rb +0 -1
- data/lib/grape/activerecord/version.rb +1 -1
- metadata +5 -6
- data/README.rdoc +0 -60
- data/lib/grape/activerecord/extension.rb +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e2c64bed54671c981f10740dd8c9aff825139ecd
|
4
|
+
data.tar.gz: 4767e1ec312989eca3fdf8402581953c34293ecb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f4408ff1a8c8a2509b8e3e9a4118be9c456d2b5b3ce7b2e625a25970054ad6218332b6e29a6c8223caeb41d7262cf982b06290460941e8384b21e502efe4782
|
7
|
+
data.tar.gz: 5c749482c3f5a820ae9f93b5f9cd614293bbe3ef3b9a8a052e6f12fd362b039b78f1d29eead8df8c25f84a50fb1f13ea35e72fc3ba2cec984e8854bcb773818d
|
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# grape-activerecord
|
2
|
+
|
3
|
+
A simple way to use ActiveRecord with your Grape apps.
|
4
|
+
|
5
|
+
## How to use
|
6
|
+
|
7
|
+
### 1. Add it to your Gemfile
|
8
|
+
|
9
|
+
gem "grape-activerecord"
|
10
|
+
|
11
|
+
### 2. Configure your database connection
|
12
|
+
|
13
|
+
grape-activerecord looks for your database configuration in:
|
14
|
+
|
15
|
+
* `config/database.yml` (see /examples for a sample file)
|
16
|
+
* The `DATABASE_URL` environment variable (e.g. `postgres://user:pass@host/db`)
|
17
|
+
|
18
|
+
But if your app has more particular needs, we've got you covered:
|
19
|
+
|
20
|
+
Grape::ActiveRecord.database_file = "db.yml"
|
21
|
+
Grape::ActiveRecord.database_url = "postgres://user:pass@host/db"
|
22
|
+
Grape::ActiveRecord.database = {adapter: "postgresql", host: "localhost", database: "db", username: "user", password: "pass", encoding: "utf8", pool: 10, timeout: 5000}
|
23
|
+
|
24
|
+
### 3. Enable ActiveRecord connection management
|
25
|
+
|
26
|
+
This ActiveRecord middleware cleans up your database connections after each request. Add it to your config.ru file:
|
27
|
+
|
28
|
+
use ActiveRecord::ConnectionAdapters::ConnectionManagement
|
29
|
+
|
30
|
+
### 4. Import ActiveRecord tasks into your Rakefile
|
31
|
+
|
32
|
+
This will give you most of the standard `db:` tasks you get in Rails. Run `bundle exec rake -T` to get a full list.
|
33
|
+
|
34
|
+
require "bundler/setup"
|
35
|
+
require "grape/activerecord/rake"
|
36
|
+
|
37
|
+
namespace :db do
|
38
|
+
# Some db tasks require your app code to be loaded
|
39
|
+
task :environment do
|
40
|
+
require_relative "app"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
Unlike in Rails, creating a new migration is also a rake task:
|
45
|
+
|
46
|
+
bundle exec rake db:create_migration NAME=create_widgets
|
47
|
+
|
48
|
+
## Examples
|
49
|
+
|
50
|
+
Look under /examples for some example apps.
|
51
|
+
|
52
|
+
## License
|
53
|
+
|
54
|
+
Licensed under the MIT License
|
55
|
+
|
56
|
+
Copyright 2014 Jordan Hollinger
|
data/lib/grape/activerecord.rb
CHANGED
@@ -2,41 +2,27 @@
|
|
2
2
|
module Grape
|
3
3
|
# Grape and ActiveRecord integration
|
4
4
|
module ActiveRecord
|
5
|
-
class << self
|
6
|
-
# A Hash representing the database connection
|
7
|
-
attr_accessor :database
|
8
|
-
# A database connection URL (default ENV['DATABASE_URL'])
|
9
|
-
attr_accessor :database_url
|
10
|
-
# YAML file where all database configurations are stored (default config/database.yml)
|
11
|
-
attr_accessor :database_file
|
12
|
-
end
|
13
|
-
self.database_url = ENV['DATABASE_URL']
|
14
|
-
self.database_file = 'config/database.yml'
|
15
|
-
|
16
5
|
# The current Rack environment
|
17
6
|
RACK_ENV = (ENV['RACK_ENV'] || 'development').to_sym
|
18
7
|
|
19
|
-
#
|
20
|
-
|
21
|
-
|
22
|
-
::ActiveRecord::Base.
|
23
|
-
|
24
|
-
|
25
|
-
::ActiveRecord::Base.configurations = {RACK_ENV => spec}.stringify_keys
|
26
|
-
::ActiveRecord::Base.establish_connection(RACK_ENV)
|
27
|
-
|
28
|
-
elsif spec = Grape::ActiveRecord.database_url
|
29
|
-
::ActiveRecord::Base.establish_connection(spec)
|
30
|
-
::ActiveRecord::Base.configurations = {RACK_ENV.to_s => ::ActiveRecord::Base.connection.pool.spec.config}
|
8
|
+
# Connect to database with a Hash. Example:
|
9
|
+
# {adapter: 'postgresql', host: 'localhost', database: 'db', username: 'user', password: 'pass', encoding: 'utf8', pool: 10, timeout: 5000}
|
10
|
+
def self.database=(spec)
|
11
|
+
::ActiveRecord::Base.configurations = {RACK_ENV => spec}.stringify_keys
|
12
|
+
::ActiveRecord::Base.establish_connection(RACK_ENV)
|
13
|
+
end
|
31
14
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
15
|
+
# Connect to database with a DB URL. Example: "postgres://user:pass@localhost/db"
|
16
|
+
def self.database_url=(url)
|
17
|
+
::ActiveRecord::Base.establish_connection(url)
|
18
|
+
::ActiveRecord::Base.configurations = {RACK_ENV.to_s => ::ActiveRecord::Base.connection.pool.spec.config}
|
19
|
+
end
|
36
20
|
|
37
|
-
|
38
|
-
|
39
|
-
|
21
|
+
# Connect to database with a yml file. Example: "config/database.yml"
|
22
|
+
def self.database_file=(path)
|
23
|
+
raise "#{path} does not exist!" unless File.file? path
|
24
|
+
::ActiveRecord::Base.configurations = YAML.load(ERB.new(File.read(path)).result) || {}
|
25
|
+
::ActiveRecord::Base.establish_connection(RACK_ENV)
|
40
26
|
end
|
41
27
|
end
|
42
28
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
::ActiveRecord::Base.default_timezone = :utc
|
2
|
+
::ActiveRecord::Base.logger = Logger.new(STDOUT)
|
3
|
+
|
4
|
+
if ENV['DATABASE_URL']
|
5
|
+
Grape::ActiveRecord.database_url = ENV['DATABASE_URL']
|
6
|
+
elsif File.file? 'config/database.yml'
|
7
|
+
Grape::ActiveRecord.database_file = 'config/database.yml'
|
8
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-activerecord
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jordan Hollinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
@@ -59,10 +59,10 @@ extensions: []
|
|
59
59
|
extra_rdoc_files: []
|
60
60
|
files:
|
61
61
|
- LICENSE
|
62
|
-
- README.
|
62
|
+
- README.md
|
63
63
|
- lib/grape/activerecord.rb
|
64
64
|
- lib/grape/activerecord/activerecord.rb
|
65
|
-
- lib/grape/activerecord/
|
65
|
+
- lib/grape/activerecord/defaults.rb
|
66
66
|
- lib/grape/activerecord/rake.rb
|
67
67
|
- lib/grape/activerecord/rake/activerecord_4.rb
|
68
68
|
- lib/grape/activerecord/tasks.rake
|
@@ -87,9 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
87
|
version: '0'
|
88
88
|
requirements: []
|
89
89
|
rubyforge_project:
|
90
|
-
rubygems_version: 2.
|
90
|
+
rubygems_version: 2.4.5
|
91
91
|
signing_key:
|
92
92
|
specification_version: 4
|
93
93
|
summary: ActiveRecord integration for Grape
|
94
94
|
test_files: []
|
95
|
-
has_rdoc:
|
data/README.rdoc
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
== grape-activerecord
|
2
|
-
|
3
|
-
Simple integration of ActiveRecord connections and Rake tasks with Grape. Supports ActiveRecord 4.x.
|
4
|
-
Inspired by sinatra-activerecord (https://github.com/janko-m/sinatra-activerecord).
|
5
|
-
|
6
|
-
=== Add to your Gemfile
|
7
|
-
|
8
|
-
gem 'grape-activerecord'
|
9
|
-
|
10
|
-
=== Set database config
|
11
|
-
|
12
|
-
# Use a Hash
|
13
|
-
Grape::ActiveRecord.database = {adapter: 'postgresql', host: 'localhost', database: 'db', username: 'user', password: 'pass', encoding: 'utf8', pool: 10, timeout: 5000}
|
14
|
-
|
15
|
-
# or a URL
|
16
|
-
Grape::ActiveRecord.database_url = 'postgres://user:pass@localhost/db'
|
17
|
-
|
18
|
-
# or a YAML file
|
19
|
-
Grape::ActiveRecord.database_file = 'config/database.yml'
|
20
|
-
|
21
|
-
If you don't specify any configuration, grape-activerecord will first look in DATABASE_URL, then in config/database.yml.
|
22
|
-
|
23
|
-
=== Include Grape::ActiveRecord::Extension
|
24
|
-
|
25
|
-
class MyApi < Grape::API
|
26
|
-
include Grape::ActiveRecord::Extension
|
27
|
-
...
|
28
|
-
end
|
29
|
-
|
30
|
-
This will establish the database connections and (usually) correctly return used connections to the pool after each request.
|
31
|
-
NOTE If you're mounting sub Grape apps, you need only include grape-activerecord in the root app.
|
32
|
-
|
33
|
-
==== Important
|
34
|
-
|
35
|
-
It's recommended that you manually include ActiveRecord::ConnectionAdapters::ConnectionManagement yourself BEFORE mounting your Grape app (https://github.com/intridea/grape/issues/517#issuecomment-60969722). The top of your config.ru file is a good place:
|
36
|
-
|
37
|
-
# config.ru
|
38
|
-
use ActiveRecord::ConnectionAdapters::ConnectionManagement
|
39
|
-
run MyGrapeApi
|
40
|
-
|
41
|
-
=== Example Rakefile with ActiveRecord tasks
|
42
|
-
|
43
|
-
require 'bundler/setup'
|
44
|
-
require 'grape/activerecord/rake'
|
45
|
-
|
46
|
-
namespace :db do
|
47
|
-
# Some db tasks require your app code to be loaded
|
48
|
-
task :environment do
|
49
|
-
require_relative 'app'
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
This will give you most of the standard "db:" tasks you get in Rails. Run "bundle exec rake -T" to get a full list.
|
54
|
-
Note that unlike in Rails, creating a new migration is also a rake task:
|
55
|
-
|
56
|
-
bundle exec rake db:create_migration NAME=create_widgets
|
57
|
-
|
58
|
-
=== Example app
|
59
|
-
|
60
|
-
Look under /examples for some example apps.
|
@@ -1,12 +0,0 @@
|
|
1
|
-
module Grape
|
2
|
-
module ActiveRecord
|
3
|
-
# Including this module in your Grape app establishes the database connection and handles connection management
|
4
|
-
module Extension
|
5
|
-
# Establishes db connection and management
|
6
|
-
def self.included(app)
|
7
|
-
Grape::ActiveRecord.setup!
|
8
|
-
app.use ::ActiveRecord::ConnectionAdapters::ConnectionManagement
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|