chikka 0.1.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/chikka.rb +84 -0
  3. metadata +72 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2cb7cd350c9d128373380f1e2152835e9485a58c
4
+ data.tar.gz: 6d47ac0aff413e487fcf0d43d30957cd2f3f2d2c
5
+ SHA512:
6
+ metadata.gz: ca3cb2c26e844e7e1eebb702b36ccdbead7138be8b3e58128f7a75fd01bad0381413354a01c494db6ab78820c781c15a1a6c18b64fb8dd6e897bea34c25cd417
7
+ data.tar.gz: c3c70507e240cd7bf13c807bb04304c1acec6b5279bb0705beead486ec11bbe2ed5a01c0d77dcafa42877ee8cfc70e79b6a753e0eb454dc85cddeae54001069a
@@ -0,0 +1,84 @@
1
+ require 'rubygems'
2
+ require 'net/http'
3
+ require 'SecureRandom'
4
+
5
+ module Chikka
6
+
7
+ class Error < StandardError; end
8
+
9
+ class IncompleteParametersError < Error; end
10
+
11
+ class AuthenticationError < Error; end
12
+
13
+ class Response
14
+ attr_reader :status, :message
15
+ def initialize(http_response)
16
+ r = JSON.parse(http_response.body)
17
+ @status = r['status']
18
+ @message = r['message']
19
+ end
20
+ end
21
+
22
+ class Client
23
+ attr_accessor :client_id, :secret_key, :shortcode, :http
24
+ SMSAPI_PATH = '/smsapi/request'
25
+ DEFAULT_PARAMS = {}
26
+ def initialize(options = {})
27
+ @client_id= options.fetch(:client_id) { ENV.fetch('CHIKKA_CLIENT_ID') }
28
+ @secret_key = options.fetch(:secret_key) { ENV.fetch('CHIKKA_SECRET_KEY') }
29
+ @shortcode = options.fetch(:shortcode) { ENV.fetch('CHIKKA_SHORTCODE') }
30
+
31
+ @host = options.fetch(:host) { 'post.chikka.com' }
32
+ @http = Net::HTTP.new(@host, Net::HTTP.https_default_port)
33
+ @http.use_ssl = true
34
+
35
+ DEFAULT_PARAMS[:client_id] = @client_id
36
+ DEFAULT_PARAMS[:secret_key] = @secret_key
37
+ DEFAULT_PARAMS[:shortcode] = @shortcode
38
+ end
39
+
40
+ def send_message(params = {})
41
+ message_id = params.fetch(:message_id) { generate_message_id }
42
+ post_params = DEFAULT_PARAMS.merge({
43
+ message_type: "SEND",
44
+ mobile_number: params[:mobile_number],
45
+ message: params[:message],
46
+ message_id: message_id
47
+ })
48
+ body = URI.encode_www_form(post_params)
49
+ parse @http.post(SMSAPI_PATH, body, {'Content-Type' => 'application/x-www-form-urlencoded'})
50
+ end
51
+
52
+ def send_reply(params = {})
53
+ message_id = params.fetch(:message_id) { generate_message_id }
54
+ request_cost = params.fetch(:message_id) { "FREE" }
55
+ post_params = DEFAULT_PARAMS.merge({
56
+ message_type: "REPLY",
57
+ mobile_number: params[:mobile_number],
58
+ message: params[:message],
59
+ message_id: message_id,
60
+ request_id: params[:request_id],
61
+ request_cost: request_cost
62
+ })
63
+ end
64
+
65
+ private
66
+ def generate_message_id
67
+ SecureRandom.hex
68
+ end
69
+
70
+ def parse(http_response)
71
+ response_obj = Response.new(http_response)
72
+ case http_response
73
+ when Net::HTTPSuccess
74
+ response_obj
75
+ when Net::HTTPBadRequest
76
+ raise IncompleteParametersError.new(message=response_obj.message)
77
+ when Net::HTTPUnauthorized
78
+ raise AuthenticationError
79
+ else
80
+ raise Error, "Unexpected HTTP response (code=#{http_response.code})"
81
+ end
82
+ end
83
+ end
84
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chikka
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrei Navarro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 10.4.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 10.4.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: webmock
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.20.4
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.20.4
41
+ description:
42
+ email: andrei@eggsapps.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/chikka.rb
48
+ homepage: https://github.com/scrambledeggs/chikka
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.0.0
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: A ruby interface to the Chikka SMS API
72
+ test_files: []