blsk_ruby_core_api 0.1.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 +7 -0
- data/lib/app_service.rb +20 -0
- data/lib/application_configuration.rb +46 -0
- data/lib/blsk_ruby_core_api.rb +40 -0
- data/lib/cassandra/abstracted_cassandra_repository.rb +52 -0
- data/lib/cassandra/cassandra_service.rb +32 -0
- data/lib/consul/consul_configuration.rb +39 -0
- data/lib/consul/consul_service.rb +33 -0
- data/lib/decoractors/authenticate.rb +28 -0
- data/lib/decoractors/valid.rb +23 -0
- data/lib/ioc/container.rb +5 -0
- data/lib/ioc/injector.rb +54 -0
- data/lib/rest/rest_common_error.rb +25 -0
- data/lib/rest/rest_configuration.rb +10 -0
- data/lib/rest/rest_error_handler.rb +33 -0
- data/lib/rest/rest_response_model.rb +17 -0
- data/lib/rest/rest_service.rb +64 -0
- data/lib/security/security_context_holder.rb +5 -0
- metadata +280 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b721ef1d8a5eaef37b577d5a7a427fb3dfe87b642121a7579fd58017efb8a78d
|
4
|
+
data.tar.gz: 1f30040cc47ca66a9bfe9a659c8368c0117413ff53fa065e497566ba179520a7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3f645661d54265e9048a044e043d4a10f31a247bab81e0ca4d87d87fd440ef23a20f6f07a1e56a495e03b8996fe4ed641e8a42a1ec335fd2d5434babdc473a28
|
7
|
+
data.tar.gz: 76b5a3f77fb9b8233f1883bdf19b799bf3d262a993921e5d248472f85b58f236233cb968ec810abc973f0aa70a38c203160775acd7c669595ed535c30a0fb18b
|
data/lib/app_service.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'consul/consul_service'
|
2
|
+
require_relative 'cassandra/cassandra_service'
|
3
|
+
|
4
|
+
class AppService
|
5
|
+
include Inject['consul_service', 'cassandra_service']
|
6
|
+
|
7
|
+
injector
|
8
|
+
|
9
|
+
def start
|
10
|
+
puts 'start app_service'
|
11
|
+
consul_service.start
|
12
|
+
cassandra_service.start
|
13
|
+
end
|
14
|
+
|
15
|
+
def stop
|
16
|
+
puts 'stop app_service'
|
17
|
+
consul_service.stop
|
18
|
+
cassandra_service.stop
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
module ApplicationConfiguration
|
4
|
+
def config
|
5
|
+
{
|
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-new",
|
23
|
+
tls_skip_verify: false,
|
24
|
+
method: "GET",
|
25
|
+
interval: "10s",
|
26
|
+
timeout: "1s"
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
config_consul[:consul_service_data][:port] = config_rest[:port]
|
31
|
+
config_consul[:consul_service_data][:check][:http] = "http://#{config_rest[:host]}:#{config_rest[:port].to_s}/#{random_name}"
|
32
|
+
config_consul
|
33
|
+
end
|
34
|
+
|
35
|
+
def config_rest
|
36
|
+
config_rest = {
|
37
|
+
host: 'localhost',
|
38
|
+
port: 9292,
|
39
|
+
path: '/api/v1'
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def random_name
|
44
|
+
"health-check-#{SecureRandom.urlsafe_base64(8)}"
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'sinatra/base'
|
3
|
+
require 'request_store'
|
4
|
+
|
5
|
+
require_relative 'application_configuration'
|
6
|
+
require_relative 'app_service'
|
7
|
+
require_relative 'rest/rest_service'
|
8
|
+
require_relative 'decoractors/authenticate'
|
9
|
+
require_relative 'decoractors/valid'
|
10
|
+
# Dir["#{File.dirname(__FILE__)}/**/*.rb"].each {|file| require file }
|
11
|
+
|
12
|
+
|
13
|
+
class Application
|
14
|
+
extend ApplicationConfiguration
|
15
|
+
|
16
|
+
def initialize(rests=[], config={})
|
17
|
+
@config = config
|
18
|
+
@rests = rests
|
19
|
+
end
|
20
|
+
|
21
|
+
def init_rest_service
|
22
|
+
rests = @rests
|
23
|
+
return Sinatra.new {
|
24
|
+
rests.each {|a| use a}
|
25
|
+
not_found do
|
26
|
+
JSON RestService.error_response('EntityNotFound')
|
27
|
+
end
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def start
|
32
|
+
puts 'start'
|
33
|
+
Container['app_service'].start
|
34
|
+
init_rest_service
|
35
|
+
end
|
36
|
+
|
37
|
+
def stop
|
38
|
+
Container['app_service'].stop
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module AbstractedCassandraRepository
|
2
|
+
def find_by_id(id=nil, keyspace_name=nil, table_name=nil)
|
3
|
+
puts 'find_by_id'
|
4
|
+
if keyspace_name && table_name
|
5
|
+
session = cassandra_cluster.connect(keyspace_name)
|
6
|
+
result = session.execute("SELECT * FROM #{table_name} WHERE id = ?", arguments: [id])
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_all(keyspace_name=nil, table_name=nil)
|
11
|
+
puts 'find_all'
|
12
|
+
if keyspace_name && table_name
|
13
|
+
session = cassandra_cluster.connect(keyspace_name)
|
14
|
+
result = session.execute("SELECT * FROM #{table_name}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def create(value_hashes={}, keyspace_name=nil, table_name=nil)
|
19
|
+
puts 'create'
|
20
|
+
if keyspace_name && table_name
|
21
|
+
session = cassandra_cluster.connect(keyspace_name)
|
22
|
+
cql = '' # Building the cql using 'INSERT INTO' with 'IF NOT EXISTS'
|
23
|
+
result = session.execute(cql)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def update(id=nil, value_hashes={}, keyspace_name=nil, table_name=nil)
|
28
|
+
puts 'update'
|
29
|
+
if keyspace_name && table_name
|
30
|
+
session = cassandra_cluster.connect(keyspace_name)
|
31
|
+
cql = '' # Building the cql using UPDATE
|
32
|
+
result = session.execute(cql)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def save(value_hashes={}, keyspace_name=nil, table_name=nil)
|
37
|
+
puts 'save'
|
38
|
+
if keyspace_name && table_name
|
39
|
+
session = cassandra_cluster.connect(keyspace_name)
|
40
|
+
cql = '' # Building the cql using 'INSERT INTO' without 'IF NOT EXISTS'
|
41
|
+
result = session.execute(cql)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete(id=nil, keyspace_name=nil, table_name=nil)
|
46
|
+
puts 'delete'
|
47
|
+
if keyspace_name && table_name
|
48
|
+
session = cassandra_cluster.connect(keyspace_name)
|
49
|
+
result = session.execute("DELETE FROM #{table_name} WHERE id = ?", arguments: [id])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'cassandra'
|
2
|
+
require_relative '../ioc/injector'
|
3
|
+
require_relative 'abstracted_cassandra_repository'
|
4
|
+
|
5
|
+
class CassandraService
|
6
|
+
include ::AbstractedCassandraRepository
|
7
|
+
|
8
|
+
injector
|
9
|
+
|
10
|
+
attr_accessor :cassandra_cluster
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
puts 'init cassandra'
|
14
|
+
self.cassandra_cluster = Cassandra.cluster
|
15
|
+
end
|
16
|
+
|
17
|
+
def start
|
18
|
+
puts 'start cassandra, create cluster'
|
19
|
+
if !cassandra_cluster
|
20
|
+
cassandra_cluster = Cassandra.cluster
|
21
|
+
end
|
22
|
+
cassandra_cluster
|
23
|
+
end
|
24
|
+
|
25
|
+
def stop
|
26
|
+
puts 'stop cassandra'
|
27
|
+
if cassandra_cluster
|
28
|
+
puts 'closing'
|
29
|
+
cassandra_cluster.close
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'diplomat'
|
2
|
+
|
3
|
+
module ConsulConfiguration
|
4
|
+
extend ApplicationConfiguration
|
5
|
+
|
6
|
+
CONFIG = {
|
7
|
+
port: 8500,
|
8
|
+
path: "http://localhost",
|
9
|
+
consul_service_data: {
|
10
|
+
name: "Service-1",
|
11
|
+
id: "Service1",
|
12
|
+
port: 9292,
|
13
|
+
check: {
|
14
|
+
id: "bluesky-api",
|
15
|
+
name: "HTTP Health Check API on port 9292",
|
16
|
+
http: "http://localhost:9292/health-check",
|
17
|
+
tls_skip_verify: false,
|
18
|
+
method: "GET",
|
19
|
+
interval: "10s",
|
20
|
+
timeout: "1s"
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}.merge( ConsulConfiguration.config_consul )
|
24
|
+
|
25
|
+
def configure
|
26
|
+
Diplomat.configure do |config|
|
27
|
+
# Set up a custom Consul URL
|
28
|
+
config.url = "#{CONFIG[:path]}:#{CONFIG[:port].to_s}"
|
29
|
+
# Set up a custom Faraday Middleware
|
30
|
+
# config.middleware = MyCustomMiddleware
|
31
|
+
# Connect into consul with custom access token (ACL)
|
32
|
+
# config.acl_token = "qwertyui-asdf-zxcv-1234-123456789012"
|
33
|
+
# Set extra Faraday configuration options
|
34
|
+
# config.options = {ssl: { version: :TLSv1_2 }}
|
35
|
+
end
|
36
|
+
|
37
|
+
CONFIG[:consul_service_data]
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'diplomat'
|
2
|
+
require_relative '../ioc/injector'
|
3
|
+
require_relative 'consul_configuration'
|
4
|
+
require_relative '../rest/rest_service'
|
5
|
+
|
6
|
+
class ConsulService
|
7
|
+
extend ConsulConfiguration
|
8
|
+
|
9
|
+
injector
|
10
|
+
|
11
|
+
attr_accessor :consul_service_data
|
12
|
+
|
13
|
+
def initialize(option=nil)
|
14
|
+
puts 'init consul'
|
15
|
+
self.consul_service_data = ConsulService.configure
|
16
|
+
end
|
17
|
+
|
18
|
+
def start
|
19
|
+
puts 'start consul'
|
20
|
+
consul_service_data = ConsulConfiguration::CONFIG[:consul_service_data] if consul_service_data.nil?
|
21
|
+
Diplomat::Service.register(consul_service_data)
|
22
|
+
|
23
|
+
# start url for consul to check health
|
24
|
+
consul_check_route = "/" + consul_service_data[:check][:http].split('/').last
|
25
|
+
RestService.start_consul_check_http(consul_check_route)
|
26
|
+
end
|
27
|
+
|
28
|
+
def stop
|
29
|
+
puts 'stop consul'
|
30
|
+
consul_service_id = self.consul_service_data.try(:id) || ConsulConfiguration::CONFIG[:consul_service_data][:id]
|
31
|
+
Diplomat::Service.deregister(consul_service_id)
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../rest/rest_service'
|
2
|
+
require_relative '../security/security_context_holder'
|
3
|
+
|
4
|
+
module Authenticator
|
5
|
+
def has_roles roles
|
6
|
+
lambda {|*args, &blk|
|
7
|
+
puts 'has_roles'
|
8
|
+
check_role = true # check role here and return true/false
|
9
|
+
if check_role
|
10
|
+
true
|
11
|
+
else
|
12
|
+
false
|
13
|
+
end
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def authenticate isAuthorized
|
18
|
+
lambda {|self_model, *args, &blk|
|
19
|
+
puts "isAuthorized"
|
20
|
+
# check authentication and authorization here, then return true/false
|
21
|
+
if isAuthorized.call(*args, &blk)
|
22
|
+
true
|
23
|
+
else
|
24
|
+
raise CommonError::PermissionDenied
|
25
|
+
end
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../rest/rest_service'
|
2
|
+
|
3
|
+
module Validator
|
4
|
+
def validate params={}
|
5
|
+
lambda {|self_model, *args, &blk|
|
6
|
+
puts "Validate"
|
7
|
+
check_validate = self_model.check_validate(*args, &blk) # check validation and return [true]/[false, errors]
|
8
|
+
if check_validate[0]
|
9
|
+
true
|
10
|
+
else
|
11
|
+
check_validate[2].response_with_error(CommonError::InvalidData, check_validate[1])
|
12
|
+
end
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
def convert_errors_response(error_list)
|
17
|
+
errors = []
|
18
|
+
error_list.each do |key, value|
|
19
|
+
errors << {field: key, message: value}
|
20
|
+
end
|
21
|
+
errors
|
22
|
+
end
|
23
|
+
end
|
data/lib/ioc/injector.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative "container"
|
2
|
+
require "dry/inflector"
|
3
|
+
|
4
|
+
Inflector = Dry::Inflector.new
|
5
|
+
|
6
|
+
def injector name = nil
|
7
|
+
name = name.nil? ? self.name[0, 1].downcase + self.name[1..-1] : name
|
8
|
+
Container.register(Inflector.underscore(name), self.extend(Injector).new)
|
9
|
+
end
|
10
|
+
|
11
|
+
module Injector
|
12
|
+
@@decorators = Hash.new
|
13
|
+
|
14
|
+
def decorators
|
15
|
+
@@decorators
|
16
|
+
end
|
17
|
+
|
18
|
+
def decorate name, decorators
|
19
|
+
if @@decorators[name].nil?
|
20
|
+
@@decorators[name] = []
|
21
|
+
end
|
22
|
+
@@decorators[name] = {:is_processed => false, :decorators => decorators}
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_added(name)
|
26
|
+
super
|
27
|
+
orig_method = instance_method(name)
|
28
|
+
decorators = self.decorators[name]
|
29
|
+
return if decorators.nil? || decorators[:is_processed] == true
|
30
|
+
|
31
|
+
if private_method_defined?(name);
|
32
|
+
visibility = :private
|
33
|
+
elsif protected_method_defined?(name);
|
34
|
+
visibility = :protected
|
35
|
+
else
|
36
|
+
visibility = :public
|
37
|
+
end
|
38
|
+
|
39
|
+
decorators[:is_processed] = true
|
40
|
+
define_method(name) do |*args, &blk|
|
41
|
+
decorators[:decorators].each do |decor|
|
42
|
+
decor.call(self, *args, &blk)
|
43
|
+
end
|
44
|
+
orig_method.bind(self).call(*args, &blk)
|
45
|
+
end
|
46
|
+
|
47
|
+
case visibility
|
48
|
+
when :protected;
|
49
|
+
protected name
|
50
|
+
when :private;
|
51
|
+
private name
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module CommonError
|
2
|
+
class InvalidToken < Exception
|
3
|
+
def initialize(msg = 'InvalidToken')
|
4
|
+
super
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
class PermissionDenied < Exception
|
9
|
+
def initialize(msg = 'PermissionDenied')
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class EntityNotFound < Exception
|
15
|
+
def initialize(msg = 'EntityNotFound')
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class InvalidData < Exception
|
21
|
+
def initialize(msg = 'InvalidData')
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require_relative 'rest_common_error'
|
3
|
+
require_relative 'rest_response_model'
|
4
|
+
|
5
|
+
|
6
|
+
class RestApplication < Sinatra::Base
|
7
|
+
extend ::RestResponseModel
|
8
|
+
|
9
|
+
error CommonError::InvalidToken do
|
10
|
+
status 401
|
11
|
+
JSON RestApplication.error_response('InvalidToken')
|
12
|
+
end
|
13
|
+
|
14
|
+
error CommonError::PermissionDenied do
|
15
|
+
status 403
|
16
|
+
JSON RestApplication.error_response('PermissionDenied')
|
17
|
+
end
|
18
|
+
|
19
|
+
error CommonError::EntityNotFound do
|
20
|
+
status 404
|
21
|
+
JSON RestApplication.error_response('EntityNotFound')
|
22
|
+
end
|
23
|
+
|
24
|
+
error CommonError::InvalidData do
|
25
|
+
status 422
|
26
|
+
JSON RestApplication.error_response('InvalidData', @errors)
|
27
|
+
end
|
28
|
+
|
29
|
+
def response_with_error(exception_class, errors=[])
|
30
|
+
@errors = errors if !errors.empty?
|
31
|
+
raise exception_class
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module RestResponseModel
|
2
|
+
def success_response(data=nil)
|
3
|
+
response = {
|
4
|
+
status: 'OK'
|
5
|
+
}
|
6
|
+
response[:data] = data if data
|
7
|
+
response
|
8
|
+
end
|
9
|
+
|
10
|
+
def error_response(error_code='FAILED', errors=[])
|
11
|
+
response = {
|
12
|
+
status: error_code
|
13
|
+
}
|
14
|
+
response[:errors] = errors if !errors.nil? && errors.any?
|
15
|
+
response
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
require "sinatra/namespace"
|
3
|
+
require_relative 'rest_configuration'
|
4
|
+
require_relative 'rest_error_handler'
|
5
|
+
require_relative 'rest_common_error'
|
6
|
+
require_relative 'rest_response_model'
|
7
|
+
|
8
|
+
|
9
|
+
class RestApplication < Sinatra::Base
|
10
|
+
set :server, :puma
|
11
|
+
disable :raise_errors
|
12
|
+
disable :show_exceptions
|
13
|
+
|
14
|
+
set :dump_errors, true
|
15
|
+
set :show_exceptions, :after_handler
|
16
|
+
|
17
|
+
register Sinatra::Namespace
|
18
|
+
|
19
|
+
configure :production do
|
20
|
+
# ...
|
21
|
+
end
|
22
|
+
|
23
|
+
configure :development do
|
24
|
+
# ...
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class RestService < RestApplication
|
29
|
+
extend ::RestConfiguration
|
30
|
+
extend ::RestResponseModel
|
31
|
+
|
32
|
+
before '/*' do
|
33
|
+
puts 'before any route ...'
|
34
|
+
RequestStore.store[:user] = "Nhuan Lai"
|
35
|
+
end
|
36
|
+
|
37
|
+
# Health Check for Consul, run when start Consul
|
38
|
+
def self.start_consul_check_http(url)
|
39
|
+
get url do
|
40
|
+
'The service is healthy!'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
# # API route
|
44
|
+
# namespace RestConfiguration::CONFIG[:path] do
|
45
|
+
# get '/seed_1' do
|
46
|
+
# 'Seed 1 API'
|
47
|
+
# end
|
48
|
+
# get '/seed_2' do
|
49
|
+
# 'Seed 2 API'
|
50
|
+
# end
|
51
|
+
# end
|
52
|
+
|
53
|
+
# # Example for handling error
|
54
|
+
# get '/health' do
|
55
|
+
# errors = [
|
56
|
+
# {
|
57
|
+
# field: 'error field',
|
58
|
+
# code: 'error code',
|
59
|
+
# message: 'error message'
|
60
|
+
# }
|
61
|
+
# ]
|
62
|
+
# response_with_error(CommonError::InvalidData, errors)
|
63
|
+
# end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,280 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blsk_ruby_core_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fusin Thang
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-06-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: dry-system
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.10.0
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.10.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.10.0
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.10.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: sinatra
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 2.0.1
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.0.1
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.0.1
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 2.0.1
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: sinatra-contrib
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 2.0.1
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 2.0.1
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 2.0.1
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 2.0.1
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: puma
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 3.11.4
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.11.4
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.11.4
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 3.11.4
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: cassandra-driver
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 3.2.2
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 3.2.2
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.2.2
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 3.2.2
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: request_store
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 1.4.1
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 1.4.1
|
123
|
+
type: :runtime
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 1.4.1
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 1.4.1
|
133
|
+
- !ruby/object:Gem::Dependency
|
134
|
+
name: dry-validation
|
135
|
+
requirement: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.12.0
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.12.0
|
143
|
+
type: :runtime
|
144
|
+
prerelease: false
|
145
|
+
version_requirements: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: 0.12.0
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.12.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: bundler
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.16.2
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: 1.16.2
|
163
|
+
type: :development
|
164
|
+
prerelease: false
|
165
|
+
version_requirements: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - "~>"
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: 1.16.2
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 1.16.2
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: rake-test
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - "~>"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 1.0.0
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: 1.0.0
|
183
|
+
type: :development
|
184
|
+
prerelease: false
|
185
|
+
version_requirements: !ruby/object:Gem::Requirement
|
186
|
+
requirements:
|
187
|
+
- - "~>"
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: 1.0.0
|
190
|
+
- - ">="
|
191
|
+
- !ruby/object:Gem::Version
|
192
|
+
version: 1.0.0
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: rake
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - "~>"
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: 2.5.0
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: 2.5.0
|
203
|
+
type: :development
|
204
|
+
prerelease: false
|
205
|
+
version_requirements: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - "~>"
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: 2.5.0
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: 2.5.0
|
213
|
+
- !ruby/object:Gem::Dependency
|
214
|
+
name: rspec
|
215
|
+
requirement: !ruby/object:Gem::Requirement
|
216
|
+
requirements:
|
217
|
+
- - "~>"
|
218
|
+
- !ruby/object:Gem::Version
|
219
|
+
version: 3.7.0
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 3.7.0
|
223
|
+
type: :development
|
224
|
+
prerelease: false
|
225
|
+
version_requirements: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: 3.7.0
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: 3.7.0
|
233
|
+
description: Sample Core API gem
|
234
|
+
email: fusinthang@gmail.com
|
235
|
+
executables: []
|
236
|
+
extensions: []
|
237
|
+
extra_rdoc_files: []
|
238
|
+
files:
|
239
|
+
- lib/app_service.rb
|
240
|
+
- lib/application_configuration.rb
|
241
|
+
- lib/blsk_ruby_core_api.rb
|
242
|
+
- lib/cassandra/abstracted_cassandra_repository.rb
|
243
|
+
- lib/cassandra/cassandra_service.rb
|
244
|
+
- lib/consul/consul_configuration.rb
|
245
|
+
- lib/consul/consul_service.rb
|
246
|
+
- lib/decoractors/authenticate.rb
|
247
|
+
- lib/decoractors/valid.rb
|
248
|
+
- lib/ioc/container.rb
|
249
|
+
- lib/ioc/injector.rb
|
250
|
+
- lib/rest/rest_common_error.rb
|
251
|
+
- lib/rest/rest_configuration.rb
|
252
|
+
- lib/rest/rest_error_handler.rb
|
253
|
+
- lib/rest/rest_response_model.rb
|
254
|
+
- lib/rest/rest_service.rb
|
255
|
+
- lib/security/security_context_holder.rb
|
256
|
+
homepage: http://rubygems.org/gems/blsk_ruby_core_api
|
257
|
+
licenses:
|
258
|
+
- MIT
|
259
|
+
metadata: {}
|
260
|
+
post_install_message:
|
261
|
+
rdoc_options: []
|
262
|
+
require_paths:
|
263
|
+
- lib
|
264
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
265
|
+
requirements:
|
266
|
+
- - ">="
|
267
|
+
- !ruby/object:Gem::Version
|
268
|
+
version: 2.3.0
|
269
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
|
+
requirements:
|
271
|
+
- - ">="
|
272
|
+
- !ruby/object:Gem::Version
|
273
|
+
version: '0'
|
274
|
+
requirements: []
|
275
|
+
rubyforge_project:
|
276
|
+
rubygems_version: 2.7.7
|
277
|
+
signing_key:
|
278
|
+
specification_version: 4
|
279
|
+
summary: Sample Core Api
|
280
|
+
test_files: []
|