midb 1.1.0 → 1.1.1
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 +4 -4
- data/lib/midb/hooks.rb +34 -1
- data/lib/midb/server_controller.rb +13 -4
- data/lib/midb/server_model.rb +7 -2
- data/lib/midb/server_view.rb +1 -1
- data/lib/midb/serverengine_controller.rb +11 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5ef9483dfada39d3e9f8bccc1c44e1e418a49b1
|
4
|
+
data.tar.gz: 954831b1336e3d3402279f2d5b1cd49f99850d50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 50e11179acc6827bb9fc7ece5f5ecaf4b7938dac3838d82601d2c496a62fd5f6f4fa00fbab474c927a1c925e7aec4ede32603542256627c806e020c7d8010bbb
|
7
|
+
data.tar.gz: e148bf8571b0f54652a79945f92df92ebde4ab67e3898acc4541f1c34342b93fb6fa9d20f8d006e3eb9f44a4f0a9145293e1706e227f993dcceed68d1d50aee5
|
data/lib/midb/hooks.rb
CHANGED
@@ -3,10 +3,43 @@
|
|
3
3
|
# The "hooks" part of the MIDB::API module allows programmers to customize their API.
|
4
4
|
# Hooks are methods that are run in the API; overriding them allows you to run a custom API.
|
5
5
|
#
|
6
|
+
# This hooking technology has been developed in its-hookable.
|
7
|
+
#
|
6
8
|
module MIDB
|
7
9
|
module API
|
8
10
|
class Hooks
|
9
|
-
|
11
|
+
attr_accessor :hooks
|
12
|
+
def initialize()
|
13
|
+
@hooks = Hash.new
|
14
|
+
@hooks["after_get_all_entries"] = []
|
15
|
+
@hooks["format_field"] = []
|
16
|
+
end
|
17
|
+
|
18
|
+
# This method adds a method _reference_ (:whatever) to the hash defined above.
|
19
|
+
def register(hook, method)
|
20
|
+
@hooks[hook].push method
|
21
|
+
end
|
22
|
+
|
23
|
+
# These are the methods that are ran when the hook is called from the main class.
|
24
|
+
# The code can be slightly modified depending on the arguments that each hook takes,
|
25
|
+
# but that's up to the original developer - not the one who does the customization.
|
26
|
+
|
27
|
+
|
28
|
+
def after_get_all_entries(n_entries)
|
29
|
+
@hooks["after_get_all_entries"].each do |f|
|
30
|
+
# Just run :f whenever this method is called, no arguments.
|
31
|
+
Object.send(f, n_entries)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def format_field(field, what)
|
36
|
+
if @hooks["format_field"] == []
|
37
|
+
return what
|
38
|
+
else
|
39
|
+
@hooks["format_field"].each do |f|
|
40
|
+
return Object.send(f, field, what)
|
41
|
+
end
|
42
|
+
end
|
10
43
|
end
|
11
44
|
end
|
12
45
|
end
|
@@ -3,6 +3,7 @@ require 'midb/server_view'
|
|
3
3
|
require 'midb/errors_view'
|
4
4
|
require 'midb/security_controller'
|
5
5
|
require 'midb/serverengine_controller'
|
6
|
+
require 'midb/hooks'
|
6
7
|
|
7
8
|
require 'yaml'
|
8
9
|
require 'socket'
|
@@ -26,12 +27,14 @@ module MIDB
|
|
26
27
|
# @return [String] HTTP status code and string representation for the header
|
27
28
|
# @!attribute port
|
28
29
|
# @return [Fixnum] Port where the server will listen.
|
29
|
-
|
30
|
+
# @!attribute h
|
31
|
+
# @return [Object] MIDB::API::Hooks instance
|
32
|
+
attr_accessor :args, :config, :db, :http_status, :port, :hooks
|
30
33
|
|
31
34
|
# Constructor for this controller.
|
32
35
|
#
|
33
36
|
# @param args [Array<String>] Arguments passed to the binary.
|
34
|
-
def initialize(args)
|
37
|
+
def initialize(args, hooks=nil)
|
35
38
|
# Default values
|
36
39
|
#
|
37
40
|
# @see #http_status
|
@@ -42,6 +45,12 @@ module MIDB
|
|
42
45
|
@args = args
|
43
46
|
@config = Hash.new()
|
44
47
|
@port = 8081
|
48
|
+
if hooks == nil
|
49
|
+
# At some point someone should register this.
|
50
|
+
@hooks = MIDB::API::Hooks.new
|
51
|
+
else
|
52
|
+
@hooks = hooks
|
53
|
+
end
|
45
54
|
end
|
46
55
|
|
47
56
|
#####################
|
@@ -172,8 +181,8 @@ module MIDB
|
|
172
181
|
end
|
173
182
|
end
|
174
183
|
|
175
|
-
# Call the server engine
|
176
|
-
eng = MIDB::API::Engine.new(@db, @http_status, @config)
|
184
|
+
# Call the server engine and supply the (non)existing hooks
|
185
|
+
eng = MIDB::API::Engine.new(@db, @http_status, @config, @hooks)
|
177
186
|
if eng.start(@port)
|
178
187
|
@config["status"] = :running
|
179
188
|
MIDB::Interface::Server.success()
|
data/lib/midb/server_model.rb
CHANGED
@@ -10,17 +10,20 @@ module MIDB
|
|
10
10
|
module API
|
11
11
|
class Model
|
12
12
|
|
13
|
-
attr_accessor :jsf, :db, :engine
|
13
|
+
attr_accessor :jsf, :db, :engine, :hooks
|
14
14
|
|
15
15
|
# Constructor
|
16
16
|
#
|
17
17
|
# @param jsf [String] JSON file with the schema
|
18
18
|
# @param db [String] Database to operate on.
|
19
19
|
# @param engine [Object] Reference to the API engine.
|
20
|
+
#
|
21
|
+
# @notice that @hooks (the hooks) are taken from the engine.
|
20
22
|
def initialize(jsf, db, engine)
|
21
23
|
@jsf = jsf
|
22
24
|
@db = db
|
23
25
|
@engine = engine
|
26
|
+
@hooks = engine.hooks
|
24
27
|
end
|
25
28
|
|
26
29
|
# Safely get the structure
|
@@ -261,6 +264,7 @@ module MIDB
|
|
261
264
|
query = dbe.query(dblink, "SELECT #{field} from #{table} WHERE id=#{row['id']};")
|
262
265
|
end
|
263
266
|
jso[row["id"]][name] = dbe.length(query) > 0 ? dbe.extract(query,field) : "unknown"
|
267
|
+
jso[row["id"]][name] = @hooks.format_field(name, jso[row["id"]][name])
|
264
268
|
end
|
265
269
|
end
|
266
270
|
@engine.http_status = "200 OK"
|
@@ -299,9 +303,10 @@ module MIDB
|
|
299
303
|
query = dbe.query(dblink, "SELECT #{field} from #{table} WHERE id=#{row['id']};")
|
300
304
|
end
|
301
305
|
jso[row["id"]][name] = dbe.length(query) > 0 ? dbe.extract(query,field) : "unknown"
|
306
|
+
jso[row["id"]][name] = @hooks.format_field(name, jso[row["id"]][name])
|
302
307
|
end
|
303
308
|
end
|
304
|
-
|
309
|
+
@hooks.after_get_all_entries(rows.length)
|
305
310
|
return jso
|
306
311
|
end
|
307
312
|
end
|
data/lib/midb/server_view.rb
CHANGED
@@ -74,7 +74,7 @@ module MIDB
|
|
74
74
|
def self.help(what)
|
75
75
|
case what
|
76
76
|
when :list
|
77
|
-
puts "midb has several commands that you can use. For detailed information, see `midb help command`."
|
77
|
+
puts "midb v1.1.1 has several commands that you can use. For detailed information, see `midb help command`."
|
78
78
|
puts " "
|
79
79
|
puts "bootstrap\tCreate the basic files and directories that midb needs to be ran in a folder."
|
80
80
|
puts "set\tModify this project's settings. See the detailed help for a list of options."
|
@@ -3,6 +3,7 @@ require 'midb/server_model'
|
|
3
3
|
require 'midb/server_view'
|
4
4
|
require 'midb/errors_view'
|
5
5
|
require 'midb/security_controller'
|
6
|
+
require 'midb/hooks'
|
6
7
|
|
7
8
|
require 'yaml'
|
8
9
|
require 'socket'
|
@@ -22,17 +23,25 @@ module MIDB
|
|
22
23
|
# @return [String] Database name (if SQLite is the engine, file name without extension)
|
23
24
|
# @!attribute http_status
|
24
25
|
# @return [String] HTTP status code and string representation for the header
|
25
|
-
|
26
|
+
# @!attribute h
|
27
|
+
# @return [Object] MIDB::API::Hooks instance
|
28
|
+
attr_accessor :config, :db, :http_status, :hooks
|
29
|
+
|
26
30
|
|
27
31
|
# Constructor
|
28
32
|
#
|
29
33
|
# @param db [String] Database to which the server will bind.
|
30
34
|
# @param stat [Fixnum] HTTP Status
|
31
35
|
# @param cnf [Hash] Config from the server controller.
|
32
|
-
def initialize(db, stat, cnf)
|
36
|
+
def initialize(db, stat, cnf, hooks=nil)
|
33
37
|
@config = cnf
|
34
38
|
@db = db
|
35
39
|
@http_status = stat
|
40
|
+
if hooks == nil
|
41
|
+
@hooks = MIDB::API::Hooks.new
|
42
|
+
else
|
43
|
+
@hooks = hooks
|
44
|
+
end
|
36
45
|
end
|
37
46
|
|
38
47
|
# Starts the server on a given port (default: 8081)
|