greensms 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,11 @@
1
+ require_relative "init"
2
+
3
+ @client = Example::CLIENT
4
+
5
+ puts "Fetch Token"
6
+ token_resp = @client.account.token(token: 100)
7
+ token = token_resp["access_token"]
8
+
9
+ puts "Run with Token"
10
+ @token_client = GreenSMS::GreenSMSClient.new(token: token)
11
+ puts @token_client.status
@@ -0,0 +1,11 @@
1
+ require_relative "init"
2
+
3
+ @client = Example::CLIENT
4
+
5
+ puts "Viber Send"
6
+ resp = @client.viber.send(to: "79260000121", txt: "Hello Message Content")
7
+ puts resp
8
+
9
+ sleep(3)
10
+ puts "Viber Status"
11
+ puts @client.viber.status(id: resp["request_id"])
@@ -0,0 +1,11 @@
1
+ require_relative "init"
2
+
3
+ @client = Example::CLIENT
4
+
5
+ puts "Voice Send"
6
+ resp = @client.voice.send(to: "79260000121", txt: "8601")
7
+ puts resp
8
+
9
+ sleep(3)
10
+ puts "Voice Status"
11
+ puts @client.voice.status(id: resp["request_id"])
@@ -0,0 +1,6 @@
1
+ require_relative "init"
2
+
3
+ @client = Example::CLIENT
4
+
5
+ puts "Whois Lookup"
6
+ puts @client.whois.lookup(to: "79260000000")
@@ -0,0 +1,33 @@
1
+ require_relative "lib/greensms/version"
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "greensms"
5
+ spec.version = GreenSMS::VERSION
6
+ spec.platform = Gem::Platform::RUBY
7
+ spec.authors = ["Team GreenSMS"]
8
+ spec.email = ["support@greensms.ru"]
9
+
10
+ spec.summary = "GreenSMS Ruby Gem"
11
+ spec.description = "GREENSMS API: SMS, Viber, Voce, Call, HLR, Pay"
12
+ spec.homepage = "https://github.com/greensms-ru/greensms-ruby"
13
+ spec.license = "MIT"
14
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
15
+
16
+ spec.metadata["homepage_uri"] = spec.homepage
17
+ spec.metadata["source_code_uri"] = spec.homepage
18
+ spec.metadata["changelog_uri"] = spec.homepage
19
+
20
+ spec.add_development_dependency "bundler", ">= 1.0.0"
21
+ spec.add_dependency "faraday"
22
+ spec.add_dependency "json-schema"
23
+ spec.add_dependency "rake"
24
+
25
+ # Specify which files should be added to the gem when it is released.
26
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
+ spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
28
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+ end
@@ -0,0 +1,6 @@
1
+ require "greensms/version"
2
+ require "greensms/client"
3
+
4
+ module GreenSMS
5
+ class Error < StandardError; end
6
+ end
@@ -0,0 +1,37 @@
1
+ require "greensms/utils/validator"
2
+
3
+ module GreenSMS
4
+ module API
5
+ class Module
6
+ attr_reader :module_schema
7
+ attr_reader :module_name
8
+ attr_reader :function_name
9
+
10
+ def initialize(rest_client, module_schema, kwargs, module_name, function_name)
11
+ @rest_client = rest_client
12
+ @module_schema = module_schema
13
+ @params = {}
14
+ kwargs.each { |name, value| @params[name] = value }
15
+ end
16
+
17
+ def api_func(kwargs = {})
18
+ kwargs = kwargs.transform_keys(&:to_s)
19
+
20
+ if !@module_schema.nil?
21
+ errors = GreenSMS.validate(@module_schema, kwargs)
22
+ if !errors.nil?
23
+ return errors
24
+ end
25
+ end
26
+
27
+ api_params = {}
28
+ kwargs.each { |name, value| api_params[name] = value }
29
+ request_params = @params.clone
30
+ request_params["params"] = api_params
31
+
32
+ response = @rest_client.request(request_params)
33
+ return response
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,89 @@
1
+ require "greensms/api/modules"
2
+ require "greensms/api/module"
3
+ require "greensms/utils/url"
4
+
5
+ module GreenSMS
6
+ module API
7
+ class ModuleLoader
8
+ def initialize()
9
+ @module_map = {}
10
+ end
11
+
12
+ def register_modules(shared_options, filters = {})
13
+ if filters.nil?
14
+ filters = {}
15
+ end
16
+
17
+ current_version = shared_options["version"]
18
+ modules = GreenSMS::MODULES
19
+
20
+ modules.each do |module_name, module_info|
21
+ if !@module_map.has_key?(module_name.to_sym)
22
+ @module_map[module_name] = {}
23
+ end
24
+
25
+ module_versions = module_info["versions"]
26
+ module_schema = nil
27
+
28
+ is_static_module = filters.has_key?("load_static") && module_info.has_key?("static") && filters["load_static"] == true && module_info["static"] = true
29
+
30
+ next if is_static_module
31
+
32
+ module_versions.each do |version, version_functions|
33
+ if !@module_map[module_name].has_key?(version)
34
+ @module_map[module_name][version] = {}
35
+ end
36
+
37
+ version_functions.each do |function_name, definition|
38
+ if !@module_map[module_name][version].has_key?(function_name)
39
+ @module_map[module_name][version][function_name] = {}
40
+ end
41
+
42
+ module_schema = nil
43
+ schema_exists = module_info.has_key?("schema") && module_info["schema"].has_key?(version) && module_info["schema"][version].has_key?(function_name)
44
+ if schema_exists == true
45
+ module_schema = module_info["schema"][version][function_name]
46
+ end
47
+
48
+ url_args = []
49
+ if !module_info.has_key?("static") || module_info["static"] != true
50
+ url_args.append(module_name)
51
+ end
52
+ url_args.append(function_name)
53
+
54
+ api_url = GreenSMS.build_url(shared_options["base_url"], url_args)
55
+ @module_map[module_name][version][function_name] = module_api(
56
+ shared_options: shared_options, api_url: api_url, definition: definition, module_schema: module_schema, module_name: module_name, function_name: function_name,
57
+ )
58
+
59
+ if version == current_version
60
+ @module_map[module_name][function_name] = @module_map[module_name][version][function_name]
61
+ end
62
+
63
+ if module_info.has_key?("static") && module_info["static"] == true
64
+ @module_map[function_name] = @module_map[module_name][version][function_name]
65
+ @module_map.delete(module_name)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ return @module_map
71
+ end
72
+
73
+ private
74
+
75
+ def module_api(kwargs)
76
+ rest_client = kwargs[:shared_options]["rest_client"]
77
+ module_schema = kwargs[:module_schema]
78
+
79
+ request_params = {
80
+ "url" => kwargs[:api_url],
81
+ "method" => kwargs[:definition]["method"],
82
+ }
83
+
84
+ mod = GreenSMS::API::Module.new(rest_client, module_schema, request_params, kwargs[:module_name], kwargs[:function_name])
85
+ return mod # Return the module instance
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,153 @@
1
+ require "greensms/api/schema"
2
+
3
+ module GreenSMS
4
+ MODULES = {
5
+ "account" => {
6
+ "schema" => GreenSMS::VALIDATION_SCHEMA["account"],
7
+ "versions" => {
8
+ "v1" => {
9
+ "balance" => {
10
+ "args" => nil,
11
+ "method" => "GET",
12
+ },
13
+ "token" => {
14
+ "args" => ["params"],
15
+ "method" => "POST",
16
+ },
17
+ "tariff" => {
18
+ "args" => nil,
19
+ "method" => "GET",
20
+ },
21
+ },
22
+ },
23
+ },
24
+ "general" => {
25
+ "schema" => {},
26
+ "static" => true,
27
+ "versions" => {
28
+ "v1" => {
29
+ "status" => {
30
+ "args" => nil,
31
+ "method" => "GET",
32
+ },
33
+ },
34
+ },
35
+ },
36
+ "call" => {
37
+ "schema" => GreenSMS::VALIDATION_SCHEMA["call"],
38
+ "versions" => {
39
+ "v1" => {
40
+ "send" => {
41
+ "args" => ["params"],
42
+ "method" => "POST",
43
+ },
44
+ "status" => {
45
+ "args" => ["params"],
46
+ "method" => "GET",
47
+ },
48
+ },
49
+ },
50
+ },
51
+ "whois" => {
52
+ "schema" => GreenSMS::VALIDATION_SCHEMA["whois"],
53
+ "versions" => {
54
+ "v1" => {
55
+ "lookup" => {
56
+ "args" => ["params"],
57
+ "method" => "GET",
58
+ },
59
+ },
60
+ },
61
+ },
62
+ "voice" => {
63
+ "schema" => GreenSMS::VALIDATION_SCHEMA["voice"],
64
+ "versions" => {
65
+ "v1" => {
66
+ "send" => {
67
+ "args" => ["params"],
68
+ "method" => "POST",
69
+ },
70
+ "status" => {
71
+ "args" => ["params"],
72
+ "method" => "GET",
73
+ },
74
+ },
75
+ },
76
+ },
77
+ "pay" => {
78
+ "schema" => GreenSMS::VALIDATION_SCHEMA["pay"],
79
+ "versions" => {
80
+ "v1" => {
81
+ "send" => {
82
+ "args" => ["params"],
83
+ "method" => "POST",
84
+ },
85
+ "status" => {
86
+ "args" => ["params"],
87
+ "method" => "GET",
88
+ },
89
+ },
90
+ },
91
+ },
92
+ "hlr" => {
93
+ "schema" => GreenSMS::VALIDATION_SCHEMA["hlr"],
94
+ "versions" => {
95
+ "v1" => {
96
+ "send" => {
97
+ "args" => ["params"],
98
+ "method" => "POST",
99
+ },
100
+ "status" => {
101
+ "args" => ["params"],
102
+ "method" => "GET",
103
+ },
104
+ },
105
+ },
106
+ },
107
+ "sms" => {
108
+ "schema" => GreenSMS::VALIDATION_SCHEMA["sms"],
109
+ "versions" => {
110
+ "v1" => {
111
+ "send" => {
112
+ "args" => ["params"],
113
+ "method" => "POST",
114
+ },
115
+ "status" => {
116
+ "args" => ["params"],
117
+ "method" => "GET",
118
+ },
119
+ },
120
+ },
121
+ },
122
+ "viber" => {
123
+ "schema" => GreenSMS::VALIDATION_SCHEMA["viber"],
124
+ "versions" => {
125
+ "v1" => {
126
+ "send" => {
127
+ "args" => ["params"],
128
+ "method" => "POST",
129
+ },
130
+ "status" => {
131
+ "args" => ["params"],
132
+ "method" => "GET",
133
+ },
134
+ },
135
+ },
136
+ },
137
+ "social" => {
138
+ "schema" => GreenSMS::VALIDATION_SCHEMA["social"],
139
+ "versions" => {
140
+ "v1" => {
141
+ "send" => {
142
+ "args" => ["params"],
143
+ "method" => "POST",
144
+ },
145
+ "status" => {
146
+ "args" => ["params"],
147
+ "method" => "GET",
148
+ },
149
+ },
150
+ },
151
+ },
152
+ }
153
+ end
@@ -0,0 +1,186 @@
1
+ module GreenSMS
2
+ class ::Hash
3
+ def deep_merge(second)
4
+ merger = proc { |_, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : Array === v1 && Array === v2 ? v1 | v2 : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
5
+ merge(second.to_h, &merger)
6
+ end
7
+ end
8
+
9
+ to_schema = {
10
+ "type" => "string",
11
+ "minlength" => 11,
12
+ "maxlength" => 14,
13
+ "pattern" => "^[0-9]+",
14
+ }
15
+
16
+ id_schema = {
17
+ "type" => "string",
18
+ "minlength" => 36,
19
+ "maxlength" => 36,
20
+ }
21
+
22
+ common_schema = {
23
+ "v1" => {
24
+ "send" => {
25
+ "type" => "object",
26
+ "required" => ["to"],
27
+ "properties" => {
28
+ "to" => to_schema,
29
+ },
30
+ },
31
+ "status" => {
32
+ "type" => "object",
33
+ "required" => ["id"],
34
+ "properties" => {
35
+ "id" => id_schema,
36
+ "extended" => {
37
+ "type" => "boolean",
38
+ },
39
+ },
40
+ },
41
+ },
42
+ }
43
+
44
+ VALIDATION_SCHEMA = {
45
+ "account" => {
46
+ "v1" => {
47
+ "token" => {
48
+ "type" => "object",
49
+ "required" => [],
50
+ "properties" => {
51
+ "expire" => {
52
+ "type" => "integer",
53
+ "minimum" => 0,
54
+ },
55
+ },
56
+ },
57
+ },
58
+ },
59
+ "call" => common_schema.clone,
60
+ "hlr" => common_schema.clone,
61
+ "whois" => {
62
+ "v1" => {
63
+ "lookup" => {
64
+ "type" => "object",
65
+ "required" => ["to"],
66
+ "properties" => {
67
+ "to" => to_schema,
68
+ },
69
+ },
70
+ },
71
+ },
72
+ "general" => {},
73
+ "voice" => common_schema.clone.deep_merge(
74
+ {
75
+ "v1" => {
76
+ "send" => {
77
+ "type" => "object",
78
+ "required" => ["txt"],
79
+ "properties" => {
80
+ "txt" => {
81
+ "type" => "string",
82
+ "minlength" => 1,
83
+ "maxlength" => 5,
84
+ "pattern" => "^[0-9]+",
85
+ },
86
+ "lang" => {
87
+ "type" => "string",
88
+ # "allowed" => ["ru", "en"],
89
+ },
90
+ },
91
+ },
92
+ },
93
+ }
94
+ ),
95
+ "pay" => common_schema.clone.deep_merge({
96
+ "v1" => {
97
+ "send" => {
98
+ "type" => "object",
99
+ "required" => ["amount"],
100
+ "properties" => {
101
+ "amount" => {
102
+ "type" => "number",
103
+ "min" => 1,
104
+ },
105
+ "tag" => {
106
+ "type" => "string",
107
+ },
108
+ },
109
+ },
110
+ },
111
+ }),
112
+ "sms" => common_schema.clone.deep_merge(
113
+ {
114
+ "v1" => {
115
+ "send" => {
116
+ "type" => "object",
117
+ "required" => ["txt"],
118
+ "properties" => {
119
+ "txt" => {
120
+ "type" => "string",
121
+ "minlength" => 1,
122
+ },
123
+ "from" => {
124
+ "type" => "string",
125
+ },
126
+ "tag" => {
127
+ "type" => "string",
128
+ },
129
+ "hidden" => {
130
+ "type" => "string",
131
+ },
132
+ },
133
+ },
134
+ },
135
+ }
136
+ ),
137
+ "viber" => common_schema.clone.deep_merge(
138
+ {
139
+ "v1" => {
140
+ "send" => {
141
+ "type" => "object",
142
+ "required" => ["txt"],
143
+ "properties" => {
144
+ "txt" => {
145
+ "type" => "string",
146
+ "minlength" => 1,
147
+ },
148
+ "from" => {
149
+ "type" => "string",
150
+ },
151
+ "cascade" => {
152
+ "type" => "string",
153
+ "allowed" => ["sms", "voice"],
154
+ },
155
+ },
156
+ },
157
+ },
158
+ }
159
+ ),
160
+ "social" => common_schema.clone.deep_merge(
161
+ {
162
+ "v1" => {
163
+ "send" => {
164
+ "type" => "object",
165
+ "required" => ["txt"],
166
+ "properties" => {
167
+ "txt" => {
168
+ "type" => "string",
169
+ "minlength" => 1,
170
+ },
171
+ "from" => {
172
+ "type" => "string",
173
+ },
174
+ "tag" => {
175
+ "type" => "string",
176
+ },
177
+ "hidden" => {
178
+ "type" => "string",
179
+ },
180
+ },
181
+ },
182
+ },
183
+ }
184
+ ),
185
+ }
186
+ end