cubesmart 0.7.0 → 1.0.0

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
  SHA256:
3
- metadata.gz: faf820da6f1fc7571b5558fe7bc2fea1471f180485cfa1d6433aa5163ae0f613
4
- data.tar.gz: 41b35c9acf309ee0439794ba50322c4e7bca51efcf1827dd6cc6bb4a68fc235d
3
+ metadata.gz: 9f6ca103f9053e6250a85a42aa2a374edefdd702195777acbc7b3434e86b3775
4
+ data.tar.gz: b5852885f4fba9a2e9976c675a43d655afaf3cc1b090930b4d80a790c70b097b
5
5
  SHA512:
6
- metadata.gz: 69bc03009bd047ed9e46e5b9747e214b7955b91bbcde1cb208b6a52c035769888376143abcd333c478bdb1b1a80594e3eabb1b3bcabd317f06cd037c24886127
7
- data.tar.gz: 73b9a9ffa0e8aabf140a4be5f1ffcdbe8b7dae833ee2f39ed835cdb2b72239813c83232607c3db376d05ddd88df7b7ea2ad795ce18ac8b50f43054e656d412d6
6
+ metadata.gz: 3ac76e5460e15ec7f7f26acce3aca8682e01f63d81e41ba408588089da2458c7514e12990e6d6e1f27544a26e59055a3ccd1a6456913e61446ea7a0a55fdee5b
7
+ data.tar.gz: 3a3ed1f456a2740714cd240058ced94d2e7dc9b7cbef5a8c49742d3f395f7da27b93bd9aebd2242db032a3e682fe93d1debb696976b3be776b7241b0a7012ba8
data/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
  [![Yard](https://img.shields.io/badge/docs-site-blue.svg)](https://cubesmart.ksylvest.com)
7
7
  [![CircleCI](https://img.shields.io/circleci/build/github/ksylvest/cubesmart)](https://circleci.com/gh/ksylvest/cubesmart)
8
8
 
9
+ A Ruby library offering both a CLI and API for scraping [CubeSmart](hhttps://www.cubesmart.com/) self-storage facilities and prices.
10
+
9
11
  ## Installation
10
12
 
11
13
  ```bash
@@ -49,3 +51,7 @@ end
49
51
  ```bash
50
52
  cubesmart crawl
51
53
  ```
54
+
55
+ ```bash
56
+ cubesmart crawl "https://www.cubesmart.com/california-self-storage/los-angeles-self-storage/3844.html"
57
+ ```
data/lib/cubesmart/cli.rb CHANGED
@@ -21,7 +21,7 @@ module CubeSmart
21
21
  command = argv.shift
22
22
 
23
23
  case command
24
- when 'crawl' then crawl
24
+ when 'crawl' then crawl(*argv)
25
25
  else
26
26
  warn("unsupported command=#{command.inspect}")
27
27
  exit(Code::ERROR)
@@ -30,8 +30,9 @@ module CubeSmart
30
30
 
31
31
  private
32
32
 
33
- def crawl
34
- Crawl.run
33
+ # @param url [String] optional
34
+ def crawl(url = nil)
35
+ Crawl.run(url: url)
35
36
  exit(Code::OK)
36
37
  end
37
38
 
@@ -48,10 +49,15 @@ module CubeSmart
48
49
  # @return [OptionParser]
49
50
  def parser
50
51
  OptionParser.new do |options|
51
- options.banner = 'usage: cubesmart [options] <command> [<args>]'
52
+ options.banner = 'usage: extraspace [options] <command> [<args>]'
52
53
 
53
54
  options.on('-h', '--help', 'help') { help(options) }
54
55
  options.on('-v', '--version', 'version') { version }
56
+
57
+ options.separator <<~COMMANDS
58
+ commands:
59
+ crawl [url]
60
+ COMMANDS
55
61
  end
56
62
  end
57
63
  end
@@ -9,19 +9,22 @@ module CubeSmart
9
9
 
10
10
  # @param stdout [IO] optional
11
11
  # @param stderr [IO] optional
12
- # @param options [Hash] optional
13
- def initialize(stdout: $stdout, stderr: $stderr, options: {})
12
+ # @param url [String] optional
13
+ def initialize(stdout: $stdout, stderr: $stderr, url: nil)
14
14
  @stdout = stdout
15
15
  @stderr = stderr
16
- @options = options
16
+ @url = url
17
17
  end
18
18
 
19
19
  def run
20
- sitemap = Facility.sitemap
21
- @stdout.puts("count=#{sitemap.links.count}")
22
- @stdout.puts
23
-
24
- sitemap.links.each { |link| process(url: link.loc) }
20
+ if @url
21
+ process(url: @url)
22
+ else
23
+ sitemap = Facility.sitemap
24
+ @stdout.puts("count=#{sitemap.links.count}")
25
+ @stdout.puts
26
+ sitemap.links.each { |link| process(url: link.loc) }
27
+ end
25
28
  end
26
29
 
27
30
  def process(url:)
@@ -3,23 +3,23 @@
3
3
  module CubeSmart
4
4
  # The dimensions (width + depth + sqft) of a price.
5
5
  class Dimensions
6
- DEFAULT_HEIGHT = 8 # feet
6
+ DEFAULT_HEIGHT = 8.0 # feet
7
7
 
8
8
  # @attribute [rw] depth
9
- # @return [Integer]
9
+ # @return [Float]
10
10
  attr_accessor :depth
11
11
 
12
12
  # @attribute [rw] width
13
- # @return [Integer]
13
+ # @return [Float]
14
14
  attr_accessor :width
15
15
 
16
16
  # @attribute [rw] height
17
- # @return [Integer]
17
+ # @return [Float]
18
18
  attr_accessor :height
19
19
 
20
- # @param depth [Integer]
21
- # @param width [Integer]
22
- # @param height [Integer]
20
+ # @param depth [Float]
21
+ # @param width [Float]
22
+ # @param height [Float]
23
23
  def initialize(depth:, width:, height: DEFAULT_HEIGHT)
24
24
  @depth = depth
25
25
  @width = width
@@ -48,7 +48,7 @@ module CubeSmart
48
48
 
49
49
  # @return [String] e.g. "10' × 10' (100 sqft)"
50
50
  def text
51
- "#{format('%g', @width)}' × #{format('%g', @depth)}' (#{@sqft} sqft)"
51
+ "#{format('%g', @width)}' × #{format('%g', @depth)}' (#{sqft} sqft)"
52
52
  end
53
53
 
54
54
  # @param element [Nokogiri::XML::Element]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CubeSmart
4
- VERSION = '0.7.0'
4
+ VERSION = '1.0.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cubesmart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Sylvestre
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-10 00:00:00.000000000 Z
11
+ date: 2024-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -115,8 +115,9 @@ licenses:
115
115
  metadata:
116
116
  rubygems_mfa_required: 'true'
117
117
  homepage_uri: https://github.com/ksylvest/cubesmart
118
- source_code_uri: https://github.com/ksylvest/cubesmart
119
- changelog_uri: https://github.com/ksylvest/cubesmart
118
+ source_code_uri: https://github.com/ksylvest/cubesmart/tree/v1.0.0
119
+ changelog_uri: https://github.com/ksylvest/cubesmart/releases/tag/v1.0.0
120
+ documentation_uri: https://cubesmart.ksylvest.com/
120
121
  post_install_message:
121
122
  rdoc_options: []
122
123
  require_paths: