knot-ruby 0.1.0 → 0.1.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
  SHA256:
3
- metadata.gz: 04ae67be521fbc10dc42972c8b3c7bfc9c0edc2822617a0ef565564e7e93bd6f
4
- data.tar.gz: 89396bbc12e9aa181dcbf4af502262d4e8a4fb3ea982c28034c54d374078bd99
3
+ metadata.gz: 3d24b7dfed91ed556ec5c2ee1b6c765eb96879e2d7d5fdd4dfaf060e474f4c91
4
+ data.tar.gz: 66c899d76cbd7ff9ea68d7f3f0fad98dc8bf21a1e136d156379f25ee42046ad1
5
5
  SHA512:
6
- metadata.gz: 8cf55c28b347d9f5103451ad60d0da577c1febf8909b10bd30449985057c7d8640777953de99ff5509736ead73b8a8f5a9329150948f1a2dea9c30e55728c738
7
- data.tar.gz: 826ffdff42cbf5a3dd7fc0a54707796c283d13eb0e99478c293ac620cf4b179c24393f0c2db2638717904d7aec0ef097dda2c1cb3d566ad81ebfe43273e8b53c
6
+ metadata.gz: 5763ee24991d9d75ef48da2bb203acba69dc89dc4d982d35abd23980792f0649062ef4e58b8a9f5982a341cda9c20ac810873de1476d057c69cc733105fa5ecc
7
+ data.tar.gz: b932a258e7340a0e3baa7a0a833868b6a5a9ae8eb6f5d1149601193238c1279abe3710d3dda9e1e5cc193ba74baa3fad61411ad34820b60fdffca52d6a7035f5
@@ -11,22 +11,35 @@ class Knot::Zone
11
11
  @zone, @transaction_opened = zone, 0
12
12
  end
13
13
 
14
+ # If no transaction opened, yet, it opens a new transaction.
15
+ # Counts calling begin.
16
+ # Knot allowes only one global transaction, so if two clients tries to open a transaction,
17
+ # the second will fail. But the second client can change items in the same
18
+ # transaction like the first client.
19
+ # The first client, which calls commit or abort, wins and the transaction will be closed.
20
+ # So, the transaction-handling is only safe, if one client connects to knot.
14
21
  def begin
15
22
  @transaction_opened += 1
16
23
  @protocol.call command: 'zone-begin', zone: @zone if 1 == @transaction_opened
17
24
  end
18
25
 
26
+ # Decreases opened transactions.
27
+ # If opened transactions is zero, it stores items and closes transaction successfully.
19
28
  def commit
20
29
  @protocol.call command: 'zone-commit', zone: @zone if 1 == @transaction_opened
21
30
  @transaction_opened -= 1 if 0 < @transaction_opened
22
31
  end
23
32
 
33
+ # Closes transaction without saving immidiatly.
34
+ # Counter of opened transaction will be reset to 0.
24
35
  def abort
25
36
  @protocol.call command: 'zone-abort', zone: @zone
26
37
  @transaction_opened = 0
27
38
  end
28
39
 
29
- def transaction
40
+ # Opens transaction, calls yielded Proc and closes transaction after return.
41
+ # If exception was raised, the transaction will be aborted.
42
+ def transaction # :yield:
30
43
  self.begin
31
44
  yield self
32
45
  rescue Object
@@ -72,6 +85,7 @@ class Knot::Zone
72
85
  rescue Knot::Errors::ENONODE, Knot::Errors::ENOENT
73
86
  end
74
87
  alias delete unset
88
+ alias del unset
75
89
 
76
90
  def get owner = nil, type = nil
77
91
  @protocol.call command: 'zone-get',
@@ -115,10 +129,12 @@ class Knot::Conf
115
129
 
116
130
  def parse_item k
117
131
  case k
118
- when k
132
+ when Hash
119
133
  case k.keys.sort
120
- when %w[section], %w[id section], %w[item section], %w[id item section] then k
121
- else raise ArgumentError, "Invalid Item-format"
134
+ when %w[section], %w[id section], %w[item section], %w[id item section]
135
+ k
136
+ else
137
+ raise ArgumentError, "Invalid Item-format"
122
138
  end
123
139
 
124
140
  when Array
@@ -134,16 +150,26 @@ class Knot::Conf
134
150
  (?: \[ (?<id> [a-z0-9_.-]+) \] )?
135
151
  (?: \. (?<item>[a-z0-9_-]+) )?
136
152
  \z/xi
153
+
137
154
  $~.named_captures.delete_if {|_,v| v.nil? }
138
- else raise ArgumentError, "Invalid Item-format"
155
+
156
+ else
157
+ raise ArgumentError, "Invalid Item-format"
139
158
  end
140
159
  end
141
160
 
161
+ def get item = nil
162
+ @protocol.call (item ? parse_item( item) : {}).update( command: 'conf-get')
163
+ end
164
+
165
+ # Sets or adds a new value to item.
166
+ # knot knows single-value items like `server.rundir` and multi-value items like `server.listen`.
167
+ # If you set a single-value, it will replace the old value. On a multi-value, it will add it.
142
168
  def set item, value
143
169
  @protocol.call parse_item( item).update( command: 'conf-set', data: value)
144
170
  end
145
- alias [] set
146
171
 
172
+ # Removes value from item. If you provide a value, this value will be removed.
147
173
  def unset item, value = nil
148
174
  @protocol.call parse_item( item).update( command: 'conf-unset', data: value)
149
175
  end
data/lib/knot/protocol.rb CHANGED
@@ -179,10 +179,10 @@ class Knot::Protocol
179
179
 
180
180
  def zone( zone) @zones[zone.to_s.to_sym] end
181
181
 
182
- def conf_set( **opts) call opts.update( command: 'conf-set') end
183
- def conf_unset( **opts) call opts.update( command: 'conf-set') end
182
+ def conf_set( **opts) call **opts.update( command: 'conf-set') end
183
+ def conf_unset( **opts) call **opts.update( command: 'conf-set') end
184
184
 
185
- def zone_set( **opts) call opts.update( command: 'zone-set') end
186
- def zone_unset( **opts) call opts.update( command: 'zone-unset') end
187
- def zone_get( **opts) call opts.update( command: 'zone-get') end
185
+ def zone_set( **opts) call **opts.update( command: 'zone-set') end
186
+ def zone_unset( **opts) call **opts.update( command: 'zone-unset') end
187
+ def zone_get( **opts) call **opts.update( command: 'zone-get') end
188
188
  end
data/lib/knot/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Knot
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knot-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denis Knauf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-20 00:00:00.000000000 Z
11
+ date: 2022-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: iounpack