ievkit 0.1.1 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 29e6eb79738b6b1ec9e1a0230e61c5c07e5673d8
4
- data.tar.gz: 14ac14eed21f5b19a6019c1e8da884f57eaf7690
3
+ metadata.gz: 2a498bb62a5338a534689cc343f876155328c8e0
4
+ data.tar.gz: 7dbabc5103d76f7fdd66132930cf0c4537f971e9
5
5
  SHA512:
6
- metadata.gz: fc6c82d55605217b4fb901050b9e6c7d4d1257d7e6af8aa2ac23e4d990b2bc758b17444120d1af100d539d4962a8322b000e208852a97824cadfe600266752c2
7
- data.tar.gz: 3ec24056491bdc87260779d1a8f731130b36750f91b74bf6f5bed6d797339c8e27051085bfe4477ebf3a892b7bcf60ba9d02a2ff58b2ecbf0e17371389cbdbb9
6
+ metadata.gz: 67ef1d6ab0ae5573b4eaeb8b48d479b28c4f48f40fe3a9ed5f2355ee2f4860e22e9f7bfd9722654785245753c8c9c4042a60b9cf7cc660ad2435c193df083373
7
+ data.tar.gz: 815428b6331e312bf5c8191bee959e9027b994ea24ecdedde44824a30e65d46d091be2c8f8dc5b2d2c2f817ebe2e7aed2ae4899a8292b85ffacc5923021f8316
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
- ruby '2.3.0'
2
+ ruby '2.3.1'
3
3
  # Specify your gem's dependencies in ievkit.gemspec
4
4
  gemspec
@@ -1,16 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ievkit (0.1.1)
4
+ ievkit (0.2.0)
5
5
  faraday_middleware (~> 0.10.0)
6
6
  figaro (~> 1.1.1)
7
+ redis (~> 3.2)
7
8
  rest-client (~> 1.8.0)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
13
  diff-lcs (1.2.5)
13
- domain_name (0.5.20160310)
14
+ domain_name (0.5.20160615)
14
15
  unf (>= 0.0.5, < 1.0.0)
15
16
  faraday (0.9.2)
16
17
  multipart-post (>= 1.2, < 3)
@@ -20,10 +21,11 @@ GEM
20
21
  thor (~> 0.14)
21
22
  http-cookie (1.0.2)
22
23
  domain_name (~> 0.5)
23
- mime-types (2.99.1)
24
+ mime-types (2.99.2)
24
25
  multipart-post (2.0.0)
25
26
  netrc (0.11.0)
26
27
  rake (11.1.2)
28
+ redis (3.3.1)
27
29
  rest-client (1.8.0)
28
30
  http-cookie (>= 1.0.2, < 2.0)
29
31
  mime-types (>= 1.16, < 3.0)
@@ -55,5 +57,8 @@ DEPENDENCIES
55
57
  rake (~> 11.1)
56
58
  rspec
57
59
 
60
+ RUBY VERSION
61
+ ruby 2.3.1p112
62
+
58
63
  BUNDLED WITH
59
- 1.11.2
64
+ 1.12.5
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Ievkit
2
2
 
3
3
  [![Code Climate](https://codeclimate.com/github/afimb/ievkit/badges/gpa.svg)](https://codeclimate.com/github/afimb/ievkit)
4
+ [![Dependency Status](https://gemnasium.com/afimb/ievkit.svg)](https://gemnasium.com/afimb/ievkit)
4
5
  [![Gem Version](https://badge.fury.io/rb/ievkit.svg)](https://badge.fury.io/rb/ievkit)
5
6
 
6
7
  ## Installation
@@ -2,3 +2,4 @@ IEV_VERSION: '1.0'
2
2
  IEV_HOST:
3
3
  IEV_PORT:
4
4
  IEV_PATH:
5
+ iev_admin_key:
@@ -30,6 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency 'figaro', '~> 1.1.1'
31
31
  spec.add_dependency 'faraday_middleware', '~> 0.10.0'
32
32
  spec.add_dependency 'rest-client', '~> 1.8.0'
33
+ spec.add_dependency 'redis', '~>3.2'
33
34
 
34
35
  spec.add_development_dependency 'bundler', '~> 1.11'
35
36
  spec.add_development_dependency 'rake', '~> 11.1'
@@ -1,7 +1,9 @@
1
1
  require 'figaro'
2
2
  require 'faraday_middleware'
3
+ require 'redis'
3
4
  require 'logger'
4
5
  require 'ievkit/version'
6
+ require 'ievkit/cache'
5
7
  require 'ievkit/job'
6
8
  require 'ievkit/client'
7
9
  require 'ievkit/railtie' if defined?(Rails)
@@ -0,0 +1,12 @@
1
+ class Redis
2
+ def cache(key, expire = nil)
3
+ value = get(key)
4
+ return JSON.parse(value) if value
5
+ return nil unless block_given?
6
+ value = yield(self)
7
+ return nil unless value
8
+ set(key, value.to_json)
9
+ expire(key, expire) if expire.to_i > 0
10
+ value
11
+ end
12
+ end
@@ -1,12 +1,15 @@
1
1
  module Ievkit
2
2
  class Client
3
- attr_reader :iev_url_prefix, :iev_url_suffix, :iev_url_jobs, :referential
3
+ attr_reader :iev_url_prefix, :iev_url_prefix_admin, :iev_url_list_tests, :iev_url_suffix, :iev_url_jobs, :referential, :redis
4
4
 
5
5
  def initialize(referential)
6
6
  @payload = {}
7
7
  @referential = referential
8
8
  @iev_url_prefix = init_iev_url_prefix
9
+ @iev_url_prefix_admin = init_iev_url_prefix_admin
10
+ @iev_url_list_tests = init_iev_url_list_tests
9
11
  @iev_url_jobs = init_iev_url_jobs
12
+ @redis = Redis.new
10
13
  end
11
14
 
12
15
  def prepare_post_request(type, options)
@@ -22,11 +25,34 @@ module Ievkit
22
25
  end
23
26
  end
24
27
 
25
- def prepare_request(url, http_method)
28
+ def prepare_request(url, http_method, disable_cache = false)
29
+ unless disable_cache
30
+ cache_key = [url, http_method.to_s].join('_')
31
+ begin
32
+ response_cached = @redis.cache(cache_key)
33
+ return response_cached if response_cached
34
+ rescue => e
35
+ Ievkit::Log.logger.fatal("Unable to contact Redis server: #{e.message}")
36
+ end
37
+ end
26
38
  init_connection(url)
27
39
  begin
28
40
  response = @connection.send(http_method)
29
- parse_response(response)
41
+ unless disable_cache
42
+ cache_control = response.headers['cache-control']
43
+ max_age = 0
44
+ no_cache = true
45
+ if cache_control
46
+ max_age = cache_control[/max-age=(.*)/, 1].to_i
47
+ no_cache = false if max_age > 0 && cache_control[/no-transform/]
48
+ end
49
+ return parse_response(response) if no_cache
50
+ @redis.cache(cache_key, max_age) {
51
+ parse_response(response)
52
+ }
53
+ else
54
+ return parse_response(response)
55
+ end
30
56
  rescue => e
31
57
  Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
32
58
  return false
@@ -53,6 +79,29 @@ module Ievkit
53
79
  @payload[:file[1]] = Faraday::UploadIO.new(iev_file, 'application/zip', filename)
54
80
  end
55
81
 
82
+ def get_stats
83
+ @payload = { key: ENV['iev_admin_key'] }
84
+ init_connection(@iev_url_prefix_admin)
85
+ begin
86
+ response = @connection.get('get_monthly_stats', @payload)
87
+ parse_response(response)
88
+ rescue => e
89
+ Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
90
+ return false
91
+ end
92
+ end
93
+
94
+ def list_tests(action, format)
95
+ init_connection(@iev_url_list_tests)
96
+ begin
97
+ response = @connection.get("#{action}/#{format}", @payload)
98
+ parse_response(response)
99
+ rescue => e
100
+ Ievkit::Log.logger.fatal("Unable to contact IEV server: #{e.message}")
101
+ return false
102
+ end
103
+ end
104
+
56
105
  protected
57
106
 
58
107
  def headers
@@ -100,6 +149,25 @@ module Ievkit
100
149
  ].compact * '/'
101
150
  end
102
151
 
152
+ def init_iev_url_prefix_admin
153
+ [
154
+ "#{ENV['IEV_HOST']}:#{ENV['IEV_PORT']}",
155
+ ENV['IEV_PATH'],
156
+ 'admin',
157
+ ''
158
+ ].compact * '/'
159
+ end
160
+
161
+ def init_iev_url_list_tests
162
+ [
163
+ "#{ENV['IEV_HOST']}:#{ENV['IEV_PORT']}",
164
+ ENV['IEV_PATH'],
165
+ 'admin',
166
+ 'test_list',
167
+ ''
168
+ ].compact * '/'
169
+ end
170
+
103
171
  def init_iev_url_suffix(type = nil)
104
172
  [
105
173
  caller_locations(2, 2)[0].label,
@@ -1,6 +1,7 @@
1
1
  module Ievkit
2
2
  class Job
3
3
  attr_reader :client, :response
4
+ attr_accessor :disable_cache
4
5
 
5
6
  def initialize(referential_id)
6
7
  @client = Ievkit::Client.new(referential_id)
@@ -26,10 +27,43 @@ module Ievkit
26
27
  get_job(url).to_s.include?('terminated_jobs')
27
28
  end
28
29
 
30
+ def get_stats
31
+ @client.get_stats
32
+ end
33
+
34
+ def list_tests(action, format)
35
+ @client.list_tests(action, format)
36
+ end
37
+
38
+ def download_validation_report(data, errors)
39
+ csv = []
40
+ csv << "\uFEFF;Statut/Information;Nombre d'erreurs;Nombre d'avertissements"
41
+ data.each do |el|
42
+ t = [el[:name], I18n.t("compliance_check_results.severities.#{el[:status]}"), el[:count_error], el[:count_warning]]
43
+ csv << t.join(';')
44
+ next unless el[:check_point_errors]
45
+ el[:check_point_errors].each do |index|
46
+ error = errors[index]
47
+ next unless error
48
+ t = []
49
+ esf = error[:source][:file]
50
+ if esf && esf[:filename]
51
+ filename = []
52
+ filename << "#{I18n.t('report.file.line')} #{esf[:line_number]}" if esf[:line_number].to_i > 0
53
+ filename << "#{I18n.t('report.file.column')} #{esf[:column_number]}" if esf[:column_number].to_i > 0
54
+ t << filename.join(' ') if filename.present?
55
+ end
56
+ t << error[:error_name]
57
+ csv << ';'+t.join(' ')
58
+ end
59
+ end
60
+ csv.join("\n")
61
+ end
62
+
29
63
  protected
30
64
 
31
65
  def do_job(url, http_method)
32
- @client.prepare_request(url, http_method)
66
+ @client.prepare_request(url, http_method, @disable_cache)
33
67
  end
34
68
 
35
69
  def importer(type, options)
@@ -1,3 +1,3 @@
1
1
  module Ievkit
2
- VERSION = '0.1.1'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ievkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Perles
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-20 00:00:00.000000000 Z
11
+ date: 2016-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: figaro
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.8.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: redis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -117,6 +131,7 @@ files:
117
131
  - config/initializers/figaro.rb
118
132
  - ievkit.gemspec
119
133
  - lib/ievkit.rb
134
+ - lib/ievkit/cache.rb
120
135
  - lib/ievkit/client.rb
121
136
  - lib/ievkit/job.rb
122
137
  - lib/ievkit/railtie.rb
@@ -147,4 +162,3 @@ signing_key:
147
162
  specification_version: 4
148
163
  summary: ''
149
164
  test_files: []
150
- has_rdoc: