life-api 0.1.5 → 0.2.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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -0
- data/LICENSE +2 -2
- data/README.md +12 -10
- data/Rakefile +3 -1
- data/examples/get_balance.rb +11 -12
- data/lib/life-api.rb +37 -38
- data/lib/life-api/methods.rb +74 -29
- data/lib/life-api/version.rb +3 -1
- data/life-api.gemspec +14 -11
- metadata +34 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3ab973f0fa83d1c3ec3d65e7616dbdaabb750617b29dc2fa22fca5512dfb8c87
|
4
|
+
data.tar.gz: a6a8efe3674708ad92dc25508a397ad25e0fe92b460e12a93a9a87b5d66268ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c52dbd3a68326cf970ea9ea88def6e674452a6d90654d1086b2029050d02800fcf9880dbe899906663932fb0ce50dc85a41535ac54694012898ec6f8070ffee5
|
7
|
+
data.tar.gz: 6240318d52c514efc60d73c299b80a0bb8de6e60f19c497ffa953dacd774f2f472a8096f30ef07aa031cdcd5b98db345e2214def14bf7cbd45fae2f5199ca3da
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.0
|
data/Gemfile
CHANGED
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2013 Anton Maminov
|
1
|
+
Copyright (c) 2013-2018 Anton Maminov
|
2
2
|
|
3
3
|
MIT License
|
4
4
|
|
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
19
19
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
20
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
21
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# Life::API
|
2
2
|
|
3
|
-
A Ruby library for interfacing with
|
3
|
+
A Ruby library for interfacing with lifecell's undocumented/unannounced API.
|
4
4
|
|
5
|
-
[
|
5
|
+
[lifecell](http://lifecell.com.ua) — GSM operator in Ukraine.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -36,16 +36,19 @@ require 'life-api'
|
|
36
36
|
|
37
37
|
You can authenticate with life:) in two ways: with password or with token.
|
38
38
|
|
39
|
-
Authentication with password to the life:) API is accomplished using a phone number(`msisdn`) starting with
|
39
|
+
Authentication with password to the life:) API is accomplished using a phone number(`msisdn`) starting with the country code("380"), and SuperPassword(`password`).
|
40
40
|
|
41
41
|
```ruby
|
42
|
+
msisdn = '38063xxxxxxx'
|
43
|
+
password = 'xxxxxx'
|
44
|
+
|
42
45
|
life = Life::API.new(msisdn: msisdn, password: password)
|
43
46
|
life.sign_in
|
44
47
|
token = life.token
|
45
48
|
sub_id = life.sub_id
|
46
49
|
```
|
47
50
|
|
48
|
-
> To obtain the SuperPassword send an SMS with key word
|
51
|
+
> To obtain the SuperPassword send an SMS with key word PAROL to number 123.
|
49
52
|
|
50
53
|
or
|
51
54
|
|
@@ -63,7 +66,7 @@ Below you can see some the methods for working with life:) data.
|
|
63
66
|
|
64
67
|
#### Returns advanced information on the current subscriber
|
65
68
|
```
|
66
|
-
life.
|
69
|
+
life.summary_data
|
67
70
|
```
|
68
71
|
|
69
72
|
Sample response
|
@@ -97,7 +100,7 @@ Sample response
|
|
97
100
|
#### Returns the balance of the current subscriber
|
98
101
|
|
99
102
|
```
|
100
|
-
life.
|
103
|
+
life.balances
|
101
104
|
```
|
102
105
|
|
103
106
|
Sample response
|
@@ -164,7 +167,7 @@ Sample response
|
|
164
167
|
#### Returns payments history for calendar month in format 'YYYY-mm'
|
165
168
|
|
166
169
|
```
|
167
|
-
life.
|
170
|
+
life.payments_history('2013-03')
|
168
171
|
```
|
169
172
|
|
170
173
|
Sample response
|
@@ -189,8 +192,7 @@ Sample response
|
|
189
192
|
|
190
193
|
Tested with the following Ruby versions:
|
191
194
|
|
192
|
-
* MRI
|
193
|
-
* MRI 2.0.0
|
195
|
+
* MRI 2.3.0
|
194
196
|
|
195
197
|
## Contributing
|
196
198
|
|
@@ -202,6 +204,6 @@ Tested with the following Ruby versions:
|
|
202
204
|
|
203
205
|
## License and Author
|
204
206
|
|
205
|
-
Copyright (c) 2013-
|
207
|
+
Copyright (c) 2013-2018 by Anton Maminov
|
206
208
|
|
207
209
|
This library is distributed under the MIT license. Please see the LICENSE file.
|
data/Rakefile
CHANGED
data/examples/get_balance.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'bundler'
|
4
4
|
Bundler.setup :default
|
@@ -8,36 +8,35 @@ require 'life-api'
|
|
8
8
|
|
9
9
|
puts Life::API::VERSION
|
10
10
|
|
11
|
-
msisdn = '
|
12
|
-
password = ''
|
11
|
+
msisdn = '38xxxxxxxxx'
|
12
|
+
password = 'xxxxxx'
|
13
13
|
|
14
14
|
life = Life::API.new(msisdn: msisdn, password: password, lang: 'en')
|
15
15
|
life.log = Logger.new($stderr)
|
16
16
|
life.sign_in
|
17
17
|
|
18
|
-
summary_data = life.
|
18
|
+
summary_data = life.summary_data
|
19
19
|
|
20
20
|
tariff = summary_data['subscriber']['tariff']['name']
|
21
21
|
puts "Tariff: #{tariff}"
|
22
22
|
|
23
|
-
line_suspend_date = summary_data['subscriber']['attribute'].select{ |f| f['name'] ==
|
24
|
-
line_suspend_date = Time.mktime(line_suspend_date).strftime(
|
23
|
+
line_suspend_date = summary_data['subscriber']['attribute'].select { |f| f['name'] == 'LINE_SUSPEND_DATE' }.first['content']
|
24
|
+
line_suspend_date = Time.mktime(line_suspend_date).strftime('%d.%m.%Y')
|
25
25
|
puts "Suspend date: #{line_suspend_date}"
|
26
26
|
|
27
27
|
puts
|
28
28
|
|
29
29
|
balance = summary_data['subscriber']['balance']
|
30
|
-
main = balance.select{ |f| f['code'] == 'Line_Main' }.first['amount']
|
31
|
-
bonus =
|
32
|
-
debt =
|
30
|
+
main = balance.select { |f| f['code'] == 'Line_Main' }.first['amount']
|
31
|
+
bonus = balance.select { |f| f['code'] == 'Line_Bonus' }.first['amount']
|
32
|
+
debt = balance.select { |f| f['code'] == 'Line_Debt' }.first['amount']
|
33
33
|
puts "Main: #{main} ₴"
|
34
34
|
puts "Bonus: #{bonus} ₴"
|
35
35
|
puts "Dept: #{debt} ₴"
|
36
36
|
|
37
|
-
|
38
37
|
puts "\nBalances:"
|
39
|
-
balances = life.
|
40
|
-
balances['balance'].keep_if{ |i| i['amount'].to_i != 0 }.each do |i|
|
38
|
+
balances = life.balances
|
39
|
+
balances['balance'].keep_if { |i| i['amount'].to_i != 0 }.each do |i|
|
41
40
|
puts " * #{i['name']}: #{i['amount']} #{i['measure']}"
|
42
41
|
end
|
43
42
|
|
data/lib/life-api.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'uri'
|
4
4
|
require 'cgi'
|
@@ -8,11 +8,11 @@ require 'base64'
|
|
8
8
|
|
9
9
|
require 'xmlsimple'
|
10
10
|
|
11
|
-
require
|
12
|
-
require
|
11
|
+
require 'life-api/methods'
|
12
|
+
require 'life-api/version'
|
13
13
|
|
14
|
-
# The Life::API library is used for interactions with a api.life.com.ua
|
15
|
-
#
|
14
|
+
# The Life::API library is used for interactions with a https://api.life.com.ua.
|
15
|
+
# lifecell - GSM operator in Ukraine
|
16
16
|
#
|
17
17
|
# == Example
|
18
18
|
#
|
@@ -26,7 +26,6 @@ require "life-api/version"
|
|
26
26
|
# life.sign_out
|
27
27
|
#
|
28
28
|
module Life
|
29
|
-
|
30
29
|
class MethodError < ArgumentError; end
|
31
30
|
|
32
31
|
RESPONSE_CODES = {
|
@@ -52,9 +51,10 @@ module Life
|
|
52
51
|
'-19' => 'LOGIC_IS_BLOCKING',
|
53
52
|
'-20' => 'TOO_MANY_REQUESTS',
|
54
53
|
'-40' => 'PAYMENTS_OR_EXPENSES_MISSED',
|
55
|
-
'-21474833648' => 'INTERNAL_APPLICATION_ERROR'
|
56
|
-
}
|
54
|
+
'-21474833648' => 'INTERNAL_APPLICATION_ERROR'
|
55
|
+
}.freeze
|
57
56
|
|
57
|
+
# :nodoc:
|
58
58
|
class API
|
59
59
|
attr_accessor :token, :sub_id
|
60
60
|
|
@@ -71,7 +71,7 @@ module Life
|
|
71
71
|
# == Required parameters
|
72
72
|
#
|
73
73
|
# * +:msisdn+ - telephone number in format '38063*******'
|
74
|
-
# * +:password+ -
|
74
|
+
# * +:password+ - super password
|
75
75
|
# * +:lang+ - 'uk', 'ru' or 'en'
|
76
76
|
#
|
77
77
|
def initialize(params = {})
|
@@ -96,40 +96,41 @@ module Life
|
|
96
96
|
|
97
97
|
# Sets the +logger+ used by this instance of Life::API
|
98
98
|
#
|
99
|
-
|
100
|
-
@log = logger
|
101
|
-
end
|
99
|
+
attr_writer :log
|
102
100
|
|
103
101
|
def request(method, params = {})
|
104
102
|
params = { accessKeyCode: @access_key_code }.merge(params)
|
105
103
|
url = create_signed_url(method, params)
|
106
104
|
|
107
|
-
log
|
105
|
+
log&.debug("[#{method}] request: #{url}")
|
108
106
|
|
109
|
-
|
110
|
-
request = Net::HTTP::Get.new(uri.request_uri)
|
107
|
+
response = response(url)
|
111
108
|
|
112
|
-
|
109
|
+
log&.debug("[#{method}] response: #{response.body}")
|
113
110
|
|
114
|
-
|
111
|
+
xml = parse_xml(response.body)
|
112
|
+
return xml if xml['responseCode'] == '0'
|
113
|
+
raise_error!(xml)
|
114
|
+
end
|
115
115
|
|
116
|
-
|
116
|
+
private
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
return xml
|
121
|
-
else
|
122
|
-
error_message = Life::RESPONSE_CODES[xml['responseCode']]
|
123
|
-
error_message ||= "Unknown error code #{xml['responseCode']}"
|
124
|
-
raise MethodError, error_message
|
125
|
-
end
|
126
|
-
else
|
127
|
-
raise MethodError, "Unknown error: #{xml}"
|
128
|
-
end
|
118
|
+
def raise_error!(xml)
|
119
|
+
raise MethodError, "Unknown error: #{xml}" unless xml['responseCode']
|
129
120
|
|
121
|
+
error_message = Life::RESPONSE_CODES[xml['responseCode']]
|
122
|
+
error_message ||= "Unknown error code #{xml['responseCode']}"
|
123
|
+
raise MethodError, error_message
|
130
124
|
end
|
131
125
|
|
132
|
-
|
126
|
+
def response(url)
|
127
|
+
uri = URI(url)
|
128
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
129
|
+
|
130
|
+
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
131
|
+
http.request(request)
|
132
|
+
end
|
133
|
+
end
|
133
134
|
|
134
135
|
def create_signed_url(method, params)
|
135
136
|
query = create_param(params)
|
@@ -142,11 +143,11 @@ module Life
|
|
142
143
|
|
143
144
|
str += urlencode(hash)
|
144
145
|
|
145
|
-
|
146
|
+
@api_url + str
|
146
147
|
end
|
147
148
|
|
148
|
-
# Returns a string representation of the receiver suitable for use
|
149
|
-
#
|
149
|
+
# Returns a string representation of the receiver suitable for use
|
150
|
+
# as a URL query string
|
150
151
|
def create_param(params)
|
151
152
|
params.map do |key, value|
|
152
153
|
"#{urlencode(key)}=#{urlencode(value)}"
|
@@ -154,18 +155,16 @@ module Life
|
|
154
155
|
end
|
155
156
|
|
156
157
|
# URL-encode a string
|
157
|
-
#
|
158
158
|
def urlencode(str)
|
159
|
-
|
159
|
+
CGI.escape(str.to_s)
|
160
160
|
end
|
161
161
|
|
162
162
|
def parse_xml(str)
|
163
|
-
|
163
|
+
XmlSimple.xml_in(str, 'ForceArray' => false)
|
164
164
|
end
|
165
165
|
|
166
166
|
def base_api_parameters
|
167
|
-
|
167
|
+
{ msisdn: @msisdn, languageId: @lang, osType: @os_type, token: @token }
|
168
168
|
end
|
169
|
-
|
170
169
|
end
|
171
170
|
end
|
data/lib/life-api/methods.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# The list of available API method names:
|
4
4
|
# (16/22)
|
@@ -26,89 +26,134 @@
|
|
26
26
|
# [+] signOut
|
27
27
|
# [-] transferBalance
|
28
28
|
|
29
|
+
# :nodoc:
|
29
30
|
module Life
|
31
|
+
# :nodoc:
|
30
32
|
class API
|
31
33
|
def sign_in
|
32
|
-
xml = request('signIn',
|
34
|
+
xml = request('signIn', msisdn: @msisdn, superPassword: @password)
|
33
35
|
@token = xml['token']
|
34
36
|
@sub_id = xml['subId']
|
35
|
-
|
37
|
+
xml
|
36
38
|
end
|
37
39
|
|
38
40
|
def sign_out
|
39
|
-
request(
|
41
|
+
request(
|
42
|
+
'signOut',
|
43
|
+
msisdn: @msisdn,
|
44
|
+
subId: @sub_id
|
45
|
+
)
|
40
46
|
end
|
41
47
|
|
42
48
|
def change_super_password(old_password, new_password)
|
43
|
-
request(
|
49
|
+
request(
|
50
|
+
'changeSuperPassword',
|
51
|
+
base_api_parameters.merge(
|
52
|
+
oldPassword: old_password,
|
53
|
+
newPassword: new_password
|
54
|
+
)
|
55
|
+
)
|
44
56
|
end
|
45
57
|
|
46
|
-
def
|
47
|
-
request(
|
58
|
+
def token
|
59
|
+
request(
|
60
|
+
'getToken',
|
61
|
+
msisdn: @msisdn, subId: @sub_id
|
62
|
+
)
|
48
63
|
end
|
49
64
|
|
50
65
|
# +last_date_update+ is DateTime object
|
51
66
|
#
|
52
|
-
def
|
53
|
-
request(
|
67
|
+
def ui_properties(language_id, last_date_update)
|
68
|
+
request(
|
69
|
+
'getUIProperties',
|
54
70
|
accessKeyCode: @access_key_code,
|
55
71
|
languageId: language_id,
|
56
72
|
osType: @os_type,
|
57
|
-
lastDateUpdate: last_date_update
|
58
|
-
|
73
|
+
lastDateUpdate: last_date_update
|
74
|
+
)
|
59
75
|
end
|
60
76
|
|
61
|
-
def
|
62
|
-
request(
|
77
|
+
def summary_data
|
78
|
+
request(
|
79
|
+
'getSummaryData',
|
80
|
+
base_api_parameters
|
81
|
+
)
|
63
82
|
end
|
64
83
|
|
65
|
-
def
|
84
|
+
def services
|
66
85
|
request('getServices', base_api_parameters)
|
67
86
|
end
|
68
87
|
|
69
|
-
def
|
70
|
-
request(
|
88
|
+
def available_tariffs
|
89
|
+
request(
|
90
|
+
'getAvailableTariffs',
|
91
|
+
base_api_parameters
|
92
|
+
)
|
71
93
|
end
|
72
94
|
|
73
|
-
def
|
74
|
-
request(
|
95
|
+
def balances
|
96
|
+
request(
|
97
|
+
'getBalances',
|
98
|
+
base_api_parameters
|
99
|
+
)
|
75
100
|
end
|
76
101
|
|
77
|
-
def
|
78
|
-
request(
|
102
|
+
def languages
|
103
|
+
request(
|
104
|
+
'getLanguages',
|
105
|
+
base_api_parameters
|
106
|
+
)
|
79
107
|
end
|
80
108
|
|
81
109
|
def change_language(new_language_id)
|
82
|
-
request(
|
110
|
+
request(
|
111
|
+
'changeLanguage',
|
112
|
+
base_api_parameters.merge(newLanguageId: new_language_id)
|
113
|
+
)
|
83
114
|
end
|
84
115
|
|
85
116
|
def call_me_back(msisdn_b)
|
86
|
-
request(
|
117
|
+
request(
|
118
|
+
'callMeBack',
|
119
|
+
base_api_parameters.merge(msisdnB: msisdn_b)
|
120
|
+
)
|
87
121
|
end
|
88
122
|
|
89
123
|
def request_balance_transfer(msisdn_b)
|
90
|
-
request(
|
124
|
+
request(
|
125
|
+
'requestBalanceTransfer',
|
126
|
+
base_api_parameters.merge(msisdnB: msisdn_b)
|
127
|
+
)
|
91
128
|
end
|
92
129
|
|
93
130
|
# Payments history for calendar month +month_period+
|
94
131
|
#
|
95
132
|
# +month_period+ - A string like 'yyyy-MM' that represent month of year
|
96
133
|
#
|
97
|
-
def
|
98
|
-
request(
|
134
|
+
def payments_history(month_period)
|
135
|
+
request(
|
136
|
+
'getPaymentsHistory',
|
137
|
+
base_api_parameters.merge(monthPeriod: month_period)
|
138
|
+
)
|
99
139
|
end
|
100
140
|
|
101
141
|
# Summary expenses report for calendar month +month_period+
|
102
142
|
#
|
103
143
|
# +month_period+ - A string like 'yyyy-MM' that represent month of year
|
104
144
|
#
|
105
|
-
def
|
106
|
-
request(
|
145
|
+
def expenses_summary(month_period)
|
146
|
+
request(
|
147
|
+
'getExpensesSummary',
|
148
|
+
base_api_parameters.merge(monthPeriod: month_period)
|
149
|
+
)
|
107
150
|
end
|
108
151
|
|
109
152
|
def refill_balance_by_scratch_card(secret_code)
|
110
|
-
request(
|
153
|
+
request(
|
154
|
+
'refillBalanceByScratchCard',
|
155
|
+
base_api_parameters.merge(secretCode: secret_code)
|
156
|
+
)
|
111
157
|
end
|
112
|
-
|
113
158
|
end
|
114
159
|
end
|
data/lib/life-api/version.rb
CHANGED
data/life-api.gemspec
CHANGED
@@ -1,22 +1,25 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require 'life-api/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
8
|
+
gem.name = 'life-api'
|
8
9
|
gem.version = Life::API::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
11
|
-
gem.description =
|
12
|
-
gem.summary =
|
13
|
-
gem.homepage =
|
14
|
-
gem.license =
|
10
|
+
gem.authors = ['Anton Maminov']
|
11
|
+
gem.email = ['anton.maminov@gmail.com']
|
12
|
+
gem.description = 'A Ruby interface to the life:) API'
|
13
|
+
gem.summary = 'The Life::API library is used for interactions with a api.life.com.ua website'
|
14
|
+
gem.homepage = 'https://github.com/mamantoha/life-api'
|
15
|
+
gem.license = 'MIT'
|
15
16
|
|
16
|
-
gem.files = `git ls-files`.split(
|
17
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
18
|
+
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
18
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
-
gem.require_paths = [
|
20
|
+
gem.require_paths = ['lib']
|
20
21
|
|
21
22
|
gem.add_runtime_dependency('xml-simple', '~> 1.1.2')
|
23
|
+
gem.add_development_dependency('pry')
|
24
|
+
gem.add_development_dependency('rubocop')
|
22
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: life-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Maminov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xml-simple
|
@@ -24,13 +24,43 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.1.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: A Ruby interface to the life:) API
|
28
56
|
email:
|
29
|
-
- anton.
|
57
|
+
- anton.maminov@gmail.com
|
30
58
|
executables: []
|
31
59
|
extensions: []
|
32
60
|
extra_rdoc_files: []
|
33
61
|
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".ruby-version"
|
34
64
|
- Gemfile
|
35
65
|
- LICENSE
|
36
66
|
- README.md
|
@@ -60,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
90
|
version: '0'
|
61
91
|
requirements: []
|
62
92
|
rubyforge_project:
|
63
|
-
rubygems_version: 2.
|
93
|
+
rubygems_version: 2.7.3
|
64
94
|
signing_key:
|
65
95
|
specification_version: 4
|
66
96
|
summary: The Life::API library is used for interactions with a api.life.com.ua website
|