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 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