wpa_cli_ruby 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/AUTHORS ADDED
@@ -0,0 +1,3 @@
1
+ AUTHORS
2
+
3
+ - Chris Lowis <chris.lowis at bbc.co.uk>
data/COPYING ADDED
@@ -0,0 +1,556 @@
1
+ (c) 2013 British Broadcasting Corporation and contributors
2
+
3
+ See "AUTHORS" file for full details.
4
+
5
+ All code here, except where otherwise indicated, is licensed under
6
+ the Apache Licence version 2.0.
7
+
8
+ ----------------------------------------------------------------------------
9
+
10
+ Apache License
11
+ Version 2.0, January 2004
12
+ http://www.apache.org/licenses/
13
+
14
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
15
+
16
+ 1. Definitions.
17
+
18
+ "License" shall mean the terms and conditions for use, reproduction,
19
+ and distribution as defined by Sections 1 through 9 of this document.
20
+
21
+ "Licensor" shall mean the copyright owner or entity authorized by
22
+ the copyright owner that is granting the License.
23
+
24
+ "Legal Entity" shall mean the union of the acting entity and all
25
+ other entities that control, are controlled by, or are under common
26
+ control with that entity. For the purposes of this definition,
27
+ "control" means (i) the power, direct or indirect, to cause the
28
+ direction or management of such entity, whether by contract or
29
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
30
+ outstanding shares, or (iii) beneficial ownership of such entity.
31
+
32
+ "You" (or "Your") shall mean an individual or Legal Entity
33
+ exercising permissions granted by this License.
34
+
35
+ "Source" form shall mean the preferred form for making modifications,
36
+ including but not limited to software source code, documentation
37
+ source, and configuration files.
38
+
39
+ "Object" form shall mean any form resulting from mechanical
40
+ transformation or translation of a Source form, including but
41
+ not limited to compiled object code, generated documentation,
42
+ and conversions to other media types.
43
+
44
+ "Work" shall mean the work of authorship, whether in Source or
45
+ Object form, made available under the License, as indicated by a
46
+ copyright notice that is included in or attached to the work
47
+ (an example is provided in the Appendix below).
48
+
49
+ "Derivative Works" shall mean any work, whether in Source or Object
50
+ form, that is based on (or derived from) the Work and for which the
51
+ editorial revisions, annotations, elaborations, or other modifications
52
+ represent, as a whole, an original work of authorship. For the
53
+ purposes
54
+ of this License, Derivative Works shall not include works that remain
55
+ separable from, or merely link (or bind by name) to the interfaces of,
56
+ the Work and Derivative Works thereof.
57
+
58
+ "Contribution" shall mean any work of authorship, including
59
+ the original version of the Work and any modifications or additions
60
+ to that Work or Derivative Works thereof, that is intentionally
61
+ submitted to Licensor for inclusion in the Work by the copyright owner
62
+ or by an individual or Legal Entity authorized to submit on behalf of
63
+ the copyright owner. For the purposes of this definition, "submitted"
64
+ means any form of electronic, verbal, or written communication sent
65
+ to the Licensor or its representatives, including but not limited to
66
+ communication on electronic mailing lists, source code control
67
+ systems,
68
+ and issue tracking systems that are managed by, or on behalf of, the
69
+ Licensor for the purpose of discussing and improving the Work, but
70
+ excluding communication that is conspicuously marked or otherwise
71
+ designated in writing by the copyright owner as "Not a Contribution."
72
+
73
+ "Contributor" shall mean Licensor and any individual or Legal Entity
74
+ on behalf of whom a Contribution has been received by Licensor and
75
+ subsequently incorporated within the Work.
76
+
77
+ 2. Grant of Copyright License. Subject to the terms and conditions of
78
+ this License, each Contributor hereby grants to You a perpetual,
79
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
80
+ copyright license to reproduce, prepare Derivative Works of,
81
+ publicly display, publicly perform, sublicense, and distribute the
82
+ Work and such Derivative Works in Source or Object form.
83
+
84
+ 3. Grant of Patent License. Subject to the terms and conditions of
85
+ this License, each Contributor hereby grants to You a perpetual,
86
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
87
+ (except as stated in this section) patent license to make, have made,
88
+ use, offer to sell, sell, import, and otherwise transfer the Work,
89
+ where such license applies only to those patent claims licensable
90
+ by such Contributor that are necessarily infringed by their
91
+ Contribution(s) alone or by combination of their Contribution(s)
92
+ with the Work to which such Contribution(s) was submitted. If You
93
+ institute patent litigation against any entity (including a
94
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
95
+ or a Contribution incorporated within the Work constitutes direct
96
+ or contributory patent infringement, then any patent licenses
97
+ granted to You under this License for that Work shall terminate
98
+ as of the date such litigation is filed.
99
+
100
+ 4. Redistribution. You may reproduce and distribute copies of the
101
+ Work or Derivative Works thereof in any medium, with or without
102
+ modifications, and in Source or Object form, provided that You
103
+ meet the following conditions:
104
+
105
+ (a) You must give any other recipients of the Work or
106
+ Derivative Works a copy of this License; and
107
+
108
+ (b) You must cause any modified files to carry prominent notices
109
+ stating that You changed the files; and
110
+
111
+ (c) You must retain, in the Source form of any Derivative Works
112
+ that You distribute, all copyright, patent, trademark, and
113
+ attribution notices from the Source form of the Work,
114
+ excluding those notices that do not pertain to any part of
115
+ the Derivative Works; and
116
+
117
+ (d) If the Work includes a "NOTICE" text file as part of its
118
+ distribution, then any Derivative Works that You distribute must
119
+ include a readable copy of the attribution notices contained
120
+ within such NOTICE file, excluding those notices that do not
121
+ pertain to any part of the Derivative Works, in at least one
122
+ of the following places: within a NOTICE text file distributed
123
+ as part of the Derivative Works; within the Source form or
124
+ documentation, if provided along with the Derivative Works; or,
125
+ within a display generated by the Derivative Works, if and
126
+ wherever such third-party notices normally appear. The contents
127
+ of the NOTICE file are for informational purposes only and
128
+ do not modify the License. You may add Your own attribution
129
+ notices within Derivative Works that You distribute, alongside
130
+ or as an addendum to the NOTICE text from the Work, provided
131
+ that such additional attribution notices cannot be construed
132
+ as modifying the License.
133
+
134
+ You may add Your own copyright statement to Your modifications and
135
+ may provide additional or different license terms and conditions
136
+ for use, reproduction, or distribution of Your modifications, or
137
+ for any such Derivative Works as a whole, provided Your use,
138
+ reproduction, and distribution of the Work otherwise complies with
139
+ the conditions stated in this License.
140
+
141
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
142
+ any Contribution intentionally submitted for inclusion in the Work
143
+ by You to the Licensor shall be under the terms and conditions of
144
+ this License, without any additional terms or conditions.
145
+ Notwithstanding the above, nothing herein shall supersede or modify
146
+ the terms of any separate license agreement you may have executed
147
+ with Licensor regarding such Contributions.
148
+
149
+ 6. Trademarks. This License does not grant permission to use the trade
150
+ names, trademarks, service marks, or product names of the Licensor,
151
+ except as required for reasonable and customary use in describing the
152
+ origin of the Work and reproducing the content of the NOTICE file.
153
+
154
+ 7. Disclaimer of Warranty. Unless required by applicable law or
155
+ agreed to in writing, Licensor provides the Work (and each
156
+ Contributor provides its Contributions) on an "AS IS" BASIS,
157
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
158
+ implied, including, without limitation, any warranties or conditions
159
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
160
+ PARTICULAR PURPOSE. You are solely responsible for determining the
161
+ appropriateness of using or redistributing the Work and assume any
162
+ risks associated with Your exercise of permissions under this License.
163
+
164
+ 8. Limitation of Liability. In no event and under no legal theory,
165
+ whether in tort (including negligence), contract, or otherwise,
166
+ unless required by applicable law (such as deliberate and grossly
167
+ negligent acts) or agreed to in writing, shall any Contributor be
168
+ liable to You for damages, including any direct, indirect, special,
169
+ incidental, or consequential damages of any character arising as a
170
+ result of this License or out of the use or inability to use the
171
+ Work (including but not limited to damages for loss of goodwill,
172
+ work stoppage, computer failure or malfunction, or any and all
173
+ other commercial damages or losses), even if such Contributor
174
+ has been advised of the possibility of such damages.
175
+
176
+ 9. Accepting Warranty or Additional Liability. While redistributing
177
+ the Work or Derivative Works thereof, You may choose to offer,
178
+ and charge a fee for, acceptance of support, warranty, indemnity,
179
+ or other liability obligations and/or rights consistent with this
180
+ License. However, in accepting such obligations, You may act only
181
+ on Your own behalf and on Your sole responsibility, not on behalf
182
+ of any other Contributor, and only if You agree to indemnify,
183
+ defend, and hold each Contributor harmless for any liability
184
+ incurred by, or claims asserted against, such Contributor by reason
185
+ of your accepting any such warranty or additional liability.
186
+
187
+ END OF TERMS AND CONDITIONS
188
+
189
+ APPENDIX: How to apply the Apache License to your work.
190
+
191
+ To apply the Apache License to your work, attach the following
192
+ boilerplate notice, with the fields enclosed by brackets "[]"
193
+ replaced with your own identifying information. (Don't include
194
+ the brackets!) The text should be enclosed in the appropriate
195
+ comment syntax for the file format. We also recommend that a
196
+ file or class name and description of purpose be included on the
197
+ same "printed page" as the copyright notice for easier
198
+ identification within third-party archives.
199
+
200
+ Copyright [yyyy] [name of copyright owner]
201
+
202
+ Licensed under the Apache License, Version 2.0 (the "License");
203
+ you may not use this file except in compliance with the License.
204
+ You may obtain a copy of the License at
205
+
206
+ http://www.apache.org/licenses/LICENSE-2.0
207
+
208
+ Unless required by applicable law or agreed to in writing, software
209
+ distributed under the License is distributed on an "AS IS" BASIS,
210
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
211
+ See the License for the specific language governing permissions and
212
+ limitations under the License.
213
+
214
+ ----------------------------------------------------------------------------
215
+
216
+ GNU GENERAL PUBLIC LICENSE
217
+ Version 2, June 1991
218
+
219
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
220
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
221
+ Everyone is permitted to copy and distribute verbatim copies
222
+ of this license document, but changing it is not allowed.
223
+
224
+ Preamble
225
+
226
+ The licenses for most software are designed to take away your
227
+ freedom to share and change it. By contrast, the GNU General Public
228
+ License is intended to guarantee your freedom to share and change free
229
+ software--to make sure the software is free for all its users. This
230
+ General Public License applies to most of the Free Software
231
+ Foundation's software and to any other program whose authors commit to
232
+ using it. (Some other Free Software Foundation software is covered by
233
+ the GNU Lesser General Public License instead.) You can apply it to
234
+ your programs, too.
235
+
236
+ When we speak of free software, we are referring to freedom, not
237
+ price. Our General Public Licenses are designed to make sure that you
238
+ have the freedom to distribute copies of free software (and charge for
239
+ this service if you wish), that you receive source code or can get it
240
+ if you want it, that you can change the software or use pieces of it
241
+ in new free programs; and that you know you can do these things.
242
+
243
+ To protect your rights, we need to make restrictions that forbid
244
+ anyone to deny you these rights or to ask you to surrender the rights.
245
+ These restrictions translate to certain responsibilities for you if you
246
+ distribute copies of the software, or if you modify it.
247
+
248
+ For example, if you distribute copies of such a program, whether
249
+ gratis or for a fee, you must give the recipients all the rights that
250
+ you have. You must make sure that they, too, receive or can get the
251
+ source code. And you must show them these terms so they know their
252
+ rights.
253
+
254
+ We protect your rights with two steps: (1) copyright the software, and
255
+ (2) offer you this license which gives you legal permission to copy,
256
+ distribute and/or modify the software.
257
+
258
+ Also, for each author's protection and ours, we want to make certain
259
+ that everyone understands that there is no warranty for this free
260
+ software. If the software is modified by someone else and passed on, we
261
+ want its recipients to know that what they have is not the original, so
262
+ that any problems introduced by others will not reflect on the original
263
+ authors' reputations.
264
+
265
+ Finally, any free program is threatened constantly by software
266
+ patents. We wish to avoid the danger that redistributors of a free
267
+ program will individually obtain patent licenses, in effect making the
268
+ program proprietary. To prevent this, we have made it clear that any
269
+ patent must be licensed for everyone's free use or not licensed at all.
270
+
271
+ The precise terms and conditions for copying, distribution and
272
+ modification follow.
273
+
274
+ GNU GENERAL PUBLIC LICENSE
275
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
276
+
277
+ 0. This License applies to any program or other work which contains
278
+ a notice placed by the copyright holder saying it may be distributed
279
+ under the terms of this General Public License. The "Program", below,
280
+ refers to any such program or work, and a "work based on the Program"
281
+ means either the Program or any derivative work under copyright law:
282
+ that is to say, a work containing the Program or a portion of it,
283
+ either verbatim or with modifications and/or translated into another
284
+ language. (Hereinafter, translation is included without limitation in
285
+ the term "modification".) Each licensee is addressed as "you".
286
+
287
+ Activities other than copying, distribution and modification are not
288
+ covered by this License; they are outside its scope. The act of
289
+ running the Program is not restricted, and the output from the Program
290
+ is covered only if its contents constitute a work based on the
291
+ Program (independent of having been made by running the Program).
292
+ Whether that is true depends on what the Program does.
293
+
294
+ 1. You may copy and distribute verbatim copies of the Program's
295
+ source code as you receive it, in any medium, provided that you
296
+ conspicuously and appropriately publish on each copy an appropriate
297
+ copyright notice and disclaimer of warranty; keep intact all the
298
+ notices that refer to this License and to the absence of any warranty;
299
+ and give any other recipients of the Program a copy of this License
300
+ along with the Program.
301
+
302
+ You may charge a fee for the physical act of transferring a copy, and
303
+ you may at your option offer warranty protection in exchange for a fee.
304
+
305
+ 2. You may modify your copy or copies of the Program or any portion
306
+ of it, thus forming a work based on the Program, and copy and
307
+ distribute such modifications or work under the terms of Section 1
308
+ above, provided that you also meet all of these conditions:
309
+
310
+ a) You must cause the modified files to carry prominent notices
311
+ stating that you changed the files and the date of any change.
312
+
313
+ b) You must cause any work that you distribute or publish, that in
314
+ whole or in part contains or is derived from the Program or any
315
+ part thereof, to be licensed as a whole at no charge to all third
316
+ parties under the terms of this License.
317
+
318
+ c) If the modified program normally reads commands interactively
319
+ when run, you must cause it, when started running for such
320
+ interactive use in the most ordinary way, to print or display an
321
+ announcement including an appropriate copyright notice and a
322
+ notice that there is no warranty (or else, saying that you provide
323
+ a warranty) and that users may redistribute the program under
324
+ these conditions, and telling the user how to view a copy of this
325
+ License. (Exception: if the Program itself is interactive but
326
+ does not normally print such an announcement, your work based on
327
+ the Program is not required to print an announcement.)
328
+
329
+ These requirements apply to the modified work as a whole. If
330
+ identifiable sections of that work are not derived from the Program,
331
+ and can be reasonably considered independent and separate works in
332
+ themselves, then this License, and its terms, do not apply to those
333
+ sections when you distribute them as separate works. But when you
334
+ distribute the same sections as part of a whole which is a work based
335
+ on the Program, the distribution of the whole must be on the terms of
336
+ this License, whose permissions for other licensees extend to the
337
+ entire whole, and thus to each and every part regardless of who wrote it.
338
+
339
+ Thus, it is not the intent of this section to claim rights or contest
340
+ your rights to work written entirely by you; rather, the intent is to
341
+ exercise the right to control the distribution of derivative or
342
+ collective works based on the Program.
343
+
344
+ In addition, mere aggregation of another work not based on the Program
345
+ with the Program (or with a work based on the Program) on a volume of
346
+ a storage or distribution medium does not bring the other work under
347
+ the scope of this License.
348
+
349
+ 3. You may copy and distribute the Program (or a work based on it,
350
+ under Section 2) in object code or executable form under the terms of
351
+ Sections 1 and 2 above provided that you also do one of the following:
352
+
353
+ a) Accompany it with the complete corresponding machine-readable
354
+ source code, which must be distributed under the terms of Sections
355
+ 1 and 2 above on a medium customarily used for software interchange; or,
356
+
357
+ b) Accompany it with a written offer, valid for at least three
358
+ years, to give any third party, for a charge no more than your
359
+ cost of physically performing source distribution, a complete
360
+ machine-readable copy of the corresponding source code, to be
361
+ distributed under the terms of Sections 1 and 2 above on a medium
362
+ customarily used for software interchange; or,
363
+
364
+ c) Accompany it with the information you received as to the offer
365
+ to distribute corresponding source code. (This alternative is
366
+ allowed only for noncommercial distribution and only if you
367
+ received the program in object code or executable form with such
368
+ an offer, in accord with Subsection b above.)
369
+
370
+ The source code for a work means the preferred form of the work for
371
+ making modifications to it. For an executable work, complete source
372
+ code means all the source code for all modules it contains, plus any
373
+ associated interface definition files, plus the scripts used to
374
+ control compilation and installation of the executable. However, as a
375
+ special exception, the source code distributed need not include
376
+ anything that is normally distributed (in either source or binary
377
+ form) with the major components (compiler, kernel, and so on) of the
378
+ operating system on which the executable runs, unless that component
379
+ itself accompanies the executable.
380
+
381
+ If distribution of executable or object code is made by offering
382
+ access to copy from a designated place, then offering equivalent
383
+ access to copy the source code from the same place counts as
384
+ distribution of the source code, even though third parties are not
385
+ compelled to copy the source along with the object code.
386
+
387
+ 4. You may not copy, modify, sublicense, or distribute the Program
388
+ except as expressly provided under this License. Any attempt
389
+ otherwise to copy, modify, sublicense or distribute the Program is
390
+ void, and will automatically terminate your rights under this License.
391
+ However, parties who have received copies, or rights, from you under
392
+ this License will not have their licenses terminated so long as such
393
+ parties remain in full compliance.
394
+
395
+ 5. You are not required to accept this License, since you have not
396
+ signed it. However, nothing else grants you permission to modify or
397
+ distribute the Program or its derivative works. These actions are
398
+ prohibited by law if you do not accept this License. Therefore, by
399
+ modifying or distributing the Program (or any work based on the
400
+ Program), you indicate your acceptance of this License to do so, and
401
+ all its terms and conditions for copying, distributing or modifying
402
+ the Program or works based on it.
403
+
404
+ 6. Each time you redistribute the Program (or any work based on the
405
+ Program), the recipient automatically receives a license from the
406
+ original licensor to copy, distribute or modify the Program subject to
407
+ these terms and conditions. You may not impose any further
408
+ restrictions on the recipients' exercise of the rights granted herein.
409
+ You are not responsible for enforcing compliance by third parties to
410
+ this License.
411
+
412
+ 7. If, as a consequence of a court judgment or allegation of patent
413
+ infringement or for any other reason (not limited to patent issues),
414
+ conditions are imposed on you (whether by court order, agreement or
415
+ otherwise) that contradict the conditions of this License, they do not
416
+ excuse you from the conditions of this License. If you cannot
417
+ distribute so as to satisfy simultaneously your obligations under this
418
+ License and any other pertinent obligations, then as a consequence you
419
+ may not distribute the Program at all. For example, if a patent
420
+ license would not permit royalty-free redistribution of the Program by
421
+ all those who receive copies directly or indirectly through you, then
422
+ the only way you could satisfy both it and this License would be to
423
+ refrain entirely from distribution of the Program.
424
+
425
+ If any portion of this section is held invalid or unenforceable under
426
+ any particular circumstance, the balance of the section is intended to
427
+ apply and the section as a whole is intended to apply in other
428
+ circumstances.
429
+
430
+ It is not the purpose of this section to induce you to infringe any
431
+ patents or other property right claims or to contest validity of any
432
+ such claims; this section has the sole purpose of protecting the
433
+ integrity of the free software distribution system, which is
434
+ implemented by public license practices. Many people have made
435
+ generous contributions to the wide range of software distributed
436
+ through that system in reliance on consistent application of that
437
+ system; it is up to the author/donor to decide if he or she is willing
438
+ to distribute software through any other system and a licensee cannot
439
+ impose that choice.
440
+
441
+ This section is intended to make thoroughly clear what is believed to
442
+ be a consequence of the rest of this License.
443
+
444
+ 8. If the distribution and/or use of the Program is restricted in
445
+ certain countries either by patents or by copyrighted interfaces, the
446
+ original copyright holder who places the Program under this License
447
+ may add an explicit geographical distribution limitation excluding
448
+ those countries, so that distribution is permitted only in or among
449
+ countries not thus excluded. In such case, this License incorporates
450
+ the limitation as if written in the body of this License.
451
+
452
+ 9. The Free Software Foundation may publish revised and/or new versions
453
+ of the General Public License from time to time. Such new versions will
454
+ be similar in spirit to the present version, but may differ in detail to
455
+ address new problems or concerns.
456
+
457
+ Each version is given a distinguishing version number. If the Program
458
+ specifies a version number of this License which applies to it and "any
459
+ later version", you have the option of following the terms and conditions
460
+ either of that version or of any later version published by the Free
461
+ Software Foundation. If the Program does not specify a version number of
462
+ this License, you may choose any version ever published by the Free Software
463
+ Foundation.
464
+
465
+ 10. If you wish to incorporate parts of the Program into other free
466
+ programs whose distribution conditions are different, write to the author
467
+ to ask for permission. For software which is copyrighted by the Free
468
+ Software Foundation, write to the Free Software Foundation; we sometimes
469
+ make exceptions for this. Our decision will be guided by the two goals
470
+ of preserving the free status of all derivatives of our free software and
471
+ of promoting the sharing and reuse of software generally.
472
+
473
+ NO WARRANTY
474
+
475
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
476
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
477
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
478
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
479
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
480
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
481
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
482
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
483
+ REPAIR OR CORRECTION.
484
+
485
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
486
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
487
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
488
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
489
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
490
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
491
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
492
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
493
+ POSSIBILITY OF SUCH DAMAGES.
494
+
495
+ END OF TERMS AND CONDITIONS
496
+
497
+ How to Apply These Terms to Your New Programs
498
+
499
+ If you develop a new program, and you want it to be of the greatest
500
+ possible use to the public, the best way to achieve this is to make it
501
+ free software which everyone can redistribute and change under these terms.
502
+
503
+ To do so, attach the following notices to the program. It is safest
504
+ to attach them to the start of each source file to most effectively
505
+ convey the exclusion of warranty; and each file should have at least
506
+ the "copyright" line and a pointer to where the full notice is found.
507
+
508
+ <one line to give the program's name and a brief idea of what it does.>
509
+ Copyright (C) <year> <name of author>
510
+
511
+ This program is free software; you can redistribute it and/or modify
512
+ it under the terms of the GNU General Public License as published by
513
+ the Free Software Foundation; either version 2 of the License, or
514
+ (at your option) any later version.
515
+
516
+ This program is distributed in the hope that it will be useful,
517
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
518
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
519
+ GNU General Public License for more details.
520
+
521
+ You should have received a copy of the GNU General Public License along
522
+ with this program; if not, write to the Free Software Foundation, Inc.,
523
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
524
+
525
+ Also add information on how to contact you by electronic and paper mail.
526
+
527
+ If the program is interactive, make it output a short notice like this
528
+ when it starts in an interactive mode:
529
+
530
+ Gnomovision version 69, Copyright (C) year name of author
531
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
532
+ This is free software, and you are welcome to redistribute it
533
+ under certain conditions; type `show c' for details.
534
+
535
+ The hypothetical commands `show w' and `show c' should show the appropriate
536
+ parts of the General Public License. Of course, the commands you use may
537
+ be called something other than `show w' and `show c'; they could even be
538
+ mouse-clicks or menu items--whatever suits your program.
539
+
540
+ You should also get your employer (if you work as a programmer) or your
541
+ school, if any, to sign a "copyright disclaimer" for the program, if
542
+ necessary. Here is a sample; alter the names:
543
+
544
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
545
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
546
+
547
+ <signature of Ty Coon>, 1 April 1989
548
+ Ty Coon, President of Vice
549
+
550
+ This General Public License does not permit incorporating your program into
551
+ proprietary programs. If your program is a subroutine library, you may
552
+ consider it more useful to permit linking proprietary applications with the
553
+ library. If this is what you want to do, use the GNU Lesser General
554
+ Public License instead of this License.
555
+
556
+ ----------------------------------------------------------------------------
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in wpa_cli_ruby.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # WpaCliRuby
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'wpa_cli_ruby'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install wpa_cli_ruby
18
+
19
+ ## Usage
20
+
21
+ require 'wpa_cli_ruby'
22
+
23
+ wpa_cli = WpaCli.new
24
+
25
+ # Get a list of available Wifi access points
26
+ wpa_cli.scan
27
+ scan_results = wpa_cli.scan_results
28
+
29
+ # Connect to the first network
30
+ network_id = wpa_cli.add_network
31
+ wpa_cli.set_network(network_id, "ssid", scan_results.first.ssid)
32
+ wpa_cli.set_network(network_id, "psk", "password")
33
+
34
+ # Enable the network to connect immediately
35
+ wpa_cli.enable_network(network_id)
36
+
37
+ ## Contributing
38
+
39
+ 1. Fork it
40
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
41
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
42
+ 4. Push to the branch (`git push origin my-new-feature`)
43
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'lib/wpa_cli_ruby'
6
+ t.test_files = FileList['test/lib/wpa_cli_ruby/*_test.rb']
7
+ t.verbose = true
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,41 @@
1
+ # A dummy wpa_cli wrapper that can be used in place of WpaCliRuby but
2
+ # which returns canned responses. This is useful for testing in
3
+ # environments that do not have/support wpa_cli
4
+ module WpaCliRuby
5
+ class DummyWpaCliWrapper
6
+ def scan
7
+ "Selected interface 'wlan0'\nOK\n"
8
+ end
9
+
10
+ def scan_results
11
+ response = <<-eos
12
+ Selected interface 'wlan0'
13
+ bssid / frequency / signal level / flags / ssid
14
+ 12:34:56:78:aa:bb 2437 -47 [WPA-EAP-TKIP][WPA2-EAP-CCMP][ESS] ssid1
15
+ 12:34:56:78:bb:cc 2412 -57 [WPA2-PSK-CCMP][ESS] ssid2
16
+ 43:34:56:78:bb:cc 2412 -87 [WPA-EAP-TKIP][WPA2-EAP-CCMP][ESS] ssid1
17
+ eos
18
+ response
19
+ end
20
+
21
+ def add_network
22
+ "Selected interface 'wlan0'\nOK\n"
23
+ end
24
+
25
+ def set_network(network_id, key, value)
26
+ "Selected interface 'wlan0'\nOK\n"
27
+ end
28
+
29
+ def get_network(network_id, key)
30
+ raise NetworkNotFound
31
+ end
32
+
33
+ def enable_network(network_id)
34
+ "Selected interface 'wlan0'\nOK\n"
35
+ end
36
+
37
+ def save_config
38
+ "Selected interface 'wlan0'\nOK\n"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ module WpaCliRuby
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,90 @@
1
+ module WpaCliRuby
2
+ class EnableNetworkFailure < Exception; end
3
+ class SetNetworkFailure < Exception; end
4
+ class NetworkNotFound < Exception; end
5
+ class SaveConfigFailure < Exception; end
6
+
7
+ class WpaCli
8
+ class ScanResult < Struct.new(:bssid, :frequency, :signal_level, :flags, :ssid)
9
+ def initialize(*args)
10
+ super(*args)
11
+ self.signal_level = self.signal_level.to_i
12
+ self.frequency = self.frequency.to_i
13
+ end
14
+
15
+ # Instantiate from a tab delimited string (as given by `wpa_cli scan_results`)
16
+ #
17
+ # @param [String] tab delimited string in the form bssid\tfrequency\tsignal level\tflags\tssid
18
+ def self.from_string(string)
19
+ new(*string.split("\t"))
20
+ end
21
+ end
22
+
23
+ class Response < Struct.new(:interface, :status)
24
+ def ok?
25
+ status == "OK"
26
+ end
27
+ end
28
+
29
+ def initialize(wrapper = WpaCliWrapper.new)
30
+ @wrapper = wrapper
31
+ end
32
+
33
+ def scan
34
+ response = @wrapper.scan
35
+ parse_interface_status_response(response)
36
+ end
37
+
38
+ def scan_results
39
+ response = @wrapper.scan_results
40
+ interface, header, *results = response.split("\n")
41
+ results.map { |result| ScanResult.from_string(result) }
42
+ end
43
+
44
+ def add_network
45
+ response = @wrapper.add_network
46
+ _, status = response.split("\n")
47
+ network_id = status.to_i
48
+ end
49
+
50
+ def set_network(network_id, key, value)
51
+ response = @wrapper.set_network(network_id, key, value)
52
+ response = parse_interface_status_response(response)
53
+ raise SetNetworkFailure unless response.ok?
54
+
55
+ response
56
+ end
57
+
58
+ def save_config
59
+ response = @wrapper.save_config
60
+ response = parse_interface_status_response(response)
61
+ raise SaveConfigFailure unless response.ok?
62
+
63
+ response
64
+ end
65
+
66
+ def get_network(network_id, key)
67
+ response = @wrapper.get_network(network_id, key)
68
+ _, value = response.split("\n")
69
+
70
+ raise NetworkNotFound if value == "FAIL"
71
+
72
+ value
73
+ end
74
+
75
+ def enable_network(network_id)
76
+ response = @wrapper.enable_network(network_id)
77
+ response = parse_interface_status_response(response)
78
+ raise EnableNetworkFailure unless response.ok?
79
+
80
+ response
81
+ end
82
+
83
+ private
84
+ def parse_interface_status_response(response)
85
+ interface_response, status = response.split("\n")
86
+ interface = interface_response.scan(/'(.*)'/).flatten.first
87
+ Response.new(interface, status)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,42 @@
1
+ module WpaCliRuby
2
+ class WpaCliWrapper
3
+ def execute(cmd)
4
+ %x[#{cmd}]
5
+ end
6
+
7
+ def scan
8
+ cmd = "wpa_cli scan"
9
+ execute(cmd)
10
+ end
11
+
12
+ def scan_results
13
+ cmd = "wpa_cli scan_results"
14
+ execute(cmd)
15
+ end
16
+
17
+ def add_network
18
+ cmd = "wpa_cli add_network"
19
+ execute(cmd)
20
+ end
21
+
22
+ def set_network(network_id, key, value)
23
+ cmd = "wpa_cli set_network #{network_id} #{key} '\"#{value}\"'"
24
+ execute(cmd)
25
+ end
26
+
27
+ def get_network(network_id, key)
28
+ cmd = "wpa_cli get_network #{network_id} #{key}"
29
+ execute(cmd)
30
+ end
31
+
32
+ def enable_network(network_id)
33
+ cmd = "wpa_cli enable_network #{network_id}"
34
+ execute(cmd)
35
+ end
36
+
37
+ def save_config
38
+ cmd = "wpa_cli save_config"
39
+ execute(cmd)
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,7 @@
1
+ require "wpa_cli_ruby/version"
2
+ require "wpa_cli_ruby/wpa_cli"
3
+ require "wpa_cli_ruby/wpa_cli_wrapper"
4
+ require "wpa_cli_ruby/dummy_wpa_cli_wrapper"
5
+
6
+ module WpaCliRuby
7
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../../test_helper'
2
+
3
+ describe WpaCliRuby do
4
+ it "must have a version" do
5
+ refute WpaCliRuby::VERSION.nil?
6
+ end
7
+ end
@@ -0,0 +1,115 @@
1
+ require_relative '../../test_helper'
2
+
3
+ describe WpaCliRuby do
4
+ before do
5
+ @wrapper = mock()
6
+ @wpa_cli = WpaCliRuby::WpaCli.new(@wrapper)
7
+ end
8
+
9
+ it "can be instantiated" do
10
+ assert @wpa_cli
11
+ end
12
+
13
+ describe "scan" do
14
+ before do
15
+ @wrapper.expects(:scan).returns("Selected interface 'wlan0'\nOK\n")
16
+ end
17
+
18
+ it "returns the interface and the status code" do
19
+ response = @wpa_cli.scan
20
+ assert_equal 'wlan0', response.interface
21
+ assert response.ok?
22
+ end
23
+ end
24
+
25
+ describe "add_network" do
26
+ before do
27
+ @wrapper.expects(:add_network).returns("Selected interface 'wlan0'\n10\n")
28
+ end
29
+
30
+ it "returns the interface and the status code" do
31
+ network_id = @wpa_cli.add_network
32
+ assert_equal 10, network_id
33
+ end
34
+ end
35
+
36
+ describe "save_config" do
37
+ before do
38
+ @wrapper.expects(:save_config).returns("Selected interface 'wlan0'\nOK\n")
39
+ end
40
+
41
+ it "returns the interface and the status code" do
42
+ response = @wpa_cli.save_config
43
+ assert_equal 'wlan0', response.interface
44
+ assert response.ok?
45
+ end
46
+ end
47
+
48
+ describe "set_network" do
49
+ it "returns the interface and the status code" do
50
+ @wrapper.expects(:set_network).with(0, 'test', 'test').returns("Selected interface 'wlan0'\nOK\n")
51
+
52
+ response = @wpa_cli.set_network(0, 'test', 'test')
53
+ assert_equal 'wlan0', response.interface
54
+ assert response.ok?
55
+ end
56
+
57
+ it "raises for unsuccessful setting" do
58
+ @wrapper.expects(:set_network).with(0, 'test', 'test').returns("Selected interface 'wlan0'\nFAIL\n")
59
+ assert_raises(WpaCliRuby::SetNetworkFailure) { @wpa_cli.set_network(0, 'test', 'test') }
60
+ end
61
+ end
62
+
63
+ describe "get_network" do
64
+ it "returns the ssid" do
65
+ @wrapper.expects(:get_network).with(0, 'ssid').returns("Selected interface 'wlan0'\nssid1")
66
+
67
+ ssid = @wpa_cli.get_network(0, 'ssid')
68
+ assert_equal 'ssid1', ssid
69
+ end
70
+
71
+ it "raises for unknown network" do
72
+ @wrapper.expects(:get_network).with(1, 'ssid').returns("Selected interface 'wlan0'\nFAIL\n")
73
+ assert_raises(WpaCliRuby::NetworkNotFound) { @wpa_cli.get_network(1, 'ssid') }
74
+ end
75
+ end
76
+
77
+ describe "enable_network" do
78
+ it "returns the interface and the status code for successful enabling" do
79
+ @wrapper.expects(:enable_network).with(0).returns("Selected interface 'wlan0'\nOK\n")
80
+
81
+ response = @wpa_cli.enable_network(0)
82
+
83
+ assert_equal 'wlan0', response.interface
84
+ assert response.ok?
85
+ end
86
+
87
+ it "raises for unsuccessful enabling" do
88
+ @wrapper.expects(:enable_network).with(1).returns("Selected interface 'wlan0'\nFAIL\n")
89
+ assert_raises(WpaCliRuby::EnableNetworkFailure) { @wpa_cli.enable_network(1) }
90
+ end
91
+ end
92
+
93
+ describe "scan_results" do
94
+ before do
95
+ response = <<-eos
96
+ Selected interface 'wlan0'
97
+ bssid / frequency / signal level / flags / ssid
98
+ 12:34:56:78:aa:bb 2437 -47 [WPA-EAP-TKIP][WPA2-EAP-CCMP][ESS] ssid1
99
+ 12:34:56:78:bb:cc 2412 -57 [WPA2-PSK-CCMP][ESS] ssid2
100
+ eos
101
+ @wrapper.expects(:scan_results).returns(response)
102
+ end
103
+
104
+ it "returns an array of ScanResult objects" do
105
+ scan_results = @wpa_cli.scan_results
106
+ assert_equal 2, scan_results.length
107
+
108
+ assert_equal 'ssid1', scan_results[0].ssid
109
+ assert_equal -47, scan_results[0].signal_level
110
+ assert_equal 2437, scan_results[0].frequency
111
+
112
+ assert_equal 'ssid2', scan_results[1].ssid
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,56 @@
1
+ require_relative '../../test_helper'
2
+
3
+ describe WpaCliRuby do
4
+ before do
5
+ @wrapper = WpaCliRuby::WpaCliWrapper.new
6
+ end
7
+
8
+ describe "scan" do
9
+ it "calls execute with the correct string" do
10
+ @wrapper.expects(:execute).with("wpa_cli scan")
11
+ @wrapper.scan
12
+ end
13
+ end
14
+
15
+ describe "scan_results" do
16
+ it "calls execute with the correct string" do
17
+ @wrapper.expects(:execute).with("wpa_cli scan_results")
18
+ @wrapper.scan_results
19
+ end
20
+ end
21
+
22
+ describe "add_network" do
23
+ it "calls execute with the correct string" do
24
+ @wrapper.expects(:execute).with("wpa_cli add_network")
25
+ @wrapper.add_network
26
+ end
27
+ end
28
+
29
+ describe "set_network" do
30
+ it "calls execute with the correct string" do
31
+ @wrapper.expects(:execute).with("wpa_cli set_network 0 ssid '\"network_ssid\"'")
32
+ @wrapper.set_network(0, 'ssid', 'network_ssid')
33
+ end
34
+ end
35
+
36
+ describe "get_network" do
37
+ it "calls execute with the correct string" do
38
+ @wrapper.expects(:execute).with("wpa_cli get_network 0 ssid")
39
+ @wrapper.get_network(0, 'ssid')
40
+ end
41
+ end
42
+
43
+ describe "enable_network" do
44
+ it "calls execute with the correct string" do
45
+ @wrapper.expects(:execute).with("wpa_cli enable_network 0")
46
+ @wrapper.enable_network(0)
47
+ end
48
+ end
49
+
50
+ describe "save_config" do
51
+ it "calls execute with the correct string" do
52
+ @wrapper.expects(:execute).with("wpa_cli save_config")
53
+ @wrapper.save_config
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,3 @@
1
+ require 'minitest/autorun'
2
+ require 'mocha'
3
+ require File.expand_path('../../lib/wpa_cli_ruby.rb', __FILE__)
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'wpa_cli_ruby/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "wpa_cli_ruby"
8
+ spec.version = WpaCliRuby::VERSION
9
+ spec.authors = ["Chris Lowis"]
10
+ spec.email = ["chris.lowis@gmail.com"]
11
+ spec.description = %q{A ruby wrapper for the wpa_cli command line utility}
12
+ spec.summary = %q{A ruby wrapper for the wpa_cli command line utility}
13
+ spec.homepage = ""
14
+ spec.license = "Apache"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "mocha"
24
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: wpa_cli_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Chris Lowis
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-08-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: mocha
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: A ruby wrapper for the wpa_cli command line utility
63
+ email:
64
+ - chris.lowis@gmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - AUTHORS
71
+ - COPYING
72
+ - Gemfile
73
+ - README.md
74
+ - Rakefile
75
+ - lib/wpa_cli_ruby.rb
76
+ - lib/wpa_cli_ruby/dummy_wpa_cli_wrapper.rb
77
+ - lib/wpa_cli_ruby/version.rb
78
+ - lib/wpa_cli_ruby/wpa_cli.rb
79
+ - lib/wpa_cli_ruby/wpa_cli_wrapper.rb
80
+ - test/lib/wpa_cli_ruby/version_test.rb
81
+ - test/lib/wpa_cli_ruby/wpa_cli_test.rb
82
+ - test/lib/wpa_cli_ruby/wpa_cli_wrapper_test.rb
83
+ - test/test_helper.rb
84
+ - wpa_cli_ruby.gemspec
85
+ homepage: ''
86
+ licenses:
87
+ - Apache
88
+ post_install_message:
89
+ rdoc_options: []
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 1.8.23
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: A ruby wrapper for the wpa_cli command line utility
110
+ test_files:
111
+ - test/lib/wpa_cli_ruby/version_test.rb
112
+ - test/lib/wpa_cli_ruby/wpa_cli_test.rb
113
+ - test/lib/wpa_cli_ruby/wpa_cli_wrapper_test.rb
114
+ - test/test_helper.rb