cb_nitride 0.0.7 → 0.0.8
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 +4 -4
- data/lib/cb_nitride/diamond_number_generator.rb +50 -17
- data/lib/cb_nitride/hasher_methods.rb +11 -1
- data/lib/cb_nitride/private_hasher.rb +2 -1
- data/lib/cb_nitride/public_hasher.rb +3 -4
- data/lib/cb_nitride/version.rb +1 -1
- data/lib/cb_nitride.rb +15 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e1a3ea7c1e6df70c161f8b71a2b6f3a8723631c
|
4
|
+
data.tar.gz: e612a52d76006ab7d06499b2e09b55217bcda7f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 63af916a67f363d21a7c777a5e72af35b1d989454b4b41f4838c8bd1446a6283d533a961994fa8bedfbc3131db3fcf97dbbd978ea85853df9121d271ec3b8aeb
|
7
|
+
data.tar.gz: 00e010e4c8ebd8a77cf447c2e8ed3bc76a2742738e8e3017fb6844bc394d786bdffd83d70ebf5bf942fced99d5f38401250115cc64deb3d32bd0c2c430681329
|
@@ -1,52 +1,85 @@
|
|
1
1
|
module CbNitride
|
2
2
|
class DiamondNumberGenerator
|
3
3
|
|
4
|
+
#TODO: Refactor into DiamondNumberSet with sorting capabilities instead of array of array of array.
|
5
|
+
|
6
|
+
NEW_RELEASES_URL = "http://www.previewsworld.com/Home/1/1/71/952"
|
7
|
+
UPCOMING_RELEASES_URL = "http://www.previewsworld.com/Home/1/1/71/954"
|
8
|
+
|
4
9
|
attr_reader :month, :year
|
5
|
-
attr_accessor :count
|
6
10
|
|
7
11
|
MONTH_CODES = ['JAN', 'FEB', 'MAR', 'APR', 'JUN', 'MAY', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
|
8
12
|
YEAR_CODES = ['06','07','08','09','10','11','12','13']
|
9
13
|
|
10
|
-
def self.
|
11
|
-
new.
|
14
|
+
def self.generate_all!
|
15
|
+
new.brute_force_formatted_numbers
|
12
16
|
end
|
13
17
|
|
14
|
-
def
|
15
|
-
|
16
|
-
@target_year = year
|
18
|
+
def self.generate_imminent!
|
19
|
+
new.imminent_releases
|
17
20
|
end
|
18
21
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
def initialize(year_range = nil, month_range = nil, options = {})
|
23
|
+
@year_range = year_range || YEAR_CODES
|
24
|
+
@month_range = month_range || MONTH_CODES
|
25
|
+
end
|
26
|
+
|
27
|
+
def imminent_releases
|
28
|
+
[new_releases_page, upcoming_releases_page].map do |page|
|
29
|
+
extract_diamond_numbers(page)
|
30
|
+
end.flatten
|
31
|
+
end
|
32
|
+
|
33
|
+
def brute_force_formatted_numbers
|
34
|
+
year_codes.map do |year|
|
35
|
+
month_codes.map do |month|
|
36
|
+
generate_numbers(year, month)
|
23
37
|
end
|
24
38
|
end
|
25
39
|
end
|
26
40
|
|
27
41
|
def all_for_year
|
28
|
-
|
42
|
+
month_codes.map do |month|
|
29
43
|
generate_numbers(year, month)
|
30
44
|
end.flatten
|
31
45
|
end
|
46
|
+
|
32
47
|
private
|
33
48
|
|
34
49
|
def generate_numbers(year, month)
|
35
50
|
(1...3000).map do |num|
|
36
|
-
|
51
|
+
format_number(year, month, num)
|
37
52
|
end.flatten.compact
|
38
53
|
end
|
39
54
|
|
40
|
-
def
|
41
|
-
month + year + calculate_zeroes(num)
|
42
|
-
end
|
43
|
-
|
44
|
-
def formatted_number(num)
|
55
|
+
def format_number(year, month, num)
|
45
56
|
month + year + calculate_zeroes(num)
|
46
57
|
end
|
47
58
|
|
48
59
|
def calculate_zeroes(num)
|
49
60
|
("0" * (4 - num.to_s.size)) + num.to_s
|
50
61
|
end
|
62
|
+
|
63
|
+
def item_page(url)
|
64
|
+
Nokogiri::HTML(Mechanize.new.get(url).content)
|
65
|
+
end
|
66
|
+
|
67
|
+
def extract_diamond_numbers(page)
|
68
|
+
page.css('a').map do |link|
|
69
|
+
if link.attributes["href"].value.include? "stockItemID"
|
70
|
+
link.children.text
|
71
|
+
else
|
72
|
+
nil
|
73
|
+
end
|
74
|
+
end.compact
|
75
|
+
end
|
76
|
+
|
77
|
+
def new_releases_page
|
78
|
+
@_new_releases_page ||= item_page(NEW_RELEASES_URL)
|
79
|
+
end
|
80
|
+
|
81
|
+
def upcoming_releases_page
|
82
|
+
@_upcoming_releases_page ||= item_page(UPCOMING_RELEASES_URL)
|
83
|
+
end
|
51
84
|
end
|
52
85
|
end
|
@@ -1,6 +1,12 @@
|
|
1
1
|
module CbNitride
|
2
2
|
module HasherMethods
|
3
3
|
|
4
|
+
attr_accessor :error_array
|
5
|
+
|
6
|
+
def error_array
|
7
|
+
@error_array ||= []
|
8
|
+
end
|
9
|
+
|
4
10
|
def find_text_with(code)
|
5
11
|
item_page.css(code).text.strip
|
6
12
|
end
|
@@ -14,7 +20,11 @@ module CbNitride
|
|
14
20
|
end
|
15
21
|
|
16
22
|
def clean_date_string(date)
|
17
|
-
|
23
|
+
if date == ""
|
24
|
+
error_array << "No Release Date"
|
25
|
+
else
|
26
|
+
Date.strptime(date.match(/\d+[\/]\d+[\/]\d+/).to_s, "%m/%d/%Y")
|
27
|
+
end
|
18
28
|
end
|
19
29
|
end
|
20
30
|
end
|
@@ -61,7 +61,8 @@ module CbNitride
|
|
61
61
|
release_date: clean_date_string(native_hash["Est Ship Date"]),
|
62
62
|
price: clean_price_float(native_hash["Price Before Discount"]),
|
63
63
|
category_code: native_hash["Category Code"],
|
64
|
-
state: :private
|
64
|
+
state: :private,
|
65
|
+
errors: error_array
|
65
66
|
}
|
66
67
|
end
|
67
68
|
|
@@ -53,7 +53,7 @@ module CbNitride
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def uncategorized_hash
|
56
|
-
|
56
|
+
@_uncategorized_hash ||= {
|
57
57
|
title: find_text_with(TITLE_CLASS),
|
58
58
|
diamond_number: diamond_number,
|
59
59
|
stock_number: get_stock_number,
|
@@ -63,7 +63,8 @@ module CbNitride
|
|
63
63
|
description: find_text_with(DESCRIPTION_CLASS),
|
64
64
|
release_date: clean_date_string(find_text_with(RELEASE_CLASS)),
|
65
65
|
price: clean_price_float(find_text_with(PRICE_CLASS)),
|
66
|
-
state: :public
|
66
|
+
state: :public,
|
67
|
+
errors: error_array
|
67
68
|
}
|
68
69
|
end
|
69
70
|
|
@@ -74,8 +75,6 @@ module CbNitride
|
|
74
75
|
)
|
75
76
|
end
|
76
77
|
|
77
|
-
|
78
|
-
|
79
78
|
def item_page
|
80
79
|
@item_page ||= Nokogiri::HTML(agent.get(SEARCH_URL + diamond_number).content)
|
81
80
|
end
|
data/lib/cb_nitride/version.rb
CHANGED
data/lib/cb_nitride.rb
CHANGED
@@ -12,7 +12,7 @@ require "cb_nitride/diamond_item"
|
|
12
12
|
require "cb_nitride/diamond_number_generator"
|
13
13
|
|
14
14
|
module CbNitride
|
15
|
-
def self.item(diamond_number
|
15
|
+
def self.item(diamond_number)
|
16
16
|
unless qualified?
|
17
17
|
PublicHasher.item(diamond_number)
|
18
18
|
else
|
@@ -21,7 +21,19 @@ module CbNitride
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.generate_diamond_numbers
|
24
|
-
@_generate_diamond_numbers ||= DiamondNumberGenerator.
|
24
|
+
@_generate_diamond_numbers ||= DiamondNumberGenerator.generate_all!
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.scrape_imminent!
|
28
|
+
DiamondNumberGenerator.generate_imminent!.map do |diamond_number|
|
29
|
+
diamond_item = item(diamond_number)
|
30
|
+
if diamond_item.nil?
|
31
|
+
binding.pry
|
32
|
+
else
|
33
|
+
puts "Recorded #{diamond_item.title} (#{diamond_number})"
|
34
|
+
diamond_item
|
35
|
+
end
|
36
|
+
end
|
25
37
|
end
|
26
38
|
|
27
39
|
def self.scrape_all!
|
@@ -32,8 +44,8 @@ module CbNitride
|
|
32
44
|
if diamond_item.nil?
|
33
45
|
binding.pry
|
34
46
|
else
|
47
|
+
puts "Recorded #{diamond_item.title} (#{diamond_number})"
|
35
48
|
diamond_item
|
36
|
-
puts "Recorded #{diamond_item.title}"
|
37
49
|
end
|
38
50
|
end
|
39
51
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cb_nitride
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Jarvis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|