fabricio 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b9d171d28513a2fa291dcf4e6f50e65d8def451
4
- data.tar.gz: 87abe59f0b503aaca15f2eda21742d1be692504c
3
+ metadata.gz: 4b563c6a1abc94ee88a579aefa1b1cb3b8c0bada
4
+ data.tar.gz: 043e03e7cee36b10518f330ef120f14c9946aed7
5
5
  SHA512:
6
- metadata.gz: d506bdc4edd2cb8fabd9de86d4f6f2f47a763cbf1dadd8064c6699bc1a6dfd817098d746c35a7a2adbe43a9ca8def4df555cb9d9aad2522e2b4844ce69cc0ff0
7
- data.tar.gz: 7b4788cfb94c26ee7aea2031f80ff71ccfb083137ba4cb0331c08438df70f3366fcfa87548c68a97f5a4a1b5533d5f6d4a2bafd8f973bcd4421eb79b374f39cd
6
+ metadata.gz: 06da627bd804c6e2c976646e1485fde6c045379892c9378a7c61d6ca6c2cd47191d04e3213675484e5d54551feded46a557f5f2ee7ad2bcc62e6b5d2f2bdf427
7
+ data.tar.gz: a23c5b4a6af0dba6b52bb9f5813797ea8ef401af9ff341331902395507370ea8893fd712c848750c58e5b4514f8dd7a28594bf664e6f73dd18b3fc6e9175e16d
@@ -0,0 +1,50 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ # Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
@@ -0,0 +1,61 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ fabricio (1.2.0)
5
+ faraday
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ addressable (2.5.1)
11
+ public_suffix (~> 2.0, >= 2.0.2)
12
+ codeclimate-test-reporter (1.0.8)
13
+ simplecov (<= 0.13)
14
+ crack (0.4.3)
15
+ safe_yaml (~> 1.0.0)
16
+ diff-lcs (1.3)
17
+ docile (1.1.5)
18
+ faraday (0.12.1)
19
+ multipart-post (>= 1.2, < 3)
20
+ hashdiff (0.3.4)
21
+ json (2.1.0)
22
+ multipart-post (2.0.0)
23
+ public_suffix (2.0.5)
24
+ rake (10.5.0)
25
+ rspec (3.6.0)
26
+ rspec-core (~> 3.6.0)
27
+ rspec-expectations (~> 3.6.0)
28
+ rspec-mocks (~> 3.6.0)
29
+ rspec-core (3.6.0)
30
+ rspec-support (~> 3.6.0)
31
+ rspec-expectations (3.6.0)
32
+ diff-lcs (>= 1.2.0, < 2.0)
33
+ rspec-support (~> 3.6.0)
34
+ rspec-mocks (3.6.0)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.6.0)
37
+ rspec-support (3.6.0)
38
+ safe_yaml (1.0.4)
39
+ simplecov (0.13.0)
40
+ docile (~> 1.1.0)
41
+ json (>= 1.8, < 3)
42
+ simplecov-html (~> 0.10.0)
43
+ simplecov-html (0.10.1)
44
+ webmock (3.0.1)
45
+ addressable (>= 2.3.6)
46
+ crack (>= 0.3.2)
47
+ hashdiff
48
+
49
+ PLATFORMS
50
+ ruby
51
+
52
+ DEPENDENCIES
53
+ codeclimate-test-reporter (~> 1.0.0)
54
+ fabricio!
55
+ rake (~> 10.0)
56
+ rspec (~> 3.0)
57
+ simplecov
58
+ webmock
59
+
60
+ BUNDLED WITH
61
+ 1.12.5
data/README.md CHANGED
@@ -13,17 +13,17 @@ There is a possibility that in some point of time it may break. Feel free to [po
13
13
 
14
14
  ## The Story Behind
15
15
 
16
- [Fabric.io](http://fabric.io) is a great tool made for mobile application developers. It provides data about standard and out-of-memory crashes, active users, audience growth and a lot more. Unfortunately the only official way to work with this data is using Fabric.io website. That means - no automation and no integrations with other services.
16
+ [Fabric.io](http://fabric.io) is a great tool made for mobile application developers. It provides data about standard and out-of-memory crashes, active users, audience growth and a lot more. Unfortunately the only official way to work with this data is using Fabric.io website. That means - no automation and no integrations with other services.
17
17
 
18
18
  We decided to fix this issue.
19
19
 
20
- | Key Features
21
- ---------|---------------
22
- 🍫 | Hides the complexity of different Fabric.io APIs behind a simple wrapper.
23
- 📚 | Provides data about organization, applications and builds.
24
- 💥 | Shows crash- and out-of-memory- free metrics.
25
- | Automatically refreshes session in case of its expiration.
26
- 🛠 | Provides a simple way of adding your adapter for storing session data in a database of your choice.
20
+ | | Key Features|
21
+ |---------|---------------|
22
+ |🍫 | Hides the complexity of different Fabric.io APIs behind a simple wrapper.|
23
+ |📚 | Provides data about organization, applications and builds.|
24
+ |💥 | Shows crash- and out-of-memory- free metrics.|
25
+ |⏰ | Automatically refreshes session in case of its expiration.|
26
+ |🛠 | Provides a simple way of adding your adapter for storing session data in a database of your choice.|
27
27
 
28
28
  ## Installation
29
29
 
@@ -40,20 +40,20 @@ And then execute:
40
40
  Or install it yourself as:
41
41
 
42
42
  $ gem install fabricio
43
-
43
+
44
44
  ## Quick Start
45
45
 
46
46
  1. Create a `Fabricio::Client` object and configure it on initialization.
47
47
 
48
48
  ```ruby
49
49
  require 'Fabricio'
50
-
50
+
51
51
  client = Fabricio::Client.new do |config|
52
52
  config.username = 'your_email'
53
53
  config.password = 'your_password'
54
54
  end
55
55
  ```
56
-
56
+
57
57
  2. Use this client to query any data you want.
58
58
 
59
59
  ```ruby
@@ -62,15 +62,15 @@ Or install it yourself as:
62
62
  client.app.crashfree('app_id', '1478736000', '1481328000' 'all') # Returns application crashfree for a given period of time
63
63
  client.organization.get # Returns information about your organization
64
64
  ```
65
-
65
+
66
66
  3. If you want to check the exact server output for a model, you can call `json` method on it:
67
67
 
68
68
  `client.app.get('app_id').json`
69
-
69
+
70
70
  You can call a method similar to any key in this hash:
71
-
71
+
72
72
  `client.app.get('app_id').importance_level`
73
-
73
+
74
74
  ## Commands
75
75
 
76
76
  ### Organization
@@ -119,6 +119,18 @@ Obtains application crashfree.
119
119
 
120
120
  Obtain top issues.
121
121
 
122
+ #### `client.app.single_issue('app_id', 'issue_external_id', start_timestamp, end_timestamp)`
123
+
124
+ Obtain single issue.
125
+
126
+ #### `client.app.issue_session('app_id', 'issue_external_id', 'session_id')`
127
+
128
+ Obtain issue session.
129
+
130
+ #### `client.app.add_comment('app_id', 'issue_external_id', 'message')`
131
+
132
+ Add comment.
133
+
122
134
  #### `client.app.oomfree('app_id', 'start_timestamp', 'end_timestamp', 'builds')`
123
135
 
124
136
  Obtains application out-of-memory free for a number of builds.
@@ -153,4 +165,3 @@ Thanks for help in dealing with API to Vadim Smal, Irina Dyagileva and Andrey Sm
153
165
  ## License
154
166
 
155
167
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
156
-
@@ -0,0 +1,39 @@
1
+ require 'fabricio/models/abstract_model'
2
+
3
+ module Fabricio
4
+ module Model
5
+ # This model represents an application build
6
+ class Issue < AbstractModel
7
+ attr_reader :id,
8
+ :displayId,
9
+ :externalId,
10
+ :title,
11
+ :subtitle,
12
+ :createdAt,
13
+ :type,
14
+ :state,
15
+ :latestSessionId,
16
+ :occurrenceCount,
17
+ :impactedDevices
18
+
19
+ # Returns a Build model object
20
+ #
21
+ # @param attributes [Hash]
22
+ # @return [Fabricio::Model::Build]
23
+ def initialize(attributes)
24
+ @id = attributes['id']
25
+ @displayId = attributes['displayId']
26
+ @externalId = attributes['externalId']
27
+ @title = attributes['title']
28
+ @subtitle = attributes['subtitle']
29
+ @createdAt = attributes['createdAt']
30
+ @type = attributes['type']
31
+ @state = attributes['state']
32
+ @latestSessionId = attributes['latestSessionId']
33
+ @occurrenceCount = attributes['occurrenceCount']
34
+ @impactedDevices = attributes['impactedDevices']
35
+ @json = attributes
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ require 'fabricio/models/abstract_model'
2
+
3
+ module Fabricio
4
+ module Model
5
+ # This model represents an application build
6
+ class IssueSession < AbstractModel
7
+ attr_reader :id,
8
+ :created_at,
9
+ :header_link
10
+ :next_session_id
11
+ :prev_session_id
12
+
13
+ # Returns a Build model object
14
+ #
15
+ # @param attributes [Hash]
16
+ # @return [Fabricio::Model::Build]
17
+ def initialize(attributes)
18
+ @id = attributes['session_id']
19
+ @created_at = attributes['created_at']
20
+ @header_link = attributes['header_link']
21
+ @next_session_id = attributes['next_session_id']
22
+ @prev_session_id = attributes['prev_session_id']
23
+ @json = attributes
24
+ end
25
+ end
26
+ end
27
+ end
@@ -10,8 +10,10 @@ module Fabricio
10
10
  FABRIC_API_URL = 'https://fabric.io'
11
11
  FABRIC_GRAPHQL_API_URL = 'https://api-dash.fabric.io/graphql'
12
12
  FABRIC_API_PATH = '/api/v2'
13
+ FABRIC_API_3_PATH = '/api/v3'
13
14
  FABRIC_APPS_ENDPOINT = '/apps'
14
15
  FABRIC_ORGANIZATIONS_ENDPOINT = '/organizations'
16
+ FABRIC_PROJECTS_ENDPOINT = '/projects'
15
17
 
16
18
  # Returns a request model for obtaining the list of all apps
17
19
  #
@@ -165,7 +167,7 @@ module Fabricio
165
167
  }.join(',')
166
168
 
167
169
  body = {
168
- 'query' => "query TopIssues($externalId_0:String!,$type_1:IssueType!,$start_2:UnixTimestamp!,$end_3:UnixTimestamp!,$filters_4:IssueFiltersType!,$state_5:IssueState!) {project(externalId:$externalId_0) {crashlytics {_appDetails1JwAD1:appDetails(synthesizedBuildVersions:[#{builds_string}],type:$type_1,start:$start_2,end:$end_3,filters:$filters_4) {topCrashInsightsMatchers {groupKey}},_issues4Eg1Tv:issues(synthesizedBuildVersions:[#{builds_string}],eventType:$type_1,start:$start_2,end:$end_3,state:$state_5,first:#{count},filters:$filters_4) {edges {node {externalId,displayId,createdAt,resolvedAt,title,subtitle,state,type,impactLevel,isObfuscated,occurrenceCount,impactedDevices,notesCount,earliestBuildVersion {buildVersion {name}},latestBuildVersion {buildVersion {name}},id},cursor},pageInfo {hasNextPage,hasPreviousPage}}},id}}",
170
+ 'query' => "query TopIssues($externalId_0:String!,$type_1:IssueType!,$start_2:UnixTimestamp!,$end_3:UnixTimestamp!,$filters_4:IssueFiltersType!,$state_5:IssueState!) {project(externalId:$externalId_0) {crashlytics {_appDetails1JwAD1:appDetails(synthesizedBuildVersions:[#{builds_string}],type:$type_1,start:$start_2,end:$end_3,filters:$filters_4) {topCrashInsightsMatchers {groupKey}},_issues4Eg1Tv:issues(synthesizedBuildVersions:[#{builds_string}],eventType:$type_1,start:$start_2,end:$end_3,state:$state_5,first:#{count},filters:$filters_4) {edges {node {externalId,displayId,createdAt,resolvedAt,title,subtitle,state,type,impactLevel,isObfuscated,occurrenceCount,impactedDevices,latestSessionId,notesCount,earliestBuildVersion {buildVersion {name}},latestBuildVersion {buildVersion {name}},id},cursor},pageInfo {hasNextPage,hasPreviousPage}}},id}}",
169
171
  'variables' => {
170
172
  'externalId_0' => app_id,
171
173
  'type_1' => 'all',
@@ -185,6 +187,83 @@ module Fabricio
185
187
  model
186
188
  end
187
189
 
190
+ # Returns a request model for obtaining single issue
191
+ #
192
+ # @param app_id [String]
193
+ # @param issue_external_id [String] Issue external identifier
194
+ # @param start_time [String] Timestamp of the start date
195
+ # @param end_time [String] Timestamp of the end date
196
+ # @return [Fabricio::Networking::RequestModel]
197
+ def single_issue_request_model(app_id, issue_external_id, start_time, end_time)
198
+ headers = {
199
+ 'Content-Type' => 'application/json'
200
+ }
201
+
202
+ body = {
203
+ 'query' => "query SingleIssue($externalId_0:String!,$start_1:UnixTimestamp!,$end_2:UnixTimestamp!,$granularity_3:TimeseriesGranularity!,$filters_4:IssueFiltersType!) {project(externalId:$externalId_0) {crashlytics {_issueeUsmi:issue(externalId:\"#{issue_external_id}\") {externalId,createdAt,displayId,title,subtitle,type,state,isObfuscated,supportsCrossVersion,_occurrenceCount2I980d:occurrenceCount(start:$start_1,end:$end_2),_impactedDevices2oATOx:impactedDevices(start:$start_1,end:$end_2),shareLink,latestSessionId,lockedAt,resolvedAt,exportUserIdsUrl,buildVersionBreakdown {occurrenceCount,buildVersion {externalId,createdAt,name,synthesizedBuildVersion}},earliestBuildVersion {buildVersion {externalId,createdAt,name,synthesizedBuildVersion}},latestBuildVersion {buildVersion {externalId,createdAt,name,synthesizedBuildVersion}},notes {externalId,createdAt,body,account {id,name,email}},_timeseries1niuOE:timeseries(granularity:$granularity_3,start:$start_1,end:$end_2) {eventsCount,groupByDimension,dimensionKey},_scalars1YYKRB:scalars(start:$start_1,end:$end_2,filters:$filters_4) {deviceMetrics {eventsCount,jailbrokenRatio,inFocusRatio,proximityOnRatio,freeRamMean,freeDiskMean},topOs {value,label,groupKey,eventsCount},topDevices {value,label,groupKey,eventsCount},topCrashInsightsMatchers {value,label,groupKey,eventsCount,issuesCount,impactedDevicesCount}},id}},id}}",
204
+ 'variables' => {
205
+ 'externalId_0' => app_id,
206
+ 'start_1' => start_time,
207
+ 'end_2' => end_time,
208
+ 'granularity_3' => 'day',
209
+ 'filters_4' => {}
210
+ }
211
+ }.to_json
212
+ model = Fabricio::Networking::RequestModel.new do |config|
213
+ config.type = :POST
214
+ config.base_url = FABRIC_GRAPHQL_API_URL
215
+ config.api_path = '?relayDebugName=SingleIssue'
216
+ config.headers = headers
217
+ config.body = body
218
+ end
219
+ model
220
+ end
221
+
222
+ # Returns a request model for obtaining the count of ooms
223
+ #
224
+ # @param app_id [String]
225
+ # @param issue_external_id [String] Issue external identifier
226
+ # @param session_id [String] Session identifier
227
+ # @return [Fabricio::Networking::RequestModel]
228
+ def issue_session_request_model(app_id, issue_external_id, session_id)
229
+ headers = {
230
+ 'Content-Type' => 'application/json'
231
+ }
232
+ path = issue_session_endpoint(app_id, issue_external_id, session_id)
233
+ model = Fabricio::Networking::RequestModel.new do |config|
234
+ config.type = :GET
235
+ config.base_url = FABRIC_API_URL
236
+ config.api_path = path
237
+ config.headers = headers
238
+ end
239
+ model
240
+ end
241
+
242
+ # Returns a request model for obtaining the count of ooms
243
+ #
244
+ # @param app_id [String]
245
+ # @param issue_external_id [String] Issue external identifier
246
+ # @param message [String] Comment message
247
+ # @return [Fabricio::Networking::RequestModel]
248
+ def add_comment_request_model(app_id, issue_external_id, message)
249
+ headers = {
250
+ 'Content-Type' => 'application/json'
251
+ }
252
+ body = {
253
+ 'body' => message,
254
+
255
+ }.to_json
256
+ path = add_comment_endpoint(app_id, issue_external_id)
257
+ model = Fabricio::Networking::RequestModel.new do |config|
258
+ config.type = :POST
259
+ config.base_url = FABRIC_API_URL
260
+ config.api_path = path
261
+ config.headers = headers
262
+ config.body = body
263
+ end
264
+ model
265
+ end
266
+
188
267
  # Returns a request model for obtaining the count of ooms
189
268
  #
190
269
  # @param app_id [String]
@@ -214,6 +293,26 @@ module Fabricio
214
293
 
215
294
  private
216
295
 
296
+ # Returns an API path to some issue session
297
+ #
298
+ # @param app_id [String]
299
+ # @param issue_id [String]
300
+ # @param session_id [String]
301
+ # @return [String]
302
+ def add_comment_endpoint(app_id, issue_id)
303
+ "#{FABRIC_API_3_PATH}#{FABRIC_PROJECTS_ENDPOINT}/#{app_id}/issues/#{issue_id}/notes"
304
+ end
305
+
306
+ # Returns an API path to some issue session
307
+ #
308
+ # @param app_id [String]
309
+ # @param issue_id [String]
310
+ # @param session_id [String]
311
+ # @return [String]
312
+ def issue_session_endpoint(app_id, issue_id, session_id)
313
+ "#{FABRIC_API_3_PATH}#{FABRIC_PROJECTS_ENDPOINT}/#{app_id}/issues/#{issue_id}/sessions/#{session_id}"
314
+ end
315
+
217
316
  # Returns an API path to some growth analytic endpoint
218
317
  #
219
318
  # @param session [Fabricio::Authorization::Session]
@@ -2,6 +2,8 @@ require 'fabricio/networking/app_request_model_factory'
2
2
  require 'fabricio/networking/network_client'
3
3
  require 'fabricio/models/app'
4
4
  require 'fabricio/models/point'
5
+ require 'fabricio/models/issue'
6
+ require 'fabricio/models/issue_session'
5
7
 
6
8
  module Fabricio
7
9
  module Service
@@ -128,11 +130,63 @@ module Fabricio
128
130
  # @param end_time [String] Timestamp of the end date
129
131
  # @param build [String] The version of the build. E.g. '4.0.1 (38)'
130
132
  # @param count [Int] Number of issue
131
- # @return [Float]
133
+ # @return [Array<Fabricio::Model::Issue>]
132
134
  def top_issues(id, start_time, end_time, builds, count)
133
135
  request_model = @request_model_factory.top_issues_request_model(id, start_time, end_time, builds, count)
134
136
  response = @network_client.perform_request(request_model)
135
- JSON.parse(response.body)['data']['project']['crashlytics']['_issues4Eg1Tv']['edges'].map { |edge| edge['node'] }
137
+ JSON.parse(response.body)['data']['project']['crashlytics']['_issues4Eg1Tv']['edges'].map do |edge|
138
+ Fabricio::Model::Issue.new(edge['node'])
139
+ end
140
+ end
141
+
142
+ # Obtains single issue
143
+ #
144
+ # @param id [String] Application identifier
145
+ # @param issue_external_id [String] Issue external identifier
146
+ # @param start_time [String] Timestamp of the start date
147
+ # @param end_time [String] Timestamp of the end date
148
+ # @return [Fabricio::Model::Issue]
149
+ def single_issue(id, issue_external_id, start_time, end_time)
150
+ request_model = @request_model_factory.single_issue_request_model(id, issue_external_id, start_time, end_time)
151
+ response = @network_client.perform_request(request_model)
152
+ Fabricio::Model::Issue.new(JSON.parse(response.body)['data']['project']['crashlytics']['_issueeUsmi'])
153
+ end
154
+
155
+ # Obtains single issue
156
+ #
157
+ # @param id [String] Application identifier
158
+ # @param issue_external_id [String] Issue external identifier
159
+ # @param session_id [String] Session identifier
160
+ # @return [Fabricio::Model::Issue]
161
+ def issue_session(id, issue_external_id, session_id)
162
+ request_model = @request_model_factory.issue_session_request_model(id, issue_external_id, session_id)
163
+ response = @network_client.perform_request(request_model)
164
+ json = JSON.parse(response.body)
165
+ link = response.headers['Link']
166
+ unless link.nil?
167
+ json['header_link'] = link
168
+ link_parts = link.split(", ")
169
+ link_parts.each do |part|
170
+ if part.include? 'rel="prev"'
171
+ json['prev_session_id'] = part.sub('>; rel="prev"', "").sub('<', "").split("sessions/")[1]
172
+ elsif part.include? 'rel="next"'
173
+ json['next_session_id'] = part.sub('>; rel="next"', "").sub('<', "").split("sessions/")[1]
174
+ end
175
+ end
176
+ end
177
+ Fabricio::Model::IssueSession.new(json)
178
+ end
179
+
180
+ # Add comment to issue
181
+ #
182
+ # @param id [String] Application identifier
183
+ # @param issue_external_id [String] Issue external identifier
184
+ # @param message [String] Comment message
185
+ # @return [JSON]
186
+ def add_comment(id, issue_external_id, message)
187
+ request_model = @request_model_factory.add_comment_request_model(id, issue_external_id, message)
188
+ response = @network_client.perform_request(request_model)
189
+ JSON.parse(response.body)
136
190
  end
137
191
 
138
192
  # Obtains application OOM-free (Out of Memory).
@@ -25,7 +25,6 @@ module Fabricio
25
25
  def get
26
26
  request_model = @request_model_factory.get_organization_request_model
27
27
  response = @network_client.perform_request(request_model)
28
- puts(response)
29
28
  Fabricio::Model::Organization.new(JSON.parse(response.body)[0])
30
29
  end
31
30
  end
@@ -1,3 +1,3 @@
1
1
  module Fabricio
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
metadata CHANGED
@@ -1,97 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fabricio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egor Tolstoy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-25 00:00:00.000000000 Z
11
+ date: 2017-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '3.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webmock
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: codeclimate-test-reporter
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 1.0.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 1.0.0
97
97
  description:
@@ -101,13 +101,15 @@ executables: []
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
- - .codeclimate.yml
105
- - .idea/runConfigurations/IRB_console__fabricio.xml
106
- - .rspec
107
- - .rubocop.yml
108
- - .travis.yml
104
+ - ".codeclimate.yml"
105
+ - ".gitignore"
106
+ - ".idea/runConfigurations/IRB_console__fabricio.xml"
107
+ - ".rspec"
108
+ - ".rubocop.yml"
109
+ - ".travis.yml"
109
110
  - CODE_OF_CONDUCT.md
110
111
  - Gemfile
112
+ - Gemfile.lock
111
113
  - LICENSE.txt
112
114
  - README.md
113
115
  - Rakefile
@@ -125,6 +127,8 @@ files:
125
127
  - lib/fabricio/models/abstract_model.rb
126
128
  - lib/fabricio/models/app.rb
127
129
  - lib/fabricio/models/build.rb
130
+ - lib/fabricio/models/issue.rb
131
+ - lib/fabricio/models/issue_session.rb
128
132
  - lib/fabricio/models/organization.rb
129
133
  - lib/fabricio/models/point.rb
130
134
  - lib/fabricio/networking/app_request_model_factory.rb
@@ -146,17 +150,17 @@ require_paths:
146
150
  - lib
147
151
  required_ruby_version: !ruby/object:Gem::Requirement
148
152
  requirements:
149
- - - '>='
153
+ - - ">="
150
154
  - !ruby/object:Gem::Version
151
155
  version: '0'
152
156
  required_rubygems_version: !ruby/object:Gem::Requirement
153
157
  requirements:
154
- - - '>='
158
+ - - ">="
155
159
  - !ruby/object:Gem::Version
156
160
  version: '0'
157
161
  requirements: []
158
162
  rubyforge_project:
159
- rubygems_version: 2.6.11
163
+ rubygems_version: 2.5.1
160
164
  signing_key:
161
165
  specification_version: 4
162
166
  summary: A simple gem that fetches mobile application statistics from Fabric.io API.