td_tip 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +11 -0
- data/.rubocop.yml +2 -0
- data/README.md +11 -12
- data/lib/td_tip/cli.rb +11 -1
- data/lib/td_tip/models/parameters.rb +2 -0
- data/lib/td_tip/models/response.rb +9 -3
- data/lib/td_tip/version.rb +1 -1
- data/td_tip.gemspec +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dcb4ecc27a9584d91fe993eac68c8efbe065f102
|
4
|
+
data.tar.gz: d7434cd3c289cb43207969b4ed3b40c33aad6cbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a45f5d132b756d79e1de561fa707c1f7d47f4ad4fbb1d546b946660d4cc49896f4e85c5c5fd8da043c15cce33151b9e594a4e2f1bd84292127638edf85f4300a
|
7
|
+
data.tar.gz: 0bee6a80beb4aac1ce25418fefebad8fbfeafa8666460ad3fbdd81de2ae4a1dba977853d5fce006307aa143b436286e68a5d476fa8105a7b391fa22a02155e7d
|
data/.codeclimate.yml
ADDED
data/.rubocop.yml
ADDED
data/README.md
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
# TdTip
|
2
2
|
|
3
|
-
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/td_tip.svg)](https://badge.fury.io/rb/td_tip)
|
4
|
+
[![Build Status](https://travis-ci.org/wspyra/td_tip.svg)](https://travis-ci.org/wspyra/td_tip)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/wspyra/td_tip/badge.svg?branch=master&service=github)](https://coveralls.io/github/wspyra/td_tip?branch=master)
|
6
|
+
[![Dependency Status](https://gemnasium.com/wspyra/td_tip.svg)](https://gemnasium.com/wspyra/td_tip)
|
7
|
+
[![Code Climate](https://codeclimate.com/github/wspyra/td_tip/badges/gpa.svg)](https://codeclimate.com/github/wspyra/td_tip)
|
4
8
|
|
5
|
-
|
9
|
+
T+D Code challenge solution
|
6
10
|
|
7
11
|
## Installation
|
8
12
|
|
@@ -22,18 +26,13 @@ Or install it yourself as:
|
|
22
26
|
|
23
27
|
## Usage
|
24
28
|
|
25
|
-
|
29
|
+
Commands:
|
26
30
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
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).
|
32
|
-
|
33
|
-
## Contributing
|
34
|
-
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/td_tip. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
|
31
|
+
$ calculate-tip
|
32
|
+
|
33
|
+
$ calculate-tip --amount AMOUNT --tip NUMBER
|
36
34
|
|
35
|
+
$ calculate-tip help calculate
|
37
36
|
|
38
37
|
## License
|
39
38
|
|
data/lib/td_tip/cli.rb
CHANGED
@@ -11,12 +11,13 @@ module TdTip
|
|
11
11
|
|
12
12
|
attr_reader :cli_options, :parameters, :response
|
13
13
|
|
14
|
+
# Main/default action
|
14
15
|
def calculate
|
15
16
|
set_cli_options
|
16
17
|
set_parameters
|
17
18
|
|
18
19
|
if parameters.valid?
|
19
|
-
|
20
|
+
set_response
|
20
21
|
display_response
|
21
22
|
else
|
22
23
|
display_validation_errors parameters
|
@@ -25,16 +26,24 @@ module TdTip
|
|
25
26
|
|
26
27
|
private
|
27
28
|
|
29
|
+
# Set options from command line or ask user
|
28
30
|
def set_cli_options
|
29
31
|
@cli_options = options.dup
|
30
32
|
@cli_options[:amount] ||= ask('# Please provide amount:')
|
31
33
|
@cli_options[:tip] ||= ask('# Please provide tip (%):')
|
32
34
|
end
|
33
35
|
|
36
|
+
# Set parameters from options
|
34
37
|
def set_parameters
|
35
38
|
@parameters = TdTip::Models::Parameters.new cli_options
|
36
39
|
end
|
37
40
|
|
41
|
+
# Set response using parameters
|
42
|
+
def set_response
|
43
|
+
@response = TdTip::Models::Response.new(parameters).get
|
44
|
+
end
|
45
|
+
|
46
|
+
# Print response on screen
|
38
47
|
def display_response
|
39
48
|
if response.valid?
|
40
49
|
say "# Total amount with tip: #{response.amount_with_tip}" \
|
@@ -45,6 +54,7 @@ module TdTip
|
|
45
54
|
end
|
46
55
|
end
|
47
56
|
|
57
|
+
# Print validation messages
|
48
58
|
def display_validation_errors(obj)
|
49
59
|
obj.errors.messages.each do |field, messages|
|
50
60
|
say "# #{field.capitalize}: #{messages.join ', '}\n"
|
@@ -17,12 +17,14 @@ module TdTip
|
|
17
17
|
parse_amount options[:amount]
|
18
18
|
end
|
19
19
|
|
20
|
+
# Returns parameters for Web Service
|
20
21
|
def to_params
|
21
22
|
{ amount: amount, tip: tip }
|
22
23
|
end
|
23
24
|
|
24
25
|
protected
|
25
26
|
|
27
|
+
# Parses raw amount into final amount and currency
|
26
28
|
def parse_amount(amount_raw)
|
27
29
|
matches = TdTip::AMOUNT_CURRENCY_REGEXP.match amount_raw
|
28
30
|
return unless matches
|
@@ -2,7 +2,7 @@ require 'httparty'
|
|
2
2
|
|
3
3
|
module TdTip
|
4
4
|
module Models
|
5
|
-
# Response
|
5
|
+
# Response - performs request and handle response
|
6
6
|
class Response
|
7
7
|
include ActiveModel::Validations
|
8
8
|
include HTTParty
|
@@ -21,6 +21,7 @@ module TdTip
|
|
21
21
|
@parameters = parameters
|
22
22
|
end
|
23
23
|
|
24
|
+
# Performs request and handle response
|
24
25
|
def get
|
25
26
|
result = parse_and_symbolize_json
|
26
27
|
@amount_with_tip = result[:amount_with_tip]
|
@@ -32,14 +33,19 @@ module TdTip
|
|
32
33
|
|
33
34
|
private
|
34
35
|
|
36
|
+
# Adds additional validation
|
35
37
|
def other_errors
|
36
38
|
errors.add(:error, error) unless error.blank?
|
37
39
|
end
|
38
40
|
|
41
|
+
# Process request response
|
39
42
|
def parse_and_symbolize_json
|
40
|
-
with_error_handling
|
43
|
+
with_error_handling do
|
44
|
+
JSON.parse(calculate_request.body).symbolize_keys!
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
48
|
+
# Performs post request to Web Service
|
43
49
|
def calculate_request
|
44
50
|
self.class.post WS_METHOD,
|
45
51
|
query: parameters.to_params,
|
@@ -48,7 +54,7 @@ module TdTip
|
|
48
54
|
|
49
55
|
def with_error_handling
|
50
56
|
yield
|
51
|
-
rescue => e
|
57
|
+
rescue HTTParty::Error, JSON::ParserError => e
|
52
58
|
{ error: e.message }
|
53
59
|
end
|
54
60
|
end
|
data/lib/td_tip/version.rb
CHANGED
data/td_tip.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
25
25
|
spec.add_development_dependency 'rake', '~> 10.0'
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.4'
|
27
|
-
spec.add_development_dependency 'coveralls', '~> 0.8.
|
27
|
+
spec.add_development_dependency 'coveralls', '~> 0.8.9'
|
28
28
|
spec.add_development_dependency 'rubocop', '~> 0.35.1'
|
29
29
|
|
30
30
|
spec.add_dependency 'thor', '~> 0.19.1'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td_tip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wiesław Spyra
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-12-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.8.
|
61
|
+
version: 0.8.9
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.8.
|
68
|
+
version: 0.8.9
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubocop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,9 +130,11 @@ executables:
|
|
130
130
|
extensions: []
|
131
131
|
extra_rdoc_files: []
|
132
132
|
files:
|
133
|
+
- ".codeclimate.yml"
|
133
134
|
- ".coveralls.yml"
|
134
135
|
- ".gitignore"
|
135
136
|
- ".rspec"
|
137
|
+
- ".rubocop.yml"
|
136
138
|
- ".travis.yml"
|
137
139
|
- Gemfile
|
138
140
|
- LICENSE.txt
|