uni_sender 0.0.5 → 0.1.0
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.
- data/.rspec +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +2 -0
- data/README.rdoc +6 -12
- data/Rakefile +6 -0
- data/lib/uni_sender.rb +27 -43
- data/lib/uni_sender/version.rb +1 -1
- data/spec/functionality/managing_list_spec.rb +5 -1
- data/uni_sender.gemspec +2 -3
- metadata +84 -67
- data/lib/uni_sender/camelize.rb +0 -11
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= UniSender
|
2
2
|
|
3
|
+
{<img src="https://travis-ci.org/jalkoby/uni_sender_gem.png" />}[https://travis-ci.org/jalkoby/uni_sender_gem]
|
4
|
+
|
3
5
|
uni_sender gem provides full dev kit to access to api of unisender.com.ua. It uses method_missing method to provide flexible functionality, so all methods will return hash that represents responce of server.
|
4
6
|
|
5
7
|
== Installation
|
@@ -20,21 +22,13 @@ client = UniSender::Client.new('your secret key')
|
|
20
22
|
|
21
23
|
Gem provides non-sensitive style, so action getLits will equal to get_lists or Get_Lists
|
22
24
|
|
23
|
-
|
24
|
-
|
25
|
-
{'result'=>{'field_names'=>[...], 'data'=>[[...], [...], ... ]}
|
26
|
-
|
27
|
-
Before sent action to server gem process all parameters. If it will be String gem decode it to url standarts - no latin symbols will changed to equal codes.For example:
|
28
|
-
|
29
|
-
'Прекрасный день' will be "%D0%9F%D1%80%D0%B5%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%B5%D0%BD%D1%8C"
|
30
|
-
|
31
|
-
If parameter are array, uni_sender will join contents by ","(comma), also process all item like string
|
25
|
+
By default gem use english version of api. But you can change to another.
|
32
26
|
|
33
|
-
|
27
|
+
UniSender::Client.new('api key', 'ru') #use russian language
|
34
28
|
|
35
|
-
|
29
|
+
If api action requires some params you can pass them via hash
|
36
30
|
|
37
|
-
:
|
31
|
+
UniSender::Client.new('api key').import_contacts(:field_names => [ "email", "email_list_ids" ], :data => {0 => ["test@example.com", "123"] })
|
38
32
|
|
39
33
|
== Dependencies
|
40
34
|
|
data/Rakefile
CHANGED
data/lib/uni_sender.rb
CHANGED
@@ -1,21 +1,20 @@
|
|
1
|
-
require "uni_sender/version"
|
2
|
-
require 'uni_sender/camelize'
|
3
|
-
require 'net/http'
|
4
1
|
require 'json'
|
2
|
+
require 'rest-client'
|
5
3
|
|
6
4
|
module UniSender
|
5
|
+
URL = 'http://api.unisender.com'
|
7
6
|
|
8
7
|
class Client
|
8
|
+
attr_accessor :api_key, :locale
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
def initialize(api_key, params={})
|
10
|
+
def initialize(api_key, locale = nil)
|
13
11
|
self.api_key = api_key
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
|
13
|
+
if locale.is_a?(Hash)
|
14
|
+
puts "Deprecated: Initializer changed. Use UniSender::Client.new(api_key, [locale])"
|
15
|
+
locale = locale[:locale]
|
18
16
|
end
|
17
|
+
self.locale = locale if locale
|
19
18
|
end
|
20
19
|
|
21
20
|
def locale
|
@@ -24,42 +23,27 @@ module UniSender
|
|
24
23
|
|
25
24
|
private
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
URI.encode(couple.last)
|
32
|
-
when Array
|
33
|
-
couple.last.map{|item| URI.encode(item.to_s)}.join(',')
|
34
|
-
when Hash
|
35
|
-
couple.last.each do |key, value|
|
36
|
-
iparams["#{couple.first}[#{key}]"] = URI.encode(value.to_s)
|
37
|
-
end
|
38
|
-
nil
|
39
|
-
else
|
40
|
-
couple.last
|
41
|
-
end
|
42
|
-
iparams
|
43
|
-
end
|
44
|
-
end
|
26
|
+
def method_missing(method_name, *args, &block)
|
27
|
+
params = (args.first.is_a?(Hash) ? args.first : {} )
|
28
|
+
default_request(prepare_action_name(method_name), params)
|
29
|
+
end
|
45
30
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
31
|
+
def prepare_action_name(source)
|
32
|
+
parts = source.to_s.scan(/[[:alnum:]]+/)
|
33
|
+
camelize = lambda { |word, first| (first ? word[0].chr.downcase : word[0].chr.upcase) + word[1..-1] }
|
50
34
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
url = URI("http://api.unisender.com/#{locale}/api/#{action}")
|
56
|
-
JSON.parse(Net::HTTP.post_form(url, query).body)
|
57
|
-
end
|
58
|
-
|
59
|
-
def make_query(params)
|
60
|
-
params.delete_if{|k,v| v.to_s.empty?}
|
61
|
-
end
|
35
|
+
action_name = parts.each_with_index.map { |part, i| camelize.call(part, i.zero?) }.join('')
|
36
|
+
raise NoAction if action_name.empty?
|
37
|
+
action_name
|
38
|
+
end
|
62
39
|
|
40
|
+
def default_request(action, params)
|
41
|
+
params.merge!(:api_key => api_key, :format => :json)
|
42
|
+
url = "#{ URL }/#{ locale }/api/#{ action }"
|
43
|
+
JSON.parse RestClient.post(url, params)
|
44
|
+
end
|
63
45
|
end
|
64
46
|
|
47
|
+
class NoAction < ::StandardError
|
48
|
+
end
|
65
49
|
end
|
data/lib/uni_sender/version.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
require "spec_helper"
|
3
3
|
|
4
4
|
describe UniSender::Client do
|
5
|
-
|
6
5
|
it "should get collection of contact's list" do
|
7
6
|
answer = test_client.getLists
|
8
7
|
answer['result'].should have(3).items
|
@@ -40,4 +39,9 @@ describe UniSender::Client do
|
|
40
39
|
#answer['result']['activated'].should == 2 falls because of rating or test mode
|
41
40
|
end
|
42
41
|
|
42
|
+
it 'should import contacts' do
|
43
|
+
answer = test_client.import_contacts(:field_names => [ "email", "email_list_ids" ], :data => {0 => ["test@example.com", "123"] })
|
44
|
+
answer.should include('result')
|
45
|
+
answer['log'].should be_nil
|
46
|
+
end
|
43
47
|
end
|
data/uni_sender.gemspec
CHANGED
@@ -8,10 +8,9 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.summary = %q{See description}
|
9
9
|
gem.homepage = ""
|
10
10
|
|
11
|
+
gem.add_dependency 'rest-client', '~> 1.6.7'
|
12
|
+
gem.add_dependency 'json', '~> 1.7.5'
|
11
13
|
gem.add_development_dependency 'rspec'
|
12
|
-
gem.add_development_dependency 'guard-rspec'
|
13
|
-
gem.add_development_dependency 'ruby_gntp'
|
14
|
-
gem.add_dependency 'json'
|
15
14
|
|
16
15
|
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
16
|
gem.files = `git ls-files`.split("\n")
|
metadata
CHANGED
@@ -1,74 +1,86 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: uni_sender
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Sergey Pchelincev
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :development
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: *70093363337040
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: guard-rspec
|
27
|
-
requirement: &70093363340120 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
|
-
requirements:
|
30
|
-
- - ! '>='
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '0'
|
33
|
-
type: :development
|
17
|
+
|
18
|
+
date: 2012-12-16 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rest-client
|
34
22
|
prerelease: false
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: ruby_gntp
|
38
|
-
requirement: &70093363285100 !ruby/object:Gem::Requirement
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
39
24
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
-
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 1
|
29
|
+
segments:
|
30
|
+
- 1
|
31
|
+
- 6
|
32
|
+
- 7
|
33
|
+
version: 1.6.7
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
48
37
|
name: json
|
49
|
-
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
50
40
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 1
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 7
|
48
|
+
- 5
|
49
|
+
version: 1.7.5
|
55
50
|
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rspec
|
56
54
|
prerelease: false
|
57
|
-
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
58
66
|
description: Gem that provide access to unisender.com.ua api
|
59
|
-
email:
|
67
|
+
email:
|
60
68
|
- jalkoby91@gmail.com
|
61
69
|
executables: []
|
70
|
+
|
62
71
|
extensions: []
|
72
|
+
|
63
73
|
extra_rdoc_files: []
|
64
|
-
|
74
|
+
|
75
|
+
files:
|
65
76
|
- .gitignore
|
77
|
+
- .rspec
|
78
|
+
- .travis.yml
|
66
79
|
- Gemfile
|
67
80
|
- Guardfile
|
68
81
|
- README.rdoc
|
69
82
|
- Rakefile
|
70
83
|
- lib/uni_sender.rb
|
71
|
-
- lib/uni_sender/camelize.rb
|
72
84
|
- lib/uni_sender/version.rb
|
73
85
|
- spec/data_macros.rb
|
74
86
|
- spec/functionality/common_spec.rb
|
@@ -77,34 +89,39 @@ files:
|
|
77
89
|
- spec/spec.opt
|
78
90
|
- spec/spec_helper.rb
|
79
91
|
- uni_sender.gemspec
|
80
|
-
homepage:
|
92
|
+
homepage: ""
|
81
93
|
licenses: []
|
94
|
+
|
82
95
|
post_install_message:
|
83
96
|
rdoc_options: []
|
84
|
-
|
97
|
+
|
98
|
+
require_paths:
|
85
99
|
- lib
|
86
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
101
|
none: false
|
88
|
-
requirements:
|
89
|
-
- -
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
|
92
|
-
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
hash: 3
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
version: "0"
|
109
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
110
|
none: false
|
94
|
-
requirements:
|
95
|
-
- -
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
hash: 3
|
115
|
+
segments:
|
116
|
+
- 0
|
117
|
+
version: "0"
|
98
118
|
requirements: []
|
119
|
+
|
99
120
|
rubyforge_project:
|
100
|
-
rubygems_version: 1.8.
|
121
|
+
rubygems_version: 1.8.24
|
101
122
|
signing_key:
|
102
123
|
specification_version: 3
|
103
124
|
summary: See description
|
104
|
-
test_files:
|
105
|
-
|
106
|
-
|
107
|
-
- spec/functionality/managing_email_spec.rb
|
108
|
-
- spec/functionality/managing_list_spec.rb
|
109
|
-
- spec/spec.opt
|
110
|
-
- spec/spec_helper.rb
|
125
|
+
test_files: []
|
126
|
+
|
127
|
+
has_rdoc:
|
data/lib/uni_sender/camelize.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
String.class_eval do
|
2
|
-
|
3
|
-
# get from active support library
|
4
|
-
def camelize(first_letter_in_uppercase = true)
|
5
|
-
if first_letter_in_uppercase
|
6
|
-
self.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
|
7
|
-
else
|
8
|
-
self[0].chr.downcase + self.camelize[1..-1]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|