dog-breeds 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5bf4b3756bf5ea53616bc18bd8e4b96ae1b02a30
4
+ data.tar.gz: ae6d860e68fbdc3c3dd217dccdb6b03d3a14a6f4
5
+ SHA512:
6
+ metadata.gz: 06fe300f8e5632c7c906c25e9f912c3c27a5aeaf830406b3bf62788d5516c76bce91418dd5ffeb606f934dbed5a65d11fa3ca806a4a649ed14c4fcc687337087
7
+ data.tar.gz: 58c78e767226d4b3f4fe26a1099a1813314e639859178a42c184b3a3b11e431417f963021d2b4e469fd9fe760a7a4fd940c3f1f1d373be19f09d1e67a43e2340
data/bin/dog-breeds ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # require 'bundler/setup'
4
+ # require 'dog_breeds'
5
+ # DogBreeds::CLI.new.call
6
+
7
+ require_relative '../lib/dog_breeds'
8
+
9
+ DogBreeds::CLI.new.call
@@ -0,0 +1,7 @@
1
+ require 'pry'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+
5
+ require_relative '../lib/dog_breeds/scrape'
6
+ require_relative '../lib/dog_breeds/dog'
7
+ require_relative '../lib/dog_breeds/cli'
data/lib/dog_breeds.rb ADDED
@@ -0,0 +1,4 @@
1
+ module DogBreeds
2
+ end
3
+
4
+ require_relative '../config/environment'
@@ -0,0 +1,123 @@
1
+ class DogBreeds::CLI
2
+
3
+ attr_accessor :letter, :dog_name, :dog_list, :dog_details, :dog_name_search
4
+
5
+ def call
6
+ puts "Welcome to the dog breeds list, viewer, and comparison tool"
7
+ start
8
+ end
9
+
10
+ def start
11
+ puts ""
12
+ choose_letter
13
+
14
+ @dog_list = DogBreeds::Scrape.new.get_dogs_by_letter(@letter)
15
+
16
+ @dog_list.size > 0 ? display_dog_list(@dog_list) : no_list
17
+
18
+ puts ""
19
+ choose_dog
20
+
21
+ @dog_details = DogBreeds::Scrape.new.get_dog_by_name(@dog_name_search)
22
+
23
+ if @dog_details.size > 0
24
+ @dog_name = @dog_name_search
25
+ dog = DogBreeds::Dog.create_new_from_details(@dog_name, @dog_details)
26
+ else
27
+ view_again?
28
+ end
29
+
30
+ if @dog_details.size > 0
31
+ display_dog_details(dog)
32
+ else
33
+
34
+ end
35
+
36
+ puts ""
37
+ view_again?
38
+ end
39
+
40
+ def choose_letter
41
+ puts "Select a letter between A to Z for a list of dogs"
42
+ input = gets.strip
43
+ # input = 'j'
44
+ input.match(/^[a-zA-Z]{1}$/i) ? @letter = input.upcase : choose_letter
45
+ end
46
+
47
+ def choose_dog
48
+ puts "Select a number to see details for that dog"
49
+ input = gets.strip
50
+ # input = "3"
51
+ input.match(/^([1-9]|[12][0-9])$/) && input.to_i < @dog_list.count + 1 ? @dog_name_search = @dog_list[input.to_i - 1].downcase.split(" ").join("-") : choose_dog
52
+ end
53
+
54
+ def display_dog_list(list)
55
+ puts "------------ Dog name begins with #{@letter} ------------"
56
+ list.each_with_index do |dog_name, index|
57
+ puts "#{index.to_i + 1}. #{dog_name}"
58
+ end
59
+ end
60
+
61
+ def display_dog_details(dog)
62
+ puts "------------ Details for #{dog.name} ------------"
63
+
64
+ # display dog details
65
+ puts "Name: #{dog.name}"
66
+ puts "Personality: #{dog.personality}"
67
+ puts "Energy Level: #{dog.energy}"
68
+ puts "Good with Children: #{dog.with_children}"
69
+ puts "Good with other dogs: #{dog.with_dogs}"
70
+ puts "Shedding: #{dog.shedding}"
71
+ puts "Grooming: #{dog.grooming}"
72
+ puts "Trainability: #{dog.trainability}"
73
+ puts "Barking Level: #{dog.barking}"
74
+ puts ""
75
+ puts "---------------- Stats ---------------"
76
+ puts "Height Male: #{dog.height_male}"
77
+ puts "Height Female: #{dog.height_female}"
78
+ puts "Weight Male: #{dog.weight_male}"
79
+ puts "Weight Female: #{dog.weight_female}"
80
+ puts "Life Expectancy: #{dog.life}"
81
+ end
82
+
83
+ def no_detail
84
+ puts "This dog does not have any information"
85
+ reset
86
+ end
87
+
88
+ def no_list
89
+ puts "There are no dogs for #{@letter.upcase}. Choose again"
90
+ reset
91
+ end
92
+
93
+ def view_again?
94
+ puts "Do you want to view another dog? Enter Y or N"
95
+ input = gets.strip.downcase
96
+ # input = "n"
97
+ if input == "y"
98
+ reset
99
+ elsif input == "n"
100
+ exit
101
+ else
102
+ view_again?
103
+ end
104
+ end
105
+
106
+ def reset
107
+ @letter = ""
108
+ @dog_name = ""
109
+ @dog_name_search = ""
110
+ @dog_list = []
111
+ @dog_details = []
112
+
113
+ start
114
+ end
115
+
116
+ def exit
117
+ puts "Have a nice day"
118
+ # DogBreeds::Dog.all.each do |dog|
119
+ # puts dog.name
120
+ # end
121
+ end
122
+
123
+ end
@@ -0,0 +1,49 @@
1
+ class DogBreeds::Dog
2
+ attr_accessor :name, :personality, :energy, :with_children, :with_dogs, :shedding, :grooming, :trainability, :height_male, :height_female, :weight_male, :weight_female, :life, :barking
3
+
4
+ @@all = []
5
+
6
+ def self.all
7
+ @@all
8
+ end
9
+
10
+ # def initialize(attributes)
11
+ # attributes.each {|key, value| self.send(("#{key}="), value)}
12
+ # end
13
+
14
+ def self.create_new_from_details(name, details)
15
+ n = name.split("-").each { |w| w.capitalize! }.join(" ")
16
+ p = details[0]
17
+ e = details[1]
18
+ wc = details[2]
19
+ wd = details[3]
20
+ s = details[4]
21
+ g = details[5]
22
+ t = details[6]
23
+ hm = details[7].split(",").count == 2 ? details[7].split(",")[0] : details[7]
24
+ hf = details[7].split(",").count == 2 ? details[7].split(",")[0] : details[7]
25
+ wm = details[8].split(",").count == 2 ? details[8].split(",")[1] : details[8]
26
+ wf = details[8].split(",").count == 2 ? details[8].split(",")[1] : details[8]
27
+ l = details[9]
28
+ b = details[10]
29
+ self.new(n, p, e, wc, wd, s, g, t, hm, hf, wm, wf, l, b)
30
+ end
31
+
32
+ def initialize(name, personality = nil, energy = nil, with_children = nil, with_dogs = nil, shedding = nil, grooming = nil, trainability = nil, height_male = nil, height_female = nil, weight_male = nil, weight_female = nil, life = nil, barking = nil)
33
+ @name = name
34
+ @personality = personality
35
+ @energy = energy
36
+ @with_children = with_children
37
+ @with_dogs = with_dogs
38
+ @shedding = shedding
39
+ @grooming = grooming
40
+ @trainability = trainability
41
+ @height_male = height_male
42
+ @height_female = height_female
43
+ @weight_male = weight_male
44
+ @weight_female = weight_female
45
+ @life = life
46
+ @barking = barking
47
+ @@all << self
48
+ end
49
+ end
@@ -0,0 +1,20 @@
1
+ class DogBreeds::Scrape
2
+ URL = "http://www.akc.org/dog-breeds"
3
+
4
+ def get_dogs_by_letter(letter)
5
+ result = get_html("?letter=#{letter}", "az_search")
6
+ result.collect { |dog| dog.css('.scale-contents h2 a').text }[0..-2]
7
+ end
8
+
9
+ def get_dog_by_name(name) # returns an array of the individual dog traits
10
+ result = get_html("#{name}", "name_search")
11
+ result.size > 0 ? result.collect { |detail| detail.text.split(":")[1].strip } : []
12
+ end
13
+
14
+ private
15
+
16
+ def get_html(arg, type) # returns an array of dog names by latter (with last element removed, which is a node with no data)
17
+ search = type == "az_search" ? "div.event-contain .event" : "div.breed-details__main li"
18
+ Nokogiri::HTML(open("#{URL}/#{arg}")).css(search)
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dog-breeds
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Robert Laws
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-09-23 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.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
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: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Find names of dog breeds and read detailed information about each breed.
84
+ email: roblaws@me.com
85
+ executables:
86
+ - dog-breeds
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - bin/dog-breeds
91
+ - config/environment.rb
92
+ - lib/dog_breeds.rb
93
+ - lib/dog_breeds/cli.rb
94
+ - lib/dog_breeds/dog.rb
95
+ - lib/dog_breeds/scrape.rb
96
+ homepage: http://rubygems.org/gems/dog-breeds
97
+ licenses:
98
+ - MIT
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.5.1
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Explore Dog Breeds
120
+ test_files: []