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 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
  - - ">="