smsru 0.0.1 → 0.0.2
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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +8 -0
- data/README.md +22 -8
- data/lib/sms_ru/config.rb +5 -1
- data/lib/sms_ru/message.html.erb +23 -0
- data/lib/sms_ru/message.rb +38 -0
- data/lib/sms_ru/railtie.rb +31 -0
- data/lib/sms_ru/version.rb +1 -1
- data/lib/sms_ru.rb +7 -6
- data/sms_ru.gemspec +8 -5
- metadata +53 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d83c8df4aaa838ab7ae37591bb51366cd57c1495
|
4
|
+
data.tar.gz: eff885646537abcf351d3e51e1d558e3e1396296
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 409d3c8be0f9ae02467e82b3c8a0c9249682c213520993c687c68bf421089c76fd1512b8804fba7010443c5021adad2ad9af0831ff76cf942b77ae59951da1d7
|
7
|
+
data.tar.gz: ede775d9c2132b225f3a064029039deb8d5a4e0ad287a1b2ada3540451952875a750cc0f93329971e606caa24168d53206a293140272dcebc06335c0b37d4da5
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
@@ -1,25 +1,24 @@
|
|
1
1
|
# SmsRu
|
2
2
|
|
3
|
+
[](http://badge.fury.io/rb/smsru)
|
4
|
+
[](https://codeclimate.com/github/asiniy/sms_ru)
|
5
|
+
|
3
6
|
This gem is API for sending sms through [sms.ru](http://sms.ru) service. SmsRu allows you to connect to sms.ru api without Net::HTTP syntax sugar. Check [API](http://sms.ru/?panel=api) to list of all available queries.
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
7
|
-
**WARNING** There is
|
10
|
+
**WARNING** There is outdated ruby gem `sms_ru`, so name of this gem is `**smsru**`
|
8
11
|
|
9
12
|
Add this line to your application's Gemfile:
|
10
13
|
|
11
14
|
```ruby
|
12
|
-
gem 'smsru'
|
15
|
+
gem 'smsru', require: 'sms_ru'
|
13
16
|
```
|
14
17
|
|
15
18
|
And then execute:
|
16
19
|
|
17
20
|
$ bundle
|
18
21
|
|
19
|
-
Or install it yourself as:
|
20
|
-
|
21
|
-
$ gem install smsru
|
22
|
-
|
23
22
|
## Usage
|
24
23
|
|
25
24
|
Firstly, add `sms_ru.rb` to initializers. Here you can set api_id.
|
@@ -27,8 +26,8 @@ Firstly, add `sms_ru.rb` to initializers. Here you can set api_id.
|
|
27
26
|
``` ruby
|
28
27
|
SmsRu.setup do |config|
|
29
28
|
config.api_id = Rails.application.secrets.sms_ru_key
|
30
|
-
### you can setup default settings for every sms.ru API
|
31
|
-
config.
|
29
|
+
### you can setup default settings for every sms.ru API query you want
|
30
|
+
config.queries.sms.send.from = 'fasteria.ru'
|
32
31
|
end
|
33
32
|
```
|
34
33
|
|
@@ -38,6 +37,21 @@ Firstly, add `sms_ru.rb` to initializers. Here you can set api_id.
|
|
38
37
|
# et.c.
|
39
38
|
```
|
40
39
|
|
40
|
+
You can specify `delivery_method` for SmsRu gateway. For example, if you don't want to send a messages, but don't want to make queries to the API:
|
41
|
+
|
42
|
+
``` ruby
|
43
|
+
# config/environments/development.rb
|
44
|
+
config.sms_ru.delivery_method = :launchy # every query to sms.ru api will open new tab in the browser
|
45
|
+
```
|
46
|
+
|
47
|
+
``` ruby
|
48
|
+
# config/environments/test.rb
|
49
|
+
config.sms_ru.delivery_method = :webmock # you'll get mocked success answer
|
50
|
+
```
|
51
|
+
|
52
|
+
Default `delivery_method` is `:direct`
|
53
|
+
|
54
|
+
|
41
55
|
## Contributing
|
42
56
|
|
43
57
|
1. Fork it ( https://github.com/asiniy/sms_ru/fork )
|
data/lib/sms_ru/config.rb
CHANGED
@@ -6,12 +6,16 @@ module SmsRu
|
|
6
6
|
# Scope is used for dynamic params assignment
|
7
7
|
@@current_scope = []
|
8
8
|
|
9
|
+
class <<self
|
10
|
+
undef_method :send
|
11
|
+
end
|
12
|
+
|
9
13
|
def self.current_scope_to_config(args)
|
10
14
|
@@current_scope.reverse.inject(args) { |a, n| { n => a } }
|
11
15
|
end
|
12
16
|
|
13
17
|
def self.method_missing(m, *args)
|
14
|
-
@@current_scope.push m
|
18
|
+
@@current_scope.push m.to_s.gsub('=', '').to_sym
|
15
19
|
if m.match(/=/)
|
16
20
|
@@configuration.deep_merge! current_scope_to_config(*args)
|
17
21
|
@@current_scope = []
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Sms.ru api <%= @request[:method] %> call</title>
|
4
|
+
</head>
|
5
|
+
|
6
|
+
<body>
|
7
|
+
<h3>Sms.ru query</h3>
|
8
|
+
<table cellspacing="5">
|
9
|
+
<thead>
|
10
|
+
<th>Param</th>
|
11
|
+
<th align="left">Value</th>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% @request.each do |k, v| %>
|
15
|
+
<tr>
|
16
|
+
<td><i><%= k %></i></td>
|
17
|
+
<td><%= v %></td>
|
18
|
+
</tr>
|
19
|
+
<% end %>
|
20
|
+
</tbody>
|
21
|
+
</table>
|
22
|
+
</body>
|
23
|
+
</html>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'rack'
|
3
|
+
|
4
|
+
module SmsRu
|
5
|
+
class Message
|
6
|
+
def initialize(request, dir_location)
|
7
|
+
@request = parse_request(request)
|
8
|
+
@dir_location = dir_location
|
9
|
+
FileUtils.mkdir_p @dir_location
|
10
|
+
@file_location = "#{Time.now.to_i}_#{Digest::SHA1.hexdigest(@request.to_s + rand(1_000_000).to_s)[0..6]}"
|
11
|
+
end
|
12
|
+
|
13
|
+
def render
|
14
|
+
File.open(filepath, 'w') do |f|
|
15
|
+
f.write ERB.new(template).result(binding)
|
16
|
+
end
|
17
|
+
|
18
|
+
Launchy.open("file:///#{filepath}")
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def parse_request(request)
|
24
|
+
{
|
25
|
+
method: request.method.to_s,
|
26
|
+
uri: request.uri.to_s,
|
27
|
+
}.merge Rack::Utils.parse_nested_query(request.body)
|
28
|
+
end
|
29
|
+
|
30
|
+
def template
|
31
|
+
File.read(File.expand_path('../message.html.erb', __FILE__))
|
32
|
+
end
|
33
|
+
|
34
|
+
def filepath
|
35
|
+
File.join(@dir_location, @file_location + '.html')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SmsRu
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
config.sms_ru = ActiveSupport::OrderedOptions.new
|
4
|
+
|
5
|
+
# change this in config/environments/*
|
6
|
+
config.sms_ru.delivery_method = :direct
|
7
|
+
config.sms_ru.location = 'tmp/sms_ru'
|
8
|
+
|
9
|
+
initializer 'sms_ru.setup_delivery_method' do |app|
|
10
|
+
case app.config.sms_ru.delivery_method
|
11
|
+
when :webmock
|
12
|
+
require 'webmock'
|
13
|
+
WebMock.stub_request(:any, /http:\/\/sms.ru/).
|
14
|
+
to_return(status: 200, body: "100\n21115\nbalance=162.11")
|
15
|
+
when :launchy
|
16
|
+
require 'webmock'
|
17
|
+
require 'launchy'
|
18
|
+
require 'sms_ru/message'
|
19
|
+
WebMock.stub_request(:any, /http:\/\/sms.ru/)
|
20
|
+
.to_return(status: 200, body: "100\n21115\nbalance=162.11")
|
21
|
+
WebMock.after_request do |request, response|
|
22
|
+
if request.uri.to_s.match /http:\/\/sms.ru/
|
23
|
+
SmsRu::Message.new(request, Rails.root.join(app.config.sms_ru.location)).render
|
24
|
+
end
|
25
|
+
end
|
26
|
+
when :direct then nil
|
27
|
+
else raise 'undefined sms_ru delivery_method'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/sms_ru/version.rb
CHANGED
data/lib/sms_ru.rb
CHANGED
@@ -4,13 +4,14 @@ require 'net/http'
|
|
4
4
|
|
5
5
|
require 'sms_ru/version'
|
6
6
|
require 'sms_ru/config'
|
7
|
+
require 'sms_ru/railtie' if defined?(Rails)
|
7
8
|
|
8
9
|
module SmsRu
|
9
10
|
# Setup configuration
|
10
11
|
mattr_accessor :api_id
|
11
12
|
|
12
|
-
mattr_reader :
|
13
|
-
@@
|
13
|
+
mattr_reader :queries
|
14
|
+
@@queries = SmsRu::Config
|
14
15
|
|
15
16
|
def self.setup
|
16
17
|
yield self
|
@@ -21,14 +22,14 @@ module SmsRu
|
|
21
22
|
# all possible queries is exactly 2 level deep
|
22
23
|
@@stack_method ||= nil
|
23
24
|
|
24
|
-
# we need to undefine method send because of we use it
|
25
|
+
# we need to undefine method send because of we use it in the api
|
25
26
|
class <<self
|
26
27
|
undef_method :send
|
27
28
|
end
|
28
29
|
|
29
30
|
def self.method_missing(m, options = {})
|
30
31
|
if @@stack_method
|
31
|
-
query_options =
|
32
|
+
query_options = queries.configuration.to_h[@@stack_method].to_h[m].to_h
|
32
33
|
query_options.deep_merge!(api_id: api_id)
|
33
34
|
query_options.deep_merge! options
|
34
35
|
|
@@ -37,9 +38,9 @@ module SmsRu
|
|
37
38
|
|
38
39
|
response = Net::HTTP.post_form(uri, query_options)
|
39
40
|
|
40
|
-
raise 'you have troubles with internet connection or API query is missing' unless response.
|
41
|
+
raise 'you have troubles with internet connection or API query is missing' unless response.kind_of? Net::HTTPSuccess
|
41
42
|
raise "something going wrong: #{query_options}, #{response.body}" unless response.body.match(/^100/)
|
42
|
-
response.body
|
43
|
+
response.body.split("\n")
|
43
44
|
else
|
44
45
|
@@stack_method = m
|
45
46
|
return self
|
data/sms_ru.gemspec
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
4
3
|
require 'sms_ru/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
@@ -12,13 +11,17 @@ Gem::Specification.new do |spec|
|
|
12
11
|
spec.homepage = 'https://github.com/asiniy/sms_ru'
|
13
12
|
spec.license = 'MIT'
|
14
13
|
|
15
|
-
spec.files = `git ls-files`.split(
|
14
|
+
spec.files = `git ls-files`.split("\n")
|
16
15
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
-
spec.test_files = spec.
|
16
|
+
spec.test_files = `git ls-files -- spec/*`.split("\n").map{ |f| File.basename(f) }
|
18
17
|
spec.require_paths = ['lib']
|
18
|
+
spec.required_ruby_version = '>= 2.0.0'
|
19
19
|
|
20
|
-
spec.add_dependency 'activesupport', '
|
20
|
+
spec.add_dependency 'activesupport', '~> 4.2.0'
|
21
|
+
spec.add_dependency 'launchy', '~> 2.4'
|
22
|
+
spec.add_dependency 'webmock', '~> 1.20'
|
21
23
|
|
22
24
|
spec.add_development_dependency 'bundler', '~> 1.7'
|
23
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
spec.add_development_dependency 'rspec', '~> 3'
|
24
27
|
end
|
metadata
CHANGED
@@ -1,29 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smsru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Antonov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: launchy
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
18
39
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4
|
40
|
+
version: '2.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: webmock
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.20'
|
20
48
|
type: :runtime
|
21
49
|
prerelease: false
|
22
50
|
version_requirements: !ruby/object:Gem::Requirement
|
23
51
|
requirements:
|
24
|
-
- - "
|
52
|
+
- - "~>"
|
25
53
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
54
|
+
version: '1.20'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: bundler
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +80,20 @@ dependencies:
|
|
52
80
|
- - "~>"
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3'
|
55
97
|
description:
|
56
98
|
email:
|
57
99
|
- alex@fasteria.ru
|
@@ -60,12 +102,16 @@ extensions: []
|
|
60
102
|
extra_rdoc_files: []
|
61
103
|
files:
|
62
104
|
- ".gitignore"
|
105
|
+
- CHANGELOG.md
|
63
106
|
- Gemfile
|
64
107
|
- LICENSE.txt
|
65
108
|
- README.md
|
66
109
|
- Rakefile
|
67
110
|
- lib/sms_ru.rb
|
68
111
|
- lib/sms_ru/config.rb
|
112
|
+
- lib/sms_ru/message.html.erb
|
113
|
+
- lib/sms_ru/message.rb
|
114
|
+
- lib/sms_ru/railtie.rb
|
69
115
|
- lib/sms_ru/version.rb
|
70
116
|
- sms_ru.gemspec
|
71
117
|
homepage: https://github.com/asiniy/sms_ru
|
@@ -80,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
126
|
requirements:
|
81
127
|
- - ">="
|
82
128
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
129
|
+
version: 2.0.0
|
84
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
131
|
requirements:
|
86
132
|
- - ">="
|