sample_core_api 0.0.7 → 0.0.8
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 +5 -5
- data/lib/application_configuration.rb +41 -18
- data/lib/cassandra/cassandra_service.rb +2 -3
- data/lib/consul/consul_configuration.rb +3 -2
- data/lib/consul/consul_service.rb +10 -9
- data/lib/container.rb +6 -5
- data/lib/decoractors/authenticate.rb +28 -0
- data/lib/decoractors/valid.rb +25 -0
- data/lib/ioc/base_service.rb +5 -0
- data/lib/ioc/container.rb +13 -0
- data/lib/rest/rest_configuration.rb +1 -1
- data/lib/rest/rest_service.rb +5 -8
- data/lib/sample_core_api.rb +24 -12
- data/lib/security/security_context_holder.rb +7 -0
- metadata +52 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 68ecb98d9ffc306169575a50fd4f2ebf1d260926b673867252ea73d29b115685
|
4
|
+
data.tar.gz: 91bc5d365ccc71c597d9669a7a1b614f8902711a397f1a0fbd6d14dc2eec48a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0465b78f64b99eab510fb078ec7a7c665afab80d8ad62b5d56fa1cc49d3cce6159f40de608b46aa404b605663507170be19562724faa27427d8fc3b6835592d
|
7
|
+
data.tar.gz: 0aad292b94b8d642c0219256fb6ed958f64de7fb22753be5171347c9fb15848d21c454509e5c36794dc293d07ec8da9667dfa5d13ca6e3cbf5cc38dd99f3d619
|
@@ -1,25 +1,48 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module ApplicationConfiguration
|
2
4
|
def config
|
3
5
|
{
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
6
|
+
rest: config_rest,
|
7
|
+
consul: config_consul
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
def config_consul
|
12
|
+
config_consul = {
|
13
|
+
port: 8500,
|
14
|
+
path: "http://localhost",
|
15
|
+
consul_service_data: {
|
16
|
+
name: "Service-1",
|
17
|
+
id: "Service1",
|
18
|
+
port: 9292,
|
19
|
+
check: {
|
20
|
+
id: "bluesky-api",
|
21
|
+
name: "HTTP Health Check API on port 9292",
|
22
|
+
http: "http://localhost:9292/health-check",
|
23
|
+
tls_skip_verify: false,
|
24
|
+
method: "GET",
|
25
|
+
interval: "10s",
|
26
|
+
timeout: "1s"
|
27
|
+
}
|
22
28
|
},
|
29
|
+
consul_check_http: "health-check-new"
|
23
30
|
}
|
31
|
+
config_consul[:consul_check_http] = config_rest[:consul_check_http]
|
32
|
+
config_consul[:consul_service_data][:port] = config_rest[:port]
|
33
|
+
config_consul[:consul_service_data][:check][:http] = "http://#{config_rest[:host]}:#{config_rest[:port]}/#{config_rest[:consul_check_http]}"
|
34
|
+
config_consul
|
35
|
+
end
|
36
|
+
|
37
|
+
def config_rest
|
38
|
+
config_rest = {
|
39
|
+
host: 'localhost:9292',
|
40
|
+
path: '/api/v1',
|
41
|
+
consul_check_http: random_name
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def random_name
|
46
|
+
"/health-check-#{SecureRandom.urlsafe_base64(8)}"
|
24
47
|
end
|
25
48
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'cassandra'
|
2
|
-
require_relative '../container'
|
2
|
+
require_relative '../ioc/container'
|
3
3
|
require_relative 'abstracted_cassandra_repository'
|
4
4
|
|
5
5
|
class CassandraService
|
@@ -28,5 +28,4 @@ class CassandraService
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
32
|
-
registerService CassandraService.new
|
31
|
+
Service CassandraService
|
@@ -19,8 +19,9 @@ module ConsulConfiguration
|
|
19
19
|
interval: "10s",
|
20
20
|
timeout: "1s"
|
21
21
|
}
|
22
|
-
}
|
23
|
-
|
22
|
+
},
|
23
|
+
consul_check_http: "health-check"
|
24
|
+
}.merge( ConsulConfiguration.config_consul )
|
24
25
|
|
25
26
|
def configure
|
26
27
|
Diplomat.configure do |config|
|
@@ -1,23 +1,25 @@
|
|
1
1
|
require 'diplomat'
|
2
|
-
require_relative '../container'
|
2
|
+
require_relative '../ioc/container'
|
3
3
|
require_relative 'consul_configuration'
|
4
|
+
require_relative '../rest/rest_service'
|
4
5
|
|
5
6
|
class ConsulService
|
6
|
-
extend
|
7
|
+
extend ConsulConfiguration
|
7
8
|
|
8
9
|
attr_accessor :consul_service_data
|
9
10
|
|
10
|
-
def initialize
|
11
|
+
def initialize(option=nil)
|
11
12
|
puts 'init consul'
|
12
|
-
self.consul_service_data = ConsulService
|
13
|
+
self.consul_service_data = ConsulService.configure
|
13
14
|
end
|
14
15
|
|
15
16
|
def start
|
16
17
|
puts 'start consul'
|
17
|
-
|
18
|
-
|
19
|
-
end
|
18
|
+
puts ConsulConfiguration::CONFIG[:consul_check_http]
|
19
|
+
consul_service_data = ConsulConfiguration::CONFIG[:consul_service_data] if consul_service_data.nil?
|
20
20
|
Diplomat::Service.register(consul_service_data)
|
21
|
+
# start url for consul to check health
|
22
|
+
RestService.start_consul_check_http(ConsulConfiguration::CONFIG[:consul_check_http])
|
21
23
|
end
|
22
24
|
|
23
25
|
def stop
|
@@ -25,5 +27,4 @@ class ConsulService
|
|
25
27
|
Diplomat::Service.deregister(consul_service_data[:id])
|
26
28
|
end
|
27
29
|
end
|
28
|
-
|
29
|
-
registerService ConsulService.new
|
30
|
+
Service ConsulService
|
data/lib/container.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require "dry-container"
|
2
2
|
require "dry-auto_inject"
|
3
|
+
require "dry/inflector"
|
3
4
|
|
5
|
+
Inflector = Dry::Inflector.new
|
4
6
|
Container = Dry::Container.new
|
5
7
|
Inject = Dry::AutoInject(Container)
|
6
8
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
9
|
+
def Service clazz, name = nil
|
10
|
+
name = name.nil? ? (clazz.name[0, 1].downcase + clazz.name[1..-1]) : name
|
11
|
+
Container.register(Inflector.underscore(name), clazz.new)
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "method_decorators"
|
2
|
+
require_relative '../security/security_context_holder'
|
3
|
+
|
4
|
+
|
5
|
+
class Authenticate < MethodDecorators::Decorator
|
6
|
+
def initialize(authorize_function, arguments)
|
7
|
+
@authorize_function = authorize_function
|
8
|
+
@arguments = arguments
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(wrapped, this, *args, &blk)
|
12
|
+
puts "before authentication"
|
13
|
+
puts "user #" + SecurityContextHolder.get_user()
|
14
|
+
if self.send(@authorize_function, @arguments, *args, &blk)
|
15
|
+
result = wrapped.call(*args, &blk)
|
16
|
+
else
|
17
|
+
raise CommonError::InvalidToken
|
18
|
+
end
|
19
|
+
puts "after authentication"
|
20
|
+
|
21
|
+
result
|
22
|
+
end
|
23
|
+
|
24
|
+
def has_roles(roles, *args, &blk)
|
25
|
+
# check roles here
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "method_decorators"
|
2
|
+
|
3
|
+
class Valid < MethodDecorators::Decorator
|
4
|
+
def initialize(validate_function, arguments)
|
5
|
+
@validate_function = validate_function
|
6
|
+
@arguments = arguments
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(wrapped, this, *args, &blk)
|
10
|
+
puts "before validation"
|
11
|
+
if self.send(@validate_function, @arguments, *args, &blk)
|
12
|
+
result = wrapped.call(*args, &blk)
|
13
|
+
else
|
14
|
+
raise CommonError::InvalidData
|
15
|
+
end
|
16
|
+
puts "after validation"
|
17
|
+
result
|
18
|
+
end
|
19
|
+
|
20
|
+
def validate(arguments, *args, &blk)
|
21
|
+
# check validation here
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "dry-container"
|
2
|
+
require "dry-auto_inject"
|
3
|
+
require "dry/inflector"
|
4
|
+
|
5
|
+
Inflector = Dry::Inflector.new
|
6
|
+
Container = Dry::Container.new
|
7
|
+
Inject = Dry::AutoInject(Container)
|
8
|
+
|
9
|
+
|
10
|
+
def Service clazz, name = nil
|
11
|
+
name = name.nil? ? clazz.name[0, 1].downcase + clazz.name[1..-1] : name
|
12
|
+
Container.register(Inflector.underscore(name), clazz.new)
|
13
|
+
end
|
data/lib/rest/rest_service.rb
CHANGED
@@ -29,11 +29,12 @@ class RestService < RestApplication
|
|
29
29
|
extend ::RestConfiguration
|
30
30
|
extend ::RestResponseModel
|
31
31
|
|
32
|
-
# Health Check for Consul
|
33
|
-
|
34
|
-
|
32
|
+
# Health Check for Consul, run when start Consul
|
33
|
+
def self.start_consul_check_http(url)
|
34
|
+
get url do
|
35
|
+
'The service is healthy!'
|
36
|
+
end
|
35
37
|
end
|
36
|
-
|
37
38
|
# API route
|
38
39
|
# namespace RestConfiguration::CONFIG[:path] do
|
39
40
|
# get '/seed_1' do
|
@@ -55,8 +56,4 @@ class RestService < RestApplication
|
|
55
56
|
# ]
|
56
57
|
# raise CommonError::InvalidData
|
57
58
|
# end
|
58
|
-
|
59
|
-
not_found do
|
60
|
-
JSON RestService.error_response('EntityNotFound')
|
61
|
-
end
|
62
59
|
end
|
data/lib/sample_core_api.rb
CHANGED
@@ -1,32 +1,44 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'sinatra/base'
|
3
|
+
require_relative 'ioc/container'
|
3
4
|
require_relative 'application_configuration'
|
4
5
|
require_relative 'cassandra/cassandra_service'
|
5
6
|
require_relative 'consul/consul_service'
|
6
7
|
require_relative 'rest/rest_service'
|
7
|
-
require_relative 'container'
|
8
8
|
# Dir["#{File.dirname(__FILE__)}/**/*.rb"].each {|file| require file }
|
9
9
|
|
10
|
-
class SampleCoreApi
|
11
|
-
extend ::ApplicationConfiguration
|
12
|
-
include Inject["consulService","cassandraService"]
|
13
10
|
|
14
|
-
|
11
|
+
class Application
|
12
|
+
extend ApplicationConfiguration
|
13
|
+
|
14
|
+
def initialize(rests=[], config={})
|
15
15
|
@config = config
|
16
|
+
@rests = rests
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
19
|
+
def init_rest_service
|
20
|
+
rests = @rests
|
21
|
+
return Sinatra.new {
|
22
|
+
# before '/*' do
|
23
|
+
# puts "set local thread"
|
24
|
+
# # Thread.current[:user] = "ltran"
|
25
|
+
# end
|
26
|
+
rests.each {|a| use a}
|
27
|
+
not_found do
|
28
|
+
JSON RestService.error_response('EntityNotFound')
|
29
|
+
end
|
30
|
+
}
|
20
31
|
end
|
21
32
|
|
22
33
|
def start
|
23
|
-
|
24
|
-
Container["
|
25
|
-
|
34
|
+
puts 'start'
|
35
|
+
Container["consul_service"].start
|
36
|
+
Container["cassandra_service"].start
|
37
|
+
init_rest_service
|
26
38
|
end
|
27
39
|
|
28
40
|
def stop
|
29
|
-
|
30
|
-
|
41
|
+
Container["consul_service"].stop
|
42
|
+
Container["cassandra_service"].stop
|
31
43
|
end
|
32
44
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sample_core_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fusin Thang
|
@@ -11,45 +11,25 @@ cert_chain: []
|
|
11
11
|
date: 2018-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: dry-
|
14
|
+
name: dry-system
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.10.0
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
22
|
+
version: 0.10.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.10.0
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: dry-auto_inject
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 0.4.6
|
40
|
-
- - ">="
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: 0.4.6
|
43
|
-
type: :runtime
|
44
|
-
prerelease: false
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
46
|
-
requirements:
|
47
|
-
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 0.4.6
|
50
|
-
- - ">="
|
51
|
-
- !ruby/object:Gem::Version
|
52
|
-
version: 0.4.6
|
32
|
+
version: 0.10.0
|
53
33
|
- !ruby/object:Gem::Dependency
|
54
34
|
name: sinatra
|
55
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,6 +110,46 @@ dependencies:
|
|
130
110
|
- - ">="
|
131
111
|
- !ruby/object:Gem::Version
|
132
112
|
version: 3.2.2
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: method_decorators
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 0.9.6
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.9.6
|
123
|
+
type: :runtime
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 0.9.6
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.9.6
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: request_store
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 1.4.1
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 1.4.1
|
143
|
+
type: :runtime
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 1.4.1
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.4.1
|
133
153
|
- !ruby/object:Gem::Dependency
|
134
154
|
name: bundler
|
135
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -222,12 +242,17 @@ files:
|
|
222
242
|
- lib/consul/consul_configuration.rb
|
223
243
|
- lib/consul/consul_service.rb
|
224
244
|
- lib/container.rb
|
245
|
+
- lib/decoractors/authenticate.rb
|
246
|
+
- lib/decoractors/valid.rb
|
247
|
+
- lib/ioc/base_service.rb
|
248
|
+
- lib/ioc/container.rb
|
225
249
|
- lib/rest/rest_common_error.rb
|
226
250
|
- lib/rest/rest_configuration.rb
|
227
251
|
- lib/rest/rest_error_handler.rb
|
228
252
|
- lib/rest/rest_response_model.rb
|
229
253
|
- lib/rest/rest_service.rb
|
230
254
|
- lib/sample_core_api.rb
|
255
|
+
- lib/security/security_context_holder.rb
|
231
256
|
homepage: http://rubygems.org/gems/sample_core_api
|
232
257
|
licenses:
|
233
258
|
- MIT
|
@@ -248,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
273
|
version: '0'
|
249
274
|
requirements: []
|
250
275
|
rubyforge_project:
|
251
|
-
rubygems_version: 2.
|
276
|
+
rubygems_version: 2.7.7
|
252
277
|
signing_key:
|
253
278
|
specification_version: 4
|
254
279
|
summary: Sample Core Api
|