procedural 0.0.1 → 0.0.2
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/.gitignore +3 -0
- data/.travis.yml +12 -0
- data/Gemfile +9 -0
- data/README.markdown +20 -16
- data/lib/procedural.rb +1 -2
- data/lib/procedural/adapters/postgresql_adapter.rb +1 -1
- data/lib/procedural/version.rb +1 -1
- data/spec/adapters/postgresql_adapter_spec.rb +13 -0
- data/spec/support/migration_helpers.rb +3 -3
- metadata +3 -3
- data/Gemfile.lock +0 -56
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0645c0774ecd01207e6aa1bca6c84278def4a59
|
4
|
+
data.tar.gz: 97c663151905e572627d4e232b674b086f3f2dc5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3f227ba958f2491aab7610897f78615ffb9801fad1890efa772049e53b0fbe29a5d06bbaff0bae87de340ec81810ad2336c2095b3cbdfafcc198047d4d0f1df
|
7
|
+
data.tar.gz: f9e4f1bb8e04389aaf399977286f8ae5a69bc68e08592bcae528061860397ad1370d93008bd5cdbb580b4fcfcaafa82bd2c56510f25f569a60843d74d16e75b7
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Procedural
|
1
|
+
# Procedural [](https://travis-ci.org/andrewtimberlake/procedural) [](https://codeclimate.com/github/andrewtimberlake/procedural)
|
2
2
|
|
3
3
|
Procedural adds the ability to add functions and triggers via ActiveRecord migrations.
|
4
4
|
|
@@ -6,28 +6,32 @@ Thanks to [Spectacles](https://github.com/liveh2o/spectacles) where I took much
|
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
-
```
|
9
|
+
```bash
|
10
10
|
gem install procedural #=> or include it in your Gemfile
|
11
11
|
```
|
12
12
|
|
13
13
|
## Example Migration
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
class
|
16
|
+
class AddTimestampTriggers < ActiveRecord::Migration
|
17
17
|
def change
|
18
|
-
create_procedure :created_at_trigger, language: 'plpgsql', returns: 'trigger'
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
18
|
+
create_procedure :created_at_trigger, language: 'plpgsql', returns: 'trigger' do
|
19
|
+
<<-SQL
|
20
|
+
IF (TG_OP = 'UPDATE') THEN
|
21
|
+
NEW."created_at" := OLD."created_at";
|
22
|
+
ELSIF (TG_OP = 'INSERT') THEN
|
23
|
+
NEW."created_at" := CURRENT_TIMESTAMP;
|
24
|
+
END IF;
|
25
|
+
RETURN NEW;
|
26
|
+
SQL
|
27
|
+
end
|
28
|
+
|
29
|
+
create_procedure :updated_at_trigger, language: 'plpgsql', returns: 'trigger' do
|
30
|
+
<<-SQL
|
31
|
+
NEW."updated_at" := CURRENT_TIMESTAMP;
|
32
|
+
RETURN NEW;
|
33
|
+
SQL
|
34
|
+
end
|
31
35
|
|
32
36
|
create_trigger :users, :users_created_at, :created_at_trigger
|
33
37
|
create_trigger :users, :users_updated_at, :updated_at_trigger
|
data/lib/procedural.rb
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'active_record'
|
3
|
-
require 'procedural/procedure'
|
4
3
|
require 'procedural/adapters'
|
5
4
|
|
6
5
|
ActiveRecord::ConnectionAdapters::AbstractAdapter.class_eval do
|
7
6
|
alias_method(:_procedural_original_inherited, :inherited) if method_defined?(:inherited)
|
8
7
|
|
9
|
-
def self.inherited(
|
8
|
+
def self.inherited(_klass)
|
10
9
|
::Procedural::load_adapters
|
11
10
|
_procedural_orig_inherited if method_defined?(:_procedural_original_inherited)
|
12
11
|
end
|
@@ -8,7 +8,7 @@ module Procedural
|
|
8
8
|
procedure_name = args.shift
|
9
9
|
language = options.fetch(:language)
|
10
10
|
returns = options.fetch(:returns)
|
11
|
-
sql = options.fetch(:sql)
|
11
|
+
sql = options.fetch(:sql) { yield }
|
12
12
|
|
13
13
|
execute(<<-SQL)
|
14
14
|
CREATE OR REPLACE FUNCTION #{quote_column_name(procedure_name)}()
|
data/lib/procedural/version.rb
CHANGED
@@ -27,6 +27,19 @@ module Procedural
|
|
27
27
|
END IF;
|
28
28
|
RETURN NEW;
|
29
29
|
SQL
|
30
|
+
end
|
31
|
+
|
32
|
+
it "accepts SQL from a block" do
|
33
|
+
sql = shared_base.create_procedure(:created_at_trigger, language: 'plpgsql', returns: 'trigger') do
|
34
|
+
<<-SQL
|
35
|
+
IF (TG_OP = 'UPDATE') THEN
|
36
|
+
NEW."created_at" := OLD."created_at";
|
37
|
+
ELSIF (TG_OP = 'INSERT') THEN
|
38
|
+
NEW."created_at" := CURRENT_TIMESTAMP;
|
39
|
+
END IF;
|
40
|
+
RETURN NEW;
|
41
|
+
SQL
|
42
|
+
end
|
30
43
|
|
31
44
|
expect(sql).to_match(/CREATE OR REPLACE FUNCTION created_at_trigger/);
|
32
45
|
expect(sql).to_match(/IF \(TG_OP = 'UPDATE'/);
|
@@ -5,7 +5,7 @@ shared_examples_for "an adapter" do
|
|
5
5
|
describe "create procedure migration" do
|
6
6
|
create_procedure_migration = Class.new(ActiveRecord::Migration) do
|
7
7
|
def change
|
8
|
-
create_procedure :test_procedure, language: 'plpgsql', returns: 'text', sql: <<-SQL
|
8
|
+
create_procedure :test_procedure, language: 'plpgsql', returns: 'text', sql: <<-SQL
|
9
9
|
RETURN "Hello World";
|
10
10
|
SQL
|
11
11
|
end
|
@@ -25,8 +25,8 @@ shared_examples_for "an adapter" do
|
|
25
25
|
describe "create trigger migration" do
|
26
26
|
create_procedure_migration = Class.new(ActiveRecord::Migration) do
|
27
27
|
def change
|
28
|
-
create_procedure :
|
29
|
-
create_trigger :users, :users_trigger, :
|
28
|
+
create_procedure :test_procedure2, language: 'plpgsql', returns: 'trigger', sql: "RETURN NEW;"
|
29
|
+
create_trigger :users, :users_trigger, :test_procedure2
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: procedural
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Timberlake
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -88,8 +88,8 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
|
+
- ".travis.yml"
|
91
92
|
- Gemfile
|
92
|
-
- Gemfile.lock
|
93
93
|
- README.markdown
|
94
94
|
- Rakefile
|
95
95
|
- lib/procedural.rb
|
data/Gemfile.lock
DELETED
@@ -1,56 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
procedural (0.0.1)
|
5
|
-
activerecord (>= 3.2.0)
|
6
|
-
activesupport (>= 3.2.0)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: http://rubygems.org/
|
10
|
-
specs:
|
11
|
-
activemodel (4.2.5)
|
12
|
-
activesupport (= 4.2.5)
|
13
|
-
builder (~> 3.1)
|
14
|
-
activerecord (4.2.5)
|
15
|
-
activemodel (= 4.2.5)
|
16
|
-
activesupport (= 4.2.5)
|
17
|
-
arel (~> 6.0)
|
18
|
-
activesupport (4.2.5)
|
19
|
-
i18n (~> 0.7)
|
20
|
-
json (~> 1.7, >= 1.7.7)
|
21
|
-
minitest (~> 5.1)
|
22
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
23
|
-
tzinfo (~> 1.1)
|
24
|
-
arel (6.0.3)
|
25
|
-
builder (3.2.2)
|
26
|
-
docile (1.1.5)
|
27
|
-
i18n (0.7.0)
|
28
|
-
json (1.8.3)
|
29
|
-
minitest (5.8.3)
|
30
|
-
minitest-spec-expect (2.0.0)
|
31
|
-
minitest (~> 5.0)
|
32
|
-
pg (0.18.4)
|
33
|
-
rake (10.4.2)
|
34
|
-
simplecov (0.10.0)
|
35
|
-
docile (~> 1.1.0)
|
36
|
-
json (~> 1.8)
|
37
|
-
simplecov-html (~> 0.10.0)
|
38
|
-
simplecov-html (0.10.0)
|
39
|
-
thread_safe (0.3.5)
|
40
|
-
tzinfo (1.2.2)
|
41
|
-
thread_safe (~> 0.1)
|
42
|
-
|
43
|
-
PLATFORMS
|
44
|
-
ruby
|
45
|
-
|
46
|
-
DEPENDENCIES
|
47
|
-
activerecord-jdbcpostgresql-adapter
|
48
|
-
minitest
|
49
|
-
minitest-spec-expect
|
50
|
-
pg
|
51
|
-
procedural!
|
52
|
-
rake
|
53
|
-
simplecov
|
54
|
-
|
55
|
-
BUNDLED WITH
|
56
|
-
1.10.6
|