ruby-ant-server 0.4.1 → 0.5.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 +4 -4
- data/lib/ant/exceptions.rb +9 -0
- data/lib/ant/nanoservice.rb +5 -0
- data/lib/ant/server/format.rb +1 -1
- data/lib/ant/server/nanoservice/datasource/exceptions.rb +25 -0
- data/lib/ant/server/nanoservice/datasource/id_generators.rb +21 -0
- data/lib/ant/server/nanoservice/datasource/json_repository.rb +39 -0
- data/lib/ant/server/nanoservice/datasource/model.rb +36 -0
- data/lib/ant/server/nanoservice/datasource/repository.rb +36 -0
- data/lib/ant/server/nanoservice/datasource/sequel.rb +38 -0
- data/lib/ant/server/nanoservice/factory.rb +26 -0
- data/lib/ant/server/response.rb +1 -0
- data/lib/ant/version.rb +1 -1
- metadata +39 -6
- data/lib/ant/client/format/xml_format.rb +0 -0
- data/lib/ant/client/session/ssl_client_certificate.rb +0 -11
- data/lib/ant/dry/daemon.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a2f23c6be6739a4fd249562ffc23438dddaa0a2927035944a3b4b17967c7b9f
|
4
|
+
data.tar.gz: e49e44b63c4ef5bf3afd292e82a7e23556bcdd73e8d846ddcd3d5e86b21ee4f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28de14cddc343f8fee602d0bf9d475954b232fd01c4ff0f4a4aecdd42700da321b3dce9a6b112fd9d749a7fb344bdb5b02c6faa2301e3fca9603feca5df45216
|
7
|
+
data.tar.gz: 22826aae6b99887e4adb014d7b1c021ecdd1a0ea4dac0e156bb41f74233dd99e18c1066a2ff67161070cc4559faba66fc03130e0a3c91eead2cc63af2dabd92d
|
data/lib/ant/exceptions.rb
CHANGED
@@ -21,6 +21,15 @@ module Ant
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
##
|
25
|
+
# Is used to express a success with the client's request.
|
26
|
+
class AntSuccess < AntBaseException
|
27
|
+
def initialize(message, code = nil, data = {})
|
28
|
+
code ||= self.class.name.split('::').last
|
29
|
+
super(message, code, data)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
24
33
|
##
|
25
34
|
# Is used to express a problem with the client's request.
|
26
35
|
class AntFail < AntBaseException
|
@@ -0,0 +1,5 @@
|
|
1
|
+
require_relative 'server/nanoservice/datasource/model'
|
2
|
+
require_relative 'server/nanoservice/factory'
|
3
|
+
require_relative 'server/nanoservice/datasource/json_repository'
|
4
|
+
require_relative 'server/nanoservice/datasource/sequel'
|
5
|
+
require_relative 'server/nanoservice/datasource/exceptions'
|
data/lib/ant/server/format.rb
CHANGED
@@ -13,7 +13,7 @@ module Ant
|
|
13
13
|
# success means there were no errors during the execution of the request
|
14
14
|
# it sends the result in the data field.
|
15
15
|
def success(response)
|
16
|
-
{ status: :success, data: response.result }
|
16
|
+
{ status: :success, data: response.result || response.data }
|
17
17
|
end
|
18
18
|
|
19
19
|
##
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Ant
|
2
|
+
module Server
|
3
|
+
module Nanoservice
|
4
|
+
module Datasource
|
5
|
+
module Exceptions
|
6
|
+
class ObjectAlreadyExists < Ant::Exceptions::AntFail
|
7
|
+
attr_reader :id
|
8
|
+
def initialize(id)
|
9
|
+
@id = id
|
10
|
+
super("Object #{id} already exists", nil, id: id)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ObjectNotFound < Ant::Exceptions::AntFail
|
15
|
+
attr_reader :id
|
16
|
+
def initialize(id)
|
17
|
+
@id = id
|
18
|
+
super("Object #{id} does not exist", nil, id: id)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Ant
|
2
|
+
module Server
|
3
|
+
module Nanoservice
|
4
|
+
module Datasource
|
5
|
+
class IDGenerators
|
6
|
+
extend DRY::ResourceInjector
|
7
|
+
def self.[](key)
|
8
|
+
resource(:generators, key)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.normalize_id(object, key)
|
12
|
+
object.is_a?(Hash) ? object[key] : object
|
13
|
+
end
|
14
|
+
|
15
|
+
id_generator = lambda { |id, key| normalize_id(id, key) }
|
16
|
+
register(:generators, :id, id_generator)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'repository'
|
2
|
+
|
3
|
+
module Ant
|
4
|
+
module Server
|
5
|
+
module Nanoservice
|
6
|
+
module Datasource
|
7
|
+
class JSONRepository < Repository
|
8
|
+
def initialize(folder, id, id_generator)
|
9
|
+
@path = folder
|
10
|
+
super(id, id_generator)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(id)
|
14
|
+
path = full_path(id)
|
15
|
+
raise(ObjectNotFound, id) unless File.file?(path)
|
16
|
+
contents = File.read(path)
|
17
|
+
JSON.parse(contents, symbolize_names: true)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_(data)
|
21
|
+
store(data)
|
22
|
+
data
|
23
|
+
end
|
24
|
+
|
25
|
+
def store(data)
|
26
|
+
id = data[@id]
|
27
|
+
File.write(full_path(id), data.to_json)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def full_path(id)
|
33
|
+
"#{@path}/#{id}.json"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'id_generators'
|
2
|
+
module Ant
|
3
|
+
module Server
|
4
|
+
module Nanoservice
|
5
|
+
module Datasource
|
6
|
+
class Model
|
7
|
+
attr_reader :data
|
8
|
+
attr_writer :data
|
9
|
+
|
10
|
+
def run_validations!
|
11
|
+
puts 'WARN: model with no validations'
|
12
|
+
end
|
13
|
+
|
14
|
+
def store
|
15
|
+
run_validations!
|
16
|
+
@repository.store(@data)
|
17
|
+
end
|
18
|
+
|
19
|
+
def create
|
20
|
+
run_validations!
|
21
|
+
@repository.create(@data)
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(data, repository = nil)
|
25
|
+
@data = data
|
26
|
+
@repository = repository || default_repository
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_json(options)
|
30
|
+
@data.to_json(options)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative 'exceptions'
|
2
|
+
|
3
|
+
module Ant
|
4
|
+
module Server
|
5
|
+
module Nanoservice
|
6
|
+
module Datasource
|
7
|
+
class Repository
|
8
|
+
include Exceptions
|
9
|
+
def initialize(id, id_generator)
|
10
|
+
@id = id
|
11
|
+
@id_generator = id_generator
|
12
|
+
end
|
13
|
+
|
14
|
+
def create_initial_object(id)
|
15
|
+
object = { @id => @id_generator.call(id, @id) }
|
16
|
+
object.merge!(id) if id.is_a?(Hash)
|
17
|
+
object
|
18
|
+
end
|
19
|
+
|
20
|
+
def create(id = nil)
|
21
|
+
data = create_initial_object(id)
|
22
|
+
raise(ObjectAlreadyExists, data[@id]) if exist?(data[@id])
|
23
|
+
create_(data)
|
24
|
+
end
|
25
|
+
|
26
|
+
def exist?(id)
|
27
|
+
get(id)
|
28
|
+
true
|
29
|
+
rescue ObjectNotFound
|
30
|
+
false
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative 'repository'
|
2
|
+
|
3
|
+
module Ant
|
4
|
+
module Server
|
5
|
+
module Nanoservice
|
6
|
+
module Datasource
|
7
|
+
class Sequel < Repository
|
8
|
+
def initialize(sequel_object, id, id_generator)
|
9
|
+
@sequel = sequel_object
|
10
|
+
super(id, id_generator)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(id)
|
14
|
+
result = @sequel.where(@id => id).first
|
15
|
+
raise(ObjectNotFound, id) if result.nil?
|
16
|
+
result
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_(data)
|
20
|
+
id = @sequel.insert(data)
|
21
|
+
data[@id] ||= id
|
22
|
+
data
|
23
|
+
end
|
24
|
+
|
25
|
+
def store(data)
|
26
|
+
data2 = data.dup
|
27
|
+
data2.delete(@id)
|
28
|
+
@sequel.where(@id => data[@id]).update(data2)
|
29
|
+
end
|
30
|
+
|
31
|
+
def connection
|
32
|
+
@sequel
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ant
|
2
|
+
module Server
|
3
|
+
module Nanoservice
|
4
|
+
class Factory
|
5
|
+
include Ant::DRY::ResourceInjector
|
6
|
+
|
7
|
+
def initialize(model)
|
8
|
+
@model = model
|
9
|
+
end
|
10
|
+
|
11
|
+
def create(data, source = resource(:default))
|
12
|
+
repository = resource(source)
|
13
|
+
model = @model.new(data, repository)
|
14
|
+
model.create
|
15
|
+
model
|
16
|
+
end
|
17
|
+
|
18
|
+
def get(id, source = resource(:default))
|
19
|
+
repository = resource(source)
|
20
|
+
model = repository.get(id)
|
21
|
+
@model.new(model, repository)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/ant/server/response.rb
CHANGED
data/lib/ant/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-ant-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gilberto Vargas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cute_logger
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: sequel
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: simplecov
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +192,20 @@ dependencies:
|
|
178
192
|
- - ">="
|
179
193
|
- !ruby/object:Gem::Version
|
180
194
|
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: sqlite3
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
181
209
|
- !ruby/object:Gem::Dependency
|
182
210
|
name: webmock
|
183
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -204,20 +232,25 @@ files:
|
|
204
232
|
- lib/ant/client/format/format.rb
|
205
233
|
- lib/ant/client/format/json_format.rb
|
206
234
|
- lib/ant/client/format/url_encoded.rb
|
207
|
-
- lib/ant/client/format/xml_format.rb
|
208
235
|
- lib/ant/client/rest_client.rb
|
209
236
|
- lib/ant/client/session/base.rb
|
210
237
|
- lib/ant/client/session/basic_auth.rb
|
211
|
-
- lib/ant/client/session/ssl_client_certificate.rb
|
212
238
|
- lib/ant/client/validator.rb
|
213
239
|
- lib/ant/client/validator/jsend.rb
|
214
240
|
- lib/ant/client/validator/no_validator.rb
|
215
|
-
- lib/ant/dry/daemon.rb
|
216
241
|
- lib/ant/dry/resource_injector.rb
|
217
242
|
- lib/ant/exceptions.rb
|
243
|
+
- lib/ant/nanoservice.rb
|
218
244
|
- lib/ant/server/format.rb
|
219
245
|
- lib/ant/server/grape.rb
|
220
246
|
- lib/ant/server/logger.rb
|
247
|
+
- lib/ant/server/nanoservice/datasource/exceptions.rb
|
248
|
+
- lib/ant/server/nanoservice/datasource/id_generators.rb
|
249
|
+
- lib/ant/server/nanoservice/datasource/json_repository.rb
|
250
|
+
- lib/ant/server/nanoservice/datasource/model.rb
|
251
|
+
- lib/ant/server/nanoservice/datasource/repository.rb
|
252
|
+
- lib/ant/server/nanoservice/datasource/sequel.rb
|
253
|
+
- lib/ant/server/nanoservice/factory.rb
|
221
254
|
- lib/ant/server/request_response.rb
|
222
255
|
- lib/ant/server/response.rb
|
223
256
|
- lib/ant/version.rb
|
@@ -241,7 +274,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
274
|
version: '0'
|
242
275
|
requirements: []
|
243
276
|
rubyforge_project:
|
244
|
-
rubygems_version: 2.7.
|
277
|
+
rubygems_version: 2.7.6
|
245
278
|
signing_key:
|
246
279
|
specification_version: 4
|
247
280
|
summary: Implements ANT format on server applications
|
File without changes
|
data/lib/ant/dry/daemon.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module Ant
|
2
|
-
module DRY
|
3
|
-
class Daemon
|
4
|
-
def initialize(wait_time, attach, proc)
|
5
|
-
@proc = proc
|
6
|
-
@wait_time = wait_time
|
7
|
-
@attach = attach
|
8
|
-
@finish = false
|
9
|
-
end
|
10
|
-
|
11
|
-
def task
|
12
|
-
loop do
|
13
|
-
begin
|
14
|
-
@proc.exec
|
15
|
-
rescue StandarError => ex
|
16
|
-
log_error('Unexpected error', error: ex)
|
17
|
-
end
|
18
|
-
sleep(@wait_time)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def run
|
23
|
-
if @attach
|
24
|
-
task
|
25
|
-
else
|
26
|
-
Thread.new(&:task)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|