mv-sqlite 1.0.1 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b14a84bb74774f0aa3ba2e61eaf11e1cb4d6841
4
- data.tar.gz: 81b732865575ffb182352f98360ae2e9280def05
3
+ metadata.gz: 314b0696046e0c4425057f118d22c0754383ce87
4
+ data.tar.gz: 796ee45a44c3f1eeb08e298de607dfe16246b7af
5
5
  SHA512:
6
- metadata.gz: 707f1fb3fcd1f203f31b21b2627202a734484c1361836f543aa87e2765b172813980946b4c39547a873871903c2db5eec795e1da0ea8e8ebbe8cce526c4531b7
7
- data.tar.gz: 326268c78ce09522453a739477f7ff94144961083127c4bec0ce87b7c87e63bb8a59695f8aba707ea07c248d4f90d1c193fb698e8873cfb8e155e655f0e3f134
6
+ metadata.gz: 88d5c04c79b375a62e49cda6fdbca0a8c1130f739d717de4122dfb7b7473300dc6b693a4e9419d49299c2c9281e6bb4476df8c2ec8c959f396529db7ed8d14e9
7
+ data.tar.gz: 949f2606844f304ecd98824888f1c600e20833fa28b34b579947dbeadf60472aa0a2223932eb24535e95c1c2cc649b2f79c0f9d3b41f75fa26a7ca5d6720baa0
@@ -1,3 +1,8 @@
1
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/vprokopchuk256/mv-sqlite/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
2
+ [![Build Status](https://travis-ci.org/vprokopchuk256/mv-sqlite.svg)](https://travis-ci.org/vprokopchuk256/mv-sqlite)
3
+ [![Coverage Status](https://coveralls.io/repos/vprokopchuk256/mv-sqlite/badge.png?branch=master)](https://coveralls.io/r/vprokopchuk256/mv-sqlite?branch=master)
4
+ [![Gem Version](https://badge.fury.io/rb/mv-sqlite.svg)](http://badge.fury.io/rb/mv-sqlite)
5
+
1
6
  # Introduction
2
7
 
3
8
  mv-sqlite is the SQLite driver for Migration Validators project (details here: https://github.com/vprokopchuk256/mv-core)
@@ -11,20 +16,20 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
11
16
  validate uniqueness of the column 'column_name':
12
17
 
13
18
  ```ruby
14
- validate_column :table_name, :column_name, uniqueness: true
19
+ validates :table_name, :column_name, uniqueness: true
15
20
  ```
16
21
 
17
22
  define validation as trigger with spefified failure message:
18
23
 
19
24
  ```ruby
20
- validate_column :table_name, :column_name,
21
- uniqueness: { message: 'Error message', as: :trigger }
25
+ validates :table_name, :column_name,
26
+ uniqueness: { message: 'Error message', as: :trigger }
22
27
  ```
23
28
 
24
29
  define validation as unique index:
25
30
 
26
31
  ```ruby
27
- validate_column :table_name, :column_name, uniqueness: { as: :index }
32
+ validates :table_name, :column_name, uniqueness: { as: :index }
28
33
  ```
29
34
 
30
35
  all above are available in a create and change table blocks:
@@ -37,7 +42,7 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
37
42
 
38
43
  ```ruby
39
44
  change :table_name do |t|
40
- t.change :column_name, :string, :validates: { uniqueness: false }
45
+ t.change :column_name, :string, validates: { uniqueness: false }
41
46
  end
42
47
  ```
43
48
 
@@ -59,22 +64,22 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
59
64
  column value length should be more than 4 symbols and less than 9. Otherwise 'Wrong length message' error will be raised:
60
65
 
61
66
  ```ruby
62
- validate_column :table_name, :column_name,
63
- length: { in: 5..8,
64
- message: 'Wrong length message' }
67
+ validates :table_name, :column_name,
68
+ length: { in: 5..8,
69
+ message: 'Wrong length message' }
65
70
  ```
66
71
 
67
72
  allow `NULL`:
68
73
 
69
74
  ```ruby
70
- validate_column :table_name, :column_name,
71
- length: { is: 3, allow_nil: true}
75
+ validates :table_name, :column_name,
76
+ length: { is: 3, allow_nil: true}
72
77
  ```
73
78
 
74
79
  allow blank values:
75
80
 
76
81
  ```ruby
77
- validate_column :table_name, :column_name,
82
+ validates :table_name, :column_name,
78
83
  length: { maximum: 3,
79
84
  too_long: 'Value is longer than 3 symbols' }
80
85
  ```
@@ -103,15 +108,15 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
103
108
  valid values array:
104
109
 
105
110
  ```ruby
106
- validate_column :table_name, :column_name, inclusion: { in: [1, 2, 3] }
111
+ validates :table_name, :column_name, inclusion: { in: [1, 2, 3] }
107
112
  ```
108
113
 
109
114
  with failure message specified:
110
115
 
111
116
  ```ruby
112
- validate_column :table_name, :column_name,
113
- inclusion: { in: [1, 2, 3],
114
- message: "Column 'column_name' should be equal to 1 or 2 or 3" }
117
+ validates :table_name, :column_name,
118
+ inclusion: { in: [1, 2, 3],
119
+ message: "Column 'column_name' should be equal to 1 or 2 or 3" }
115
120
  ```
116
121
 
117
122
  Options:
@@ -131,25 +136,24 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
131
136
  exclude 1, 2, and 3:
132
137
 
133
138
  ```ruby
134
- validate_column :table_name, :column_name, exclusion: { in: [1, 2, 3] }
139
+ validates :table_name, :column_name, exclusion: { in: [1, 2, 3] }
135
140
  ```
136
141
 
137
142
  exclude values with specified failure message:
138
143
 
139
144
  ```ruby
140
- validate_column :table_name, :column_name,
145
+ validates :table_name, :column_name,
141
146
  exclusion: {
142
147
  in: [1, 2, 3],
143
- :message => "Column 'column_name' should not be equal to 1 or 2 or 3"
148
+ message: "Column 'column_name' should not be equal to 1 or 2 or 3"
144
149
  }
145
150
  ```
146
151
 
147
152
  performs verification on update only:
148
153
 
149
154
  ```ruby
150
- validate_column :table_name, :column_name,
151
- exclusion: { in: [1, 2, 3],
152
- on: :update }
155
+ validates :table_name, :column_name, exclusion: { in: [1, 2, 3],
156
+ on: :update }
153
157
  ```
154
158
 
155
159
  Options:
@@ -170,20 +174,20 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
170
174
  simple presence validator:
171
175
 
172
176
  ```ruby
173
- validate_column :table_name, :column_name, presence: true
177
+ validates :table_name, :column_name, presence: true
174
178
  ```
175
179
 
176
180
  with failure message:
177
181
 
178
182
  ```ruby
179
- validate_column :table_name, :column_name,
180
- presence: { message: 'value should not be empty' }
183
+ validates :table_name, :column_name,
184
+ presence: { message: 'value should not be empty' }
181
185
  ```
182
186
 
183
187
  performs verification only when new record is inserted:
184
188
 
185
189
  ```ruby
186
- validate_column :table_name, :column_name,
190
+ validates :table_name, :column_name,
187
191
  presence: { message: 'value should not be empty',
188
192
  on: :create }
189
193
  ```
@@ -198,6 +202,41 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
198
202
  * `:allow_blank` - ignore validation for blank values. Default value: `false`
199
203
  * `:as` - defines the way how constraint will be implemented. Possible values: `[:trigger]`
200
204
 
205
+ ### absence
206
+
207
+ Examples:
208
+
209
+ simple absence validator:
210
+
211
+ ```ruby
212
+ validates :table_name, :column_name, absence: true
213
+ ```
214
+
215
+ with failure message:
216
+
217
+ ```ruby
218
+ validates :table_name, :column_name,
219
+ absence: { message: 'value should be empty' }
220
+ ```
221
+
222
+ performs verification only when new record is inserted:
223
+
224
+ ```ruby
225
+ validates :table_name, :column_name,
226
+ absence: { message: 'value should be empty',
227
+ on: :create }
228
+ ```
229
+
230
+ Options:
231
+
232
+ * `:message` - message that should be shown if validation failed
233
+ * `:on` - validation event. Possible values: `[:save, :update, :create]`. Default value: `:save`
234
+ * `:create_tigger_name` - Name of the 'before insert' trigger
235
+ * `:update_tigger_name` - Name of the 'before update' trigger
236
+ * `:allow_nil` - ignore validation for `nil` values. Default value: `false`
237
+ * `:allow_blank` - ignore validation for blank values. Default value: `false`
238
+ * `:as` - defines the way how constraint will be implemented. Possible values: `[:trigger]`
239
+
201
240
  ## Contributing to mv-sqlite
202
241
 
203
242
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
@@ -210,7 +249,7 @@ mv-sqlite is the SQLite driver for Migration Validators project (details here: h
210
249
 
211
250
  ## Copyright
212
251
 
213
- Copyright (c) 2011 Valeriy Prokopchuk. See LICENSE.txt for
252
+ Copyright (c) 2015 Valeriy Prokopchuk. See LICENSE.txt for
214
253
  further details.
215
254
 
216
255
 
data/lib/mv-sqlite.rb CHANGED
@@ -1,4 +1,32 @@
1
1
  require 'mv-core'
2
+ require 'mv/sqlite/railtie'
3
+
4
+ require 'mv/sqlite/constraint/builder/trigger'
5
+
6
+ require 'mv/sqlite/validation/builder/trigger/exclusion'
7
+ require 'mv/sqlite/validation/builder/trigger/inclusion'
8
+ require 'mv/sqlite/validation/builder/trigger/length'
9
+ require 'mv/sqlite/validation/builder/trigger/presence'
10
+ require 'mv/sqlite/validation/builder/trigger/absence'
11
+ require 'mv/sqlite/validation/builder/trigger/uniqueness'
12
+
13
+ ActiveSupport.on_load(:mv_core) do
14
+
15
+ #constraint builders
16
+ Mv::Core::Constraint::Builder::Factory.register_builders(
17
+ Mv::Core::Constraint::Trigger => Mv::Sqlite::Constraint::Builder::Trigger,
18
+ )
19
+
20
+ #validation builders in trigger
21
+ Mv::Sqlite::Constraint::Builder::Trigger.validation_builders_factory.register_builders(
22
+ Mv::Core::Validation::Exclusion => Mv::Sqlite::Validation::Builder::Trigger::Exclusion,
23
+ Mv::Core::Validation::Inclusion => Mv::Sqlite::Validation::Builder::Trigger::Inclusion,
24
+ Mv::Core::Validation::Length => Mv::Sqlite::Validation::Builder::Trigger::Length,
25
+ Mv::Core::Validation::Presence => Mv::Sqlite::Validation::Builder::Trigger::Presence,
26
+ Mv::Core::Validation::Absence => Mv::Sqlite::Validation::Builder::Trigger::Absence,
27
+ Mv::Core::Validation::Uniqueness => Mv::Sqlite::Validation::Builder::Trigger::Uniqueness
28
+ )
29
+ end
30
+
2
31
 
3
- require File.expand_path(File.dirname(__FILE__)) + '/migration_validators/adapters/sqlite'
4
32
 
@@ -0,0 +1,19 @@
1
+ module Mv
2
+ module Sqlite
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module Sqlite3AdapterDecorator
6
+ include Mv::Core::ActiveRecord::ConnectionAdapters::AbstractAdapterDecorator
7
+
8
+ protected
9
+
10
+ def alter_table(table_name, options = {})
11
+ Mv::Core::Migration::Base.with_suppressed_validations do
12
+ super
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,47 @@
1
+ module Mv
2
+ module Sqlite
3
+ module Constraint
4
+ module Builder
5
+ class Trigger < Mv::Core::Constraint::Builder::Trigger
6
+ def create
7
+ validation_builders.group_by(&:table_name).each do |table_name, validations|
8
+ db.execute(drop_trigger_statement(table_name))
9
+ db.execute(create_trigger_statement(table_name))
10
+ end
11
+ end
12
+
13
+ def delete
14
+ validation_builders.group_by(&:table_name).each do |table_name, validations|
15
+ db.execute(drop_trigger_statement(table_name))
16
+ end
17
+ end
18
+
19
+ def update new_constraint_builder
20
+ delete
21
+ new_constraint_builder.create
22
+ end
23
+
24
+ private
25
+
26
+
27
+ def drop_trigger_statement table_name
28
+ "DROP TRIGGER IF EXISTS #{name};"
29
+ end
30
+
31
+ def create_trigger_statement table_name
32
+ "CREATE TRIGGER #{name} BEFORE #{update? ? 'UPDATE' : 'INSERT'} ON #{table_name} FOR EACH ROW
33
+ BEGIN
34
+ #{trigger_body(table_name)};
35
+ END;"
36
+ end
37
+
38
+ def trigger_body(table_name)
39
+ validation_builders.select{|b| b.table_name == table_name }.collect(&:conditions).flatten.collect do |condition|
40
+ "SELECT RAISE(ABORT, '#{condition[:message]}') WHERE NOT(#{condition[:statement]})".squish
41
+ end.join("; \n")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,11 @@
1
+ require 'mv/sqlite/active_record/connection_adapters/sqlite3_adapter_decorator'
2
+
3
+ module Mv
4
+ module Sqlite
5
+ class Railtie < ::Rails::Railtie
6
+ initializer 'mv-sqlite.initialization', after: 'active_record.initialize_database' do
7
+ ::ActiveRecord::ConnectionAdapters::SQLite3Adapter.send(:prepend, Mv::Sqlite::ActiveRecord::ConnectionAdapters::Sqlite3AdapterDecorator)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'mv/sqlite/validation/builder/trigger/trigger_column'
2
+
3
+ module Mv
4
+ module Sqlite
5
+ module Validation
6
+ module Builder
7
+ module Trigger
8
+ class Absence < Mv::Core::Validation::Builder::Absence
9
+ include TriggerColumn
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ require 'mv/sqlite/validation/builder/trigger/mysql_datetime_values'
2
+ require 'mv/sqlite/validation/builder/trigger/trigger_column'
3
+
4
+ module Mv
5
+ module Sqlite
6
+ module Validation
7
+ module Builder
8
+ module Trigger
9
+ class Exclusion < Mv::Core::Validation::Builder::Exclusion
10
+ include MysqlDatetimeValues
11
+ include TriggerColumn
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require 'mv/sqlite/validation/builder/trigger/mysql_datetime_values'
2
+ require 'mv/sqlite/validation/builder/trigger/trigger_column'
3
+
4
+ module Mv
5
+ module Sqlite
6
+ module Validation
7
+ module Builder
8
+ module Trigger
9
+ class Inclusion < Mv::Core::Validation::Builder::Inclusion
10
+ include MysqlDatetimeValues
11
+ include TriggerColumn
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ require 'mv/sqlite/validation/builder/trigger/trigger_column'
2
+
3
+ module Mv
4
+ module Sqlite
5
+ module Validation
6
+ module Builder
7
+ module Trigger
8
+ class Length < Mv::Core::Validation::Builder::Length
9
+ include TriggerColumn
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Mv
2
+ module Sqlite
3
+ module Validation
4
+ module Builder
5
+ module Trigger
6
+ module MysqlDatetimeValues
7
+ protected
8
+
9
+ def db_value value
10
+ return "datetime('#{value.strftime('%Y-%m-%d %H:%M:%S')}')" if value.is_a?(DateTime)
11
+ return "datetime('#{value.strftime('%Y-%m-%d %H:%M:%S')}')" if value.is_a?(Time)
12
+ return "date('#{value.strftime('%Y-%m-%d')}')" if value.is_a?(Date)
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,15 @@
1
+ require 'mv/sqlite/validation/builder/trigger/trigger_column'
2
+
3
+ module Mv
4
+ module Sqlite
5
+ module Validation
6
+ module Builder
7
+ module Trigger
8
+ class Presence < Mv::Core::Validation::Builder::Presence
9
+ include TriggerColumn
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module Mv
2
+ module Sqlite
3
+ module Validation
4
+ module Builder
5
+ module Trigger
6
+ module TriggerColumn
7
+ protected
8
+
9
+ def column_reference
10
+ "NEW.#{super}"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ require 'mv/sqlite/validation/builder/trigger/trigger_column'
2
+
3
+ module Mv
4
+ module Sqlite
5
+ module Validation
6
+ module Builder
7
+ module Trigger
8
+ class Uniqueness < Mv::Core::Validation::Builder::Uniqueness
9
+ include TriggerColumn
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mv-sqlite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valeriy Prokopchuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-07 00:00:00.000000000 Z
11
+ date: 2015-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: sqlite3
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -30,14 +44,14 @@ dependencies:
30
44
  requirements:
31
45
  - - ~>
32
46
  - !ruby/object:Gem::Version
33
- version: '1.0'
47
+ version: '2.0'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ~>
39
53
  - !ruby/object:Gem::Version
40
- version: '1.0'
54
+ version: '2.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: jeweler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,18 +66,70 @@ dependencies:
52
66
  - - ~>
53
67
  - !ruby/object:Gem::Version
54
68
  version: '2.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '3.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '3.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-its
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '4.5'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '4.5'
55
111
  description: Migration Validators project sqlite driver
56
112
  email: vprokopchuk@gmail.com
57
113
  executables: []
58
114
  extensions: []
59
115
  extra_rdoc_files:
60
116
  - LICENSE.txt
61
- - README.rdoc
117
+ - README.md
62
118
  files:
63
119
  - LICENSE.txt
64
- - README.rdoc
65
- - lib/migration_validators/adapters/sqlite.rb
120
+ - README.md
66
121
  - lib/mv-sqlite.rb
122
+ - lib/mv/sqlite/active_record/connection_adapters/sqlite3_adapter_decorator.rb
123
+ - lib/mv/sqlite/constraint/builder/trigger.rb
124
+ - lib/mv/sqlite/railtie.rb
125
+ - lib/mv/sqlite/validation/builder/trigger/absence.rb
126
+ - lib/mv/sqlite/validation/builder/trigger/exclusion.rb
127
+ - lib/mv/sqlite/validation/builder/trigger/inclusion.rb
128
+ - lib/mv/sqlite/validation/builder/trigger/length.rb
129
+ - lib/mv/sqlite/validation/builder/trigger/mysql_datetime_values.rb
130
+ - lib/mv/sqlite/validation/builder/trigger/presence.rb
131
+ - lib/mv/sqlite/validation/builder/trigger/trigger_column.rb
132
+ - lib/mv/sqlite/validation/builder/trigger/uniqueness.rb
67
133
  homepage: http://github.com/vprokopchuk256/mv-sqlite
68
134
  licenses:
69
135
  - MIT
@@ -84,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
150
  version: '0'
85
151
  requirements: []
86
152
  rubyforge_project:
87
- rubygems_version: 2.4.2
153
+ rubygems_version: 2.4.4
88
154
  signing_key:
89
155
  specification_version: 4
90
156
  summary: Migration Validators project. SQLite driver
@@ -1,75 +0,0 @@
1
- module MigrationValidators
2
- module Adapters
3
- class Sqlite < MigrationValidators::Adapters::Base
4
- def name
5
- "SQLite Migration Validators Adapter"
6
- end
7
-
8
- define_base_syntax
9
- define_base_validators
10
- define_base_containers
11
-
12
- container :insert_trigger do
13
- operation :db_value do |value|
14
- case value.class.name
15
- when "String" then "'#{value}'"
16
- when "Date" then "date('#{value.strftime('%Y-%m-%d')}')"
17
- when "DateTime" then "datetime('#{value.strftime('%Y-%m-%d %H:%M:%S')}')"
18
- when "Time" then "datetime('#{value.strftime('%Y-%m-%d %H:%M:%S')}')"
19
- else value.to_s
20
- end
21
- end
22
-
23
- operation :bind_to_error do |stmt, error_message|
24
- "SELECT RAISE(ABORT, '#{error_message}')
25
- WHERE NOT(#{stmt})"
26
- end
27
- end
28
-
29
- container :update_trigger do
30
- operation :db_value do |value|
31
- case value.class.name
32
- when "String" then "'#{value}'"
33
- when "Date" then "date('#{value.strftime('%Y-%m-%d')}')"
34
- when "DateTime" then "datetime('#{value.strftime('%Y-%m-%d %H:%M:%S')}')"
35
- when "Time" then "datetime('#{value.strftime('%Y-%m-%d %H:%M:%S')}')"
36
- else value.to_s
37
- end
38
- end
39
-
40
- operation :bind_to_error do |stmt, error_message|
41
- "SELECT RAISE(ABORT, '#{error_message}')
42
- WHERE NOT(#{stmt})"
43
- end
44
- end
45
-
46
-
47
- route :presence, :trigger, :default => true do
48
- to :insert_trigger, :if => {:on => [:save, :create, nil]}
49
- to :update_trigger, :if => {:on => [:save, :update, nil]}
50
- end
51
-
52
- route :inclusion, :trigger, :default => true do
53
- to :insert_trigger, :if => {:on => [:save, :create, nil]}
54
- to :update_trigger, :if => {:on => [:save, :update, nil]}
55
- end
56
-
57
- route :exclusion, :trigger, :default => true do
58
- to :insert_trigger, :if => {:on => [:save, :create, nil]}
59
- to :update_trigger, :if => {:on => [:save, :update, nil]}
60
- end
61
-
62
- route :length, :trigger, :default => true do
63
- to :insert_trigger, :if => {:on => [:save, :create, nil]}
64
- to :update_trigger, :if => {:on => [:save, :update, nil]}
65
- end
66
-
67
- route :uniqueness, :trigger do
68
- to :insert_trigger, :if => {:on => [:save, :create, nil]}
69
- to :update_trigger, :if => {:on => [:save, :update, nil]}
70
- end
71
- end
72
-
73
- MigrationValidators.register_adapter! "sqlite3", Sqlite
74
- end
75
- end