file_db 1.1.1 → 1.2.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: 63c376f0b241335a0e0ffc757164d93ea98904a8
4
- data.tar.gz: 889dccfdc8a73c55816ab6b6ddcdb549836e16d5
3
+ metadata.gz: 7798e5114b8789ee25241dc029782dd34e8309e4
4
+ data.tar.gz: 7e473cb3ca46e0d743033ccdd7fd0d84fbe3b2bd
5
5
  SHA512:
6
- metadata.gz: 69e50f3a771e1d9a3f9d8419cb135c2fa9f5026ea902a4dfb04a3e27bb3188e5a1b4193b99708c0565a40ea86292c0a936b62f8e7dae5041a5897e79be925c5b
7
- data.tar.gz: 63a38fe8b677f8e0e62cac40d0a2c59f4e32479628128666297837b8cf73c7f128195b1e46b2eb8aecf0c835993513b866f388bb9f28f9df721d3acad9acadb3
6
+ metadata.gz: 4ec1a8fefdcb89fc8e6ad610bc200bb88c00695720e54c669222cc0b5f74229c6dcf09a042bf75c6897e1f3c1c8469a13f3375b1d1eb741dcba708fd36c836cd
7
+ data.tar.gz: a34aff81d19ff188f4320abef92e20dd3d3b4484fd8f8475ee18db467a897c5b954fa4613a091781878967ce3ee86d3503a864dbcefb9aae1ccd9d8ee99264d5
data/.travis.yml CHANGED
@@ -3,3 +3,8 @@ language: ruby
3
3
  rvm:
4
4
  - 2.3.0
5
5
  before_install: gem install bundler -v 1.12.3
6
+ script:
7
+ - bundle exec rspec spec/
8
+ branches:
9
+ only:
10
+ - master
data/README.md CHANGED
@@ -7,7 +7,7 @@ FileDb is a small type of database. It stores all data for a model into CSV file
7
7
  hm, yeah. just add this to your Gemfile:
8
8
 
9
9
  ```ruby
10
- gem 'file_db', '~> 1.1.0'
10
+ gem 'file_db', '~> 1.2.0'
11
11
  ```
12
12
 
13
13
  And then execute:
@@ -188,6 +188,28 @@ User.find(1)
188
188
  -> nil
189
189
  ```
190
190
 
191
+ It's also possible to set before and after hooks
192
+
193
+ ```ruby
194
+ class User < FileDb::Model
195
+ columns :name, :rand
196
+ before :save { |user|
197
+ user.name = 'another username'
198
+ puts "username changed"
199
+ }
200
+
201
+ after :save {
202
+ puts "updated"
203
+ }
204
+ end
205
+ ```
206
+
207
+ You can use the following filter actions (for before and after):
208
+
209
+ * :save
210
+ * :delete
211
+ * :initialize
212
+
191
213
 
192
214
  You want to use another table than `user`? So just configure it:
193
215
 
data/lib/file_db/data.rb CHANGED
@@ -1,15 +1,21 @@
1
1
  module FileDb
2
2
  module Data
3
3
  def initialize params= {}
4
+ before :initialize
4
5
  load_params_into_model params
6
+ after :initialize
5
7
  end
6
8
 
7
9
  def delete
10
+ before :delete
8
11
  table.delete(id)
12
+ after :delete
9
13
  end
10
14
 
11
15
  def save
16
+ before :save
12
17
  table.update_record self
18
+ after :save
13
19
  end
14
20
 
15
21
  def persisted?
@@ -0,0 +1,51 @@
1
+ module FileDb
2
+ module Filter
3
+ module ClassMethods
4
+ def before type, &block
5
+ raise 'no block given' unless block_given?
6
+ add_filter :before, type, &block
7
+ end
8
+
9
+ def after type, &block
10
+ raise 'no block given' unless block_given?
11
+ add_filter :after, type, &block
12
+ end
13
+
14
+ def file_db_filters
15
+ @file_db_filters
16
+ end
17
+
18
+ private
19
+
20
+ def add_filter runtime, type, &block
21
+ @file_db_filters ||= init_filter
22
+ @file_db_filters[runtime.to_sym][type.to_sym] << block
23
+ end
24
+
25
+ def init_filter
26
+ { before: Hash.new([]), after: Hash.new([]) }
27
+ end
28
+
29
+ end
30
+
31
+ module InstanceMethods
32
+ def before type
33
+ run_filters :before, type
34
+ end
35
+
36
+ def after type
37
+ run_filters :after, type
38
+ end
39
+
40
+ private
41
+
42
+ def run_filters runtime, type
43
+ return unless self.class.file_db_filters[runtime.to_sym]
44
+ self.class.file_db_filters[runtime.to_sym][type.to_sym].each do |filter|
45
+ filter.call(self)
46
+ end
47
+ end
48
+
49
+ end
50
+ end
51
+ end
data/lib/file_db/model.rb CHANGED
@@ -4,5 +4,8 @@ module FileDb
4
4
  extend FileDb::Table
5
5
  extend FileDb::Query
6
6
  include FileDb::Data
7
+
8
+ extend FileDb::Filter::ClassMethods
9
+ include FileDb::Filter::InstanceMethods
7
10
  end
8
11
  end
@@ -1,3 +1,3 @@
1
1
  module FileDb
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/file_db.rb CHANGED
@@ -8,6 +8,8 @@ require "file_db/columns"
8
8
  require "file_db/table"
9
9
  require "file_db/data"
10
10
  require "file_db/query"
11
+ require "file_db/filter"
12
+
11
13
  require "file_db/model"
12
14
 
13
15
  module FileDb
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Starke
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-30 00:00:00.000000000 Z
11
+ date: 2017-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -77,6 +77,7 @@ files:
77
77
  - lib/file_db/configuration.rb
78
78
  - lib/file_db/data.rb
79
79
  - lib/file_db/database_manager.rb
80
+ - lib/file_db/filter.rb
80
81
  - lib/file_db/model.rb
81
82
  - lib/file_db/query.rb
82
83
  - lib/file_db/system/database.rb
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
104
  version: '0'
104
105
  requirements: []
105
106
  rubyforge_project:
106
- rubygems_version: 2.5.1
107
+ rubygems_version: 2.6.8
107
108
  signing_key:
108
109
  specification_version: 4
109
110
  summary: Use CSV Files like a Database with ActiveRecord Feeling.