device-tracker 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.
Files changed (111) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +4 -0
  4. data/Rakefile +6 -0
  5. data/Readme.md +32 -0
  6. data/bin/console +14 -0
  7. data/bin/setup +7 -0
  8. data/device-tracker.gemspec +54 -0
  9. data/exe/device-tracker +50 -0
  10. data/lib/device/tracker.rb +19 -0
  11. data/lib/device/tracker/app.rb +25 -0
  12. data/lib/device/tracker/config-schema.json +53 -0
  13. data/lib/device/tracker/config.ru +9 -0
  14. data/lib/device/tracker/controllers/application_controller.rb +215 -0
  15. data/lib/device/tracker/controllers/devices_controller.rb +315 -0
  16. data/lib/device/tracker/controllers/heartbeat_controller.rb +55 -0
  17. data/lib/device/tracker/controllers/os_controller.rb +43 -0
  18. data/lib/device/tracker/controllers/transactions_controller.rb +21 -0
  19. data/lib/device/tracker/controllers/users_controller.rb +193 -0
  20. data/lib/device/tracker/db/data/devices.xlsx +0 -0
  21. data/lib/device/tracker/db/migrate/20150521071815_create_users.rb +13 -0
  22. data/lib/device/tracker/db/migrate/20150521082155_create_devices.rb +23 -0
  23. data/lib/device/tracker/db/migrate/20150521120335_create_operating_systems.rb +8 -0
  24. data/lib/device/tracker/db/migrate/20150527162242_create_transactions.rb +13 -0
  25. data/lib/device/tracker/db/migrate/20151027073050_create_heartbeat.rb +10 -0
  26. data/lib/device/tracker/db/migrate/20151028132946_add_user_verification.rb +7 -0
  27. data/lib/device/tracker/db/migrate/20151028141328_remove_is_active_from_users.rb +5 -0
  28. data/lib/device/tracker/db/migrate/20151029085629_add_password_reset_code_to_users.rb +7 -0
  29. data/lib/device/tracker/db/migrate/20151030130341_add_missing_column_to_devices.rb +7 -0
  30. data/lib/device/tracker/db/migrate/20151102141601_add_serial_number_to_devices.rb +7 -0
  31. data/lib/device/tracker/db/schema.rb +74 -0
  32. data/lib/device/tracker/db/seeds.rb +18 -0
  33. data/lib/device/tracker/dependencies.rb +15 -0
  34. data/lib/device/tracker/helpers/application_helper.rb +84 -0
  35. data/lib/device/tracker/models/device.rb +39 -0
  36. data/lib/device/tracker/models/heartbeat.rb +9 -0
  37. data/lib/device/tracker/models/operating_system.rb +8 -0
  38. data/lib/device/tracker/models/transaction.rb +56 -0
  39. data/lib/device/tracker/models/user.rb +22 -0
  40. data/lib/device/tracker/public/css/bootstrap-sortable.css +100 -0
  41. data/lib/device/tracker/public/css/bootstrap.min.css +5 -0
  42. data/lib/device/tracker/public/css/custom.css +88 -0
  43. data/lib/device/tracker/public/favicon.png +0 -0
  44. data/lib/device/tracker/public/favicon/android-chrome-144x144.png +0 -0
  45. data/lib/device/tracker/public/favicon/android-chrome-192x192.png +0 -0
  46. data/lib/device/tracker/public/favicon/android-chrome-36x36.png +0 -0
  47. data/lib/device/tracker/public/favicon/android-chrome-48x48.png +0 -0
  48. data/lib/device/tracker/public/favicon/android-chrome-72x72.png +0 -0
  49. data/lib/device/tracker/public/favicon/android-chrome-96x96.png +0 -0
  50. data/lib/device/tracker/public/favicon/apple-touch-icon-114x114.png +0 -0
  51. data/lib/device/tracker/public/favicon/apple-touch-icon-120x120.png +0 -0
  52. data/lib/device/tracker/public/favicon/apple-touch-icon-144x144.png +0 -0
  53. data/lib/device/tracker/public/favicon/apple-touch-icon-152x152.png +0 -0
  54. data/lib/device/tracker/public/favicon/apple-touch-icon-180x180.png +0 -0
  55. data/lib/device/tracker/public/favicon/apple-touch-icon-57x57.png +0 -0
  56. data/lib/device/tracker/public/favicon/apple-touch-icon-60x60.png +0 -0
  57. data/lib/device/tracker/public/favicon/apple-touch-icon-72x72.png +0 -0
  58. data/lib/device/tracker/public/favicon/apple-touch-icon-76x76.png +0 -0
  59. data/lib/device/tracker/public/favicon/apple-touch-icon-precomposed.png +0 -0
  60. data/lib/device/tracker/public/favicon/apple-touch-icon.png +0 -0
  61. data/lib/device/tracker/public/favicon/browserconfig.xml +12 -0
  62. data/lib/device/tracker/public/favicon/favicon-16x16.png +0 -0
  63. data/lib/device/tracker/public/favicon/favicon-32x32.png +0 -0
  64. data/lib/device/tracker/public/favicon/favicon-96x96.png +0 -0
  65. data/lib/device/tracker/public/favicon/favicon.ico +0 -0
  66. data/lib/device/tracker/public/favicon/manifest.json +41 -0
  67. data/lib/device/tracker/public/favicon/mstile-144x144.png +0 -0
  68. data/lib/device/tracker/public/favicon/mstile-150x150.png +0 -0
  69. data/lib/device/tracker/public/favicon/mstile-310x150.png +0 -0
  70. data/lib/device/tracker/public/favicon/mstile-310x310.png +0 -0
  71. data/lib/device/tracker/public/favicon/mstile-70x70.png +0 -0
  72. data/lib/device/tracker/public/favicon/safari-pinned-tab.svg +21 -0
  73. data/lib/device/tracker/public/fonts/glyphicons-halflings-regular.eot +0 -0
  74. data/lib/device/tracker/public/fonts/glyphicons-halflings-regular.svg +288 -0
  75. data/lib/device/tracker/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  76. data/lib/device/tracker/public/fonts/glyphicons-halflings-regular.woff +0 -0
  77. data/lib/device/tracker/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
  78. data/lib/device/tracker/public/js/bootstrap-sortable.js +211 -0
  79. data/lib/device/tracker/public/js/bootstrap.min.js +7 -0
  80. data/lib/device/tracker/public/js/jquery-2.1.4.min.js +4 -0
  81. data/lib/device/tracker/version.rb +5 -0
  82. data/lib/device/tracker/views/404.erb +25 -0
  83. data/lib/device/tracker/views/_alert.erb +5 -0
  84. data/lib/device/tracker/views/_device_form.erb +52 -0
  85. data/lib/device/tracker/views/_device_list.erb +47 -0
  86. data/lib/device/tracker/views/_footer.erb +3 -0
  87. data/lib/device/tracker/views/_header.erb +97 -0
  88. data/lib/device/tracker/views/_heartbeat_list.erb +25 -0
  89. data/lib/device/tracker/views/_user_form.erb +30 -0
  90. data/lib/device/tracker/views/devices/edit.erb +11 -0
  91. data/lib/device/tracker/views/devices/index.erb +12 -0
  92. data/lib/device/tracker/views/devices/new.erb +10 -0
  93. data/lib/device/tracker/views/devices/show.erb +283 -0
  94. data/lib/device/tracker/views/devices/users.erb +14 -0
  95. data/lib/device/tracker/views/emails/new_password.erb +17 -0
  96. data/lib/device/tracker/views/emails/password_reset.erb +18 -0
  97. data/lib/device/tracker/views/emails/registration.erb +16 -0
  98. data/lib/device/tracker/views/emails/reminder.erb +15 -0
  99. data/lib/device/tracker/views/emails/verification.erb +18 -0
  100. data/lib/device/tracker/views/forgot_password.erb +6 -0
  101. data/lib/device/tracker/views/index.erb +38 -0
  102. data/lib/device/tracker/views/layout.erb +8 -0
  103. data/lib/device/tracker/views/login.erb +14 -0
  104. data/lib/device/tracker/views/operating_system/operating_systems.json.jbuilder +9 -0
  105. data/lib/device/tracker/views/os/manage.erb +38 -0
  106. data/lib/device/tracker/views/transactions/_transactions_list.erb +18 -0
  107. data/lib/device/tracker/views/transactions/index.erb +3 -0
  108. data/lib/device/tracker/views/users/edit.erb +9 -0
  109. data/lib/device/tracker/views/users/manage.erb +31 -0
  110. data/lib/device/tracker/views/users/new.erb +7 -0
  111. metadata +427 -0
@@ -0,0 +1,15 @@
1
+ <h1>Device Tracker - Reminder</h1>
2
+
3
+ <p>
4
+ Hello, <%= @device.user.name %><br><br>
5
+ It seems that you checked out the <a href="<%= @device_url %>"><%= @device.full_name %></a> on the <b><%= @device.checked_out_since_formatted %></b>.
6
+ Just to let you know that people will start to wonder where this device has gone!
7
+ <br>
8
+ <br>
9
+ So let someone know that you intend on keeping the device, or return it please.
10
+
11
+ <br>
12
+ <br>
13
+ Thanks,<br>
14
+ Device Tracker Team
15
+ </p>
@@ -0,0 +1,18 @@
1
+ <h1>Device Tracker - New Account</h1>
2
+
3
+ <p>
4
+ Hello, <%= @user.name %><br><br>
5
+
6
+ Your account has now been verified.
7
+
8
+ <br>
9
+ <br>
10
+ <a href="<%= @get_started_link %>">
11
+ Click here to get started
12
+ </a>
13
+
14
+ <br>
15
+ <br>
16
+ Thanks,<br>
17
+ Device Tracker Team
18
+ </p>
@@ -0,0 +1,6 @@
1
+ <form class="form-signin" method="post" action="/forgot-password">
2
+ <h2 class="form-signin-heading">What's your email?</h2>
3
+ <label for="email" class="sr-only">Email address</label>
4
+ <input type="email" class="form-control" id="email" name="email" placeholder="Email" autofocus="" required="">
5
+ <button class="btn btn-lg btn-primary btn-sm pull-right" type="submit">Request Password</button>
6
+ </form>
@@ -0,0 +1,38 @@
1
+ <div class="jumbotron">
2
+ <div class="container">
3
+ <h1>Device Tracker</h1>
4
+ <p>Welcome to the BBC Sport device <b>Device Tracker</b>. The aim of this application is to monitor
5
+ the use of devices across BBC Sport and stop them going walkies!</p>
6
+ <p><a class="btn btn-primary btn-lg" href="/devices" role="button">Checkout a Device</a></p>
7
+ </div>
8
+ </div>
9
+
10
+ <table class="table table-hover">
11
+ <thead>
12
+ <tr>
13
+ <th>Device</th>
14
+ <th>Withdrawn by</th>
15
+ <th>Since</th>
16
+ </tr>
17
+ </thead>
18
+ <tbody>
19
+ <% @devices.each do |device| %>
20
+ <tr class="clickable-row <%= device.passed_use_by_date? ? "danger" : "" %>" data-url="/devices/<%= device.id %>">
21
+ <td><%= device.full_name %></td>
22
+ <td><%= device.user.name %></td>
23
+ <td><%= device.checked_out_since_formatted %></td>
24
+ </tr>
25
+ <% end %>
26
+ </tbody>
27
+ </table>
28
+
29
+ <script type="text/javascript">
30
+ $(document).ready(function() {
31
+ $('.clickable-row').on('click', function() {
32
+ var $this = $(this),
33
+ url = $this.data('url');
34
+
35
+ window.location.href = url;
36
+ });
37
+ });
38
+ </script>
@@ -0,0 +1,8 @@
1
+ <%= partial :header %>
2
+
3
+ <div class="main">
4
+ <%= partial :alert %>
5
+ <%= yield %>
6
+ </div>
7
+
8
+ <%= partial :footer %>
@@ -0,0 +1,14 @@
1
+ <form class="form-signin" method="post" action="/login">
2
+ <h2 class="form-signin-heading">Please sign in</h2>
3
+ <label for="email" class="sr-only">Email address</label>
4
+ <input type="email" class="form-control" id="email" name="user[email]" value="<%= flash[:email] %>" placeholder="Email" autofocus="" required="">
5
+ <label for="password" class="sr-only">Password</label>
6
+ <input type="password" class="form-control" id="password" name="user[password]" placeholder="Password" required="">
7
+
8
+ <div class="form-group">
9
+ <a href="/forgot-password">Forgot password?</a> |
10
+ <a href="/users/new">Register an account</a>
11
+ </div>
12
+
13
+ <button class="btn btn-lg btn-primary btn-sm pull-right" type="submit">Sign in</button>
14
+ </form>
@@ -0,0 +1,9 @@
1
+ json.set! :operatingSystems do
2
+ json.array! operating_systems do |os|
3
+ json.operatingSystem do
4
+ json.id os.id
5
+ json.name os.name
6
+ json.apiLevel os.api_level if os.api_level
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,38 @@
1
+ <h1>Operating Systems</h1>
2
+ <div>
3
+ <div>
4
+ <form action="/os/create" method="post">
5
+ <div class="form-group">
6
+ <label for="name">Name</label>
7
+ <input type="text" name="os[name]" id="name" class="form-control" placeholder="iOS 9.1">
8
+ </div>
9
+ <div class="form-group">
10
+ <label for="api-level">API Level</label>
11
+ <input type="text" name="os[api_level]" id="api-level" class="form-control" placeholder="22">
12
+ </div>
13
+
14
+ <button type="submit" class="btn btn-success">Add</button>
15
+ </form>
16
+ </div>
17
+ <table class="table table-hover table-condensed top-margin-large">
18
+ <thead>
19
+ <tr>
20
+ <th>Name</th>
21
+ <th></th>
22
+ </tr>
23
+ </thead>
24
+ <tbody>
25
+ <% @os.each do |os| %>
26
+ <tr>
27
+ <td><%= os.name %></td>
28
+ <td width="10%">
29
+ <form method="post" action="/os/<%= os.id %>/delete">
30
+ <input type="hidden" name="_method" value="delete">
31
+ <button class="btn btn-danger btn-xs btn-full-width" type="submit">Delete</button>
32
+ </form>
33
+ </td>
34
+ </tr>
35
+ <% end %>
36
+ </tbody>
37
+ </table>
38
+ </div>
@@ -0,0 +1,18 @@
1
+ <table class="table table-hover">
2
+ <thead>
3
+ <tr>
4
+ <th>Type</th>
5
+ <th>Description</th>
6
+ <th>Time of Transaction</th>
7
+ </tr>
8
+ </thead>
9
+ <tbody>
10
+ <% @transactions.each do |transaction| %>
11
+ <tr>
12
+ <td> <%= transaction.transaction_type %> </td>
13
+ <td> <%= transaction.description %> </td>
14
+ <td> <%= transaction.created_at %> </td>
15
+ </tr>
16
+ <% end %>
17
+ </tbody>
18
+ </table>
@@ -0,0 +1,3 @@
1
+ <h3>Showing 100 of the Latest Transactions</h3><br>
2
+
3
+ <%= partial :"transactions/transactions_list" %>
@@ -0,0 +1,9 @@
1
+ <h2>Editing: <%= @user.name %></h2>
2
+ <p>Once you have finished editing your account, just hit save and your profile will be updated immediately.</p>
3
+ <br>
4
+
5
+ <form method="post" action="/users/<%= @user.id %>" class="form-horizontal">
6
+ <input type="hidden" name="_method" value="put" />
7
+ <%= partial :user_form %>
8
+ <button type="submit" class="btn btn-success pull-right">Save</button>
9
+ </form>
@@ -0,0 +1,31 @@
1
+ <table class="table table-hover sortable">
2
+ <thead>
3
+ <tr>
4
+ <th>Username</th>
5
+ <th>Name</th>
6
+ <th>Information</th>
7
+ <th></th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <% @users.each do |user| %>
12
+ <tr class="<%= user.is_verified? ? "" : "active" %>">
13
+ <td width="20%"><%= user.username %></td>
14
+ <td width="20%"><%= user.name %></td>
15
+ <td width="50%">
16
+ <b>Email: </b><a href="mailto:<%= user.email %>"><%= user.email %></a><br>
17
+ <b>Administrator: </b><%= user.is_admin? == true ? "Yes" : "No"%><br>
18
+ <b>Device count: </b><%= user.devices.size %><br>
19
+ <b>Account Verified: </b><%= user.is_verified? == true ? "Yes" : "No" %><br>
20
+ </td>
21
+ <td width="10%">
22
+ <a href="/users/<%= user.id %>/edit" class="btn btn-warning btn-full-width btn-xs padding-bottom">Edit</a>
23
+ <form method="post" action="/users/<%= user.id %>/delete">
24
+ <input type="hidden" name="_method" value="delete">
25
+ <button class="btn btn-danger btn-xs btn-full-width" type="submit">Delete</button>
26
+ </form>
27
+ </td>
28
+ </tr>
29
+ <% end %>
30
+ </tbody>
31
+ </table>
@@ -0,0 +1,7 @@
1
+ <h2>Register an Account</h2>
2
+ <br>
3
+
4
+ <form method="post" action="/users/create">
5
+ <%= partial :user_form %>
6
+ <button type="submit" class="btn btn-primary pull-right">Register</button>
7
+ </form>
metadata ADDED
@@ -0,0 +1,427 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: device-tracker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Ruston
8
+ - John Crossley
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2015-11-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.7'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.7'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rspec
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '3.4'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '3.4'
42
+ - !ruby/object:Gem::Dependency
43
+ name: tux
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0.3'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: shotgun
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '0.9'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.9'
70
+ - !ruby/object:Gem::Dependency
71
+ name: byebug
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '8.1'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '8.1'
84
+ - !ruby/object:Gem::Dependency
85
+ name: sinatra
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1.4'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.4'
98
+ - !ruby/object:Gem::Dependency
99
+ name: activerecord
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '4.0'
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '4.0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: sinatra-activerecord
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '2.0'
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '2.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: bcrypt
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: 3.1.7
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: 3.1.7
140
+ - !ruby/object:Gem::Dependency
141
+ name: json
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: '1.7'
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: '1.7'
154
+ - !ruby/object:Gem::Dependency
155
+ name: sinatra-contrib
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '1.4'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1.4'
168
+ - !ruby/object:Gem::Dependency
169
+ name: sinatra-partial
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '0.4'
175
+ type: :runtime
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '0.4'
182
+ - !ruby/object:Gem::Dependency
183
+ name: sinatra-flash
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '0.3'
189
+ type: :runtime
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '0.3'
196
+ - !ruby/object:Gem::Dependency
197
+ name: thin
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '1.6'
203
+ type: :runtime
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '1.6'
210
+ - !ruby/object:Gem::Dependency
211
+ name: rake
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: '10.4'
217
+ type: :runtime
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - "~>"
222
+ - !ruby/object:Gem::Version
223
+ version: '10.4'
224
+ - !ruby/object:Gem::Dependency
225
+ name: sqlite3
226
+ requirement: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - "~>"
229
+ - !ruby/object:Gem::Version
230
+ version: '1.3'
231
+ type: :runtime
232
+ prerelease: false
233
+ version_requirements: !ruby/object:Gem::Requirement
234
+ requirements:
235
+ - - "~>"
236
+ - !ruby/object:Gem::Version
237
+ version: '1.3'
238
+ - !ruby/object:Gem::Dependency
239
+ name: pony
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - "~>"
243
+ - !ruby/object:Gem::Version
244
+ version: '1.11'
245
+ type: :runtime
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - "~>"
250
+ - !ruby/object:Gem::Version
251
+ version: '1.11'
252
+ - !ruby/object:Gem::Dependency
253
+ name: mysql2
254
+ requirement: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - "~>"
257
+ - !ruby/object:Gem::Version
258
+ version: 0.3.20
259
+ type: :runtime
260
+ prerelease: false
261
+ version_requirements: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - "~>"
264
+ - !ruby/object:Gem::Version
265
+ version: 0.3.20
266
+ - !ruby/object:Gem::Dependency
267
+ name: json-schema
268
+ requirement: !ruby/object:Gem::Requirement
269
+ requirements:
270
+ - - "~>"
271
+ - !ruby/object:Gem::Version
272
+ version: '2.5'
273
+ type: :runtime
274
+ prerelease: false
275
+ version_requirements: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - "~>"
278
+ - !ruby/object:Gem::Version
279
+ version: '2.5'
280
+ description: "\n Keep track of your devices.\n Features: - User registration/login/validation\n
281
+ \ - User levels (normal/admin)\n - Checkout devices\n -
282
+ Return devices\n - Assign devices to someone (Admin only)\n -
283
+ Validate a user (Admin only)\n - Search devices\n - Keep
284
+ track of number of times devices used\n - Manage OS versions\n -
285
+ Send reminders to someone who has had a device checked out for a long time\n -
286
+ Password reset\n "
287
+ email:
288
+ - james.ruston@bbc.com
289
+ - john.crossley@bbc.co.uk
290
+ executables:
291
+ - device-tracker
292
+ extensions: []
293
+ extra_rdoc_files: []
294
+ files:
295
+ - ".gitignore"
296
+ - Gemfile
297
+ - Rakefile
298
+ - Readme.md
299
+ - bin/console
300
+ - bin/setup
301
+ - device-tracker.gemspec
302
+ - exe/device-tracker
303
+ - lib/device/tracker.rb
304
+ - lib/device/tracker/app.rb
305
+ - lib/device/tracker/config-schema.json
306
+ - lib/device/tracker/config.ru
307
+ - lib/device/tracker/controllers/application_controller.rb
308
+ - lib/device/tracker/controllers/devices_controller.rb
309
+ - lib/device/tracker/controllers/heartbeat_controller.rb
310
+ - lib/device/tracker/controllers/os_controller.rb
311
+ - lib/device/tracker/controllers/transactions_controller.rb
312
+ - lib/device/tracker/controllers/users_controller.rb
313
+ - lib/device/tracker/db/data/devices.xlsx
314
+ - lib/device/tracker/db/migrate/20150521071815_create_users.rb
315
+ - lib/device/tracker/db/migrate/20150521082155_create_devices.rb
316
+ - lib/device/tracker/db/migrate/20150521120335_create_operating_systems.rb
317
+ - lib/device/tracker/db/migrate/20150527162242_create_transactions.rb
318
+ - lib/device/tracker/db/migrate/20151027073050_create_heartbeat.rb
319
+ - lib/device/tracker/db/migrate/20151028132946_add_user_verification.rb
320
+ - lib/device/tracker/db/migrate/20151028141328_remove_is_active_from_users.rb
321
+ - lib/device/tracker/db/migrate/20151029085629_add_password_reset_code_to_users.rb
322
+ - lib/device/tracker/db/migrate/20151030130341_add_missing_column_to_devices.rb
323
+ - lib/device/tracker/db/migrate/20151102141601_add_serial_number_to_devices.rb
324
+ - lib/device/tracker/db/schema.rb
325
+ - lib/device/tracker/db/seeds.rb
326
+ - lib/device/tracker/dependencies.rb
327
+ - lib/device/tracker/helpers/application_helper.rb
328
+ - lib/device/tracker/models/device.rb
329
+ - lib/device/tracker/models/heartbeat.rb
330
+ - lib/device/tracker/models/operating_system.rb
331
+ - lib/device/tracker/models/transaction.rb
332
+ - lib/device/tracker/models/user.rb
333
+ - lib/device/tracker/public/css/bootstrap-sortable.css
334
+ - lib/device/tracker/public/css/bootstrap.min.css
335
+ - lib/device/tracker/public/css/custom.css
336
+ - lib/device/tracker/public/favicon.png
337
+ - lib/device/tracker/public/favicon/android-chrome-144x144.png
338
+ - lib/device/tracker/public/favicon/android-chrome-192x192.png
339
+ - lib/device/tracker/public/favicon/android-chrome-36x36.png
340
+ - lib/device/tracker/public/favicon/android-chrome-48x48.png
341
+ - lib/device/tracker/public/favicon/android-chrome-72x72.png
342
+ - lib/device/tracker/public/favicon/android-chrome-96x96.png
343
+ - lib/device/tracker/public/favicon/apple-touch-icon-114x114.png
344
+ - lib/device/tracker/public/favicon/apple-touch-icon-120x120.png
345
+ - lib/device/tracker/public/favicon/apple-touch-icon-144x144.png
346
+ - lib/device/tracker/public/favicon/apple-touch-icon-152x152.png
347
+ - lib/device/tracker/public/favicon/apple-touch-icon-180x180.png
348
+ - lib/device/tracker/public/favicon/apple-touch-icon-57x57.png
349
+ - lib/device/tracker/public/favicon/apple-touch-icon-60x60.png
350
+ - lib/device/tracker/public/favicon/apple-touch-icon-72x72.png
351
+ - lib/device/tracker/public/favicon/apple-touch-icon-76x76.png
352
+ - lib/device/tracker/public/favicon/apple-touch-icon-precomposed.png
353
+ - lib/device/tracker/public/favicon/apple-touch-icon.png
354
+ - lib/device/tracker/public/favicon/browserconfig.xml
355
+ - lib/device/tracker/public/favicon/favicon-16x16.png
356
+ - lib/device/tracker/public/favicon/favicon-32x32.png
357
+ - lib/device/tracker/public/favicon/favicon-96x96.png
358
+ - lib/device/tracker/public/favicon/favicon.ico
359
+ - lib/device/tracker/public/favicon/manifest.json
360
+ - lib/device/tracker/public/favicon/mstile-144x144.png
361
+ - lib/device/tracker/public/favicon/mstile-150x150.png
362
+ - lib/device/tracker/public/favicon/mstile-310x150.png
363
+ - lib/device/tracker/public/favicon/mstile-310x310.png
364
+ - lib/device/tracker/public/favicon/mstile-70x70.png
365
+ - lib/device/tracker/public/favicon/safari-pinned-tab.svg
366
+ - lib/device/tracker/public/fonts/glyphicons-halflings-regular.eot
367
+ - lib/device/tracker/public/fonts/glyphicons-halflings-regular.svg
368
+ - lib/device/tracker/public/fonts/glyphicons-halflings-regular.ttf
369
+ - lib/device/tracker/public/fonts/glyphicons-halflings-regular.woff
370
+ - lib/device/tracker/public/fonts/glyphicons-halflings-regular.woff2
371
+ - lib/device/tracker/public/js/bootstrap-sortable.js
372
+ - lib/device/tracker/public/js/bootstrap.min.js
373
+ - lib/device/tracker/public/js/jquery-2.1.4.min.js
374
+ - lib/device/tracker/version.rb
375
+ - lib/device/tracker/views/404.erb
376
+ - lib/device/tracker/views/_alert.erb
377
+ - lib/device/tracker/views/_device_form.erb
378
+ - lib/device/tracker/views/_device_list.erb
379
+ - lib/device/tracker/views/_footer.erb
380
+ - lib/device/tracker/views/_header.erb
381
+ - lib/device/tracker/views/_heartbeat_list.erb
382
+ - lib/device/tracker/views/_user_form.erb
383
+ - lib/device/tracker/views/devices/edit.erb
384
+ - lib/device/tracker/views/devices/index.erb
385
+ - lib/device/tracker/views/devices/new.erb
386
+ - lib/device/tracker/views/devices/show.erb
387
+ - lib/device/tracker/views/devices/users.erb
388
+ - lib/device/tracker/views/emails/new_password.erb
389
+ - lib/device/tracker/views/emails/password_reset.erb
390
+ - lib/device/tracker/views/emails/registration.erb
391
+ - lib/device/tracker/views/emails/reminder.erb
392
+ - lib/device/tracker/views/emails/verification.erb
393
+ - lib/device/tracker/views/forgot_password.erb
394
+ - lib/device/tracker/views/index.erb
395
+ - lib/device/tracker/views/layout.erb
396
+ - lib/device/tracker/views/login.erb
397
+ - lib/device/tracker/views/operating_system/operating_systems.json.jbuilder
398
+ - lib/device/tracker/views/os/manage.erb
399
+ - lib/device/tracker/views/transactions/_transactions_list.erb
400
+ - lib/device/tracker/views/transactions/index.erb
401
+ - lib/device/tracker/views/users/edit.erb
402
+ - lib/device/tracker/views/users/manage.erb
403
+ - lib/device/tracker/views/users/new.erb
404
+ homepage: https://github.com/bbc/device-tracker
405
+ licenses: []
406
+ metadata: {}
407
+ post_install_message:
408
+ rdoc_options: []
409
+ require_paths:
410
+ - lib
411
+ required_ruby_version: !ruby/object:Gem::Requirement
412
+ requirements:
413
+ - - ">="
414
+ - !ruby/object:Gem::Version
415
+ version: '0'
416
+ required_rubygems_version: !ruby/object:Gem::Requirement
417
+ requirements:
418
+ - - ">="
419
+ - !ruby/object:Gem::Version
420
+ version: '0'
421
+ requirements: []
422
+ rubyforge_project:
423
+ rubygems_version: 2.4.3
424
+ signing_key:
425
+ specification_version: 4
426
+ summary: A web app for managing mobile devices
427
+ test_files: []