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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eff9871e0fffdb57639c42e9fb79d7cc07954bea
4
- data.tar.gz: 07f78b226b0a6b8a6f1e605afb1873f4611a21ed
3
+ metadata.gz: d83c8df4aaa838ab7ae37591bb51366cd57c1495
4
+ data.tar.gz: eff885646537abcf351d3e51e1d558e3e1396296
5
5
  SHA512:
6
- metadata.gz: 17d0c69ddc0022faf03bcd15826cb1d71609e024b447342a7a0d08ee0f5774bf7ec916f8982831cf953bc2a07ec0b7300ce0c9602f9d8ad430d335cce476dc14
7
- data.tar.gz: 2ec90de00f68533c9ae8172d4d9eda9babe1c0027d505fc2d0f0c9ccac0e9e4c6b05bbb3e3f03362a7f487c997c379eabacd6aec12894ff010b21ad4255bd00d
6
+ metadata.gz: 409d3c8be0f9ae02467e82b3c8a0c9249682c213520993c687c68bf421089c76fd1512b8804fba7010443c5021adad2ad9af0831ff76cf942b77ae59951da1d7
7
+ data.tar.gz: ede775d9c2132b225f3a064029039deb8d5a4e0ad287a1b2ada3540451952875a750cc0f93329971e606caa24168d53206a293140272dcebc06335c0b37d4da5
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /*.gem
10
11
  *.bundle
11
12
  *.so
12
13
  *.o
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ ### 0.0.2
2
+
3
+ Railtie with config.sms_ru.delivery_method
4
+ `methods` query settings renamed to `queries`
5
+
6
+ ### 0.0.1
7
+
8
+ Basic functionality w/o testing
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 obsolete ruby gem `sms_ru`, so name of this gem is '**smsru**'
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 method you want
31
- config.methods.sms.send.from = 'fasteria.ru'
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
@@ -1,3 +1,3 @@
1
1
  module SmsRu
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
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 :methods
13
- @@methods = SmsRu::Config
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 at the api
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 = methods.configuration.to_h[@@stack_method].to_h[m].to_h
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.header == '200'
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
- lib = File.expand_path('../lib', __FILE__)
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.files.grep(%r{^(test|spec|features)/})
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', '>= 4.0.0'
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.1
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 00:00:00.000000000 Z
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.0.0
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: 4.0.0
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: '0'
129
+ version: 2.0.0
84
130
  required_rubygems_version: !ruby/object:Gem::Requirement
85
131
  requirements:
86
132
  - - ">="