umbrellio-sequel-plugins 0.4.0.81 → 0.4.0.134

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
  SHA256:
3
- metadata.gz: 1506132f68e964f7e3f06370a9766cdad8b89d84ad4e810e73ab3225e6f1140b
4
- data.tar.gz: 0f1774262d2a637abd9dfd8a5bd379a2a22cac5a0f0836c7c742e115657ff467
3
+ metadata.gz: 61fbe7c339511660a7a6797732df54b1215d84820ba80d97f434076b329ac2af
4
+ data.tar.gz: a4802265e7bd4ffe9c21b7eaa9ba7d071bf75b81f09d6198412201882f59ede5
5
5
  SHA512:
6
- metadata.gz: 3c2f62536da956885da8d21c21ca9704925e85dce9de4eafd24948e30dea6b354281384529b80f7bd6f1076f17348bb58e2aff378ec6d8a54b285e367f26b7cb
7
- data.tar.gz: 58e5e45610d3dd9746b17bef038fd4609634d1050ed5619766dd30eeecf8c1fa5dc64b710c0b1cfa2a2b0660786a01e3264c6f21334a935bbce0d4aef7415ff7
6
+ metadata.gz: 9ee225f47d644536885adf0f63569c64e0d079abb22faca00415c663ffdaafaf27679eb63af7206dabb4accdfa87fb025e8cacece1e59feaf8ce8bb96fce9d42
7
+ data.tar.gz: 4f65c05c159e82e6999e463bd2a5c10e1c37110b43d7cec383416c9d6acd90536777740c4b936186f4deade9ece47ef2542f1de63f0ac4620755682820120577
data/.gitignore CHANGED
@@ -10,6 +10,4 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
 
13
- Gemfile.lock
14
-
15
13
  log
@@ -1,25 +1,52 @@
1
1
  language: ruby
2
- matrix:
2
+
3
+ os: linux
4
+ dist: xenial
5
+
6
+ jobs:
3
7
  fast_finish: true
4
8
  include:
5
- - rvm: 2.4
6
9
  - rvm: 2.5
7
10
  - rvm: 2.6
11
+ - rvm: 2.7
8
12
  - rvm: ruby-head
9
13
  allow_failures:
10
14
  - rvm: ruby-head
11
- sudo: false
12
- cache: bundler
15
+
13
16
  services:
14
17
  - postgresql
18
+
15
19
  addons:
16
- postgresql: 9.6
17
- before_install: gem install bundler
20
+ postgresql: 12
21
+ apt:
22
+ packages:
23
+ - postgresql-12
24
+ - postgresql-client-12
25
+ - postgresql-server-dev-12
26
+ - postgresql-client-common
27
+ - postgresql-common
28
+
29
+ env:
30
+ global:
31
+ - PGPORT=5433
32
+
33
+ cache: bundler
34
+
35
+ before_install:
36
+ - gem install bundler
37
+ - sudo cp /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/12/main/pg_hba.conf
38
+ - sudo service postgresql restart 12
39
+ - sleep 1
40
+
41
+ install: bundle install --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
42
+
18
43
  before_script:
19
44
  - psql -c 'create database sequel_plugins;' -U postgres
45
+
20
46
  script:
21
47
  - bundle exec rspec
22
48
  - bundle exec rubocop
49
+
23
50
  deploy:
24
51
  provider: rubygems
25
52
  api_key:
@@ -28,3 +55,4 @@ deploy:
28
55
  on:
29
56
  repo: umbrellio/umbrellio-sequel-plugins
30
57
  branch: master
58
+ rvm: 2.7
@@ -0,0 +1,117 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ umbrellio-sequel-plugins (0.4.0)
5
+ sequel
6
+ symbiont-ruby (>= 0.6)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (6.0.2.2)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ zeitwerk (~> 2.2)
17
+ ast (2.4.0)
18
+ coderay (1.1.2)
19
+ concurrent-ruby (1.1.6)
20
+ coveralls (0.8.23)
21
+ json (>= 1.8, < 3)
22
+ simplecov (~> 0.16.1)
23
+ term-ansicolor (~> 1.3)
24
+ thor (>= 0.19.4, < 2.0)
25
+ tins (~> 1.6)
26
+ diff-lcs (1.3)
27
+ docile (1.3.2)
28
+ i18n (1.8.2)
29
+ concurrent-ruby (~> 1.0)
30
+ jaro_winkler (1.5.4)
31
+ json (2.3.0)
32
+ method_source (1.0.0)
33
+ minitest (5.14.0)
34
+ money (6.13.7)
35
+ i18n (>= 0.6.4, <= 2)
36
+ parallel (1.19.1)
37
+ parser (2.7.1.0)
38
+ ast (~> 2.4.0)
39
+ pg (1.2.3)
40
+ pry (0.13.0)
41
+ coderay (~> 1.1)
42
+ method_source (~> 1.0)
43
+ rack (2.2.2)
44
+ rainbow (3.0.0)
45
+ rake (13.0.1)
46
+ rexml (3.2.4)
47
+ rspec (3.9.0)
48
+ rspec-core (~> 3.9.0)
49
+ rspec-expectations (~> 3.9.0)
50
+ rspec-mocks (~> 3.9.0)
51
+ rspec-core (3.9.1)
52
+ rspec-support (~> 3.9.1)
53
+ rspec-expectations (3.9.1)
54
+ diff-lcs (>= 1.2.0, < 2.0)
55
+ rspec-support (~> 3.9.0)
56
+ rspec-mocks (3.9.1)
57
+ diff-lcs (>= 1.2.0, < 2.0)
58
+ rspec-support (~> 3.9.0)
59
+ rspec-support (3.9.2)
60
+ rubocop (0.81.0)
61
+ jaro_winkler (~> 1.5.1)
62
+ parallel (~> 1.10)
63
+ parser (>= 2.7.0.1)
64
+ rainbow (>= 2.2.2, < 4.0)
65
+ rexml
66
+ ruby-progressbar (~> 1.7)
67
+ unicode-display_width (>= 1.4.0, < 2.0)
68
+ rubocop-config-umbrellio (0.81.0.78)
69
+ rubocop (= 0.81.0)
70
+ rubocop-performance (= 1.5.2)
71
+ rubocop-rails (= 2.5.0)
72
+ rubocop-rspec (= 1.38.1)
73
+ rubocop-performance (1.5.2)
74
+ rubocop (>= 0.71.0)
75
+ rubocop-rails (2.5.0)
76
+ activesupport
77
+ rack (>= 1.1)
78
+ rubocop (>= 0.72.0)
79
+ rubocop-rspec (1.38.1)
80
+ rubocop (>= 0.68.1)
81
+ ruby-progressbar (1.10.1)
82
+ sequel (5.31.0)
83
+ simplecov (0.16.1)
84
+ docile (~> 1.1)
85
+ json (>= 1.8, < 3)
86
+ simplecov-html (~> 0.10.0)
87
+ simplecov-html (0.10.2)
88
+ symbiont-ruby (0.6.0)
89
+ sync (0.5.0)
90
+ term-ansicolor (1.7.1)
91
+ tins (~> 1.0)
92
+ thor (1.0.1)
93
+ thread_safe (0.3.6)
94
+ tins (1.24.1)
95
+ sync
96
+ tzinfo (1.2.7)
97
+ thread_safe (~> 0.1)
98
+ unicode-display_width (1.7.0)
99
+ zeitwerk (2.3.0)
100
+
101
+ PLATFORMS
102
+ ruby
103
+
104
+ DEPENDENCIES
105
+ bundler
106
+ coveralls (>= 0.8)
107
+ money
108
+ pg
109
+ pry
110
+ rake
111
+ rspec
112
+ rubocop-config-umbrellio
113
+ simplecov
114
+ umbrellio-sequel-plugins!
115
+
116
+ BUNDLED WITH
117
+ 2.1.4
data/README.md CHANGED
@@ -13,28 +13,30 @@ gem 'umbrellio-sequel-plugins'
13
13
 
14
14
  And then execute:
15
15
 
16
- $ bundle
16
+ $ bundle
17
17
 
18
18
  # Extensions
19
19
 
20
- - `CurrencyRates`
21
- - `PGTools`
22
- - `Slave`
23
- - `Synchronize`
24
- - `methods_in_migrations`
25
- - `deferrable_foreign_keys`
20
+ - [`CurrencyRates`](#CurrencyRates)
21
+ - [`PGTools`](#PGTools)
22
+ - [`Slave`](#Slave)
23
+ - [`Synchronize`](#Synchronize)
24
+ - [`methods_in_migrations`](#methods_in_migrations)
25
+ - [`deferrable_foreign_keys`](#deferrable_foreign_keys)
26
26
 
27
27
  # Plugins
28
28
 
29
- - `Duplicate`
30
- - `GetColumnValue`
31
- - `StoreAccessors`
32
- - `Synchronize`
33
- - `Upsert`
34
- - `WithLock`
29
+ - [`AttrEncrypted`](#AttrEncrypted)
30
+ - [`Duplicate`](#Duplicate)
31
+ - [`GetColumnValue`](#GetColumnValue)
32
+ - [`MoneyAccessors`](#MoneyAccessors)
33
+ - [`StoreAccessors`](#StoreAccessors)
34
+ - [`Synchronize`](#Synchronize)
35
+ - [`Upsert`](#Upsert)
36
+ - [`WithLock`](#WithLock)
35
37
 
36
38
  # Tools
37
- - `TimestampMigratorUndoExtension`
39
+ - [`TimestampMigratorUndoExtension`](#TimestampMigratorUndoExtension)
38
40
 
39
41
  ## CurrencyRates
40
42
 
@@ -202,6 +204,40 @@ end
202
204
  # => <Husband @attributes={id:1, wife_id: 1}>
203
205
  ```
204
206
 
207
+ ## AttrEncrypted
208
+
209
+ Enable: `Sequel::Model.plugin :attr_encrypted`
210
+
211
+ Plugin for storing encrypted model attributes.
212
+
213
+ Example:
214
+
215
+ ```ruby
216
+ Sequel.migration do
217
+ change do
218
+ alter_table :orders do
219
+ add_column :encrypted_first_name, :text
220
+ add_column :encrypted_last_name, :text
221
+ add_column :encrypted_secret_data, :text
222
+ end
223
+ end
224
+ end
225
+
226
+ class Order < Sequel::Model
227
+ attr_encrypted :first_name, :last_name, key: Settings.private_key
228
+ attr_encrypted :secret_data, key: Settings.another_private_key, json: true
229
+ end
230
+
231
+ Order.create(first_name: "Ivan")
232
+ # => INSERT INTO "orders" ("encrypted_first_name") VALUES ('/sTi9Q==$OTpuMRq5k8R3JayQ$WjSManQGP9UaZ3C40yDjKg==')
233
+
234
+ order = Order.create(first_name: "Ivan", last_name: "Smith",
235
+ secret_data: { "some_key" => "Some Value" })
236
+ order.reload
237
+ order.first_name # => "Ivan"
238
+ order.secret_data # => { "some_key" => "Some Value" }
239
+ ```
240
+
205
241
  ## Duplicate
206
242
 
207
243
  Enable: `Sequel::Model.plugin :duplicate`
@@ -237,6 +273,60 @@ item.price # => #
237
273
  item.get_column_value(:amount) # => 0.5e2
238
274
  ```
239
275
 
276
+ ## MoneyAccessors
277
+
278
+ **Important:** requires `money` gem described below.
279
+
280
+ Plugin for using money field keys as model properties.
281
+
282
+ Enable:
283
+
284
+ ```ruby
285
+ gem "money"
286
+ Sequel::Model.plugin :money_accessors
287
+ ````
288
+
289
+ Examples of usage:
290
+
291
+ ##### Money accessor
292
+
293
+ ```ruby
294
+ class Order < Sequel::Model
295
+ money_accessor :amount, :currency
296
+ end
297
+
298
+ order = Order.create(amount: 200, currency: "EUR")
299
+ order.amount # => #<Money fractional:20000.0 currency:EUR>
300
+ order.currency # => "EUR"
301
+
302
+ order.amount = Money.new(150, "RUB")
303
+ order.amount # => #<Money fractional:150.0 currency:RUB>
304
+ ```
305
+
306
+ ##### Money setter
307
+
308
+ ```ruby
309
+ class Order < Sequel::Model
310
+ money_setter :amount, :currency
311
+ end
312
+
313
+ order = Order.create(amount: 200, currency: "EUR")
314
+ order.amount = Money.new(150, "RUB")
315
+ order.currency # => "RUB"
316
+ ```
317
+
318
+ ##### Money getter
319
+
320
+ ```ruby
321
+ class Order < Sequel::Model
322
+ money_getter :amount, :currency
323
+ end
324
+
325
+ order = Order.create(amount: 200, currency: "EUR")
326
+ order.amount # => #<Money fractional:20000.0 currency:EUR>
327
+ order.currency # => "EUR"
328
+ ```
329
+
240
330
  ## StoreAccessors
241
331
 
242
332
  Enable: `Sequel::Model.plugin :store_accessors`
@@ -247,7 +337,7 @@ Example:
247
337
 
248
338
  ```ruby
249
339
  class User < Sequel::Model
250
- store :data, :first_name
340
+ store :data, :first_name
251
341
  end
252
342
 
253
343
  user = User.create(first_name: "John")
@@ -257,7 +347,7 @@ user.data # => {"first_name": "John"}
257
347
 
258
348
  ## Synchronize
259
349
 
260
- **Important:** requires a `synchronize` extension described above.
350
+ **Important:** requires a `synchronize` extension described below.
261
351
 
262
352
  Same as `DB#synchronize_with`
263
353
 
@@ -299,7 +389,7 @@ Example:
299
389
  ```ruby
300
390
  user = User.first
301
391
  user.with_lock do
302
- user.update(name: "James")
392
+ user.update(name: "James")
303
393
  end
304
394
  ```
305
395
 
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Creates encrypted attribute storing
4
+ module Sequel::Plugins::AttrEncrypted
5
+ SEPARATOR = "$"
6
+
7
+ module ClassMethods
8
+ # Setup attr encrypted
9
+ #
10
+ # @param attrs [Array<Symbol>] column names
11
+ # @param key [String] 32 bytes key
12
+ # @param json [Boolean] store attribute as json or not
13
+ # @example
14
+ # Sequel.migration do
15
+ # change do
16
+ # alter_table :orders do
17
+ # add_column :encrypted_first_name, :text
18
+ # add_column :encrypted_last_name, :text
19
+ # add_column :encrypted_secret_data, :text
20
+ # end
21
+ # end
22
+ # end
23
+ #
24
+ # class Order < Sequel::Model
25
+ # attr_encrypted :first_name, :last_name, key: Settings.private_key
26
+ # attr_encrypted :secret_data, key: Settings.another_private_key, json: true
27
+ # end
28
+
29
+ # Order.create(first_name: "Ivan")
30
+ # # => INSERT INTO "orders" ("encrypted_first_name")
31
+ # VALUES ('/sTi9Q==$OTpuMRq5k8R3JayQ$WjSManQGP9UaZ3C40yDjKg==')
32
+ #
33
+ # order = Order.create(first_name: "Ivan", last_name: "Smith",
34
+ # secret_data: { "some_key" => "Some Value" })
35
+ # order.reload
36
+ # order.first_name # => "Ivan"
37
+ # order.secret_data # => { "some_key" => "Some Value" }
38
+ def attr_encrypted(*attrs, key:, json: false)
39
+ include_encrypted_module!
40
+ attrs.each do |attr|
41
+ define_encrypted_setter(attr, key, json)
42
+ define_encrypted_getter(attr, key, json)
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def define_encrypted_setter(attr, key, json)
49
+ @_attr_encrypted_module.module_eval do
50
+ define_method("#{attr}=") do |value|
51
+ instance_variable_set("@#{attr}", value)
52
+
53
+ send("encrypted_#{attr}=", SimpleCrypt.encrypt(json ? value.to_json : value, key))
54
+ end
55
+ end
56
+ end
57
+
58
+ def define_encrypted_getter(attr, key, json)
59
+ @_attr_encrypted_module.module_eval do
60
+ define_method(attr.to_s) do
61
+ instance_variable_get("@#{attr}") || begin
62
+ decrypted = SimpleCrypt.decrypt(send("encrypted_#{attr}"), key)
63
+
64
+ result = json && !decrypted.nil? ? JSON.parse(decrypted) : decrypted
65
+ instance_variable_set("@#{attr}", result)
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ def include_encrypted_module!
72
+ return if defined?(@_attr_encrypted_module)
73
+
74
+ @_attr_encrypted_module = Module.new
75
+ prepend @_attr_encrypted_module
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sequel::Plugins::AttrEncrypted::SimpleCrypt
4
+ extend self
5
+ require "base64"
6
+
7
+ SEPARATOR = "$"
8
+
9
+ def encrypt(string, key)
10
+ return unless string.is_a?(String) && !string.empty?
11
+
12
+ encryptor = new_cipher(key, &:encrypt)
13
+ iv = encryptor.random_iv
14
+
15
+ encrypted = encryptor.update(string) + encryptor.final
16
+ dump(encrypted, iv, encryptor.auth_tag)
17
+ end
18
+
19
+ def decrypt(string, key)
20
+ encrypted, iv, auth_tag = parse(string) if string.is_a?(String)
21
+ return if [encrypted, iv, auth_tag].any?(&:nil?)
22
+
23
+ decryptor = new_cipher(key, &:decrypt)
24
+ decryptor.iv = iv
25
+ decryptor.auth_tag = auth_tag
26
+
27
+ decryptor.update(encrypted) + decryptor.final
28
+ end
29
+
30
+ private
31
+
32
+ def new_cipher(key)
33
+ result = OpenSSL::Cipher::AES256.new(:gcm)
34
+ yield(result)
35
+ result.key = key
36
+ result
37
+ end
38
+
39
+ def parse(string)
40
+ string.split(SEPARATOR).map { |x| Base64.strict_decode64(x) }
41
+ end
42
+
43
+ def dump(*values)
44
+ [*values].map { |x| Base64.strict_encode64(x) }.join(SEPARATOR)
45
+ end
46
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "money"
4
+
5
+ Money.rounding_mode = BigDecimal::ROUND_HALF_UP
6
+
7
+ # Creates accessors for money values
8
+ module Sequel::Plugins::MoneyAccessors
9
+ MoneyClassRequired = Class.new(StandardError)
10
+
11
+ module ClassMethods
12
+ # Setup money accessor
13
+ #
14
+ # @param amount_column [Symbol] amount column
15
+ # @param currency_column [Symbol] currency column
16
+ # @example
17
+ # class Order < Sequel::Model
18
+ # money_accessor :amount, :currency
19
+ # end
20
+ #
21
+ # order = Order.create(amount: 200, currency: "EUR")
22
+ # order.amount # => #<Money fractional:20000.0 currency:RUB>
23
+ # order.currency # => "EUR"
24
+ def money_accessor(amount_column, currency_column)
25
+ money_getter(amount_column, currency_column)
26
+ money_setter(amount_column, currency_column)
27
+ end
28
+
29
+ def money_getter(amount_column, currency_column)
30
+ include_accessors_module!
31
+ @_money_accessors_module.module_eval do
32
+ define_method(amount_column) do
33
+ amount, currency = super(), send(currency_column)
34
+ return unless amount && currency
35
+ Money.from_amount(amount.to_d, currency)
36
+ end
37
+ end
38
+ end
39
+
40
+ def money_setter(amount_column, currency_column)
41
+ include_accessors_module!
42
+ @_money_accessors_module.module_eval do
43
+ define_method("#{amount_column}=") do |value|
44
+ case value
45
+ when Money
46
+ amount = value.to_d
47
+ currency = value.currency.to_s
48
+ when nil
49
+ amount = currency = nil
50
+ else
51
+ raise MoneyClassRequired, "#{amount_column} value must be either Money instance or nil"
52
+ end
53
+
54
+ super(amount)
55
+ send("#{currency_column}=", currency)
56
+ end
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def include_accessors_module!
63
+ return if defined?(@_money_accessors_module)
64
+ @_money_accessors_module = Module.new
65
+ prepend @_money_accessors_module
66
+ end
67
+ end
68
+ end
@@ -39,7 +39,7 @@ module Sequel::Plugins::Upsert
39
39
  # @see #upsert_dataset
40
40
  def multi_upsert(rows, **options)
41
41
  rows = rows.map { |row| sequel_values(row) }
42
- upsert_dataset(options).multi_insert(rows)
42
+ upsert_dataset(**options).multi_insert(rows)
43
43
  end
44
44
 
45
45
  # Returns formatted row values
@@ -23,7 +23,7 @@ module Sequel
23
23
  ds.filter(column => filename).delete
24
24
  end
25
25
 
26
- elapsed = format("%0.6f", Time.now - time)
26
+ elapsed = format("%<time>0.6f", time: Time.now - time)
27
27
  db.log_info("Finished undoing migration #{filename}, took #{elapsed} seconds")
28
28
  end
29
29
 
@@ -21,11 +21,12 @@ Gem::Specification.new do |spec|
21
21
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency "sequel"
24
+ spec.add_runtime_dependency "sequel"
25
25
  spec.add_runtime_dependency "symbiont-ruby", ">= 0.6"
26
26
 
27
27
  spec.add_development_dependency "bundler"
28
- spec.add_development_dependency "coveralls"
28
+ spec.add_development_dependency "coveralls", ">= 0.8"
29
+ spec.add_development_dependency "money"
29
30
  spec.add_development_dependency "pg"
30
31
  spec.add_development_dependency "pry"
31
32
  spec.add_development_dependency "rake"
@@ -22,8 +22,10 @@ Sequel.extension :pg_array_ops
22
22
  Sequel.extension :pg_json_ops
23
23
  Sequel.extension :pg_range_ops
24
24
 
25
+ Sequel::Model.plugin :attr_encrypted
25
26
  Sequel::Model.plugin :duplicate
26
27
  Sequel::Model.plugin :get_column_value
28
+ Sequel::Model.plugin :money_accessors
27
29
  Sequel::Model.plugin :store_accessors
28
30
  Sequel::Model.plugin :synchronize
29
31
  Sequel::Model.plugin :upsert
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: umbrellio-sequel-plugins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.81
4
+ version: 0.4.0.134
5
5
  platform: ruby
6
6
  authors:
7
7
  - nulldef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-19 00:00:00.000000000 Z
11
+ date: 2020-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sequel
@@ -54,6 +54,20 @@ dependencies:
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: coveralls
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: money
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
@@ -164,6 +178,7 @@ files:
164
178
  - ".travis.yml"
165
179
  - CHANGELOG.md
166
180
  - Gemfile
181
+ - Gemfile.lock
167
182
  - LICENSE
168
183
  - README.md
169
184
  - Rakefile
@@ -175,8 +190,11 @@ files:
175
190
  - lib/sequel/extensions/pg_tools.rb
176
191
  - lib/sequel/extensions/slave.rb
177
192
  - lib/sequel/extensions/synchronize.rb
193
+ - lib/sequel/plugins/attr_encrypted.rb
194
+ - lib/sequel/plugins/attr_encrypted/simple_crypt.rb
178
195
  - lib/sequel/plugins/duplicate.rb
179
196
  - lib/sequel/plugins/get_column_value.rb
197
+ - lib/sequel/plugins/money_accessors.rb
180
198
  - lib/sequel/plugins/store_accessors.rb
181
199
  - lib/sequel/plugins/synchronize.rb
182
200
  - lib/sequel/plugins/upsert.rb
@@ -208,7 +226,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
226
  - !ruby/object:Gem::Version
209
227
  version: '0'
210
228
  requirements: []
211
- rubygems_version: 3.0.3
229
+ rubyforge_project:
230
+ rubygems_version: 2.7.7
212
231
  signing_key:
213
232
  specification_version: 4
214
233
  summary: Sequel plugins