cubesmart 0.7.0 → 1.0.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 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: