t2_airtime 0.2.1 → 0.2.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: 380883694d9e2012b6a23f88879f44a05005efad
4
- data.tar.gz: 3ed077121a1271feb7f0966d3d519315277c072d
3
+ metadata.gz: 38e4e557218b14ad7121726d230ab461c023086c
4
+ data.tar.gz: a28342602169af97f687efe81c7a21c69b55ff5e
5
5
  SHA512:
6
- metadata.gz: ebb27cede9bea986e496a2e0dcd05a3f46fff44bf33b3e020e20f723a44c6d53c9fe7c7038d9c1974ba6ffe3936b5079897a6a42447e9f1948d080152b1ded2b
7
- data.tar.gz: a08ded72071d2d07c2dd85960051602ba70fb67f5c480b43b9e9372ffe27343778a6f3cea7249d341251071accbd2018aa3afc745c4e5daf533d1754a4afd7ac
6
+ metadata.gz: 89da1d5f2631d4b9444516ca44ea0d5a9dbd9b3055fbacf3b5d0a3a11c5a5850ae052a95489d6f0948d34020f1ce84d40425113d499b73fdbc60cd965d38b635
7
+ data.tar.gz: c847a4b2391449383ef123fb6aa367fd3b7df770ade4842244c6269d038de7478245fe05c83c28a0518293bf2afaaaf4861f4211b363d15a316e2811fdb29906
@@ -1,81 +1,96 @@
1
1
  module T2Airtime
2
2
  class AirtimeController < ActionController::API
3
3
 
4
+ def account
5
+ reply = T2Airtime::API.api.account_info
6
+ if reply.success?
7
+ render_data T2Airtime::Account.serialize reply.data,
8
+ reply.headers[:date]
9
+ else
10
+ render_error T2Airtime::Error.new reply.error_code,
11
+ reply.error_message
12
+ end
13
+ end
14
+
15
+
4
16
  def countries
5
17
  reply = T2Airtime::API.api.country_list
6
18
  if reply.success?
7
- data = T2Airtime::Country.serialize(reply.data)
8
- render json: {
9
- links: {
10
- self: request.path
11
- },
12
- data: data,
13
- status: :ok
14
- }
19
+ render_data T2Airtime::Country.serialize reply.data,
20
+ reply.headers[:date]
15
21
  else
16
- render_error(T2Airtime::Error.new(reply.error_code, reply.error_message))
22
+ render_error T2Airtime::Error.new reply.error_code,
23
+ reply.error_message
17
24
  end
18
25
  end
19
26
 
20
27
  def operators
21
- reply = T2Airtime::API.api.operator_list(params[:country_aid])
28
+ reply = T2Airtime::API.api.operator_list(params[:id])
22
29
  if reply.success?
23
- data = T2Airtime::Operator.serialize(reply.data)
24
- render json: {
25
- operators: data,
26
- status: :ok
27
- }
30
+ render_data T2Airtime::Operator.serialize reply.data,
31
+ reply.headers[:date]
28
32
  else
29
- render_error(T2Airtime::Error.new(reply.error_code, reply.error_message))
33
+ render_error T2Airtime::Error.new reply.error_code,
34
+ reply.error_message
30
35
  end
31
36
  end
32
37
 
33
38
  def products
34
- reply = T2Airtime::API.api.product_list(params[:operator_aid])
39
+ reply = T2Airtime::API.api.product_list(params[:id])
35
40
  if reply.success?
36
- data = T2Airtime::Product.serialize(reply.data)
37
- render json: {
38
- products: data,
39
- status: :ok
40
- }
41
+ render_data T2Airtime::Product.serialize reply.data,
42
+ reply.headers[:date]
41
43
  else
42
- render_error(T2Airtime::Error.new(reply.error_code, reply.error_message))
44
+ render_error T2Airtime::Error.new reply.error_code,
45
+ reply.error_message
43
46
  end
44
47
  end
45
48
 
46
49
  def transactions
47
- reply = T2Airtime::API.api.trans_list(params[:start], params[:stop], params[:msisdn], params[:destination], params[:code])
50
+ reply = T2Airtime::API.api.transaction_list parse_time_param(params[:start]),
51
+ parse_time_param(params[:stop]),
52
+ params[:msisdn],
53
+ params[:destination],
54
+ params[:code]
48
55
  if reply.success?
49
- data = T2Airtime::Transaction.serialize(reply.data)
50
- render json: {
51
- transactions: data,
52
- status: :ok
53
- }
56
+ render_data T2Airtime::Transaction.serialize reply.data
54
57
  else
55
- render_error(T2Airtime::Error.new(reply.error_code, reply.error_message))
58
+ render_error T2Airtime::Error.new reply.error_code,
59
+ reply.error_message
56
60
  end
57
61
  end
58
62
 
59
63
  def transaction
60
- reply = T2Airtime::API.api.trans_info(params[:id])
64
+ reply = T2Airtime::API.api.transaction_info(params[:id])
61
65
  if reply.success?
62
- data = T2Airtime::Transaction.serialize_one(reply.data)
63
- render json: {
64
- transaction: data,
65
- status: :ok
66
- }
66
+ render_data T2Airtime::Transaction.serialize_one reply.data,
67
+ reply.headers[:date]
67
68
  else
68
- render_error(T2Airtime::Error.new(reply.error_code, reply.error_message))
69
+ render_error T2Airtime::Error.new reply.error_code,
70
+ reply.error_message
69
71
  end
70
72
  end
71
73
 
72
74
  protected
73
75
 
76
+ def parse_time_param(timestr)
77
+ Time.zone.parse(timestr)
78
+ end
79
+
80
+
81
+ def render_data(data)
82
+ render json: {
83
+ data: data,
84
+ status: :ok
85
+ }
86
+ end
87
+
74
88
  def render_error(error)
75
89
  render json: {
76
90
  errors: [{
77
91
  code: error.code,
78
- detail: error.message
92
+ detail: error.message,
93
+ title: "Error!"
79
94
  }],
80
95
  status: :bad_request
81
96
  }
@@ -8,7 +8,7 @@ module T2Airtime
8
8
 
9
9
  # Returns the balance in your TransferTo account.
10
10
  # This method shall not be used more than 24 times per day.
11
- def check_wallet
11
+ def account_info
12
12
  run_action :check_wallet
13
13
  end
14
14
 
@@ -196,7 +196,7 @@ module T2Airtime
196
196
  # stop_date
197
197
  # ---------
198
198
  # Defines the end date of the search (included). Format must be YYYY-MM-DD.
199
- def trans_list(start=(Time.now-24.hours), stop=Time.now, msisdn=nil, destination=nil, code=nil)
199
+ def transaction_list(start=(Time.now-24.hours), stop=Time.now, msisdn=nil, destination=nil, code=nil)
200
200
  @params[:code] = code unless code
201
201
  @params[:msisdn] = msisdn unless msisdn
202
202
  @params[:stop_date] = to_yyyymmdd(stop)
@@ -209,7 +209,7 @@ module T2Airtime
209
209
  # “debit_amount_validated” are rounded to 2 digits after the comma but are
210
210
  # the same as the values returned in the fields “input_value” and
211
211
  # “validated_input_value” of the “topup” method response.
212
- def trans_info(id)
212
+ def transaction_info(id)
213
213
  @params = { transactionid: id }
214
214
  run_action :trans_info
215
215
  end
@@ -1,6 +1,11 @@
1
1
  module T2Airtime
2
2
  class Base
3
3
 
4
+ attr_reader :user,
5
+ :password,
6
+ :url,
7
+ :params
8
+
4
9
  def initialize(user, password, url)
5
10
  @user, @password, @url, @params = user, password, url, {}
6
11
  end
@@ -3,20 +3,25 @@ module T2Airtime
3
3
  class Account
4
4
 
5
5
  def self.info
6
- reply = T2Airtime::API.api.check_wallet
7
- reply.success? ? serialize(reply.data) : {}
6
+ reply = T2Airtime::API.api.account_info
7
+ reply.success? ? serialize(reply.data, reply.headers[:date]) : []
8
8
  end
9
9
 
10
- def self.serialize(data)
10
+ def self.serialize(data, ts="#{Time.zone.now}")
11
11
  {
12
- type: data[:type],
13
- name: data[:name],
14
- currency: data[:currency],
15
- balance: Float(data[:balance]),
16
- wallet: Float(data[:wallet]),
17
- balance_display: T2Airtime::Util.format_price(data[:balance], data[:currency]),
18
- wallet_display: T2Airtime::Util.format_price(data[:wallet], data[:currency]),
19
- }
12
+ type: "accounts",
13
+ id: T2Airtime::API.api.user,
14
+ attributes: {
15
+ type: data[:type],
16
+ name: data[:name],
17
+ currency: data[:currency],
18
+ balance: Float(data[:balance]),
19
+ wallet: Float(data[:wallet]),
20
+ "balance-display": T2Airtime::Util.format_price(data[:balance], data[:currency]),
21
+ "wallet-display": T2Airtime::Util.format_price(data[:wallet], data[:currency]),
22
+ "fetched-at": T2Airtime::Util.format_time(ts)
23
+ }
24
+ }.as_json
20
25
  end
21
26
 
22
27
  end
@@ -25,11 +30,11 @@ module T2Airtime
25
30
 
26
31
  def self.take(qty=5)
27
32
  reply = T2Airtime::API.api.country_list
28
- reply.success? ? serialize(reply.data, qty, reply.headers[:date]) : []
33
+ reply.success? ? serialize(reply.data, reply.headers[:date], qty) : []
29
34
  end
30
35
 
31
- def self.serialize(data, qty=nil, ts=nil)
32
- ts = ts.nil? ? Time.now : ts
36
+ def self.serialize(data, ts="#{Time.zone.now}", qty=nil)
37
+ return [] if data[:countryid].nil?
33
38
  names = data[:country].split(",")
34
39
  ids = data[:countryid].split(",")
35
40
  ids.take(qty.nil? ? ids.count : qty).each_with_index.map{|id, n| {
@@ -39,8 +44,15 @@ module T2Airtime
39
44
  "name": names[n],
40
45
  "alpha3": alpha3(names[n]),
41
46
  "fetched-at": T2Airtime::Util.format_time(ts)
47
+ },
48
+ relationships: {
49
+ operators: {
50
+ links: {
51
+ related: "/countries/#{id}/operators"
52
+ }
53
+ }
42
54
  }
43
- }}
55
+ }}.as_json
44
56
  end
45
57
 
46
58
  def self.normalize(name)
@@ -81,23 +93,50 @@ module T2Airtime
81
93
  countries = T2Airtime::Country.take(country_qty).shuffle
82
94
  unless countries.empty?
83
95
  countries.flat_map{|country| (
84
- reply = T2Airtime::API.api.operator_list(country[:aid])
85
- reply.success? ? serialize(reply.data, qty) : []
96
+ reply = T2Airtime::API.api.operator_list(country["id"])
97
+ reply.success? ? serialize(reply.data, reply.headers[:date], qty) : []
86
98
  )}
87
99
  end
88
100
  end
89
101
 
90
- def self.serialize(data, qty=nil)
102
+ def self.serialize(data, ts="#{Time.zone.now}", qty=nil)
103
+ return [] if data[:operator].nil?
91
104
  names = data[:operator].split(",")
92
105
  ids = data[:operatorid].split(",")
93
106
  ids.take(qty.nil? ? ids.count : qty).each_with_index.map{|id, n| {
94
- country: data[:country],
95
- country_aid: Integer(data[:countryid]),
96
- alpha3: T2Airtime::Country.alpha3(data[:country]),
97
- name: names[n],
98
- logo_url: T2Airtime::Util.operator_logo_url(id),
99
- aid: Integer(id)
100
- }}
107
+ type: "operators",
108
+ id: Integer(id),
109
+ attributes: {
110
+ "name": names[n],
111
+ "fetched-at": T2Airtime::Util.format_time(ts)
112
+ },
113
+ links: {
114
+ logo: T2Airtime::Util.operator_logo_url(id)
115
+ },
116
+ relationships: {
117
+ country: {
118
+ data: {
119
+ type: "countries",
120
+ id: Integer(data[:countryid])
121
+ }
122
+ },
123
+ products: {
124
+ links: {
125
+ related: "/countries/#{data[:countryid]}/operators/#{id}/products"
126
+ }
127
+ }
128
+ },
129
+ included: [
130
+ {
131
+ type: "countries",
132
+ id: Integer(data[:countryid]),
133
+ attributes: {
134
+ "name": data[:country],
135
+ "alpha3": T2Airtime::Country.alpha3(data[:country])
136
+ }
137
+ }
138
+ ]
139
+ }}.as_json
101
140
  end
102
141
 
103
142
  end
@@ -108,95 +147,174 @@ module T2Airtime
108
147
  operators = T2Airtime::Operator.take(operator_qty).shuffle
109
148
  unless operators.empty?
110
149
  operators.flat_map{|operator| (
111
- reply = T2Airtime::API.api.product_list(operator[:aid])
112
- reply.success? ? serialize(reply.data, qty) : []
150
+ reply = T2Airtime::API.api.product_list(operator["id"])
151
+ reply.success? ? serialize(reply.data, reply.headers[:date], qty) : []
113
152
  )}
114
153
  end
115
154
  end
116
155
 
117
- def self.serialize(data, qty=nil)
156
+ def self.serialize(data, ts="#{Time.zone.now}", qty=nil)
157
+ return [] if data[:product_list].nil?
118
158
  currency = data[:destination_currency]
119
159
  retail_prices = data[:retail_price_list].split(",")
120
160
  wholesale_prices = data[:wholesale_price_list].split(",")
121
161
  ids = data[:product_list].split(",")
122
162
  ids.take(qty.nil? ? ids.count : qty).each_with_index.map{|id, n| {
123
- country: data[:country],
124
- country_aid: Integer(data[:countryid]),
125
- alpha3: T2Airtime::Country.alpha3(data[:country]),
126
- operator: data[:operator],
127
- operator_aid: Integer(data[:operatorid]),
128
- operator_logo_url: T2Airtime::Util.operator_logo_url(data[:operatorid]),
129
- name: "#{id}#{currency}",
130
- currency: currency,
131
- local_price: Float(id),
132
- retail_price: Float(retail_prices[n]),
133
- wholesale_price: Float(wholesale_prices[n]),
134
- local_price_display: T2Airtime::Util.format_price(id, currency),
135
- retail_price_display: T2Airtime::Util.format_price(retail_prices[n]),
136
- wholesale_price_display: T2Airtime::Util.format_price(wholesale_prices[n]),
137
- aid: Integer(id)
138
- }}
163
+ type: "products",
164
+ id: Integer(id),
165
+ attributes: {
166
+ "name": "#{id}#{currency}",
167
+ "currency": currency,
168
+ "local-price": Float(id),
169
+ "retail-price": Float(retail_prices[n]),
170
+ "wholesale-price": Float(wholesale_prices[n]),
171
+ "local-price-display": T2Airtime::Util.format_price(id, currency),
172
+ "retail-price-display": T2Airtime::Util.format_price(retail_prices[n]),
173
+ "wholesale-price-display": T2Airtime::Util.format_price(wholesale_prices[n]),
174
+ "fetched-at": T2Airtime::Util.format_time(ts)
175
+ },
176
+ relationships: {
177
+ country: {
178
+ data: {
179
+ type: "countries",
180
+ id: Integer(data[:countryid])
181
+ }
182
+ },
183
+ operator: {
184
+ data: {
185
+ type: "operators",
186
+ id: Integer(data[:operatorid])
187
+ }
188
+ }
189
+ },
190
+ included: [
191
+ {
192
+ type: "countries",
193
+ id: Integer(data[:countryid]),
194
+ attributes: {
195
+ "name": data[:country],
196
+ "alpha3": T2Airtime::Country.alpha3(data[:country])
197
+ }
198
+ },
199
+ {
200
+ type: "operators",
201
+ id: Integer(data[:operatorid]),
202
+ attributes: {
203
+ "name": data[:operator]
204
+ },
205
+ links: {
206
+ logo: T2Airtime::Util.operator_logo_url(data[:operatorid])
207
+ }
208
+ }
209
+ ]
210
+ }}.as_json
139
211
  end
140
212
 
141
213
  end
142
214
 
143
215
  class Transaction
144
216
 
145
- def self.take(start, stop, msisdn=nil, destination=nil, code=nil, qty=5)
146
- reply = T2Airtime::API.api.trans_list(start, stop, msisdn, destination, code)
217
+ def self.take(start=(Time.now-24.hours), stop=Time.now, msisdn=nil, destination=nil, code=nil, qty=5)
218
+ reply = T2Airtime::API.api.transaction_list(start, stop, msisdn, destination, code)
147
219
  reply.success? ? serialize(reply.data, qty) : []
148
220
  end
149
221
 
150
222
  def self.serialize(data, qty=nil)
223
+ return [] if data[:transaction_list].nil?
151
224
  ids = data[:transaction_list].split(",")
152
- ids.empty? ? {} : ids.take(qty.nil? ? ids.count : qty).each.map{ |id| show(id) }
225
+ ids.take(qty.nil? ? ids.count : qty).each.map{ |id| show(id) }
153
226
  end
154
227
 
155
228
 
156
229
  def self.show(id)
157
- reply = T2Airtime::API.api.trans_info(id)
158
- reply.success? ? serialize_one(reply.data) : {}
230
+ reply = T2Airtime::API.api.transaction_info(id)
231
+ reply.success? ? serialize_one(reply.data, reply.headers[:date]) : {}
159
232
  end
160
233
 
161
- def self.serialize_one(t)
234
+ def self.serialize_one(data, ts="#{Time.zone.now}")
162
235
  {
163
- id: Integer(t[:transactionid]),
164
- msisdn: t[:msisdn],
165
- destination_msisdn: t[:destination_msisdn],
166
- transaction_authentication_key: t[:transaction_authentication_key],
167
- transaction_error_code: Integer(t[:transaction_error_code]),
168
- transaction_error_txt: t[:transaction_error_txt],
169
- country: t[:country],
170
- country_aid: Integer(t[:countryid]),
171
- alpha3: T2Airtime::Country.alpha3(t[:country]),
172
- operator: t[:operator],
173
- operator_aid: Integer(t[:operatorid]),
174
- operator_logo_url: T2Airtime::Util.operator_logo_url(t[:operatorid]),
175
- reference_operator: t[:reference_operator],
176
- product_requested: t[:product_requested],
177
- product_requested_display: T2Airtime::Util.format_price(t[:product_requested], t[:destination_currency]),
178
- actual_product_sent: t[:actual_product_sent],
179
- actual_product_sent_display: T2Airtime::Util.format_price(t[:actual_product_sent], t[:destination_currency]),
180
- wholesale_price: t[:wholesale_price],
181
- wholesale_price_display: T2Airtime::Util.format_price(t[:wholesale_price], t[:originating_currency]),
182
- retail_price: t[:retail_price],
183
- retail_price_display: T2Airtime::Util.format_price(t[:retail_price], t[:originating_currency]),
184
- sms: t[:sms],
185
- cid1: t[:cid1],
186
- cid2: t[:cid2],
187
- cid3: t[:cid3],
188
- date: t[:date],
189
- originating_currency: t[:originating_currency],
190
- destination_currency: t[:destination_currency],
191
- pin_based: t[:pin_based],
192
- local_info_amount: t[:local_info_amount],
193
- local_info_amount_display: T2Airtime::Util.format_price(t[:local_info_amount], t[:local_info_currency]),
194
- local_info_currency: t[:local_info_currency],
195
- local_info_value: t[:local_info_value],
196
- local_info_value_display: T2Airtime::Util.format_price(t[:local_info_value], t[:local_info_currency]),
197
- error_code: t[:error_code],
198
- error_txt: t[:error_txt]
199
- }
236
+ type: "transactions",
237
+ id: Integer(data[:transactionid]),
238
+ attributes: {
239
+ "msisdn": data[:msisdn],
240
+ "destination-msisdn": data[:destination_msisdn],
241
+ "transaction-authentication-key": data[:transaction_authentication_key],
242
+ "transaction-error-code": Integer(data[:transaction_error_code]),
243
+ "transaction-error-txt": data[:transaction_error_txt],
244
+ "reference-operator": data[:reference_operator],
245
+ "product-requested-display": T2Airtime::Util.format_price(data[:product_requested], data[:destination_currency]),
246
+ "actual-product-sent": data[:actual_product_sent],
247
+ "actual-product-sent-display": T2Airtime::Util.format_price(data[:actual_product_sent], data[:destination_currency]),
248
+ "sms": data[:sms],
249
+ "cid1": data[:cid1],
250
+ "cid2": data[:cid2],
251
+ "cid3": data[:cid3],
252
+ "date": data[:date],
253
+ "originating-currency": data[:originating_currency],
254
+ "destination-currency": data[:destination_currency],
255
+ "pin-based": data[:pin_based],
256
+ "local-info-amount": data[:local_info_amount],
257
+ "local-info-amount-display": T2Airtime::Util.format_price(data[:local_info_amount], data[:local_info_currency]),
258
+ "local-info-currency": data[:local_info_currency],
259
+ "error-code": data[:error_code],
260
+ "error-txt": data[:error_txt],
261
+ "fetched-at": T2Airtime::Util.format_time(ts)
262
+ },
263
+ relationships: {
264
+ country: {
265
+ data: {
266
+ type: "countries",
267
+ id: Integer(data[:countryid])
268
+ }
269
+ },
270
+ operator: {
271
+ data: {
272
+ type: "operators",
273
+ id: Integer(data[:operatorid])
274
+ }
275
+ },
276
+ product: {
277
+ data: {
278
+ type: "products",
279
+ id: Integer(data[:product_requested])
280
+ }
281
+ }
282
+ },
283
+ included: [
284
+ {
285
+ type: "countries",
286
+ id: Integer(data[:countryid]),
287
+ attributes: {
288
+ "name": data[:country],
289
+ "alpha3": T2Airtime::Country.alpha3(data[:country])
290
+ }
291
+ },
292
+ {
293
+ type: "operators",
294
+ id: Integer(data[:operatorid]),
295
+ attributes: {
296
+ "name": data[:operator]
297
+ },
298
+ links: {
299
+ logo: T2Airtime::Util.operator_logo_url(data[:operatorid])
300
+ }
301
+ },
302
+ {
303
+ type: "products",
304
+ id: Integer(data[:product_requested]),
305
+ attributes: {
306
+ "name": "#{data[:product_requested]}#{data[:destination_currency]}",
307
+ "currency": data[:destination_currency],
308
+ "wholesale-price": data[:wholesale_price],
309
+ "wholesale-price-display": T2Airtime::Util.format_price(data[:wholesale_price], data[:originating_currency]),
310
+ "retail-price": data[:retail_price],
311
+ "retail-price-display": T2Airtime::Util.format_price(data[:retail_price], data[:originating_currency]),
312
+ "local-price": data[:local_info_value],
313
+ "local-price-display": T2Airtime::Util.format_price(data[:local_info_value], data[:local_info_currency])
314
+ }
315
+ }
316
+ ]
317
+ }.as_json
200
318
  end
201
319
 
202
320
 
@@ -1,3 +1,3 @@
1
1
  module T2Airtime
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
data/release CHANGED
@@ -4,3 +4,4 @@ set -e
4
4
  git add .
5
5
  git commit -am "Bump to v${0}"
6
6
  git push origin master
7
+ gem release
data/t2_airtime.gemspec CHANGED
@@ -25,7 +25,8 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0"
27
27
 
28
- spec.add_runtime_dependency 'dotenv-rails', '~> 2.2', '>= 2.2.1'
28
+ spec.add_dependency 'rails', '~> 5.1.3'
29
+ spec.add_runtime_dependency 'dotenv-rails', '~> 2.2', '>= 2.2.1'
29
30
  spec.add_dependency "faraday", "0.9.1"
30
31
  spec.add_dependency "countries", "2.1.2"
31
32
  spec.add_dependency "money", "6.9.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: t2_airtime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - matteolc
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-04 00:00:00.000000000 Z
11
+ date: 2017-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 5.1.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 5.1.3
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: dotenv-rails
57
71
  requirement: !ruby/object:Gem::Requirement