fonbok 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 056e8372d8b71beedd882ea5faeef810a0946906
4
+ data.tar.gz: 829d6ded4be0830e9e29cda231f322028ec69cdc
5
+ SHA512:
6
+ metadata.gz: b9cb194f03b5087307915e7258f52f87d5ed5777253f216fd863015e01e319aab45bdd7f25b8f27103154f58dd8693f8781e8054441091a91b485b1895fdca45
7
+ data.tar.gz: d3cf958fb9ab2cc28205a0f5983051067d603bd40ff2af2e99f12588e8fd1f503125609c1d28772871f948bd091b99b507a638bc678181990712374e57c6b564
@@ -0,0 +1,5 @@
1
+ �]�]��(��vpq� ���y�X�$�c1|$��!;�tսZ�L�/ڐ6�͕S2 g�j@b?+x[t|1?�%);e��II:�v�:��Mc�
2
+ p~(O\˲�z۬#8=P{�A�
3
+ :�Ն�6�3k v��@ZW�$�����j�GuJ�$c������7��[ ��Bр��
4
+ H��ȖxۍN!�w�\��)
5
+ H��Cm���C}��n����#�i��Lɦ9��w�u �$�b�c9��Y��v0Ͽk�+L���0�
Binary file
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format progress
2
+ --color
@@ -0,0 +1,16 @@
1
+ require: rubocop-rspec
2
+
3
+ AllCops:
4
+ DisplayCopNames: true
5
+ DisplayStyleGuide: true
6
+ ExtraDetails: true
7
+ TargetRubyVersion: 2.4
8
+
9
+ Style/Documentation:
10
+ Enabled: false
11
+
12
+ Metrics/LineLength:
13
+ Max: 120
14
+
15
+ Style/FrozenStringLiteralComment:
16
+ Enabled: false
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.4.1
5
+ before_install: gem install bundler -v 1.15.3
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in fonbok.gemspec
6
+ gemspec
@@ -0,0 +1,21 @@
1
+ notification :terminal_notifier if `uname`.match?(/Darwin/)
2
+
3
+ guard :rubocop, all_on_start: true do
4
+ watch(/.+\.rb$/)
5
+ watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
6
+ end
7
+
8
+ guard :rspec, cmd: 'bundle exec rspec', all_on_start: true, all_after_pass: true do
9
+ require 'guard/rspec/dsl'
10
+ dsl = Guard::RSpec::Dsl.new(self)
11
+
12
+ # RSpec files
13
+ rspec = dsl.rspec
14
+ watch(rspec.spec_helper) { rspec.spec_dir }
15
+ watch(rspec.spec_support) { rspec.spec_dir }
16
+ watch(rspec.spec_files)
17
+
18
+ # Ruby files
19
+ ruby = dsl.ruby
20
+ dsl.watch_spec_files_for(ruby.lib_files)
21
+ end
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2017 Nicolai Constantin Reuschling
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,55 @@
1
+ # Fonbok
2
+
3
+ ## Abstract
4
+
5
+ fonbok reads and writes phonebook files for AVM FRITZ!Box devises.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'fonbok'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install fonbok
22
+
23
+ ## Usage
24
+
25
+ ### Import of phonebook XML file
26
+
27
+ ```ruby
28
+ require 'fonbok'
29
+
30
+ reader = Fonbok::Reader.new(path_to_your_phonebook_xml_file)
31
+ phonebook = reader.import
32
+ puts phonebook
33
+
34
+ puts phonebook.name
35
+ phonebook.contacts.each do |contact|
36
+ puts contact.name
37
+ contact.numbers.each do |number|
38
+ puts number
39
+ end
40
+ end
41
+ ```
42
+
43
+ ## Development
44
+
45
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
46
+
47
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
48
+
49
+ ## Contributing
50
+
51
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ncreuschling/fonbok.
52
+
53
+ ## License
54
+
55
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'fonbok'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMRAwDgYDVQQDDAduaWNv
3
+ bGFpMRowGAYKCZImiZPyLGQBGRYKcmV1c2NobGluZzEUMBIGCgmSJomT8ixkARkW
4
+ BG5hbWUwHhcNMTcwODA2MTIwNjI4WhcNMTgwODA2MTIwNjI4WjBEMRAwDgYDVQQD
5
+ DAduaWNvbGFpMRowGAYKCZImiZPyLGQBGRYKcmV1c2NobGluZzEUMBIGCgmSJomT
6
+ 8ixkARkWBG5hbWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzn4mq
7
+ to48QgLNViGWjGJvv9j17Kvabn9G15+1ZN+/vPwIkSGXIVO6NmuW9u5GBxkRjDL1
8
+ O0xX2FcBh8dQ/U/sTWjBiS3FktrvU3g+dCiW1uMa/eJl7lSEKZpHN8y7BdSgW3xt
9
+ v0H/LQtFsdGpQ7VBr9lY0WeIWq7Bdoyq4v8CJ3neJHJ8GFAZr6dvu4fvN3u8zQvI
10
+ N71GKcxQeiR/CsFjgr9FN2p9Ug8H9EXKutIyXTP8o4AM7vd8r05Co4Jd8UJoPrJ0
11
+ zR6yOfsIrLAeC5Q4wzDKCvRJgBMbdAYs6xFXRul+Z5zfQCp4gftPhrthwsXm52K7
12
+ 6UAW7aQPuDGL7K1TAgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAd
13
+ BgNVHQ4EFgQU5aNu7aKiwMHITmYFkUKhHOUKpFYwIgYDVR0RBBswGYEXbmljb2xh
14
+ aUByZXVzY2hsaW5nLm5hbWUwIgYDVR0SBBswGYEXbmljb2xhaUByZXVzY2hsaW5n
15
+ Lm5hbWUwDQYJKoZIhvcNAQEFBQADggEBADbLyOY1TYZO0yH3EDJyXp+G3mBe4jiv
16
+ wDXsPv4QtFfNkgNmIq74X6CEvsOMYWSwcQunzOf8DCHp8E88mmnYY1bVGgOFaGqv
17
+ 1r8iyDvx39b9RvvJVQLULaepY934ikm4TjqhrRwawzraTlt604FwlnWYP49pqa2t
18
+ WwqR9Bjr81oF2v2+YeKtxnt5Pp7jBi9irgAby/G/TiEGBmuxE2dCjCPFU+7L6asP
19
+ Y4KofpYv9MbfrHhiYgYtC58x0bkw2hZVKR6ekEx6oQHwfmkPv5sFPbrc+Zc8IIYw
20
+ z5bj9IZwmsyUGVPH1cecBekq4WJhhzEYeYOdIeJsXNKJBV0GOva/fQk=
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,43 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'fonbok/version'
6
+
7
+ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
8
+ spec.name = 'fonbok'
9
+ spec.version = Fonbok::VERSION
10
+ spec.authors = ['Nicolai Reuschling']
11
+ spec.email = ['nicolai@reuschling.name']
12
+
13
+ spec.summary = 'fonbok reads and writes phonebooks for AVM FRITZ!Box devices.'
14
+ spec.description = 'fonbok reads and writes phonebooks (XML files) for AVM FRITZ!Box devices.'
15
+ spec.homepage = 'https://github.com/ncreuschling/fonbok'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(test|spec|features)/})
20
+ end
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ['lib']
24
+
25
+ # gem signing
26
+ spec.cert_chain = ['certs/fonbok-public_cert.pem']
27
+ spec.signing_key = File.expand_path("~/.ssh/fonbok-private_key.pem") if $0 =~ /gem\z/
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.15'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.0'
32
+ spec.add_development_dependency 'pry'
33
+ spec.add_development_dependency 'rubocop'
34
+ spec.add_development_dependency 'rubocop-rspec'
35
+ spec.add_development_dependency 'guard'
36
+ spec.add_development_dependency 'guard-rspec'
37
+ spec.add_development_dependency 'guard-rubocop'
38
+ spec.add_development_dependency 'terminal-notifier'
39
+ spec.add_development_dependency 'terminal-notifier-guard'
40
+ spec.add_development_dependency 'simplecov'
41
+
42
+ spec.add_dependency 'nokogiri'
43
+ end
@@ -0,0 +1,7 @@
1
+ require 'fonbok/version'
2
+ require 'fonbok/formatters'
3
+ require 'fonbok/reader'
4
+ require 'fonbok/writer'
5
+
6
+ module Fonbok
7
+ end
@@ -0,0 +1,17 @@
1
+ require_relative 'number'
2
+
3
+ module Fonbok
4
+ class Contact
5
+ attr_reader :name, :numbers
6
+
7
+ def initialize(name:, numbers: [])
8
+ @name = String(name)
9
+ @numbers = Array(numbers)
10
+ end
11
+
12
+ def add_number(number)
13
+ @numbers << number
14
+ self
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'number'
2
+ require_relative 'formatters/simple_number_formatter'
3
+
4
+ module Fonbok
5
+ class FaxWorkNumber < Number
6
+ def initialize(number, formatter: Formatters::SimpleNumberFormatter.new(prefix: 'fax'))
7
+ super
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ module Fonbok
2
+ module Formatters
3
+ end
4
+ end
@@ -0,0 +1,14 @@
1
+ module Fonbok
2
+ module Formatters
3
+ class SimpleNumberFormatter
4
+ def initialize(prefix: nil)
5
+ @prefix = prefix
6
+ end
7
+
8
+ def format(number)
9
+ return number.number unless @prefix
10
+ "#{@prefix}: #{number.number}"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module Fonbok
2
+ module Formatters
3
+ class SimplePhonebookFormatter
4
+ def format(phonebook)
5
+ phonebook.contacts.inject("#{phonebook.name}\n") do |contact_result, contact|
6
+ contact_result << " #{contact.name}\n"
7
+ contact.numbers.inject(contact_result) do |number_result, number|
8
+ number_result << " #{number}\n"
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'number'
2
+ require_relative 'formatters/simple_number_formatter'
3
+
4
+ module Fonbok
5
+ class HomeNumber < Number
6
+ def initialize(number, formatter: Formatters::SimpleNumberFormatter.new(prefix: 'home'))
7
+ super
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'number'
2
+ require_relative 'formatters/simple_number_formatter'
3
+
4
+ module Fonbok
5
+ class MobileNumber < Number
6
+ def initialize(number, formatter: Formatters::SimpleNumberFormatter.new(prefix: 'mobile'))
7
+ super
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'formatters/simple_number_formatter'
2
+
3
+ module Fonbok
4
+ class Number
5
+ attr_reader :number
6
+
7
+ def initialize(number, formatter: Formatters::SimpleNumberFormatter.new(prefix: 'phone'))
8
+ @number = String(number)
9
+ @formatter = formatter
10
+ end
11
+
12
+ def to_s
13
+ @formatter.format(self)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'number'
2
+ require_relative 'fax_work_number'
3
+ require_relative 'home_number'
4
+ require_relative 'mobile_number'
5
+ require_relative 'work_number'
6
+
7
+ module Fonbok
8
+ class NumberClassCaster
9
+ NUMBER_CLASS_MAP = Hash.new(Number).update(
10
+ 'fax_work' => FaxWorkNumber,
11
+ 'home' => HomeNumber,
12
+ 'mobile' => MobileNumber,
13
+ 'work' => WorkNumber
14
+ ).freeze
15
+
16
+ def self.cast(type, number)
17
+ NUMBER_CLASS_MAP[type].new number
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ require_relative 'contact'
2
+ require_relative 'formatters/simple_phonebook_formatter'
3
+
4
+ module Fonbok
5
+ class Phonebook
6
+ attr_reader :name, :contacts
7
+
8
+ def initialize(name:, contacts: [], formatter: Formatters::SimplePhonebookFormatter.new)
9
+ @name = String(name)
10
+ @contacts = Array(contacts)
11
+ @formatter = formatter
12
+ end
13
+
14
+ def add_contact(contact)
15
+ @contacts << contact
16
+ self
17
+ end
18
+
19
+ def to_s
20
+ @formatter.format(self)
21
+ end
22
+
23
+ def inspect
24
+ "<Fonbok::Phonebook name: #{name}>"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,45 @@
1
+ require 'nokogiri'
2
+ require_relative 'number_class_caster'
3
+ require_relative 'phonebook'
4
+
5
+ module Fonbok
6
+ class Reader
7
+ def initialize(path)
8
+ @path = path
9
+ @doc = Nokogiri::XML(File.open(@path, 'r'))
10
+ end
11
+
12
+ def import
13
+ phonebook_from_xml.tap do |phonebook|
14
+ @doc.xpath('/phonebooks/phonebook/contact').each do |xml_contact|
15
+ contact = contact_from_xml(xml_contact)
16
+ xml_contact.xpath('telephony/number').each do |xml_number|
17
+ number = number_from_xml(xml_number)
18
+ contact.add_number(number)
19
+ end
20
+ phonebook.add_contact(contact)
21
+ end
22
+ end
23
+ end
24
+
25
+ def inspect
26
+ "<Fonbok::Reader path: #{@path}>"
27
+ end
28
+
29
+ private
30
+
31
+ def phonebook_from_xml
32
+ phonebook_name = @doc.at_xpath('/phonebooks/phonebook/@name').value
33
+ Phonebook.new(name: phonebook_name)
34
+ end
35
+
36
+ def contact_from_xml(xml_contact)
37
+ contact_name = xml_contact.xpath('person/realName').text
38
+ Contact.new(name: contact_name)
39
+ end
40
+
41
+ def number_from_xml(xml_number)
42
+ NumberClassCaster.cast xml_number['type'], xml_number.text
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ module Fonbok
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'number'
2
+ require_relative 'formatters/simple_number_formatter'
3
+
4
+ module Fonbok
5
+ class WorkNumber < Number
6
+ def initialize(number, formatter: Formatters::SimpleNumberFormatter.new(prefix: 'work'))
7
+ super
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module Fonbok
2
+ class Writer
3
+ def initialize
4
+ raise NotImplementedError
5
+ end
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,276 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fonbok
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nicolai Reuschling
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDhTCCAm2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMRAwDgYDVQQDDAduaWNv
14
+ bGFpMRowGAYKCZImiZPyLGQBGRYKcmV1c2NobGluZzEUMBIGCgmSJomT8ixkARkW
15
+ BG5hbWUwHhcNMTcwODA2MTIwNjI4WhcNMTgwODA2MTIwNjI4WjBEMRAwDgYDVQQD
16
+ DAduaWNvbGFpMRowGAYKCZImiZPyLGQBGRYKcmV1c2NobGluZzEUMBIGCgmSJomT
17
+ 8ixkARkWBG5hbWUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzn4mq
18
+ to48QgLNViGWjGJvv9j17Kvabn9G15+1ZN+/vPwIkSGXIVO6NmuW9u5GBxkRjDL1
19
+ O0xX2FcBh8dQ/U/sTWjBiS3FktrvU3g+dCiW1uMa/eJl7lSEKZpHN8y7BdSgW3xt
20
+ v0H/LQtFsdGpQ7VBr9lY0WeIWq7Bdoyq4v8CJ3neJHJ8GFAZr6dvu4fvN3u8zQvI
21
+ N71GKcxQeiR/CsFjgr9FN2p9Ug8H9EXKutIyXTP8o4AM7vd8r05Co4Jd8UJoPrJ0
22
+ zR6yOfsIrLAeC5Q4wzDKCvRJgBMbdAYs6xFXRul+Z5zfQCp4gftPhrthwsXm52K7
23
+ 6UAW7aQPuDGL7K1TAgMBAAGjgYEwfzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAd
24
+ BgNVHQ4EFgQU5aNu7aKiwMHITmYFkUKhHOUKpFYwIgYDVR0RBBswGYEXbmljb2xh
25
+ aUByZXVzY2hsaW5nLm5hbWUwIgYDVR0SBBswGYEXbmljb2xhaUByZXVzY2hsaW5n
26
+ Lm5hbWUwDQYJKoZIhvcNAQEFBQADggEBADbLyOY1TYZO0yH3EDJyXp+G3mBe4jiv
27
+ wDXsPv4QtFfNkgNmIq74X6CEvsOMYWSwcQunzOf8DCHp8E88mmnYY1bVGgOFaGqv
28
+ 1r8iyDvx39b9RvvJVQLULaepY934ikm4TjqhrRwawzraTlt604FwlnWYP49pqa2t
29
+ WwqR9Bjr81oF2v2+YeKtxnt5Pp7jBi9irgAby/G/TiEGBmuxE2dCjCPFU+7L6asP
30
+ Y4KofpYv9MbfrHhiYgYtC58x0bkw2hZVKR6ekEx6oQHwfmkPv5sFPbrc+Zc8IIYw
31
+ z5bj9IZwmsyUGVPH1cecBekq4WJhhzEYeYOdIeJsXNKJBV0GOva/fQk=
32
+ -----END CERTIFICATE-----
33
+ date: 2017-08-06 00:00:00.000000000 Z
34
+ dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: bundler
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.15'
42
+ type: :development
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.15'
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '10.0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '10.0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rspec
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '3.0'
77
+ - !ruby/object:Gem::Dependency
78
+ name: pry
79
+ requirement: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ - !ruby/object:Gem::Dependency
92
+ name: rubocop
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ - !ruby/object:Gem::Dependency
106
+ name: rubocop-rspec
107
+ requirement: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ - !ruby/object:Gem::Dependency
120
+ name: guard
121
+ requirement: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ type: :development
127
+ prerelease: false
128
+ version_requirements: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ - !ruby/object:Gem::Dependency
134
+ name: guard-rspec
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ - !ruby/object:Gem::Dependency
148
+ name: guard-rubocop
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ - !ruby/object:Gem::Dependency
162
+ name: terminal-notifier
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: terminal-notifier-guard
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ">="
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ - !ruby/object:Gem::Dependency
190
+ name: simplecov
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ type: :development
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ - !ruby/object:Gem::Dependency
204
+ name: nokogiri
205
+ requirement: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ type: :runtime
211
+ prerelease: false
212
+ version_requirements: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - ">="
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ description: fonbok reads and writes phonebooks (XML files) for AVM FRITZ!Box devices.
218
+ email:
219
+ - nicolai@reuschling.name
220
+ executables: []
221
+ extensions: []
222
+ extra_rdoc_files: []
223
+ files:
224
+ - ".gitignore"
225
+ - ".rspec"
226
+ - ".rubocop.yml"
227
+ - ".travis.yml"
228
+ - Gemfile
229
+ - Guardfile
230
+ - LICENSE.txt
231
+ - README.md
232
+ - Rakefile
233
+ - bin/console
234
+ - bin/setup
235
+ - certs/fonbok-public_cert.pem
236
+ - fonbok.gemspec
237
+ - lib/fonbok.rb
238
+ - lib/fonbok/contact.rb
239
+ - lib/fonbok/fax_work_number.rb
240
+ - lib/fonbok/formatters.rb
241
+ - lib/fonbok/formatters/simple_number_formatter.rb
242
+ - lib/fonbok/formatters/simple_phonebook_formatter.rb
243
+ - lib/fonbok/home_number.rb
244
+ - lib/fonbok/mobile_number.rb
245
+ - lib/fonbok/number.rb
246
+ - lib/fonbok/number_class_caster.rb
247
+ - lib/fonbok/phonebook.rb
248
+ - lib/fonbok/reader.rb
249
+ - lib/fonbok/version.rb
250
+ - lib/fonbok/work_number.rb
251
+ - lib/fonbok/writer.rb
252
+ homepage: https://github.com/ncreuschling/fonbok
253
+ licenses:
254
+ - MIT
255
+ metadata: {}
256
+ post_install_message:
257
+ rdoc_options: []
258
+ require_paths:
259
+ - lib
260
+ required_ruby_version: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ required_rubygems_version: !ruby/object:Gem::Requirement
266
+ requirements:
267
+ - - ">="
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ requirements: []
271
+ rubyforge_project:
272
+ rubygems_version: 2.6.12
273
+ signing_key:
274
+ specification_version: 4
275
+ summary: fonbok reads and writes phonebooks for AVM FRITZ!Box devices.
276
+ test_files: []
@@ -0,0 +1 @@
1
+ �l��1�I�,K�Vz wA���e��yR�6��V`� ���"�]P�J^��/0�2"�rq�$�'V/K���͵I!�T��� ^�}�R��Y�:�`V!���7�4S�20�zg�A�<��i���{/#'�b�Y[� T*�S�"7-bĈ?�U ��H��-�>��]@g�Rv��ڻo��{��eD4b`� C��:��v_c�q�{Uݱ��л�H�2�����3-� �=>=��@G