closest_weightlifting_gem 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 786b4111c162920f2b4dabd1b55b3e67ba6a211c
4
- data.tar.gz: 4501d815a84546ec4463c58184c63d26d17e6c74
3
+ metadata.gz: c14f13107e2795302c5a22106b1bdc3818cde5ed
4
+ data.tar.gz: dff447ea0e068ebe463fb1987b410e9febe74d62
5
5
  SHA512:
6
- metadata.gz: 67b2d1669bc805e84370a9ce7f9d381afb73dbfdfe83c589c2b312aab0c08ed3cf2e7ba4e9fba92f4b2e7aaf5c837bf0dd2dae0daa1903f8c6521e641198053b
7
- data.tar.gz: 0b517cd6bdbcb91225f35f89ac523ee31834e2795d53422f3ca5115f7886560fcbe5cd6ceabd0d06c22522815d73cf23d0aed5860a16840dde8981814c86843d
6
+ metadata.gz: 5d3d695c3a5b3dc5c2a5b3b4b7beb7eacc2094f7ac986e783edd6483f6779fd752ad03a98917df59122482bad93286b59fd03336f45ad288261becb730c0392f
7
+ data.tar.gz: f21d93c40f5c4cf12be6d52eef04304ef1149f2708eabae1963785e545aa008014857b01b4d9f749b22beafd5b9172bba9bf5502a68d7e11015dc08b69527eeb
data/README.md CHANGED
@@ -2,13 +2,6 @@
2
2
 
3
3
  This application scrapes the [USA Weightlifting's Find a Club ](http://www.teamusa.org/usa-weightlifting/clubs-lwc/find-a-club) feature and builds a Gym object for each club, which includes some basic biographical information.
4
4
 
5
- TODO:
6
- ---
7
- * Implement proper options from CLI#show_gym
8
- * show_gym page from #find_by_names menu should take it back to those search results instead of the state results
9
- * Geocode gym addresses
10
- * Implement user location input to find nearest gyms
11
-
12
5
  ## Installation
13
6
 
14
7
  Add this line to your application's Gemfile:
@@ -25,15 +18,24 @@ Or install it yourself as:
25
18
 
26
19
  $ gem install closest_weightlifting_gem
27
20
 
28
- ## Usage
29
-
21
+ ## Development
30
22
 
23
+ To interact with the command line interface, clone the repo locally and change directories into the new folder. Then you can run `bundle install` or `bin/setup` from the terminal prompt to install dependencies that aren't already on your system. Then, call the full program by typing `bin/closest-weightlifting-gem` into the prompt. Note: It scrapes everything up front so that I can query against the entire set of 1168 gyms (as of June 11 2016).
31
24
 
32
- ## Development
25
+ You can also run `bin/console` for an interactive prompt that will allow you to experiment. From within this console, you can call `basic_setup` and it will scrape all the gyms in Florida, Illinois, and New York to add some data into the system.
33
26
 
34
- 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.
27
+ TODO:
28
+ ---
29
+ * DRY up Scraper class
30
+ * Hook up to ActiveRecord
31
+ * Geocode gym addresses
32
+ * Implement user location input to find nearest gyms
33
+ * Map
35
34
 
36
- 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).
35
+ Done:
36
+ ---
37
+ * Implement proper options from CLI#show_gym
38
+ * show_gym page from #find_by_names menu should take it back to those search results instead of the state results
37
39
 
38
40
  ## Contributing
39
41
 
@@ -43,4 +45,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/zacsco
43
45
  ## License
44
46
 
45
47
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
46
-
data/bin/console CHANGED
@@ -2,24 +2,15 @@
2
2
 
3
3
  require "bundler/setup"
4
4
  require "closest_weightlifting_gem"
5
+ require 'pry'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
8
9
 
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'pry'
14
-
15
- def reload!
16
- load './lib/closest_weightlifting_gem.rb'
17
- end
18
-
19
10
  def basic_setup
20
11
  ["FL","IL","NY"].each do |state|
21
12
  ClosestWeightliftingGem::Scraper.scrape_state_page(state)
22
13
  end
23
14
  end
24
15
 
25
- Pry.start
16
+ Pry.start
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_development_dependency "bundler", "~> 1.11"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec", "~> 3.0"
33
- spec.add_development_dependency "pry", "~> 0.10.3"
33
+ spec.add_development_dependency "pry", "~> 0.10.4"
34
34
 
35
35
  spec.add_dependency "nokogiri", "~> 1.6.7.2"
36
36
  spec.add_dependency "require_all", "~> 1.3.3"
@@ -14,50 +14,12 @@ class ClosestWeightliftingGem::CLI
14
14
  ClosestWeightliftingGem::Scraper.scrape_main
15
15
  end
16
16
 
17
- # Not implemented currently, but plan to introduce when I figure out geocoder
18
- #
19
- # def address_input
20
- # puts <<-DOC.gsub /^\s*/, ''
21
- # Please enter your address below and I'll find
22
- # the closest weightlifting gym. (ex. 123 Main St. New York, NY)
23
- # DOC
24
-
25
- # address = gets.chomp
26
- # end
27
-
28
17
  def main_menu
29
18
  puts "What do you want to do now?"
30
19
 
31
20
  options(__method__)
32
21
  end
33
22
 
34
- def show_gyms(gyms)
35
- width = 80
36
- puts line
37
- puts "OK, your search yielded #{gyms.size} gyms!\n"
38
- puts "Here's the list: "
39
- puts line
40
- puts " Gym Name".ljust(width/2)+" City"
41
-
42
- gyms.each_with_index do |gym, i|
43
- puts "#{(i+1).to_s.rjust(3)}. #{gym.name.ljust(width/2)} #{gym.city}, #{gym.state}"
44
- end
45
-
46
- options(__method__, gyms)
47
- end
48
-
49
- def show_gym(gym)
50
- ClosestWeightliftingGem::Scraper.scrape_attributes(gym) if !gym.coach
51
-
52
- puts "Name: #{gym.name}"
53
- puts "Address: #{gym.full_address}"
54
- puts "Director: #{gym.director}"
55
- puts "Coach: #{gym.coach}"
56
- puts "Website: #{gym.website}"
57
-
58
- options(__method__, gym)
59
- end
60
-
61
23
  def options(menu, data=nil)
62
24
  menu = menu.to_s
63
25
 
@@ -84,31 +46,75 @@ class ClosestWeightliftingGem::CLI
84
46
  when "show_gym"
85
47
  puts line
86
48
  puts <<-DOC.gsub(/^\s*/,'')
87
- 1. Open Website
88
- 2. Back to State Results
89
- 3. Main menu
90
- 4. Exit
49
+ 1. Open in Google Maps
50
+ 2. Back to Previous Search
51
+ 2. Main menu
52
+ 3. Exit
91
53
  DOC
92
54
 
93
55
  process_gym(data)
94
56
  else
95
- puts "WTF"
57
+ puts "What was that??"
58
+ end
59
+ end
60
+
61
+ # Not implemented currently, but plan to introduce when I figure out geocoder
62
+ #
63
+ def address_input
64
+ puts <<-DOC.gsub /^\s*/, ''
65
+ Please enter your address below and I'll find
66
+ the closest weightlifting gym. (ex. 123 Main St. New York, NY)
67
+ DOC
68
+
69
+ address = gets.chomp
70
+ end
71
+
72
+ def show_gyms(gyms)
73
+ width = 80
74
+ puts "="*width
75
+ puts "OK, your search yielded #{gyms.size} gyms!\n"
76
+ puts "Here's the list: "
77
+ puts "="*width
78
+ puts " Gym Name".ljust(width/2)+" City"
79
+
80
+ gyms.each_with_index do |gym, i|
81
+ puts "#{(i+1).to_s.rjust(3)}. #{gym.name.ljust(width/2)} #{gym.city}, #{gym.state}"
82
+ end
83
+
84
+ options(__method__, gyms)
85
+ end
86
+
87
+ def show_gym(gym)
88
+ puts "Name: #{gym.name}"
89
+ puts "Address: #{gym.full_address}"
90
+ puts "Director: #{gym.director}"
91
+ puts "Phone: #{gym.phone}"
92
+
93
+ options(__method__, gym)
94
+ end
95
+
96
+ def open_in_google_maps(gym)
97
+ if gym.full_address
98
+ system("open", "http://maps.google.com/?q=#{gym.full_address}")
99
+ else
100
+ puts "Sorry, that gym doesn't have an address listed.\n\n\n\n"
101
+ show_gym(gym)
96
102
  end
97
103
  end
98
104
 
99
105
  def open_in_browser(gym)
100
106
  if gym.website == "none"
101
- puts "Sorry, that gym doesn't have a website. :("
107
+ puts "Sorry, that gym doesn't have a website. :(\n\n\n"
102
108
  elsif !gym.website.include?("http")
103
109
  system("open", "http://#{gym.website}")
104
- else
110
+ else
105
111
  system("open", "#{gym.website}")
106
112
  end
107
113
  end
108
114
 
109
115
  def process_main
110
116
  input = nil
111
-
117
+
112
118
  while input != "exit"
113
119
  input = gets.strip.downcase
114
120
 
@@ -123,12 +129,8 @@ class ClosestWeightliftingGem::CLI
123
129
  show_gyms(ClosestWeightliftingGem::Gym.find_by_name(search_term))
124
130
  when "3"
125
131
  good_bye
126
-
127
- exit
128
132
  when "exit"
129
133
  good_bye
130
-
131
- exit
132
134
  else
133
135
  puts "I didn't understand that, please try again."
134
136
  end
@@ -137,14 +139,15 @@ class ClosestWeightliftingGem::CLI
137
139
 
138
140
  def process_gyms(gyms)
139
141
  input = nil
140
-
142
+
141
143
  until input == "exit"
142
144
  input = gets.strip.downcase
145
+
143
146
  case input
144
147
  when "1"
145
148
  puts "Select a gym by the number:"
146
149
  gym_num = gets.chomp.to_i - 1
147
-
150
+
148
151
  show_gym(gyms[gym_num])
149
152
  when "2"
150
153
  show_gyms(gyms)
@@ -152,12 +155,8 @@ class ClosestWeightliftingGem::CLI
152
155
  main_menu
153
156
  when "4"
154
157
  good_bye
155
-
156
- exit
157
158
  when "exit"
158
159
  good_bye
159
-
160
- exit
161
160
  else
162
161
  puts "I didn't understand that, please try again."
163
162
  end
@@ -166,26 +165,22 @@ class ClosestWeightliftingGem::CLI
166
165
 
167
166
  def process_gym(gym)
168
167
  input = nil
169
-
168
+
170
169
  until input == "exit"
171
170
  input = gets.strip.downcase
171
+
172
172
  case input
173
173
  when "1"
174
- open_in_browser(gym)
175
-
176
- options("show_gym", gym)
174
+ open_in_google_maps(gym)
175
+ process_gym(gym)
177
176
  when "2"
178
- show_gyms(ClosestWeightliftingGem::Gym.find_by_state(gym.state))
177
+ show_gyms(ClosestWeightliftingGem::Gym.find_by_last_search)
179
178
  when "3"
180
179
  main_menu
181
180
  when "4"
182
181
  good_bye
183
-
184
- exit
185
182
  when "exit"
186
183
  good_bye
187
-
188
- exit
189
184
  else
190
185
  puts "I didn't understand that, please try again."
191
186
  end
@@ -199,5 +194,7 @@ class ClosestWeightliftingGem::CLI
199
194
 
200
195
  def good_bye
201
196
  puts "Adios friend. Hope you come back to lift weights again!"
197
+
198
+ exit
202
199
  end
203
- end
200
+ end
@@ -1,3 +1,5 @@
1
+ require 'pry'
2
+
1
3
  class ClosestWeightliftingGem::Gym
2
4
  attr_accessor :name,
3
5
  :full_address,
@@ -7,8 +9,6 @@ class ClosestWeightliftingGem::Gym
7
9
  :zipcode,
8
10
  :phone,
9
11
  :director,
10
- :coach,
11
- :usaw_url,
12
12
  :website
13
13
 
14
14
  @@all = []
@@ -25,7 +25,11 @@ class ClosestWeightliftingGem::Gym
25
25
  end
26
26
 
27
27
  def full_address
28
- "#{street} #{city}, #{state} #{zipcode}"
28
+ if street.nil?
29
+ nil
30
+ else
31
+ "#{street}, #{city}, #{state} #{zipcode}"
32
+ end
29
33
  end
30
34
 
31
35
  def self.all
@@ -45,26 +49,29 @@ class ClosestWeightliftingGem::Gym
45
49
  end
46
50
 
47
51
  def self.weird_gyms
48
- self.all.find_all do |g|
49
- g.phone == nil || g.street == nil || g.name == nil
52
+ self.all.find_all do |g|
53
+ g.phone.nil? || g.street.nil? || g.name.nil? || g.city.nil?
50
54
  end
51
55
  end
52
56
 
53
57
  def self.find_by_name(input)
54
58
  self.searches << { method: __method__, value: input }
55
59
 
56
- select_few = self.all.select do |gym|
57
- gym.name.upcase.include?(input.upcase)
58
- end
60
+ self.all.find_all { |gym| gym.name.upcase.include?(input.upcase) }
59
61
  end
60
62
 
61
63
  def self.find_by_state(state)
62
64
  self.searches << { method: __method__, value: state }
63
-
65
+
64
66
  self.all.find_all { |gym| gym.state == state.upcase }
65
67
  end
66
68
 
69
+ def self.find_by_last_search
70
+ last_search = @@searches.last
71
+ self.send(last_search[:method], last_search[:value])
72
+ end
73
+
67
74
  def self.count_by_state
68
75
  self.all.inject(Hash.new(0)) { |total, gym| total[gym.state] += 1 ; total }
69
76
  end
70
- end
77
+ end
@@ -1,73 +1,126 @@
1
- class ClosestWeightliftingGem::Scraper
1
+ require 'pry'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'uri'
2
5
 
6
+ class ClosestWeightliftingGem::Scraper
3
7
  BASE_URL = "https://webpoint.usaweightlifting.org/wp15/Companies/"
4
8
 
9
+ def self.get_state_abbreviations(index)
10
+ index.search("select#CompanyState").children[2..-1].collect { |child| child.attr("value") }
11
+ end
12
+
5
13
  def self.scrape_main
6
14
  puts "Fetching index..."
7
- index = Nokogiri::HTML(open("#{BASE_URL}/Clubs.wp?frm=t"))
15
+ index = Nokogiri::HTML(open("#{BASE_URL}/Clubs.wp?frm=t&RF=Zp%2CST"))
8
16
 
9
17
  get_state_abbreviations(index).each { |state| scrape_state_page(state) }
10
18
 
11
19
  puts "\n\nSorry that took so long."
12
20
  end
13
21
 
22
+ # Form Data
23
+ # do I need cookies, etc now?
14
24
  def self.scrape_state_page(state)
15
25
  puts "Fetching gym data in #{state}..."
16
- state_doc = Nokogiri::HTML(open("#{BASE_URL}/Clubs.wp?frm=t&CompanyState=#{state}"))
26
+ data = {
27
+ 'wp_ClientOrgID' => '',
28
+ 'CompanyParentID' => '',
29
+ 'CompanyName' => '',
30
+ 'CompanyState' => state,
31
+ 'geo_Zip' => '',
32
+ 'geo_Miles' => 25,
33
+ 'submit' => 'Go'
34
+ }
17
35
 
18
- # I want it to scrape each state page
19
- # I want it to insantiate and save gym objects for each gym on the page
20
- # This will just be basic info and I can set other data in the gym class
36
+ url = URI("#{BASE_URL}/Clubs.wp?frm=t&RF=Zp%2CST")
37
+ http = Net::HTTP.new(url.host, url.port)
38
+ http.use_ssl = true
39
+ request = Net::HTTP::Post.new(url)
40
+ request["Content-Type"] = 'application/x-www-form-urlencoded'
41
+ request["cache-control"] = 'no-cache'
42
+ request.body = "wp_ClientOrgID=&CompanyParentID=&CompanyName=&CompanyState=#{state}&geo_Zip=&geo_Miles=25&submit=Go"
43
+ response = http.request(request)
44
+ state_doc = Nokogiri::HTML(response.read_body)
21
45
 
22
- state_doc.search(".datarow").each do |gym_row|
46
+ state_doc.search("#wp_Clubs li").each do |gym_row|
47
+ details = extract_details(gym_row.search("p")[0])
23
48
 
24
- if gym_row.search(".right+ .left").text.split(" ").size < 5
25
- scrape_gym_page(gym_row)
26
- else
27
- ClosestWeightliftingGem::Gym.new({
28
- :name => gym_row.search("a").first.children.text.titleize,
29
- :street => gym_row.children[5].children[0].text,
30
- :city => gym_row.children[5].children[2].text.split(",").first,
31
- :state => state,
32
- :zipcode => gym_row.children[5].children[2].text.split(/\W+/).last,
33
- :phone => gym_row.children[5].children[4].text,
34
- :usaw_url => gym_row.search("a").first.attr("onclick").match(/\/V.+true/)[0]
35
- })
36
- end
49
+ ClosestWeightliftingGem::Gym.new({
50
+ :name => gym_row.search("h3").text.strip,
51
+ :street => details[:street], #gym_row.search("p").children[0].to_s,
52
+ :city => details[:city], #gym_row.search("p").children[2].to_s.split(/\W+/)[0],
53
+ :state => state,
54
+ :zipcode => details[:zipcode], #gym_row.search("p").children[2].to_s.split(/\W+/)[-1],
55
+ :phone => details[:phone], #gym_row.search("p").children[4].to_s,
56
+ :website => details[:website],
57
+ :director => details[:director]
58
+ })
37
59
  end
38
60
  end
39
61
 
40
62
  def self.scrape_gym_page(gym_row)
41
63
  gym_doc = Nokogiri::HTML(open("#{BASE_URL + gym_row.search("a").first.attr("onclick").match(/\/V.+true/)[0]}"))
42
-
64
+
43
65
  ClosestWeightliftingGem::Gym.new({
44
- :name => gym_doc.search(".fe_vbig_row td").text.titleize,
45
- :street => gym_doc.search(".fe_vbig_row+ .fe_big_row td").children.to_s.split("<br>")[0],
46
- :city => gym_doc.search(".fe_vbig_row+ .fe_big_row td").children.to_s.split("<br>")[1].split(",")[0],
47
- :state => gym_doc.search(".fe_vbig_row+ .fe_big_row td").children.to_s.split(",").last.split(/\W+/)[1],
48
- :zipcode => gym_doc.search(".fe_vbig_row+ .fe_big_row td").children.to_s.split(/\W/).last,
49
- :phone => gym_doc.search(".fe_big_row:nth-child(4) td").children.last.to_s[1..-1],
66
+ :name => gym_doc.search("h3").text,
67
+ :street => gym_doc.search("p").children[0].to_s,
68
+ :city => gym_row.search("p").children[2].to_s.split(/\W+/)[0],
69
+ :state => gym_row.search("p").children[2].to_s.split(/\W+/)[1],
70
+ :zipcode => gym_row.search("p").children[2].to_s.split(/\W+/)[-1],
71
+ :phone => gym_row.search("p").children[4].to_s,
50
72
  :director => gym_doc.search(".fe_big_row:nth-child(2) td+ td").text,
51
73
  :coach => gym_doc.search(".fe_big_row+ .fe_big_row td+ td").text,
52
74
  :website => gym_doc.text.split("site:")[1].split("\r").first[1..-1],
53
75
  :usaw_url => gym_row.search("a").first.attr("onclick").match(/\/V.+true/)[0]
54
76
  })
55
-
56
77
  end
57
78
 
58
- def self.scrape_attributes(gym)
59
- gym_doc = Nokogiri::HTML(open("#{BASE_URL + gym.usaw_url}"))
79
+ def self.extract_details(info_div)
80
+ details = {
81
+ "street": "",
82
+ "city": "",
83
+ "state": "",
84
+ "zipcode": "",
85
+ "phone": "",
86
+ "website": "",
87
+ "director": ""
88
+ }
60
89
 
61
- gym.add_attributes({
62
- :phone => gym_doc.search(".fe_big_row:nth-child(4) td").children.last.to_s[1..-1],
63
- :director => gym_doc.search(".fe_big_row:nth-child(2) td+ td").text,
64
- :coach => gym_doc.search(".fe_big_row+ .fe_big_row td+ td").text,
65
- :website => gym_doc.text.split("site:")[1].split("\r").first[1..-1]
66
- })
67
- end
90
+ begin
91
+ aa = info_div.children.select { |el| !["br", "b"].include?(el.name) }
92
+ case aa.length
93
+ when 1
94
+ details[:phone] = aa[0].text
95
+ when 3
96
+ details[:phone] = aa[0].text
97
+ details[:director] = aa[1].text
98
+ when 4
99
+ details[:phone] = aa[0].text
100
+ details[:website] = aa[1].text
101
+ details[:director] = aa[2].text
102
+ else
103
+ if aa[1].text.include?(", ")
104
+ city, state_zip = aa[1].text.split(", ")
105
+ else
106
+ city, state_zip = aa[2].text.split(", ")
107
+ end
68
108
 
69
- def self.get_state_abbreviations(index)
70
- index.search("select").children.collect { |child| child.attr("value") }[2..-1]
71
- end
109
+ state, empty, zip = state_zip.split(/[[:space:]]/)
110
+ details[:street] = aa[0].text
111
+ details[:city] = city
112
+ details[:state] = state
113
+ details[:zipcode] = zip
114
+ details[:phone] = aa[2].text
115
+ details[:website] = aa[3]["href"]
116
+ details[:director] = aa[4].text
117
+ end
118
+ rescue StandardError => e
119
+ puts "[ERROR] extracting details from: #{aa}"
120
+ puts "[ERROR] #{e}"
121
+ end
72
122
 
73
- end
123
+ details.each { |k, v| details[k] = "" if v.nil? }
124
+ details
125
+ end
126
+ end
@@ -1,3 +1,3 @@
1
1
  module ClosestWeightliftingGem
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/notes.md CHANGED
@@ -1,11 +1,18 @@
1
- ToDo:
1
+ # ToDo:
2
+ 1. Website redesign has caused the scraping to fail.
3
+ * ~~.scrape_main to scrape the correct address~~
4
+ * Update gem versions!!!
5
+ * State pages have changed slightly in HTML structure and I need to identify
6
+ those new element selectors
2
7
 
8
+
9
+ ## Legacy Notes:
3
10
  Update Gemspec ToDos
4
11
  2. Start with project structure
5
12
  3. Start with entry point - file run (bin/closest-weightlifting-gem)
6
13
  4. Build to CLI interface
7
14
  5. Stub out interface
8
- 6. Start makinig things real
15
+ 6. Start making things real
9
16
  7. Discover objects
10
17
  8. Program
11
18
 
@@ -33,5 +40,3 @@ open to web page or google maps
33
40
 
34
41
  Basic URI for accessing each state's individual page
35
42
  https://webpoint.usaweightlifting.org/wp15/Companies/Clubs.wp?frm=t&CompanyValue=#{state}
36
-
37
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: closest_weightlifting_gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - zacscodingclub
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-26 00:00:00.000000000 Z
11
+ date: 2018-12-08 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.10.3
61
+ version: 0.10.4
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.10.3
68
+ version: 0.10.4
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -156,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
156
  version: '0'
157
157
  requirements: []
158
158
  rubyforge_project:
159
- rubygems_version: 2.4.5.1
159
+ rubygems_version: 2.6.13
160
160
  signing_key:
161
161
  specification_version: 4
162
162
  summary: USA Weighlifting Club Gyms