moceansdk 0.1.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,50 @@
1
+ module Moceansdk
2
+ module Modules
3
+
4
+ class ResponseFactory
5
+ def self.create_object(raw_response)
6
+ begin
7
+ res = JSON.load(raw_response, proc {|obj|
8
+ case obj
9
+ when Hash
10
+ obj.each {|k, v|
11
+ obj[k] = if v.is_a? Float
12
+ # hardcoded float to 4 decimal string
13
+ sprintf('%.4f', v)
14
+ elsif v.is_a? Integer
15
+ v.to_s
16
+ else
17
+ v
18
+ end
19
+ }
20
+ when Array
21
+ obj.map! {|v| v}
22
+ end
23
+ })
24
+ rescue JSON::JSONError
25
+ begin
26
+ res = XmlSimple.xml_in(raw_response, 'ForceArray': false)
27
+ rescue StandardError
28
+ raise Moceansdk::Exceptions::MoceanError, 'unable to parse response, ' + raw_response
29
+ end
30
+ end
31
+
32
+ hashed_res = HashExtended.new.merge(res)
33
+ hashed_res.to_dot
34
+ end
35
+ end
36
+
37
+ class HashExtended < Hash
38
+ attr_accessor :raw_response
39
+
40
+ def to_s
41
+ @raw_response
42
+ end
43
+
44
+ def to_hash
45
+ inspect
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -0,0 +1,92 @@
1
+ module Moceansdk
2
+ module Modules
3
+
4
+ class Transmitter
5
+ def initialize(options = nil)
6
+ @options = default_options
7
+
8
+ unless options.nil?
9
+ @options = @options.merge(options)
10
+ end
11
+ end
12
+
13
+ def default_options
14
+ {
15
+ base_url: 'https://rest.moceanapi.com',
16
+ version: '2'
17
+ }
18
+ end
19
+
20
+ def get(uri, params)
21
+ request('get', uri, params)
22
+ end
23
+
24
+ def post(uri, params)
25
+ request('post', uri, params)
26
+ end
27
+
28
+ def request(method, uri, params)
29
+ params[:'mocean-medium'] = 'RUBY-SDK'
30
+
31
+ # use json if default not set
32
+ params[:'mocean-resp-format'] = 'json' unless params[:'mocean-resp-format']
33
+
34
+ url = @options[:base_url] + '/rest/' + @options[:version] + uri
35
+
36
+ res = if method.casecmp('get').zero?
37
+ HTTP.get(url, params: params)
38
+ else
39
+ HTTP.post(url, form: params)
40
+ end
41
+
42
+ format_response(res.to_s, params[:'mocean-resp-format'] == 'xml', uri)
43
+ end
44
+
45
+ def format_response(response_text, is_xml = false, uri = nil)
46
+ raw_response = response_text
47
+
48
+ # format for v1
49
+ if !uri.nil? && @options[:version] == '1' && is_xml
50
+ if uri == '/account/pricing'
51
+ response_text = response_text
52
+ .sub('<data>', '<destinations>')
53
+ .sub('</data>', '</destinations>')
54
+ elsif uri == '/sms'
55
+ response_text = response_text
56
+ .sub('<result>', '<result><messages>')
57
+ .sub('</result>', '</messages></result>')
58
+ end
59
+ end
60
+
61
+ processed_response = ResponseFactory.create_object(
62
+ response_text
63
+ .sub('<verify_request>', '')
64
+ .sub('</verify_request>', '')
65
+ .sub('<verify_check>', '')
66
+ .sub('</verify_check>', '')
67
+ )
68
+
69
+ if processed_response['status'] && processed_response['status'] != '0' && processed_response['status'] != 0
70
+ processed_response.raw_response = raw_response
71
+ raise Moceansdk::Exceptions::MoceanError.new(processed_response['err_msg'], processed_response)
72
+ end
73
+
74
+ # format for v1
75
+ if !uri.nil? && is_xml
76
+ if uri == '/account/pricing'
77
+ processed_response.destinations = processed_response.destinations.destination
78
+ elsif uri == '/sms'
79
+ unless processed_response.messages.message.is_a? Array
80
+ processed_response.messages.message = [processed_response.messages.message]
81
+ end
82
+ processed_response.messages = processed_response.messages.message
83
+ end
84
+ end
85
+
86
+ processed_response.raw_response = raw_response
87
+ processed_response
88
+ end
89
+ end
90
+
91
+ end
92
+ end
@@ -0,0 +1,9 @@
1
+ module Moceansdk
2
+
3
+ class Utils
4
+ def self.nil_or_empty?(str)
5
+ str.nil? || str.empty?
6
+ end
7
+ end
8
+
9
+ end
@@ -1,3 +1,3 @@
1
- module Moceansdk
2
- VERSION = "0.1.7"
3
- end
1
+ module Moceansdk
2
+ VERSION = "1.0.0"
3
+ end
data/moceansdk.gemspec CHANGED
@@ -1,20 +1,26 @@
1
- require File.expand_path('lib/moceansdk/version', File.dirname(__FILE__))
2
-
3
- Gem::Specification.new do |s|
4
- s.name = 'moceansdk'
5
- s.version = Moceansdk::VERSION
6
- s.license = 'MIT'
7
- s.platform = Gem::Platform::RUBY
8
- s.authors = ['Micro Ocean Technologies Sdn Bhd']
9
- s.email = ['support@moceanapi.com']
10
- s.homepage = 'https://github.com/moceanapi/mocean-sdk-ruby'
11
- s.description = 'Mocean SDK for Ruby'
12
- s.summary = 'This is a Mocean SDK written in Ruby, to use it you will need a mocean account. Signup for free at https://moceanapi.com'
13
- s.files = Dir.glob('{lib,spec}/**/*') + %w(LICENSE.txt README.md moceansdk.gemspec)
14
- s.required_ruby_version = '>= 2.0.0'
15
- s.add_dependency('openssl','~>2.0')
16
- s.add_development_dependency('rake', '~> 12.0')
17
- s.add_development_dependency('minitest', '~> 5.0')
18
- s.add_development_dependency('webmock', '~> 3.0')
19
- s.require_path = 'lib'
1
+ require File.expand_path('lib/moceansdk/version', File.dirname(__FILE__))
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'moceansdk'
5
+ s.version = Moceansdk::VERSION
6
+ s.license = 'MIT'
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ['Micro Ocean Technologies Sdn Bhd']
9
+ s.email = ['support@moceanapi.com']
10
+ s.homepage = 'https://github.com/MoceanAPI/mocean-sdk-ruby'
11
+ s.description = 'Mocean SDK for Ruby'
12
+ s.summary = 'This is a Mocean SDK written in Ruby, to use it you will need a mocean account. Signup for free at https://moceanapi.com'
13
+ s.files = Dir.glob('lib/**/*.rb') + %w(LICENSE.txt README.md moceansdk.gemspec)
14
+ s.required_ruby_version = '>= 2.2.0'
15
+ s.add_dependency('hash_dot', '~> 2.4')
16
+ s.add_dependency('http', '~> 3.0')
17
+ s.add_dependency('xml-simple', '~> 1.1')
18
+ s.add_development_dependency('codecov', '>= 0.1.10')
19
+ s.add_development_dependency('minitest', '~> 5.0')
20
+ s.add_development_dependency('rake', '~> 12.0')
21
+ s.require_path = 'lib'
22
+ s.metadata = {
23
+ 'homepage' => 'https://github.com/MoceanAPI/mocean-sdk-ruby',
24
+ 'source_code_uri' => 'https://github.com/MoceanAPI/mocean-sdk-ruby'
25
+ }
20
26
  end
metadata CHANGED
@@ -1,43 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moceansdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micro Ocean Technologies Sdn Bhd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-18 00:00:00.000000000 Z
11
+ date: 2019-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: openssl
14
+ name: hash_dot
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '2.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '2.4'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: http
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '12.0'
34
- type: :development
33
+ version: '3.0'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '12.0'
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: xml-simple
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.1'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: codecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.1.10
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.1.10
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: minitest
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +81,19 @@ dependencies:
53
81
  - !ruby/object:Gem::Version
54
82
  version: '5.0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: webmock
84
+ name: rake
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '3.0'
89
+ version: '12.0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '3.0'
96
+ version: '12.0'
69
97
  description: Mocean SDK for Ruby
70
98
  email:
71
99
  - support@moceanapi.com
@@ -76,22 +104,31 @@ files:
76
104
  - LICENSE.txt
77
105
  - README.md
78
106
  - lib/moceansdk.rb
107
+ - lib/moceansdk/auth/abstract_auth.rb
108
+ - lib/moceansdk/auth/basic.rb
79
109
  - lib/moceansdk/client.rb
80
- - lib/moceansdk/init.rb
81
- - lib/moceansdk/mocean.rb
82
- - lib/moceansdk/modules/abstract.rb
110
+ - lib/moceansdk/exceptions/mocean_error.rb
111
+ - lib/moceansdk/exceptions/required_field_exception.rb
112
+ - lib/moceansdk/modules/abstact_client.rb
83
113
  - lib/moceansdk/modules/account/balance.rb
84
114
  - lib/moceansdk/modules/account/pricing.rb
115
+ - lib/moceansdk/modules/message/channel.rb
85
116
  - lib/moceansdk/modules/message/message_status.rb
86
117
  - lib/moceansdk/modules/message/sms.rb
87
118
  - lib/moceansdk/modules/message/verify_request.rb
88
119
  - lib/moceansdk/modules/message/verify_validate.rb
120
+ - lib/moceansdk/modules/number_lookup/number_lookup.rb
121
+ - lib/moceansdk/modules/response_factory.rb
122
+ - lib/moceansdk/modules/transmitter.rb
123
+ - lib/moceansdk/utils.rb
89
124
  - lib/moceansdk/version.rb
90
125
  - moceansdk.gemspec
91
- homepage: https://github.com/moceanapi/mocean-sdk-ruby
126
+ homepage: https://github.com/MoceanAPI/mocean-sdk-ruby
92
127
  licenses:
93
128
  - MIT
94
- metadata: {}
129
+ metadata:
130
+ homepage: https://github.com/MoceanAPI/mocean-sdk-ruby
131
+ source_code_uri: https://github.com/MoceanAPI/mocean-sdk-ruby
95
132
  post_install_message:
96
133
  rdoc_options: []
97
134
  require_paths:
@@ -100,7 +137,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
100
137
  requirements:
101
138
  - - ">="
102
139
  - !ruby/object:Gem::Version
103
- version: 2.0.0
140
+ version: 2.2.0
104
141
  required_rubygems_version: !ruby/object:Gem::Requirement
105
142
  requirements:
106
143
  - - ">="
@@ -108,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
145
  version: '0'
109
146
  requirements: []
110
147
  rubyforge_project:
111
- rubygems_version: 2.6.14.1
148
+ rubygems_version: 2.7.6
112
149
  signing_key:
113
150
  specification_version: 4
114
151
  summary: This is a Mocean SDK written in Ruby, to use it you will need a mocean account.
@@ -1,4 +0,0 @@
1
- module Deno92
2
- require_relative "./mocean"
3
- require_relative "./client"
4
- end
@@ -1,52 +0,0 @@
1
- class Mocean
2
-
3
- attr_reader :obj_auth
4
-
5
- def initialize client = Client
6
- if client.class == Client
7
- @obj_auth = client
8
- elsif client.api_key == nil || client.api_secret == nil
9
- raise Exception.new("Api key and api secret can't be empty")
10
- else
11
- raise Exception.new("Arguement pass into Mocean object must be Client object")
12
- end
13
- end
14
-
15
- def sms
16
- require_relative "modules/message/sms"
17
- return Sms.new(@obj_auth)
18
-
19
- end
20
-
21
- def flashSms
22
- require_relative "modules/message/sms"
23
- _sms = Sms.new(@obj_auth)
24
- _sms.flashSms = true
25
- return _sms
26
- end
27
-
28
- def pricing_list
29
- require_relative "modules/account/pricing"
30
- return Pricing.new(@obj_auth)
31
- end
32
-
33
- def balance
34
- require_relative "modules/account/balance"
35
- return Balance.new(@obj_auth)
36
- end
37
-
38
- def message_status
39
- require_relative "modules/message/message_status"
40
- return Message_status.new(@obj_auth)
41
- end
42
-
43
- def verify_request
44
- require_relative "modules/message/verify_request"
45
- return Verify_request.new(@obj_auth)
46
- end
47
-
48
- def verify_validate
49
- require_relative "modules/message/verify_validate"
50
- return Verify_validate.new(@obj_auth)
51
- end
52
- end
@@ -1,142 +0,0 @@
1
- require "net/http"
2
- require "uri"
3
-
4
- class MoceanFactory
5
- attr_accessor :params
6
-
7
- def initialize client
8
- @params = {}
9
- @params['mocean-api-key'] = client.api_key
10
- @params['mocean-api-secret'] = client.api_secret
11
- end
12
-
13
- def create params = {}
14
- if params.class != Hash
15
- raise Exception.new('Params past into create must be hash.')
16
- end
17
- tmp_params = params.clone
18
- tmp_params.each do |key,value|
19
- if !isParamPrefixSet(key)
20
- new_key ="mocean-"+key
21
- params[new_key] = value
22
- params.delete(key)
23
- end
24
- end
25
- tmp_params = nil
26
- @params = @params.merge(params)
27
- end
28
-
29
- def createFinalParams
30
- final_params = {}
31
- @params.each do |key,value|
32
- unless value.nil? || (value.class != Integer && value.empty?)
33
- final_params[key] = value
34
-
35
- end
36
- end
37
- @params = final_params
38
- end
39
-
40
- def createResponse response
41
- end
42
-
43
- def isParamPrefixSet param
44
- if param.class != String
45
- raise Exception.new("Parameter key must be string, "+param.class+" given.")
46
- end
47
- if param.scan(/^mocean-/i).empty?
48
- return false
49
- end
50
- return true
51
- end
52
-
53
- def isRequiredFieldsSet
54
- if @required_fields.class == 'Array' && !@required_fields.empty?
55
- @required_fields.each do |field|
56
- if @params[field] == nil
57
- raise Exception.new("#{field} is mandatory field, can't leave empty")
58
- end
59
- end
60
- end
61
- return true
62
- end
63
-
64
- def reset()
65
- @params.each do |key,value|
66
- if key == 'mocean-api-key' || key == 'mocean-api-secret'
67
- next
68
- end
69
- @params[key] = nil
70
- end
71
- end
72
-
73
- end
74
-
75
- class Transmitter
76
-
77
- def initialize uri,method,params
78
- @URL = 'rest.moceanapi.com'
79
- @uri = uri
80
- @params = params
81
- @params['mocean-medium'] = 'RUBY-SDK'
82
-
83
- begin
84
- @http = Net::HTTP.new(@URL,443)
85
- @http.use_ssl = true
86
- rescue Exception
87
- raise Exception.new('Unable to create connection, please contact SDK provider.')
88
- end
89
-
90
- case method.downcase
91
- when 'get'
92
- @response = __get
93
- when 'post'
94
- @response = __post
95
- when 'put'
96
- @response = __put
97
- when 'delete'
98
- @response = __delete
99
- else
100
- raise Exception.new("Unknown request method, please contact SDK provider.")
101
- end
102
-
103
- end
104
-
105
- def __get
106
- form_data = ''
107
- if @params.size > 0
108
- form_data = URI.encode_www_form(@params)
109
- end
110
- request = Net::HTTP::Get.new(@uri+"?"+form_data)
111
- return @http.request(request)
112
- end
113
-
114
- def __post
115
- request = Net::HTTP::Post.new(@uri)
116
- if @params.size > 0
117
- request.form_data = @params
118
- end
119
- return @http.request(request)
120
- end
121
-
122
- def __put
123
- request = Net::HTTP::Put.new(@uri)
124
- if @params.size > 0
125
- request.form_data = @params
126
- end
127
- return @http.request(request)
128
- end
129
-
130
- def __delete
131
- request = Net::HTTP::Delete.new(@uri)
132
- if @params.size > 0
133
- request.form_data = @params
134
- end
135
- return @http.request(request)
136
- end
137
-
138
- def getResponse
139
- @response.body || nil
140
- end
141
-
142
- end