closest_weightlifting_gem 0.1.2 → 0.1.3

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 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