coney 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +3 -0
- data/.rubocop.yml +11 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +17 -0
- data/Guardfile +14 -0
- data/LICENSE +21 -0
- data/README.md +30 -0
- data/Rakefile +6 -0
- data/bin/coney +6 -0
- data/coney.gemspec +29 -0
- data/coney.png +0 -0
- data/console +14 -0
- data/ebert.yml +27 -0
- data/fixtures/vcr_cassettes/convert.yml +63 -0
- data/lib/coney/cli.rb +53 -0
- data/lib/coney/version.rb +5 -0
- metadata +104 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ef4d7e859896a717e23a87297ef65005e3eed8d1
|
4
|
+
data.tar.gz: b42f7e515d3b05e8ca55566f8af690c370714790
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 73e04f15d3a0dc792dc68ca14793db2ecf1cccaf5d1a399d56bdef3a5420b919c25df4f395f0f57b1ca41a1dae09279909d0998293f0a4f074ce4019cf3f1ecf
|
7
|
+
data.tar.gz: 21bff1288db6762dd7f0c740c37e259e437d5cdd3bdaca78f9422233e82328580de8fc0e2ea167b1e63a9afe769831e4cf203327acd2aca19b87d471f35e952f
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
2
|
+
|
3
|
+
## Our Pledge
|
4
|
+
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
7
|
+
our community a harassment-free experience for everyone, regardless of age, body
|
8
|
+
size, disability, ethnicity, gender identity and expression, level of experience,
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
10
|
+
orientation.
|
11
|
+
|
12
|
+
## Our Standards
|
13
|
+
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
15
|
+
include:
|
16
|
+
|
17
|
+
* Using welcoming and inclusive language
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
19
|
+
* Gracefully accepting constructive criticism
|
20
|
+
* Focusing on what is best for the community
|
21
|
+
* Showing empathy towards other community members
|
22
|
+
|
23
|
+
Examples of unacceptable behavior by participants include:
|
24
|
+
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
26
|
+
advances
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
28
|
+
* Public or private harassment
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
30
|
+
address, without explicit permission
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
32
|
+
professional setting
|
33
|
+
|
34
|
+
## Our Responsibilities
|
35
|
+
|
36
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
37
|
+
behavior and are expected to take appropriate and fair corrective action in
|
38
|
+
response to any instances of unacceptable behavior.
|
39
|
+
|
40
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
41
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
42
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
43
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
44
|
+
threatening, offensive, or harmful.
|
45
|
+
|
46
|
+
## Scope
|
47
|
+
|
48
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
49
|
+
when an individual is representing the project or its community. Examples of
|
50
|
+
representing a project or community include using an official project e-mail
|
51
|
+
address, posting via an official social media account, or acting as an appointed
|
52
|
+
representative at an online or offline event. Representation of a project may be
|
53
|
+
further defined and clarified by project maintainers.
|
54
|
+
|
55
|
+
## Enforcement
|
56
|
+
|
57
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
58
|
+
reported by contacting the project team at wilfrido.nuqui@promisepay.com. All
|
59
|
+
complaints will be reviewed and investigated and will result in a response that
|
60
|
+
is deemed necessary and appropriate to the circumstances. The project team is
|
61
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
62
|
+
Further details of specific enforcement policies may be posted separately.
|
63
|
+
|
64
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
65
|
+
faith may face temporary or permanent repercussions as determined by other
|
66
|
+
members of the project's leadership.
|
67
|
+
|
68
|
+
## Attribution
|
69
|
+
|
70
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
71
|
+
available at [http://contributor-covenant.org/version/1/4][version]
|
72
|
+
|
73
|
+
[homepage]: http://contributor-covenant.org
|
74
|
+
[version]: http://contributor-covenant.org/version/1/4/
|
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in coney.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
gem 'thor'
|
7
|
+
gem 'mechanize'
|
8
|
+
|
9
|
+
group :test, :development do
|
10
|
+
gem 'pry'
|
11
|
+
gem 'vcr'
|
12
|
+
gem 'webmock'
|
13
|
+
gem 'simplecov'
|
14
|
+
gem 'codeclimate-test-reporter', '~> 1.0.0'
|
15
|
+
gem 'guard-rspec', require: false
|
16
|
+
gem 'rubocop', require: false
|
17
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
guard :rspec, cmd: 'bundle exec rspec' do
|
2
|
+
require 'guard/rspec/dsl'
|
3
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
4
|
+
|
5
|
+
# RSpec files
|
6
|
+
rspec = dsl.rspec
|
7
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
8
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
9
|
+
watch(rspec.spec_files)
|
10
|
+
|
11
|
+
# Ruby files
|
12
|
+
ruby = dsl.ruby
|
13
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
14
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 Wilfrido T. Nuqui Jr. nuqui.dev@gmail.com
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coney [![Build Status](https://semaphoreci.com/api/v1/wnuqui/coney/branches/master/badge.svg)](https://semaphoreci.com/wnuqui/coney) [![Ebert](https://ebertapp.io/github/wnuqui/coney.svg)](https://ebertapp.io/github/wnuqui/coney) <a href="https://codeclimate.com/github/wnuqui/coney"><img src="https://codeclimate.com/github/wnuqui/coney/badges/gpa.svg" /></a> <a href="https://codeclimate.com/github/wnuqui/coney"><img src="https://codeclimate.com/github/wnuqui/coney/badges/issue_count.svg" /></a> <a href="https://codeclimate.com/github/wnuqui/coney/coverage"><img src="https://codeclimate.com/github/wnuqui/coney/badges/coverage.svg" /></a>
|
2
|
+
|
3
|
+
This gem is a CLI application that can be used to convert currency from base to target via Google.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```shell
|
8
|
+
gem install coney
|
9
|
+
```
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
$ coney convert --base=USD --base-amount=10 --target=EURO
|
14
|
+
|
15
|
+
## In action
|
16
|
+
|
17
|
+
![coney in action](coney.png)
|
18
|
+
|
19
|
+
## Development
|
20
|
+
|
21
|
+
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).
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/wnuqui/coney. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
26
|
+
|
27
|
+
|
28
|
+
## License
|
29
|
+
|
30
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/coney
ADDED
data/coney.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'coney/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'coney'
|
9
|
+
spec.version = Coney::VERSION
|
10
|
+
spec.authors = ['Wilfrido T. Nuqui Jr.']
|
11
|
+
spec.email = ['nuqui.dev@gmail.com']
|
12
|
+
|
13
|
+
spec.summary = 'Convert currency via Google.'
|
14
|
+
spec.description = 'Convert currency via Google.'
|
15
|
+
spec.homepage = 'https://github.com/wnuqui/coney'
|
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
|
+
|
22
|
+
spec.bindir = 'bin'
|
23
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
24
|
+
spec.require_paths = ['lib']
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.13'
|
27
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
28
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
|
+
end
|
data/coney.png
ADDED
Binary file
|
data/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'coney/cli'
|
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
|
data/ebert.yml
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# This configuration was used Ebert to review the wnuqui/coney repository
|
2
|
+
# on bb4e8817fd6c5f0c84d13db06b4eac03941e65b3.
|
3
|
+
# You can make this the default configuration for future reviews by moving this
|
4
|
+
# file to your repository as `.ebert.yml` and pushing it to GitHub, and tweak
|
5
|
+
# it as you wish - To know more on how to change this file to better review your
|
6
|
+
# repository you can go to https://ebertapp.io/docs/config and see the configuration
|
7
|
+
# details.
|
8
|
+
---
|
9
|
+
styleguide: plataformatec/linters
|
10
|
+
engines:
|
11
|
+
reek:
|
12
|
+
enabled: true
|
13
|
+
fixme:
|
14
|
+
enabled: true
|
15
|
+
rubocop:
|
16
|
+
enabled: true
|
17
|
+
duplication:
|
18
|
+
config:
|
19
|
+
languages:
|
20
|
+
- ruby
|
21
|
+
enabled: true
|
22
|
+
remark-lint:
|
23
|
+
enabled: true
|
24
|
+
exclude_paths:
|
25
|
+
- bin
|
26
|
+
- spec
|
27
|
+
|
@@ -0,0 +1,63 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://www.google.com/search?q=USD%20to%20EURO
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip,deflate,identity
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Mechanize/2.7.5 Ruby/2.4.0p0 (http://github.com/sparklemotion/mechanize/)
|
16
|
+
Accept-Charset:
|
17
|
+
- ISO-8859-1,utf-8;q=0.7,*;q=0.7
|
18
|
+
Accept-Language:
|
19
|
+
- en-us,en;q=0.5
|
20
|
+
Host:
|
21
|
+
- www.google.com
|
22
|
+
Connection:
|
23
|
+
- keep-alive
|
24
|
+
Keep-Alive:
|
25
|
+
- 300
|
26
|
+
response:
|
27
|
+
status:
|
28
|
+
code: 200
|
29
|
+
message: OK
|
30
|
+
headers:
|
31
|
+
Date:
|
32
|
+
- Sun, 20 Aug 2017 07:50:23 GMT
|
33
|
+
Expires:
|
34
|
+
- "-1"
|
35
|
+
Cache-Control:
|
36
|
+
- private, max-age=0
|
37
|
+
Content-Type:
|
38
|
+
- text/html; charset=ISO-8859-1
|
39
|
+
P3p:
|
40
|
+
- CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en
|
41
|
+
for more info."
|
42
|
+
Content-Encoding:
|
43
|
+
- gzip
|
44
|
+
Server:
|
45
|
+
- gws
|
46
|
+
X-Xss-Protection:
|
47
|
+
- 1; mode=block
|
48
|
+
X-Frame-Options:
|
49
|
+
- SAMEORIGIN
|
50
|
+
Set-Cookie:
|
51
|
+
- NID=110=da9_jIx-jBlLQmBMH2N33qDii9bph6LOOsuEJ8YUSWs3d2_ehljhBcwLd5BfDQiEiOWl7O7avnmdQmmDjYv7Hwor6BC4L3EvzpHZjRsffxcYXppirkQSew0EGFD0xKN3;
|
52
|
+
expires=Mon, 19-Feb-2018 07:50:23 GMT; path=/; domain=.google.com; HttpOnly
|
53
|
+
Alt-Svc:
|
54
|
+
- quic=":443"; ma=2592000; v="39,38,37,35"
|
55
|
+
Transfer-Encoding:
|
56
|
+
- chunked
|
57
|
+
body:
|
58
|
+
encoding: ASCII-8BIT
|
59
|
+
string: !binary |-
|
60
|
+
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
|
61
|
+
http_version:
|
62
|
+
recorded_at: Sun, 20 Aug 2017 07:50:24 GMT
|
63
|
+
recorded_with: VCR 3.0.3
|
data/lib/coney/cli.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'coney/version'
|
4
|
+
require 'thor'
|
5
|
+
require 'mechanize'
|
6
|
+
|
7
|
+
module Coney
|
8
|
+
# :nodoc:
|
9
|
+
class CLI < Thor
|
10
|
+
URL = 'https://www.google.com/search?q=BASE+AMOUNT+to+TARGET'.freeze
|
11
|
+
|
12
|
+
COMMAND = 'convert --base CURRENCY [--base-amount AMOUNT] --target CURRENCY'.freeze
|
13
|
+
|
14
|
+
desc COMMAND, 'Convert base currency to target currency'
|
15
|
+
|
16
|
+
method_option :base, required: true, aliases: '-b', desc: 'The base currency to convert'
|
17
|
+
method_option :base_amount, aliases: '-a', desc: 'The base amount to convert'
|
18
|
+
method_option :target, required: true, aliases: '-t', desc: 'The target currency'
|
19
|
+
|
20
|
+
def convert
|
21
|
+
convert_via_google
|
22
|
+
end
|
23
|
+
|
24
|
+
map %w(--version -v) => :__print_version
|
25
|
+
desc '--version, -v', 'Print the version'
|
26
|
+
|
27
|
+
def __print_version
|
28
|
+
puts 'coney version ' + Coney::VERSION.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
NO_COMMANDS_PROC = proc do
|
32
|
+
def convert_currency_url
|
33
|
+
url = URL
|
34
|
+
.gsub(/BASE/, options[:base])
|
35
|
+
.gsub(/TARGET/, options[:target])
|
36
|
+
|
37
|
+
options[:base_amount] ? url.gsub(/AMOUNT/, options[:base_amount]) : url.gsub(/AMOUNT\+/, '')
|
38
|
+
end
|
39
|
+
|
40
|
+
def convert_via_google
|
41
|
+
agent = Mechanize.new
|
42
|
+
page = agent.get(convert_currency_url)
|
43
|
+
doc = page.parser
|
44
|
+
|
45
|
+
result = doc.xpath('//*[@id="ires"]/ol/table').children.children[2].children.children[0].children.text
|
46
|
+
|
47
|
+
puts result
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
no_commands { NO_COMMANDS_PROC[] }
|
52
|
+
end
|
53
|
+
end
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: coney
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Wilfrido T. Nuqui Jr.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.13'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: Convert currency via Google.
|
56
|
+
email:
|
57
|
+
- nuqui.dev@gmail.com
|
58
|
+
executables:
|
59
|
+
- coney
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- ".gitignore"
|
64
|
+
- ".rspec"
|
65
|
+
- ".rubocop.yml"
|
66
|
+
- CODE_OF_CONDUCT.md
|
67
|
+
- Gemfile
|
68
|
+
- Guardfile
|
69
|
+
- LICENSE
|
70
|
+
- README.md
|
71
|
+
- Rakefile
|
72
|
+
- bin/coney
|
73
|
+
- coney.gemspec
|
74
|
+
- coney.png
|
75
|
+
- console
|
76
|
+
- ebert.yml
|
77
|
+
- fixtures/vcr_cassettes/convert.yml
|
78
|
+
- lib/coney/cli.rb
|
79
|
+
- lib/coney/version.rb
|
80
|
+
homepage: https://github.com/wnuqui/coney
|
81
|
+
licenses:
|
82
|
+
- MIT
|
83
|
+
metadata: {}
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
requirements: []
|
99
|
+
rubyforge_project:
|
100
|
+
rubygems_version: 2.6.8
|
101
|
+
signing_key:
|
102
|
+
specification_version: 4
|
103
|
+
summary: Convert currency via Google.
|
104
|
+
test_files: []
|