procedural 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d69df288d43e4cf1f62fcb82cc25bef57064e8d5
4
- data.tar.gz: 1f155c1eed051b135bb38dd0476b41a1f6c76187
3
+ metadata.gz: a0645c0774ecd01207e6aa1bca6c84278def4a59
4
+ data.tar.gz: 97c663151905e572627d4e232b674b086f3f2dc5
5
5
  SHA512:
6
- metadata.gz: ed9cb2aed0465fb453e865afae2bcedddce021267699fcd6d1acccc383b7a546533e30225a2d9a6f01ea78a5609b66394a3e1cfe697b79cc9da90072033d5e7b
7
- data.tar.gz: e9bf85a221f05c18256e54d44056cb675d93815c9c29373a99e97ff0119b1ca1a831c63ff0a14c1f13e0a7276efae42ede2de683e5e24702ad8923cdc2958815
6
+ metadata.gz: a3f227ba958f2491aab7610897f78615ffb9801fad1890efa772049e53b0fbe29a5d06bbaff0bae87de340ec81810ad2336c2095b3cbdfafcc198047d4d0f1df
7
+ data.tar.gz: f9e4f1bb8e04389aaf399977286f8ae5a69bc68e08592bcae528061860397ad1370d93008bd5cdbb580b4fcfcaafa82bd2c56510f25f569a60843d74d16e75b7
data/.gitignore CHANGED
@@ -1,2 +1,5 @@
1
1
  /coverage/
2
2
  /spec/database.yml
3
+ /procedural-*.gem
4
+ /Gemfile.lock
5
+ /pkg/
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ sudo: false
3
+ env:
4
+ - "RAILS_VERSION=4.0.0"
5
+ - "RAILS_VERSION=4.1.0"
6
+ - "RAILS_VERSION=4.2.0"
7
+ rvm:
8
+ - 2.0
9
+ - 2.1
10
+ - 2.2
11
+ before_script:
12
+ - cp spec/database.yml.sample spec/database.yml
data/Gemfile CHANGED
@@ -14,3 +14,12 @@ end
14
14
  group :test do
15
15
  gem 'simplecov', require: false
16
16
  end
17
+
18
+ version = ENV['RAILS_VERSION'] || 'default'
19
+
20
+ case version
21
+ when 'default'
22
+ gem 'activerecord', '>= 4.2'
23
+ else
24
+ gem 'activerecord', "~> #{version}"
25
+ end
@@ -1,4 +1,4 @@
1
- # Procedural
1
+ # Procedural [![Build Status](https://travis-ci.org/andrewtimberlake/procedural.svg)](https://travis-ci.org/andrewtimberlake/procedural) [![Code Climate](https://codeclimate.com/github/andrewtimberlake/procedural/badges/gpa.svg)](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 AddCreatedAtTrigger < ActiveRecord::Migration
16
+ class AddTimestampTriggers < ActiveRecord::Migration
17
17
  def change
18
- create_procedure :created_at_trigger, language: 'plpgsql', returns: 'trigger', sql: <<-SQL
19
- IF (TG_OP = 'UPDATE') THEN
20
- NEW."created_at" := OLD."created_at";
21
- ELSIF (TG_OP = 'INSERT') THEN
22
- NEW."created_at" := CURRENT_TIMESTAMP;
23
- END IF;
24
- RETURN NEW;
25
- SQL
26
-
27
- create_procedure :updated_at_trigger, language: 'plpgsql', returns: 'trigger', sql: <<-SQL
28
- NEW."updated_at" := CURRENT_TIMESTAMP;
29
- RETURN NEW;
30
- SQL
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
@@ -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(klass)
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)}()
@@ -1,3 +1,3 @@
1
1
  module Procedural
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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.strip_heredoc
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 :test_procedure, language: 'plpgsql', returns: 'trigger', sql: "RETURN NEW;"
29
- create_trigger :users, :users_trigger, :test_procedure
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.1
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-18 00:00:00.000000000 Z
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
@@ -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