sisense 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2101e08febdf163359caa6a4796036a4d014bc42f2d998dcf04fb076c6db4679
4
- data.tar.gz: 685f7eb3401b207167c4614e9f9229969547463c669f3412376313687d1f4c44
3
+ metadata.gz: c341c078fadf708c850b18d17e5f7feccee4ac814dcecba44d635d82a8ef3fc2
4
+ data.tar.gz: b728e16dbb30fd18d8831adb4c6e1189fc1f0baedef479e3a3d86e72ab3880a4
5
5
  SHA512:
6
- metadata.gz: 8644de850bbb9a66a126e84b437f2f344b569d9dfe14c28039115d4e9f7f818d3fc724a419ac5344a43dbdeb0d1c02ce76a7e39742ef94f6fec46d18477b0e9a
7
- data.tar.gz: 23977fccf7fde6ca1a31b7f1feb8666212bc8df31e84efeb525a68eb549616b66f5194ba2289ea1cb5cf75a23dc792dd27c12595008e0859259bf1f4f4f29b3d
6
+ metadata.gz: 3ed7d1b9842bb6e7baf6166c4733e7cc0aa89f9c9babc358ed407c1a75ce249fb53127c4417b42061c30fb3b51efd9ef00cbb966e2f7170f9525da8f4d67b167
7
+ data.tar.gz: b40f1dcdebd041efd630b7254c17b9561253512642415dcf571122b9187cf15588b557cbf8f8bd423791f360099f74042df371e4db4996efa48a5ea077adfcd0
@@ -3,6 +3,9 @@ require 'sisense/version'
3
3
  require 'sisense/api/client'
4
4
  require 'sisense/api/resource'
5
5
  require 'sisense/api/nested_resource'
6
+ require 'sisense/api/error'
7
+ require 'sisense/api/not_found_error'
8
+ require 'sisense/api/unprocessable_entity_error'
6
9
 
7
10
  require 'sisense/alert'
8
11
  require 'sisense/connection'
@@ -19,10 +22,11 @@ require 'sisense/widget'
19
22
 
20
23
  module Sisense
21
24
  @access_token = nil
22
- @base_uri = nil
25
+ @hostname = nil
26
+ @use_ssl = false
23
27
 
24
28
  class << self
25
- attr_accessor :access_token, :base_uri
29
+ attr_accessor :access_token, :hostname, :use_ssl
26
30
 
27
31
  def api_resources
28
32
  @api_resources ||= API::Resource.descendants.each_with_object({}) do |descendant, resources|
@@ -15,9 +15,9 @@ module Sisense
15
15
  }.freeze
16
16
 
17
17
  def initialize
18
- uri = URI.parse(Sisense.base_uri)
18
+ uri = URI.parse(base_uri)
19
19
  @http = Net::HTTP.new(uri.host, uri.port)
20
- # @http.use_ssl = true
20
+ @http.use_ssl = Sisense.use_ssl
21
21
  end
22
22
 
23
23
  attr_reader :http
@@ -53,6 +53,10 @@ module Sisense
53
53
 
54
54
  private
55
55
 
56
+ def base_uri
57
+ @base_uri ||= Sisense.use_ssl ? "https://#{Sisense.hostname}" : "http://#{Sisense.hostname}"
58
+ end
59
+
56
60
  def collection?(response_body)
57
61
  response_body.is_a?(Array)
58
62
  end
@@ -65,7 +69,24 @@ module Sisense
65
69
  request = VERB_MAP[method].new(encode_path(path), headers)
66
70
  request.body = parameterize(params).to_json
67
71
  end
68
- http.request(request)
72
+ handle_response(http.request(request))
73
+ end
74
+
75
+ def handle_response(response)
76
+ return response if %w[200 201 204].include?(response.code)
77
+ handle_error(response)
78
+ end
79
+
80
+ def handle_error(response)
81
+ error_params = JSON.parse(response.body, symbolize_names: true)[:error]
82
+ case response.code
83
+ when '404'
84
+ raise Sisense::API::NotFoundError.new(error_params)
85
+ when '422'
86
+ raise Sisense::API::UnprocessableEntityError.new(error_params)
87
+ else
88
+ raise Sisense::API::Error.new(error_params)
89
+ end
69
90
  end
70
91
 
71
92
  def encode_path(path, params = nil)
@@ -86,7 +107,7 @@ module Sisense
86
107
 
87
108
  obj.keys.each do |key|
88
109
  obj[key] = parameterize_object(obj[key]) unless obj[key].is_a?(String)
89
- obj[key.to_s.camelize] = obj.delete(key)
110
+ obj[key.to_s.to_camel_case] = obj.delete(key)
90
111
  end
91
112
  end
92
113
  end
@@ -0,0 +1,14 @@
1
+ module Sisense
2
+ module API
3
+ class Error < StandardError
4
+ attr_reader :code, :message, :status, :http_message
5
+
6
+ def initialize(**error_params)
7
+ @code = error_params[:code]
8
+ @message = error_params[:message]
9
+ @status = error_params[:status]
10
+ @http_message = error_params[:http_message]
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ module Sisense
2
+ module API
3
+ class NotFoundError < Sisense::API::Error; end
4
+ end
5
+ end
@@ -89,7 +89,7 @@ module Sisense
89
89
 
90
90
  def sanitized_hash(hash)
91
91
  hash.tap do |h|
92
- h.keys.each { |key| h[key.underscore] = h.delete(key) }
92
+ h.keys.each { |key| h[key.to_snake_case] = h.delete(key) }
93
93
  end
94
94
  end
95
95
  end
@@ -0,0 +1,5 @@
1
+ module Sisense
2
+ module API
3
+ class UnprocessableEntityError < Sisense::API::Error; end
4
+ end
5
+ end
@@ -2,9 +2,21 @@ module Sisense
2
2
  class Group < API::Resource
3
3
  RESOURCE_NAME = 'groups'.freeze
4
4
 
5
- def self.list
5
+ def self.list(params: nil)
6
6
  path = resource_base_path
7
- response = api_client.get(path)
7
+ response = api_client.get(path, params: params)
8
+ api_client.parsed_response(response, object_class: self)
9
+ end
10
+
11
+ def self.retrieve(id:, params: nil)
12
+ path = [resource_base_path, id].join('/')
13
+ response = api_client.get(path, params: params)
14
+ api_client.parsed_response(response, object_class: self)
15
+ end
16
+
17
+ def self.create(params:)
18
+ path = resource_base_path
19
+ response = api_client.post(path, params: params)
8
20
  api_client.parsed_response(response, object_class: self)
9
21
  end
10
22
  end
@@ -1,5 +1,5 @@
1
1
  class String
2
- def underscore
2
+ def to_snake_case
3
3
  gsub(/::/, '/')
4
4
  .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
5
5
  .gsub(/([a-z\d])([A-Z])/, '\1_\2')
@@ -7,7 +7,7 @@ class String
7
7
  .downcase
8
8
  end
9
9
 
10
- def camelize
10
+ def to_camel_case
11
11
  split('_').each_with_object([]).with_index do |(string_part, string_parts), index|
12
12
  string_part.capitalize! if index > 0
13
13
  string_parts << string_part
@@ -1,3 +1,3 @@
1
1
  module Sisense
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sisense
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Olivier Buffon
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-23 00:00:00.000000000 Z
11
+ date: 2018-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,8 +129,11 @@ files:
129
129
  - lib/sisense.rb
130
130
  - lib/sisense/alert.rb
131
131
  - lib/sisense/api/client.rb
132
+ - lib/sisense/api/error.rb
132
133
  - lib/sisense/api/nested_resource.rb
134
+ - lib/sisense/api/not_found_error.rb
133
135
  - lib/sisense/api/resource.rb
136
+ - lib/sisense/api/unprocessable_entity_error.rb
134
137
  - lib/sisense/connection.rb
135
138
  - lib/sisense/dashboard.rb
136
139
  - lib/sisense/dataset.rb