word_reference 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.
@@ -0,0 +1,18 @@
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
18
+ bin
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in word_reference.gemspec
4
+ gemspec
5
+ gem 'rspec'
6
+ gem 'json'
7
+ gem 'fakeweb'
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Laila Winner, Elliot Shiu
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,127 @@
1
+ # WordReference
2
+
3
+ Authors: [malandrina](https://github.com/malandrina), [sandbochs](https://github.com/sandbochs)
4
+
5
+ A Ruby wrapper for the [WordReference.com](http://www.wordreference.com) Dictionary API
6
+
7
+ Documentation for the API can be found here: http://www.wordreference.com/docs/api.aspx
8
+
9
+ ## TODO
10
+
11
+ - Handle exceptions
12
+ - Handle errors from WordReference.com API
13
+ - Add interface for thesaurus API
14
+
15
+ ## Installation
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'word_reference'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install word_reference
28
+
29
+ ## Usage
30
+
31
+ Include WordReference module
32
+
33
+ ```ruby
34
+ include WordReference
35
+ ```
36
+
37
+ In order to query the WordReference.com API, you will need an API key. You can get one here: http://www.wordreference.com/docs/APIregistration.aspx
38
+
39
+ Configure your API key
40
+
41
+ ```ruby
42
+ WordReference.configure do |config|
43
+ config.api_key = YOUR_API_KEY
44
+ end
45
+ ```
46
+
47
+ Create a new dictionary
48
+
49
+ A dictionary is referenced by a four-letter code comprising the original language and target language. Note that the WordReference.com API currently supports translations to or from English. If the dictionary does not exist (ex. 'czzh'), the API will return an error message. A list of two-letter language codes is provided below.
50
+
51
+ ```ruby
52
+ french_dictionary = Dictionary.new('enfr')
53
+ ```
54
+
55
+ - Arabic: ar
56
+ - Chinese: zh
57
+ - Czech: cz
58
+ - English: en
59
+ - French: fr
60
+ - Greek: gr
61
+ - Italian: it
62
+ - Japanese: ja
63
+ - Korean: ko
64
+ - Polish: pl
65
+ - Portuguese: pt
66
+ - Romanian: ro
67
+ - Spanish: es
68
+ - Turkish: tr
69
+
70
+ Change dictionary
71
+
72
+ ```ruby
73
+ french_dictionary.change_language('iten')
74
+ # Or create another dictionary
75
+ italian_dictionary = Dictionary.new('iten')
76
+ ```
77
+
78
+ Query API with term
79
+
80
+ Query terms which include special characters should be converted to UTF-8 Base 16. ("más" => "m%C3%A1s")
81
+
82
+ [UTF Converter](http://macchiato.com/unicode/convert.html)
83
+
84
+ ```ruby
85
+ # Returns a Query object
86
+ query = italian_dictionary.query('chiave')
87
+ ```
88
+
89
+ Get query results
90
+
91
+ ```ruby
92
+ # Returns an array of translations
93
+ query.results
94
+ ```
95
+
96
+ When #query is called on a dictionary, a collection of translation objects is returned.
97
+
98
+ Get original search term
99
+
100
+ ```ruby
101
+ translation = query.results.first
102
+ translation.search_term => {"term"=>"chiave", "POS"=>"nf", "sense"=>"strumento per aprire", "usage"=>"letterale"}
103
+ translation.search_term['term'] => 'chiave'
104
+ translation.search_term['POS'] => 'nf' # 'POS' stands for 'Particle of Speech'
105
+ translation.search_term['sense'] => 'strumento per aprire'
106
+ translation.search_term['usage'] => 'letterale'
107
+ ```
108
+
109
+ Get translations
110
+
111
+ ```ruby
112
+ translation = query.results.first
113
+ first = translation.results.first
114
+ first => {"term"=>"key", "POS"=>"n", "sense"=>""}
115
+ first['term'] => 'key'
116
+ first['POS'] => 'n' # noun
117
+ first['sense'] => '' # no sense
118
+ first['usage'] => nil
119
+ ```
120
+
121
+ ## Contributing
122
+
123
+ 1. Fork it
124
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
125
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
126
+ 4. Push to the branch (`git push origin my-new-feature`)
127
+ 5. Create new Pull Request
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,13 @@
1
+ require_relative 'word_reference/version'
2
+ require_relative 'word_reference/configurable'
3
+ require_relative 'word_reference/dictionary'
4
+
5
+ module WordReference
6
+
7
+ # Includes Configurable module as long as WordReference
8
+ # is also included in application
9
+ def self.included(receiver)
10
+ receiver.send(:include, WordReference::Configurable)
11
+ end
12
+
13
+ end
@@ -0,0 +1,22 @@
1
+ module WordReference
2
+
3
+ module Configurable
4
+
5
+ attr_writer :api_key
6
+
7
+ # Array of key NAMES used to configure settings before
8
+ # call to WordReference.com API is made
9
+ class << self
10
+ def keys
11
+ @keys ||= [:api_key]
12
+ end
13
+ end
14
+
15
+ def configure
16
+ yield self
17
+ self
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,50 @@
1
+ require 'open-uri'
2
+ require 'net/http'
3
+ require_relative 'query'
4
+
5
+ module WordReference
6
+
7
+ class Dictionary
8
+ include WordReference
9
+ include WordReference::Configurable
10
+
11
+ attr_reader :name, :api_key
12
+
13
+ BASE_URL = "http://api.wordreference.com"
14
+
15
+ def initialize(dictionary_name)
16
+ @name = dictionary_name
17
+ config
18
+ end
19
+
20
+ def change_language(dictionary_name)
21
+ @name = dictionary_name
22
+ end
23
+
24
+ def query(term)
25
+ Query.from_json(api_call(term))
26
+ end
27
+
28
+ private
29
+
30
+ # Configures each setting for API call
31
+ def config
32
+ WordReference::Configurable.keys.each do |key|
33
+ instance_variable_set(:"@#{key}", WordReference.instance_variable_get(:"@#{key}"))
34
+ end
35
+ end
36
+
37
+ ### test using #send
38
+ ### use FakeWeb
39
+ ## testing that get_response is being called on Net::HTTP and that parse is being called on URI
40
+ def api_call(term)
41
+ Net::HTTP.get_response(URI.parse(url(term))).body
42
+ end
43
+
44
+ def url(term)
45
+ "#{BASE_URL}/0.8/#{api_key}/json/#{name}/#{term}"
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,50 @@
1
+ require 'json'
2
+ require_relative 'translation'
3
+
4
+ module WordReference
5
+
6
+ class Query
7
+
8
+ attr_reader :translations
9
+
10
+ def initialize(translations_array=[])
11
+ @translations = translations_array
12
+ end
13
+
14
+ def self.from_json(api_data)
15
+ terms = []
16
+ new_query = self.new
17
+ data = JSON::load(api_data)
18
+ terms = terms_without_labels(data) # Removes term labels
19
+ terms = clean_terms(terms) # Remove Original, LINES, and END hashes
20
+ terms = term_translations(terms) # Strips everything but the actual translations
21
+
22
+ # Create each translation object and add to translations array
23
+ terms.each { |query_data| new_query.add_translation(Translation.from_query(query_data.values)) }
24
+ new_query
25
+ end
26
+
27
+ def results
28
+ @translations.map { |translation| translation }
29
+ end
30
+
31
+ def add_translation(translation)
32
+ @translations << translation
33
+ end
34
+
35
+ def self.terms_without_labels(data)
36
+ data.map { |term| term[1] }
37
+ end
38
+
39
+ def self.clean_terms(terms)
40
+ 3.times { terms.pop }
41
+ terms
42
+ end
43
+
44
+ def self.term_translations(terms)
45
+ terms.map { |translation| translation["PrincipalTranslations"].values }.flatten
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,39 @@
1
+ module WordReference
2
+
3
+ class Translation
4
+
5
+ attr_reader :search_term, :results
6
+
7
+ def initialize
8
+ @search_term = {}
9
+ @results = []
10
+ end
11
+
12
+ def self.from_query(data_array)
13
+ trans = self.new
14
+ trans.send(:strip_note!, data_array)
15
+ trans.send(:set_search_term!, data_array.shift)
16
+ trans.send(:set_translations!, data_array)
17
+ trans
18
+ end
19
+
20
+ private
21
+
22
+ # Results from the WordReference.com API include
23
+ # a 'note' field that is rarely populated and
24
+ # does not seem very useful.
25
+ def strip_note!(data_array)
26
+ data_array.pop
27
+ end
28
+
29
+ def set_search_term!(original_hash)
30
+ search_term.replace(original_hash)
31
+ end
32
+
33
+ def set_translations!(translations_array)
34
+ results.replace(translations_array)
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,3 @@
1
+ module WordReference
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,48 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe WordReference::Dictionary do
4
+
5
+ API_KEY = "12345"
6
+ DICTIONARY = 'enfr'
7
+
8
+ before do
9
+ WordReference.configure { |config| config.api_key = API_KEY }
10
+ end
11
+
12
+ let(:dictionary) { WordReference::Dictionary.new(DICTIONARY)}
13
+
14
+ context "initialization" do
15
+ it "inherits configuration from module" do
16
+ dictionary.instance_variable_get(:@api_key).should eq (API_KEY)
17
+ end
18
+
19
+ it "is initialized with a WordReference dictionary name" do
20
+ dictionary.instance_variable_get(:@name).should eq ("enfr")
21
+ end
22
+ end
23
+
24
+ context "setting WordReference dictionary" do
25
+ it "changes the WordReference dictionary" do
26
+ expect{ dictionary.change_language('fren')
27
+ }.to change { dictionary.instance_variable_get(:@name)
28
+ }.from("enfr").to("fren")
29
+ end
30
+ end
31
+
32
+ context "querying the WordReference API" do
33
+ it "queries the WordReference API" do
34
+ dictionary.should_receive(:api_call)
35
+ Query.should_receive(:from_json)
36
+ dictionary.query('term')
37
+ end
38
+
39
+ it "receives the body from the API" do
40
+ term = 'hello'
41
+ url = "http://api.wordreference.com/0.8/#{API_KEY}/json/#{DICTIONARY}/#{term}"
42
+ FakeWeb.register_uri(:get, url, :body => "Bonjour")
43
+ dictionary.send(:api_call, term).should eq "Bonjour"
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe WordReference::Query do
4
+ let(:query) { Query.new }
5
+ let(:api_data) { YAML.load_file('spec/wrjson.yml') }
6
+
7
+ it "adds a translation" do
8
+ expect { query.add_translation(:term)
9
+ }.to change { query.translations.length
10
+ }.by(1)
11
+ end
12
+
13
+ it "can return the results" do
14
+ query.add_translation(:term)
15
+ query.results.should eq ([:term])
16
+ end
17
+
18
+ context "#self.from_json" do
19
+ let(:query2) { Query.from_json(api_data) }
20
+ let(:translation) { query2.results.first }
21
+
22
+ it "has the correct original search term" do
23
+ translation.search_term['term'].should eq('chiave')
24
+ end
25
+
26
+ it "has the correct translations" do
27
+ translation.results.first.values.should include('key')
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe WordReference::Translation do
4
+
5
+ context "from query" do
6
+ let (:translation) { Translation.from_query([{ :original => true }, :results, :note]) }
7
+ it "has an original term" do
8
+ translation.search_term.should eq({ :original => true })
9
+ end
10
+
11
+ it "has translation results" do
12
+ translation.results.should eq([:results])
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,247 @@
1
+ --- !binary |-
2
+ ew0KInRlcm0wIiA6IHsNCiJQcmluY2lwYWxUcmFuc2xhdGlvbnMiIDogew0K
3
+ CSIwIiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2
4
+ ZSIsICJQT1MiIDogIm5mIiwgInNlbnNlIiA6ICJzdHJ1bWVudG8gcGVyIGFw
5
+ cmlyZSIsICJ1c2FnZSIgOiAibGV0dGVyYWxlIn0sIA0KCQkiRmlyc3RUcmFu
6
+ c2xhdGlvbiIgOiB7InRlcm0iIDogImtleSIsICJQT1MiIDogIm4iLCAic2Vu
7
+ c2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjEiIDp7DQoJCSJPcmlnaW5h
8
+ bFRlcm0iIDogeyAidGVybSIgOiAiY2hpYXZlIiwgIlBPUyIgOiAibmYiLCAi
9
+ c2Vuc2UiIDogIm5vbWUgZGkgdmFyaSB1dGVuc2lsaSIsICJ1c2FnZSIgOiAi
10
+ In0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogInNwYW5u
11
+ ZXIsIHdyZW5jaCIsICJQT1MiIDogIm4iLCAic2Vuc2UiIDogIm1lY2hhbmlj
12
+ YWwifSwgIk5vdGUiIDogIiJ9LA0KCSIyIiA6ew0KCQkiT3JpZ2luYWxUZXJt
13
+ IiA6IHsgInRlcm0iIDogImNoaWF2ZSIsICJQT1MiIDogIm5mIiwgInNlbnNl
14
+ IiA6ICJzaW1ib2xvIGQnYXV0b3JpdMOgIiwgInVzYWdlIiA6ICIifSwgDQoJ
15
+ CSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAia2V5IiwgIlBPUyIg
16
+ OiAibiIsICJzZW5zZSIgOiAiZmlndXJhdGl2ZSJ9LCAiTm90ZSIgOiAiIn0s
17
+ DQoJIjMiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hp
18
+ YXZlIiwgIlBPUyIgOiAibmYiLCAic2Vuc2UiIDogInB1bnRvIGVzc2Vuemlh
19
+ bGUgbyBtZXp6byBkZWNpc2l2byIsICJ1c2FnZSIgOiAiZmlndXJhdG8ifSwg
20
+ DQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAia2V5LCBjcnV4
21
+ IiwgIlBPUyIgOiAibiIsICJzZW5zZSIgOiAiZmlndXJhdGl2ZSJ9LCAiTm90
22
+ ZSIgOiAiIn0sDQoJIjQiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVy
23
+ bSIgOiAiY2hpYXZlIiwgIlBPUyIgOiAibmYiLCAic2Vuc2UiIDogImNoaWF2
24
+ ZSBtdXNpY2FsZSIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xh
25
+ dGlvbiIgOiB7InRlcm0iIDogImNsZWYiLCAiUE9TIiA6ICJuIiwgInNlbnNl
26
+ IiA6ICJtdXNpYyJ9LCANCgkJIlNlY29uZFRyYW5zbGF0aW9uIiA6IHsidGVy
27
+ bSIgOiAia2V5IiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICJtdXNpYyJ9LCAi
28
+ Tm90ZSIgOiAiIn0sDQoJIjUiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAi
29
+ dGVybSIgOiAiY2hpYXZlIiwgIlBPUyIgOiAibmYiLCAic2Vuc2UiIDogImlu
30
+ IGxvY3V6aW9uaTogcmVnaXN0cm8sIHRvbm8iLCAidXNhZ2UiIDogImZpZ3Vy
31
+ YXRvIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogInRv
32
+ bmUsIGFjY2VudCIsICJQT1MiIDogIm4iLCAic2Vuc2UiIDogImZpZ3VyYXRp
33
+ dmUifSwgIk5vdGUiIDogIiJ9fX0sDQoib3JpZ2luYWwiIDogew0KIkNvbXBv
34
+ dW5kcyIgOiB7DQoJIjAiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVy
35
+ bSIgOiAiYXR0cmF2ZXJzbyB1bmEgY2hpYXZlIiwgIlBPUyIgOiAiIiwgInNl
36
+ bnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRp
37
+ b24iIDogeyJ0ZXJtIiA6ICJ0aHJvdWdoLWtleSIsICJQT1MiIDogIiIsICJz
38
+ ZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIifSwNCgkiMSIgOnsNCgkJIk9yaWdp
39
+ bmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJib2NjaGV0dGEgcGVyIGNoaWF2ZSIs
40
+ ICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIifSwgDQoJ
41
+ CSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAia2V5aG9sZSBsaW1w
42
+ ZXQiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0s
43
+ DQoJIjIiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hp
44
+ YXZlIGEgYnJ1Z29sYSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVz
45
+ YWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIg
46
+ OiAiYWxsZW4gd3JlbmNoLCBhbGxlbiBrZXksIGhleCBrZXkiLCAiUE9TIiA6
47
+ ICJuIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9LA0KCSIzIiA6ew0K
48
+ CQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2ZSBhIGJ1c3Nv
49
+ bGEiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiIsICJ1c2FnZSIgOiAiIn0s
50
+ IA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogInNvY2tldCB3
51
+ cmVuY2giLCAiUE9TIiA6ICJuIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDog
52
+ IiJ9LA0KCSI0IiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDog
53
+ ImNoaWF2ZSBkZWwgc3VjY2Vzc28iLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDog
54
+ IiIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7
55
+ InRlcm0iIDogInRoZSBrZXkgdG8gc3VjY2VzcyIsICJQT1MiIDogIm4sIGV4
56
+ cHIiLCAic2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjUiIDp7DQoJ
57
+ CSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hpYXZlIGRlbGwnYWNj
58
+ ZW5zaW9uZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6
59
+ ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAiaWdu
60
+ aXRpb24ga2V5IiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwgIk5vdGUi
61
+ IDogIiJ9LA0KCSI2IiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0i
62
+ IDogImNoaWF2ZSBkaSBhY2Nlc3NvIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6
63
+ ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24iIDog
64
+ eyJ0ZXJtIiA6ICJwYXNzIGtleSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAi
65
+ In0sICJOb3RlIiA6ICIifSwNCgkiNyIgOnsNCgkJIk9yaWdpbmFsVGVybSIg
66
+ OiB7ICJ0ZXJtIiA6ICJjaGlhdmUgZGkgYmFzc28iLCAiUE9TIiA6ICIiLCAi
67
+ c2Vuc2UiIDogIiIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xh
68
+ dGlvbiIgOiB7InRlcm0iIDogImJhc3MgY2xlZiIsICJQT1MiIDogIiIsICJz
69
+ ZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIifSwNCgkiOCIgOnsNCgkJIk9yaWdp
70
+ bmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJjaGlhdmUgZGkgY29udHJhbHRvIiwg
71
+ IlBPUyIgOiAiIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJ
72
+ IkZpcnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJhbHRvIGNsZWYiLCAi
73
+ UE9TIiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjki
74
+ IDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hpYXZlIGRp
75
+ IGxldHR1cmEiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiIsICJ1c2FnZSIg
76
+ OiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogImlu
77
+ dGVycHJldGF0aW9uIiwgIlBPUyIgOiAibiIsICJzZW5zZSIgOiAiIn0sICJO
78
+ b3RlIiA6ICIifSwNCgkiMTAiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAi
79
+ dGVybSIgOiAiY2hpYXZlIGRpIGxldHR1cmEiLCAiUE9TIiA6ICIiLCAic2Vu
80
+ c2UiIDogIiIsICJ1c2FnZSIgOiAiIn0sICJOb3RlIiA6ICIifSwNCgkiMTEi
81
+ IDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hpYXZlIGRp
82
+ IHF1YWxjb3NhIiwgIlBPUyIgOiAibmYiLCAic2Vuc2UiIDogIiIsICJ1c2Fn
83
+ ZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDog
84
+ ImtleSB0byBzdGgiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90
85
+ ZSIgOiAiIn0sDQoJIjEyIiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRl
86
+ cm0iIDogImNoaWF2ZSBkaSBzb2wsIGNoaWF2ZSBkaSB2aW9saW5vIiwgIlBP
87
+ UyIgOiAibm0iLCAic2Vuc2UiIDogIiIsICJ1c2FnZSIgOiAiIn0sIA0KCQki
88
+ Rmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogInRyZWJsZSBjbGVmIiwg
89
+ IlBPUyIgOiAiIiwgInNlbnNlIiA6ICJtdXMuIn0sICJOb3RlIiA6ICIifSwN
90
+ CgkiMTMiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hp
91
+ YXZlIGRpIHRlbm9yZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVz
92
+ YWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIg
93
+ OiAidGVub3IgY2xlZiIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAibXVzLiJ9
94
+ LCAiTm90ZSIgOiAiIn0sDQoJIjE0IiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6
95
+ IHsgInRlcm0iIDogImNoaWF2ZSBkaSB2b2x0YSIsICJQT1MiIDogIm5mIiwg
96
+ InNlbnNlIiA6ICJpbiBBcmNoaXRldHR1cmEgc29wcmF0dHV0dG8iLCAidXNh
97
+ Z2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6
98
+ ICJrZXlzdG9uZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiQXJjaGl0ZWN0
99
+ dXJlIn0sICJOb3RlIiA6ICIifSwNCgkiMTUiIDp7DQoJCSJPcmlnaW5hbFRl
100
+ cm0iIDogeyAidGVybSIgOiAiY2hpYXZlIGRpIHZvbHRhIiwgIlBPUyIgOiAi
101
+ IiwgInNlbnNlIiA6ICJhcmNoaXRldHR1cmEiLCAidXNhZ2UiIDogIiJ9LCAN
102
+ CgkJIkZpcnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJrZXkgYnJpY2si
103
+ LCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJ
104
+ IjE2IiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2
105
+ ZSBlbGV0dHJvbmljYSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVz
106
+ YWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIg
107
+ OiAia2V5IGNhcmQiLCAiUE9TIiA6ICJuIiwgInNlbnNlIiA6ICJpbiBob3Rl
108
+ bCBjb250ZXh0In0sICJOb3RlIiA6ICIifSwNCgkiMTciIDp7DQoJCSJPcmln
109
+ aW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hpYXZlIGZpc3NhIiwgIlBPUyIg
110
+ OiAiIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0
111
+ VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJvcGVuLWVuZCB3cmVuY2giLCAi
112
+ UE9TIiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjE4
113
+ IiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2ZSBp
114
+ bmdsZXNlIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDog
115
+ IiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJ3cmVu
116
+ Y2giLCAiUE9TIiA6ICJuIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9
117
+ LA0KCSIxOSIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJj
118
+ aGlhdmUgaW5nbGVzZSwgY2hpYXZlIiwgIlBPUyIgOiAibm0iLCAic2Vuc2Ui
119
+ IDogIm1lY2NhbmljYSIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFu
120
+ c2xhdGlvbiIgOiB7InRlcm0iIDogInNwYW5uZXIiLCAiUE9TIiA6ICIiLCAi
121
+ c2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjIwIiA6ew0KCQkiT3Jp
122
+ Z2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2ZSBtYWRyZSIsICJQT1Mi
123
+ IDogIm5mIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZp
124
+ cnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJwYXNza2V5IiwgIlBPUyIg
125
+ OiAiIiwgInNlbnNlIiA6ICJtYXN0ZXIga2V5In0sICJOb3RlIiA6ICIifSwN
126
+ CgkiMjEiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hp
127
+ YXZlIG1hZ2dpb3JlIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIiLCAidXNh
128
+ Z2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6
129
+ ICJtYWpvciBrZXkiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90
130
+ ZSIgOiAiIn0sDQoJIjIyIiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRl
131
+ cm0iIDogImNoaWF2ZSBtaW5vcmUiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDog
132
+ IiIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7
133
+ InRlcm0iIDogIm1pbm9yIGtleSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAi
134
+ In0sICJOb3RlIiA6ICIifSwNCgkiMjMiIDp7DQoJCSJPcmlnaW5hbFRlcm0i
135
+ IDogeyAidGVybSIgOiAiY2hpYXZlIG1pbm9yZSIsICJQT1MiIDogIiIsICJz
136
+ ZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0
137
+ aW9uIiA6IHsidGVybSIgOiAibWlub3IgbW9kZSIsICJQT1MiIDogIiIsICJz
138
+ ZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIifSwNCgkiMjQiIDp7DQoJCSJPcmln
139
+ aW5hbFRlcm0iIDogeyAidGVybSIgOiAiY2hpYXZlIHBlciIsICJQT1MiIDog
140
+ Im5mIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0
141
+ VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJrZXkgdG8iLCAiUE9TIiA6ICIi
142
+ LCAic2Vuc2UiIDogImV4ZXJjaXNlcyJ9LCAiTm90ZSIgOiAiIn0sDQoJIjI1
143
+ IiA6ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2ZSBw
144
+ ZXIgdHV0dGUgbGUgc2VycmF0dXJlIiwgIlBPUyIgOiAibmYiLCAic2Vuc2Ui
145
+ IDogIiIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIg
146
+ OiB7InRlcm0iIDogInBhc3NrZXkiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDog
147
+ ImtleSBmb3IgZXZlcnkgbG9jayJ9LCAiTm90ZSIgOiAiIn0sDQoJIjI2IiA6
148
+ ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImNoaWF2ZSBwcmlt
149
+ YXJpYSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIi
150
+ fSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAibWFzdGVy
151
+ IGtleSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIi
152
+ fSwNCgkiMjciIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAi
153
+ Y2hpYXZlIHVuaXZlcnNhbGUiLCAiUE9TIiA6ICJuZiIsICJzZW5zZSIgOiAi
154
+ IiwgInVzYWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsi
155
+ dGVybSIgOiAicGFzc2tleSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIn0s
156
+ ICJOb3RlIiA6ICIifSwNCgkiMjgiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDog
157
+ eyAidGVybSIgOiAiY2hpdWRlcmUgYSBjaGlhdmUiLCAiUE9TIiA6ICJ2Iiwg
158
+ InNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNs
159
+ YXRpb24iIDogeyJ0ZXJtIiA6ICJib2x0IiwgIlBPUyIgOiAiIiwgInNlbnNl
160
+ IiA6ICJ0byBzZWN1cmUgd2l0aCBhIGxvY2sifSwgIk5vdGUiIDogIiJ9LA0K
161
+ CSIyOSIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJjaGl1
162
+ ZGVyZSBhIGNoaWF2ZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVz
163
+ YWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIg
164
+ OiAibG9jayB1cCIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIn0sICJOb3Rl
165
+ IiA6ICIifSwNCgkiMzAiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVy
166
+ bSIgOiAiY2hpdXNvIGEgY2hpYXZlIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6
167
+ ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24iIDog
168
+ eyJ0ZXJtIiA6ICJsb2NrZWQgdXAiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDog
169
+ IiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjMxIiA6ew0KCQkiT3JpZ2luYWxUZXJt
170
+ IiA6IHsgInRlcm0iIDogImNoaXVzbyBhIGNoaWF2ZSIsICJQT1MiIDogImFk
171
+ aiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIifSwgDQoJCSJGaXJzdFRy
172
+ YW5zbGF0aW9uIiA6IHsidGVybSIgOiAicGVudCIsICJQT1MiIDogIiIsICJz
173
+ ZW5zZSIgOiAibG9ja2VkIHVwIn0sICJOb3RlIiA6ICIifSwNCgkiMzIiIDp7
174
+ DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAiZGltZW5zaW9uZSBj
175
+ aGlhdmUiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiIsICJ1c2FnZSIgOiAi
176
+ In0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogImtleSBz
177
+ aXplIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9
178
+ LA0KCSIzMyIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJm
179
+ YXR0b3JlIGNoaWF2ZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVz
180
+ YWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIg
181
+ OiAia2V5IGZhY3RvciIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIn0sICJO
182
+ b3RlIiA6ICIifSwNCgkiMzQiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAi
183
+ dGVybSIgOiAiZmlndXJlIGNoaWF2ZSIsICJQT1MiIDogIiIsICJzZW5zZSIg
184
+ OiAiIiwgInVzYWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6
185
+ IHsidGVybSIgOiAia2V5IGZpZ3VyZXMiLCAiUE9TIiA6ICIiLCAic2Vuc2Ui
186
+ IDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjM1IiA6ew0KCQkiT3JpZ2luYWxU
187
+ ZXJtIiA6IHsgInRlcm0iIDogImZpbGUgY2hpYXZlIiwgIlBPUyIgOiAiIiwg
188
+ InNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNs
189
+ YXRpb24iIDogeyJ0ZXJtIiA6ICJrZXkgZmlsZSIsICJQT1MiIDogIiIsICJz
190
+ ZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIifSwNCgkiMzYiIDp7DQoJCSJPcmln
191
+ aW5hbFRlcm0iIDogeyAidGVybSIgOiAiZnJhc2UgY2hpYXZlIiwgIlBPUyIg
192
+ OiAibmYiLCAic2Vuc2UiIDogIiIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmly
193
+ c3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogInRvcGljIHNlbnRlbmNlIiwg
194
+ IlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9LA0KCSIz
195
+ NyIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJpbiB1bidv
196
+ dHRhdmEgc29wcmEgbGEgY2hpYXZlIGRpIHNvbCIsICJQT1MiIDogIiIsICJz
197
+ ZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0
198
+ aW9uIiA6IHsidGVybSIgOiAiaW4gYWx0IiwgIlBPUyIgOiAiIiwgInNlbnNl
199
+ IiA6ICIifSwgIk5vdGUiIDogIiJ9LA0KCSIzOCIgOnsNCgkJIk9yaWdpbmFs
200
+ VGVybSIgOiB7ICJ0ZXJtIiA6ICJpbmR1c3RyaWEgY2hpYXZlIiwgIlBPUyIg
201
+ OiAiIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0
202
+ VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJrZXkgaW5kdXN0cnkiLCAiUE9T
203
+ IiA6ICIiLCAic2Vuc2UiIDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjM5IiA6
204
+ ew0KCQkiT3JpZ2luYWxUZXJtIiA6IHsgInRlcm0iIDogImxhc3RyYSBjaGlh
205
+ dmUiLCAiUE9TIiA6ICJuZiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIi
206
+ fSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAia2V5IHBs
207
+ YXRlIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9
208
+ LA0KCSI0MCIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJs
209
+ aW5lYSBjaGlhdmUiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiIsICJ1c2Fn
210
+ ZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDog
211
+ ImtleSBsaW5lIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwgIk5vdGUi
212
+ IDogIiJ9LA0KCSI0MSIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJt
213
+ IiA6ICJtb3NzYSBjaGlhdmUiLCAiUE9TIiA6ICIiLCAic2Vuc2UiIDogIiIs
214
+ ICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRl
215
+ cm0iIDogImtleSBtb3ZlIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwg
216
+ Ik5vdGUiIDogIiJ9LA0KCSI0MiIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7
217
+ ICJ0ZXJtIiA6ICJwYXJvbGEgY2hpYXZlIiwgIlBPUyIgOiAiIiwgInNlbnNl
218
+ IiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24i
219
+ IDogeyJ0ZXJtIiA6ICJrZXl3b3JkIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6
220
+ ICIifSwgIk5vdGUiIDogIiJ9LA0KCSI0MyIgOnsNCgkJIk9yaWdpbmFsVGVy
221
+ bSIgOiB7ICJ0ZXJtIiA6ICJwYXJvbGEgY2hpYXZlIiwgIlBPUyIgOiAibmYi
222
+ LCAic2Vuc2UiIDogIiIsICJ1c2FnZSIgOiAiIn0sIA0KCQkiRmlyc3RUcmFu
223
+ c2xhdGlvbiIgOiB7InRlcm0iIDogImtleSB3b3JkIiwgIlBPUyIgOiAiIiwg
224
+ InNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9LA0KCSI0NCIgOnsNCgkJIk9y
225
+ aWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJzY2hlbWEgY2hpYXZlIiwgIlBP
226
+ UyIgOiAiIiwgInNlbnNlIiA6ICIiLCAidXNhZ2UiIDogIiJ9LCANCgkJIkZp
227
+ cnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJtIiA6ICJrZXkgcGF0dGVybiIsICJQ
228
+ T1MiIDogIiIsICJzZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIifSwNCgkiNDUi
229
+ IDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIgOiAic2VxdWVuemEg
230
+ Y2hpYXZlIiwgIlBPUyIgOiAibmYiLCAic2Vuc2UiIDogIiIsICJ1c2FnZSIg
231
+ OiAiIn0sIA0KCQkiRmlyc3RUcmFuc2xhdGlvbiIgOiB7InRlcm0iIDogImtl
232
+ eSBmcmFtZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIn0sICJOb3RlIiA6
233
+ ICIifSwNCgkiNDYiIDp7DQoJCSJPcmlnaW5hbFRlcm0iIDogeyAidGVybSIg
234
+ OiAic290dG8gY2hpYXZlIiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIiLCAi
235
+ dXNhZ2UiIDogIiJ9LCANCgkJIkZpcnN0VHJhbnNsYXRpb24iIDogeyJ0ZXJt
236
+ IiA6ICJ1bmRlciBsb2NrIGFuZCBrZXkiLCAiUE9TIiA6ICIiLCAic2Vuc2Ui
237
+ IDogIiJ9LCAiTm90ZSIgOiAiIn0sDQoJIjQ3IiA6ew0KCQkiT3JpZ2luYWxU
238
+ ZXJtIiA6IHsgInRlcm0iIDogInRyb3ZhcmUgbGEgY2hpYXZlIHBlciIsICJQ
239
+ T1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6ICIifSwgDQoJCSJG
240
+ aXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAiZmluZCB0aGUga2V5IHRv
241
+ IiwgIlBPUyIgOiAiIiwgInNlbnNlIiA6ICIifSwgIk5vdGUiIDogIiJ9LA0K
242
+ CSI0OCIgOnsNCgkJIk9yaWdpbmFsVGVybSIgOiB7ICJ0ZXJtIiA6ICJ1b21v
243
+ IGNoaWF2ZSIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIiwgInVzYWdlIiA6
244
+ ICIifSwgDQoJCSJGaXJzdFRyYW5zbGF0aW9uIiA6IHsidGVybSIgOiAia2V5
245
+ IG1hbiIsICJQT1MiIDogIiIsICJzZW5zZSIgOiAiIn0sICJOb3RlIiA6ICIi
246
+ fX19LA0KIkxpbmVzIiA6ICJFbmQgUmVhY2hlZCIsICJFTkQiIDogdHJ1ZQ0K
247
+ fQ==
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/word_reference/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Laila Winner", "Elliot Shiu"]
6
+ gem.email = ["laila.winner@gmail.com", "elliot@sandbochs.com"]
7
+ gem.description = %q{A Ruby wrapper for the WordReference.com Dictionary API}
8
+ gem.summary = %q{Client for the WordReference.com API}
9
+ gem.homepage = "https://github.com/malandrina/word_reference"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "word_reference"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = WordReference::VERSION
17
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: word_reference
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Laila Winner
9
+ - Elliot Shiu
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-11-13 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: A Ruby wrapper for the WordReference.com Dictionary API
16
+ email:
17
+ - laila.winner@gmail.com
18
+ - elliot@sandbochs.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - .gitignore
24
+ - Gemfile
25
+ - LICENSE
26
+ - README.md
27
+ - Rakefile
28
+ - lib/word_reference.rb
29
+ - lib/word_reference/configurable.rb
30
+ - lib/word_reference/dictionary.rb
31
+ - lib/word_reference/query.rb
32
+ - lib/word_reference/translation.rb
33
+ - lib/word_reference/version.rb
34
+ - spec/dictionary_spec.rb
35
+ - spec/query_spec.rb
36
+ - spec/translation_spec.rb
37
+ - spec/wrjson.yml
38
+ - word_reference.gemspec
39
+ homepage: https://github.com/malandrina/word_reference
40
+ licenses: []
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 1.8.24
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Client for the WordReference.com API
63
+ test_files:
64
+ - spec/dictionary_spec.rb
65
+ - spec/query_spec.rb
66
+ - spec/translation_spec.rb
67
+ - spec/wrjson.yml