smsru 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/smsru.png)](http://badge.fury.io/rb/smsru)
|
4
|
+
[![Code Climate](https://codeclimate.com/github/asiniy/sms_ru/badges/gpa.svg)](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
|
- - ">="
|