alidayu_sms 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 358c8f0763bf15466b7511b60bbfa562e72c03fe
4
+ data.tar.gz: b379d22e05ec0358492615c4dd17ced744b7c399
5
+ SHA512:
6
+ metadata.gz: efbad6893b6901a6044ac289755260fd2dadd62576ad6b44c8d97dc76aeb379c28620017d086b0942a5428461456221c49414ae1023666167d19d3ddcbadcb87
7
+ data.tar.gz: 890070ebc7a1c983e4b50f1d301336f861d4732bfee2b3663c94b30163ddeb1f308ab2d85b67bd263110f4964a997a6ecd641bfdd801ab402a334ed6f9cafd58
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *~
data/.idea/.rakeTasks ADDED
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Settings><!--This file was automatically generated by Ruby plugin.
3
+ You are allowed to:
4
+ 1. Remove rake task
5
+ 2. Add existing rake tasks
6
+ To add existing rake tasks automatically delete this file and reload the project.
7
+ --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build alidayu_sms-0.1.0.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Build and install alidayu_sms-0.1.0.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install alidayu_sms-0.1.0.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v0.1.0 and build and push alidayu_sms-0.1.0.gem to Rubygems" fullCmd="release" taksId="release" /><RakeTask description="Run tests" fullCmd="test" taksId="test" /><RakeGroup description="" fullCmd="" taksId="alidayu_sms"><RakeTask description="" fullCmd="alidayu_sms:create_default_config_file" taksId="create_default_config_file" /></RakeGroup><RakeTask description="" fullCmd="default" taksId="default" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="FacetManager">
4
+ <facet type="gem" name="Ruby Gem">
5
+ <configuration>
6
+ <option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
7
+ <option name="GEM_APP_TEST_PATH" value="$MODULE_DIR$/test" />
8
+ <option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
9
+ </configuration>
10
+ </facet>
11
+ </component>
12
+ <component name="NewModuleRootManager">
13
+ <content url="file://$MODULE_DIR$">
14
+ <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
15
+ </content>
16
+ <orderEntry type="inheritedJdk" />
17
+ <orderEntry type="sourceFolder" forTests="false" />
18
+ <orderEntry type="library" scope="PROVIDED" name="activesupport (v4.1.14.1, RVM: ruby-2.1.5) [gem]" level="application" />
19
+ <orderEntry type="library" scope="PROVIDED" name="i18n (v0.7.0, RVM: ruby-2.1.5) [gem]" level="application" />
20
+ <orderEntry type="library" scope="PROVIDED" name="json (v1.8.3, RVM: ruby-2.1.5) [gem]" level="application" />
21
+ <orderEntry type="library" scope="PROVIDED" name="minitest (v5.8.4, RVM: ruby-2.1.5) [gem]" level="application" />
22
+ <orderEntry type="library" scope="PROVIDED" name="rack (v1.6.4, RVM: ruby-2.1.5) [gem]" level="application" />
23
+ <orderEntry type="library" scope="PROVIDED" name="rake (v10.5.0, RVM: ruby-2.1.5) [gem]" level="application" />
24
+ <orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.5, RVM: ruby-2.1.5) [gem]" level="application" />
25
+ <orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.2, RVM: ruby-2.1.5) [gem]" level="application" />
26
+ </component>
27
+ </module>
data/.idea/misc.xml ADDED
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectLevelVcsManager" settingsEditedManually="false">
4
+ <OptionsSetting value="true" id="Add" />
5
+ <OptionsSetting value="true" id="Remove" />
6
+ <OptionsSetting value="true" id="Checkout" />
7
+ <OptionsSetting value="true" id="Update" />
8
+ <OptionsSetting value="true" id="Status" />
9
+ <OptionsSetting value="true" id="Edit" />
10
+ <ConfirmationsSetting value="0" id="Add" />
11
+ <ConfirmationsSetting value="0" id="Remove" />
12
+ </component>
13
+ <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-2.1.5" project-jdk-type="RUBY_SDK" />
14
+ </project>
data/.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/alidayu_sms.iml" filepath="$PROJECT_DIR$/.idea/alidayu_sms.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
data/.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="" vcs="" />
5
+ </component>
6
+ </project>
@@ -0,0 +1,41 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ChangeListManager">
4
+ <option name="TRACKING_ENABLED" value="true" />
5
+ <option name="SHOW_DIALOG" value="false" />
6
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
7
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
8
+ <option name="LAST_RESOLUTION" value="IGNORE" />
9
+ </component>
10
+ <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
11
+ <component name="CreatePatchCommitExecutor">
12
+ <option name="PATCH_PATH" value="" />
13
+ </component>
14
+ <component name="NamedScopeManager">
15
+ <order />
16
+ </component>
17
+ <component name="ProjectLevelVcsManager" settingsEditedManually="false">
18
+ <OptionsSetting value="true" id="Add" />
19
+ <OptionsSetting value="true" id="Remove" />
20
+ <OptionsSetting value="true" id="Checkout" />
21
+ <OptionsSetting value="true" id="Update" />
22
+ <OptionsSetting value="true" id="Status" />
23
+ <OptionsSetting value="true" id="Edit" />
24
+ <ConfirmationsSetting value="0" id="Add" />
25
+ <ConfirmationsSetting value="0" id="Remove" />
26
+ </component>
27
+ <component name="ShelveChangesManager" show_recycled="false" />
28
+ <component name="TaskManager">
29
+ <task active="true" id="Default" summary="Default task">
30
+ <option name="number" value="Default" />
31
+ </task>
32
+ <servers />
33
+ </component>
34
+ <component name="VcsContentAnnotationSettings">
35
+ <option name="myLimit" value="2678400000" />
36
+ </component>
37
+ <component name="XDebuggerManager">
38
+ <breakpoint-manager />
39
+ <watches-manager />
40
+ </component>
41
+ </project>
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sms.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,33 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ alidayu_sms (0.1.0)
5
+ i18n
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (4.1.14.1)
11
+ i18n (~> 0.6, >= 0.6.9)
12
+ json (~> 1.7, >= 1.7.7)
13
+ minitest (~> 5.1)
14
+ thread_safe (~> 0.1)
15
+ tzinfo (~> 1.1)
16
+ i18n (0.7.0)
17
+ json (1.8.3)
18
+ minitest (5.8.4)
19
+ rack (1.6.4)
20
+ rake (10.5.0)
21
+ thread_safe (0.3.5)
22
+ tzinfo (1.2.2)
23
+ thread_safe (~> 0.1)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ activesupport (~> 4.1.12)
30
+ alidayu_sms!
31
+ bundler (~> 1.9)
32
+ rack
33
+ rake (~> 10.0)
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # alidayu_sms
2
+ 阿里大鱼的短信发送api
3
+
4
+ # Gemfile add
5
+ gem 'alidayu_sms', git: 'git@github.com:wangping0105/alidayu_sms.git'
6
+
7
+ # start
8
+ ##生成配置文件示例!(my :app_key and :app_secret, Valid to 2016.02.22)
9
+ rake alidayu_sms:create_default_config_file
10
+ ```ruby
11
+ defaults: &defaults
12
+ alidayu:
13
+ app_key: 23304964
14
+ app_secret: "12b083a7c5e89ce3093067ddd65c4b5a"
15
+ post_url: 'http://gw.api.taobao.com/router/rest'
16
+
17
+ development:
18
+ <<: *defaults
19
+
20
+ test:
21
+ <<: *defaults
22
+
23
+ production:
24
+ <<: *defaults
25
+ ```
26
+ ## hello world!
27
+ ```ruby
28
+ options = {
29
+ code: 1314520, # 模板的{code}字段
30
+ phones: "1520122011,1591251515", # 手机号码
31
+ product: "王平爱王玲", # 模板的{product}字段
32
+ extend: '', # 公共回传参数,在“消息返回”中会透传回该参数;举例:用户可以传入自己下级的会员ID,在消息返回时,该会员ID会包含在内,用户可以根据该会员ID识别是哪位会员使用了你的应用
33
+ sms_free_sign_name: "注册验证", # 短信签名
34
+ sms_template_code: "SMS_5045503" # 短信模板
35
+ }
36
+ result = AlidayuSmsSender.new.batchSendSms(options)
37
+
38
+ # 返回码参考 阿里大鱼 api文档
39
+ ```
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+ load "tasks/alidayu_sms.rake"
3
+
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'lib' << 'test'
8
+ t.pattern = "test/*_test.rb"
9
+ t.ruby_opts << "-r test_helper"
10
+ end
11
+
12
+ task :default => :test
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'alidayu_sms/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "alidayu_sms"
8
+ spec.version = AlidayuSms::VERSION
9
+ spec.authors = ["jack ping"]
10
+ spec.email = ["525399584@qq.com"]
11
+
12
+ spec.summary = %q{alidayu_sms send.}
13
+ spec.description = %q{alidayu_sms send.}
14
+ spec.homepage = "https://github.com/wangping0105/alidayu_sms"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "bin"
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'i18n'
22
+ spec.add_development_dependency "bundler", "~> 1.9"
23
+ spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "activesupport", "~> 4.1.12"
25
+ spec.add_development_dependency 'rack'
26
+ end
data/bin/alidayu_sms ADDED
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "optparse"
4
+ require "pp"
5
+ require 'rack'
6
+
7
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
8
+ require 'alidayu_sms'
9
+
10
+ options = {method: 'batchSendSms'}
11
+ attributes = {}
12
+
13
+ OptionParser.new do |o|
14
+ o.banner = <<-EOF
15
+ Usage:
16
+ Starting:
17
+ alidayu_sms [-p <phone>] [-c <code>] [-m <model>] [-t <type>]
18
+
19
+ Querying:
20
+ alidayu_sms -v
21
+
22
+ Options:
23
+ EOF
24
+
25
+ o.on("-p", "--phones=phones", String, "send alidayu_sms phones") do |x|
26
+ options[:phones] = x
27
+ end
28
+
29
+ o.on("-c", "--code=code", String, "send alidayu_sms code") do |x|
30
+ options[:code] = x
31
+ end
32
+
33
+ o.on("-s", "--source=source", String, "send alidayu_sms source [zucp|taobao] (Default: zucp)") do |x|
34
+ options[:source] = x
35
+ end
36
+
37
+ o.on("-m", "--m=method", String, "send alidayu_sms method [batch] (Default: batch)") do |x|
38
+ options[:method] = x
39
+ end
40
+
41
+ o.on("-a", "--a=attributes", String, "attributes: ()") do |x|
42
+ attributes = Rack::Utils.parse_nested_query(x)
43
+ end
44
+
45
+ o.on("-h", "--help", "Show help documentation") do |x|
46
+ puts o
47
+ exit
48
+ end
49
+
50
+ o.on("-v", "--version", "Show alidayu_sms version") do |x|
51
+ puts "Version: #{AlidayuSms::VERSION}"
52
+ exit
53
+ end
54
+ end.parse!
55
+
56
+ options.merge!(attributes)
57
+
58
+ #测试用的, 不过我的key可能无效了哦
59
+ options = options.merge(
60
+ :code=> 1314520,
61
+ :product => "王平爱王玲",
62
+ :extend => '',
63
+ :sms_free_sign_name=> "注册验证",
64
+ :sms_template_code=> "SMS_5045503"
65
+ )
66
+ sys_options = {
67
+ app_key: 23304964,
68
+ app_secret: "12b083a7c5e89ce3093067ddd65c4b5a",
69
+ post_url: 'http://gw.api.taobao.com/router/rest'
70
+ }
71
+
72
+ begin
73
+ puts options.inspect
74
+ puts AlidayuSmsSender.new(sys_options).send(options[:method], options)
75
+ rescue => e
76
+ puts 'Uncaught exception'
77
+ puts e.message
78
+ puts e.backtrace.join("\n")
79
+ end
80
+
81
+ # sms -p 13262902619 -s taobao -a 'app_secret=5aff003ac3c7243da65adef1e7c9c363&app_key=23272925&sms_free_sign_name=爱客验证码&sms_template_code=SMS_2575137&sms_param[code]=xxx&sms_param[product]=ddd'
82
+
@@ -0,0 +1,70 @@
1
+ require 'net/http'
2
+
3
+ module AlidayuSms
4
+ class Alidayu
5
+ attr_accessor :app_key, :app_secret, :post_url
6
+
7
+ def initialize(options = {})
8
+ self.app_key = options['app_key']
9
+ self.app_secret = options['app_secret']
10
+ self.post_url = options['post_url']
11
+ end
12
+
13
+ def standard_send_msg(arg = [])
14
+ code, product, _phones, _extend, _sms_free_sign_name, _sms_template_code = arg
15
+
16
+ _sms_param = "{'code':'#{code}','product':'#{product}'}"
17
+ _timestamp = Time.now.strftime("%F %T")
18
+ options = {
19
+ app_key: self.app_key,
20
+ format: 'json',
21
+ method: 'alibaba.aliqin.fc.sms.num.send',
22
+ partner_id: 'apidoc',
23
+ sign_method: 'md5',
24
+ timestamp: _timestamp,
25
+ v: '2.0',
26
+ extend: _extend,
27
+ rec_num: _phones,
28
+ sms_free_sign_name: _sms_free_sign_name,
29
+ sms_param: _sms_param,
30
+ sms_template_code: _sms_template_code,
31
+ sms_type: 'normal'
32
+ }
33
+
34
+ options = sort_options(options)
35
+ puts "options: #{options}"
36
+
37
+ md5_str = 加密(options)
38
+ response = post(self.post_url, options.merge(sign: md5_str))
39
+ puts "phones: #{_phones}, #{_sms_param}, and respone: #{response}"
40
+ response
41
+ end
42
+
43
+ private
44
+ def sort_options(**arg)
45
+ arg.sort_by{|k,v| k}.to_h
46
+ end
47
+
48
+ def 加密(**arg)
49
+ _arg = arg.map{|k,v| "#{k}#{v}"}
50
+ md5("#{self.app_secret}#{_arg.join("")}#{self.app_secret}").upcase
51
+ end
52
+
53
+ def md5(arg)
54
+ Digest::MD5.hexdigest(arg)
55
+ end
56
+
57
+ def post(uri, options)
58
+ response = ""
59
+ url = URI.parse(uri)
60
+ Net::HTTP.start(url.host, url.port) do |http|
61
+ req = Net::HTTP::Post.new(url.path)
62
+ req.set_form_data(options)
63
+ response = http.request(req).body
64
+ end
65
+ JSON(response)
66
+ end
67
+ end
68
+ end
69
+
70
+
@@ -0,0 +1,3 @@
1
+ module AlidayuSms
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,76 @@
1
+ $:.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'pp'
4
+ require "active_support/all"
5
+
6
+ require "alidayu_sms/version"
7
+ require "alidayu_sms/alidayu"
8
+
9
+ require 'yaml' unless defined? YMAL
10
+
11
+ def load_config
12
+ if defined? ::Rails
13
+ @sms_config ||= HashWithIndifferentAccess.new(YAML.load_file("#{::Rails.root}/config/alidayu_sms.yml")[::Rails.env] || {})
14
+ else
15
+ {}
16
+ end
17
+ end
18
+
19
+ class AlidayuSmsSender
20
+ attr_accessor :source, :template_code
21
+
22
+ def initialize(options = {})
23
+ if load_config.present? && load_config[:alidayu].present?
24
+ options = load_config[:alidayu].merge(options)
25
+ end
26
+ options = HashWithIndifferentAccess.new(options)
27
+ check_system_params(options)
28
+
29
+ @source = AlidayuSms::Alidayu.new(options)
30
+ end
31
+
32
+ # 发送短信
33
+ def batchSendSms(options = {})
34
+ options = HashWithIndifferentAccess.new(options)
35
+
36
+ arr = %w(code product phones extend sms_free_sign_name sms_template_code)
37
+ attr, flag = [], false
38
+ arr.each do |a|
39
+ flag = true unless options[a]
40
+ attr << options[a]
41
+ end
42
+
43
+ check_params(flag, options)
44
+ puts "传入参数为:#{attr}"
45
+
46
+ @source.standard_send_msg(attr)
47
+ end
48
+
49
+ private
50
+ def check_params(flag, options)
51
+ raise "自定义参数不全!\n你传入的: #{options.map{|k,v| k.to_sym}}\n需要传入: [:code :product :phones :extend :sms_free_sign_name :sms_template_code]" if flag
52
+ end
53
+
54
+ def check_system_params(options)
55
+ arr = %w(app_key app_secret post_url)
56
+ attr, flag = [], false
57
+ arr.each do |a|
58
+ flag = true unless options[a]
59
+ attr << options[a]
60
+ end
61
+ raise "系统参数不全!\n你传入的: #{options.map{|k,v| k.to_sym}}\n需要传入: [:app_key, :app_secret, :post_url]\n请配置 alidayu_sms.yml" if flag
62
+ puts "系统参数检测完毕!"
63
+ end
64
+ end
65
+
66
+ if defined? ::Rails
67
+ module AlidayuSms
68
+ module Rails
69
+ class Railtie < ::Rails::Railtie
70
+ rake_tasks do
71
+ load "tasks/alidayu_sms.rake"
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,7 @@
1
+ namespace :alidayu_sms do
2
+ task :create_default_config_file do
3
+ unless File.exist?("#{::Rails.root}/config/alidayu_sms.yml")
4
+ FileUtils.cp(File.expand_path("../../templates/alidayu_sms.yml", __FILE__), "#{::Rails.root}/config/alidayu_sms.yml")
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ defaults: &defaults
2
+ alidayu:
3
+ app_key: xxxx
4
+ app_secret: xxxx
5
+ post_url: 'http://gw.api.taobao.com/router/rest'
6
+
7
+ development:
8
+ <<: *defaults
9
+
10
+ test:
11
+ <<: *defaults
12
+
13
+ production:
14
+ <<: *defaults
Binary file
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alidayu_sms
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jack ping
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i18n
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.9'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 4.1.12
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 4.1.12
69
+ - !ruby/object:Gem::Dependency
70
+ name: rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: alidayu_sms send.
84
+ email:
85
+ - 525399584@qq.com
86
+ executables:
87
+ - alidayu_sms
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".idea/.rakeTasks"
93
+ - ".idea/alidayu_sms.iml"
94
+ - ".idea/misc.xml"
95
+ - ".idea/modules.xml"
96
+ - ".idea/vcs.xml"
97
+ - ".idea/workspace.xml"
98
+ - Gemfile
99
+ - Gemfile.lock
100
+ - README.md
101
+ - Rakefile
102
+ - alidayu_sms.gemspec
103
+ - bin/alidayu_sms
104
+ - lib/alidayu_sms.rb
105
+ - lib/alidayu_sms/alidayu.rb
106
+ - lib/alidayu_sms/version.rb
107
+ - lib/tasks/alidayu_sms.rake
108
+ - lib/templates/alidayu_sms.yml
109
+ - pkg/alidayu_sms-0.1.0.gem
110
+ homepage: https://github.com/wangping0105/alidayu_sms
111
+ licenses: []
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.4.6
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: alidayu_sms send.
133
+ test_files: []