sheetsy 0.1.0 → 1.1.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: 5ff1fa3dcb8a6e0cfcb6060090fb2f0579f0135733c91f7b27cd58119db32e96
4
- data.tar.gz: 206236d9ace11c5c51a31e806a69caee1bd5fce62c36afdacc99eb9e78d7d6e9
3
+ metadata.gz: c1657d9d17ecb875a0ee44347fa799432cfe45d69c96cf4fdde1ddd790b66bfb
4
+ data.tar.gz: 817112d9e9c2165564690570c1c32edb8588366776e817484516a6b000a29b86
5
5
  SHA512:
6
- metadata.gz: 2c51cbc55f00bd062c5ad5ae12024e5ce67240f117fd11fcbd30c58128506ff09dd5c63b6ffd8c663e6734dbbeaae3206123de6978871e95a22cbe0dabe7fc61
7
- data.tar.gz: dabe8bbe400354efbffe1d1344a7f31aecb4d3596d31f6913ba99356d04dbc6762568153a6e79eb521fcafd5f7e88c023304df21a76acf0d1c447d60a31233a2
6
+ metadata.gz: 3ae345e0b375497fa4d5480bbbb2c2979da0d825c97fbba88e1209d094c7e5ef3eec1f2e90a3166c0dfe99bffad112d5fe76fa2cf1c1992db8c9be7bd164fd0d
7
+ data.tar.gz: 4d6ce7739558090453106d37cb1a17e114ca7f4ad3b5ffa2f645668df557c3ee6be90a55fcc4b10502a66386b27a299ec426c6e9aca6ed01773fa4bf26e086c8
data/Gemfile CHANGED
@@ -5,19 +5,10 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in sheetsy.gemspec
6
6
  gemspec
7
7
 
8
- gem "rake", "~> 13.0"
9
-
10
- gem "rspec", "~> 3.0"
11
-
12
- gem "rubocop", "~> 1.21"
13
-
14
- gem "roo"
15
- gem "thor"
16
-
17
8
  group :development, :test do
18
9
  gem "pd_ruby"
19
10
  end
20
11
 
21
12
  group :development do
22
13
  gem "pry"
23
- end
14
+ end
data/Gemfile.lock CHANGED
@@ -1,23 +1,28 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sheetsy (0.1.0)
4
+ sheetsy (1.1.0)
5
+ rake (~> 13.0)
6
+ roo
7
+ rspec (~> 3.0)
8
+ rubocop (~> 1.21)
9
+ ruby-progressbar
10
+ thor
5
11
 
6
12
  GEM
7
13
  remote: https://rubygems.org/
8
14
  specs:
9
15
  ast (2.4.2)
10
- base64 (0.1.1)
11
16
  coderay (1.1.3)
12
17
  colorize (1.1.0)
13
- diff-lcs (1.5.0)
14
- json (2.6.3)
18
+ diff-lcs (1.5.1)
19
+ json (2.7.1)
15
20
  language_server-protocol (3.17.0.3)
16
21
  method_source (1.0.0)
17
- nokogiri (1.15.4-arm64-darwin)
22
+ nokogiri (1.16.2-arm64-darwin)
18
23
  racc (~> 1.4)
19
- parallel (1.23.0)
20
- parser (3.2.2.4)
24
+ parallel (1.24.0)
25
+ parser (3.3.0.5)
21
26
  ast (~> 2.4.1)
22
27
  racc
23
28
  pd_ruby (0.2.3)
@@ -25,44 +30,43 @@ GEM
25
30
  pry (0.14.2)
26
31
  coderay (~> 1.1)
27
32
  method_source (~> 1.0)
28
- racc (1.7.1)
33
+ racc (1.7.3)
29
34
  rainbow (3.1.1)
30
- rake (13.0.6)
31
- regexp_parser (2.8.2)
35
+ rake (13.1.0)
36
+ regexp_parser (2.9.0)
32
37
  rexml (3.2.6)
33
- roo (2.10.0)
38
+ roo (2.10.1)
34
39
  nokogiri (~> 1)
35
40
  rubyzip (>= 1.3.0, < 3.0.0)
36
- rspec (3.12.0)
37
- rspec-core (~> 3.12.0)
38
- rspec-expectations (~> 3.12.0)
39
- rspec-mocks (~> 3.12.0)
40
- rspec-core (3.12.2)
41
- rspec-support (~> 3.12.0)
42
- rspec-expectations (3.12.3)
41
+ rspec (3.13.0)
42
+ rspec-core (~> 3.13.0)
43
+ rspec-expectations (~> 3.13.0)
44
+ rspec-mocks (~> 3.13.0)
45
+ rspec-core (3.13.0)
46
+ rspec-support (~> 3.13.0)
47
+ rspec-expectations (3.13.0)
43
48
  diff-lcs (>= 1.2.0, < 2.0)
44
- rspec-support (~> 3.12.0)
45
- rspec-mocks (3.12.6)
49
+ rspec-support (~> 3.13.0)
50
+ rspec-mocks (3.13.0)
46
51
  diff-lcs (>= 1.2.0, < 2.0)
47
- rspec-support (~> 3.12.0)
48
- rspec-support (3.12.1)
49
- rubocop (1.57.1)
50
- base64 (~> 0.1.1)
52
+ rspec-support (~> 3.13.0)
53
+ rspec-support (3.13.0)
54
+ rubocop (1.60.2)
51
55
  json (~> 2.3)
52
56
  language_server-protocol (>= 3.17.0)
53
57
  parallel (~> 1.10)
54
- parser (>= 3.2.2.4)
58
+ parser (>= 3.3.0.2)
55
59
  rainbow (>= 2.2.2, < 4.0)
56
60
  regexp_parser (>= 1.8, < 3.0)
57
61
  rexml (>= 3.2.5, < 4.0)
58
- rubocop-ast (>= 1.28.1, < 2.0)
62
+ rubocop-ast (>= 1.30.0, < 2.0)
59
63
  ruby-progressbar (~> 1.7)
60
64
  unicode-display_width (>= 2.4.0, < 3.0)
61
- rubocop-ast (1.29.0)
65
+ rubocop-ast (1.30.0)
62
66
  parser (>= 3.2.1.0)
63
67
  ruby-progressbar (1.13.0)
64
68
  rubyzip (2.3.2)
65
- thor (1.2.2)
69
+ thor (1.3.0)
66
70
  unicode-display_width (2.5.0)
67
71
 
68
72
  PLATFORMS
@@ -71,12 +75,7 @@ PLATFORMS
71
75
  DEPENDENCIES
72
76
  pd_ruby
73
77
  pry
74
- rake (~> 13.0)
75
- roo
76
- rspec (~> 3.0)
77
- rubocop (~> 1.21)
78
78
  sheetsy!
79
- thor
80
79
 
81
80
  BUNDLED WITH
82
81
  2.3.26
data/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # Sheetsy
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/sheetsy`. To experiment with that code, run `bin/console` for an interactive prompt.
4
-
5
- TODO: Delete this and the text above, and describe your gem
3
+ Sheetsy is a simple ruby utility to recursively convert all CSV and Excel-based sheets to individual JSON files.
6
4
 
7
5
  ## Installation
8
6
 
@@ -19,13 +17,13 @@ If bundler is not being used to manage dependencies, install the gem by executin
19
17
  To get started, run the following command from bash:
20
18
 
21
19
  ```bash
22
- $> sheetsy convert
20
+ $ sheetsy convert
23
21
  ```
24
22
 
25
23
  To learn more about available options:
26
24
 
27
25
  ```bash
28
- $> sheetsy help convert
26
+ $ sheetsy help convert
29
27
  ```
30
28
 
31
29
  ## Development
data/lib/sheetsy/cli.rb CHANGED
@@ -7,7 +7,8 @@ module Sheetsy
7
7
  desc "convert", "Convert sheets to JSON"
8
8
  option :source, type: :string, aliases: :s
9
9
  option :destination, type: :string, aliases: :d
10
- option :override, type: :boolean, aliases: :o, default: false
10
+ option :overwrite, type: :boolean, aliases: :o, default: false
11
+ option :debug, type: :boolean, default: false
11
12
  def convert
12
13
  source = if options[:source]
13
14
  options[:source]
@@ -27,15 +28,7 @@ module Sheetsy
27
28
  get_input("Output Directory", File.join(*default_source_folders, default_output_folder))
28
29
  end
29
30
 
30
- overwrite = if options[:overwrite]
31
- options[:overwrite]
32
- elsif ENV.key?("OVERWRITE")
33
- ENV.fetch("OVERWRITE")&.downcase == "y"
34
- else
35
- get_input("Overwrite Y/n? (n): ", "n").downcase == "y"
36
- end
37
-
38
- Sheetsy::Converter.new(source, destination, overwrite).run
31
+ Sheetsy::Converter.new(source, destination, options).run
39
32
  end
40
33
 
41
34
  private
@@ -2,68 +2,90 @@
2
2
 
3
3
  module Sheetsy
4
4
  class Converter
5
- attr_reader :source, :destination, :overwrite
5
+ attr_reader :source, :destination, :options
6
6
 
7
- def initialize(source, destination, overwrite = false)
7
+ def initialize(source, destination, options = {})
8
8
  @source = source
9
9
  @destination = destination
10
- @overwrite = overwrite
10
+ @options = options
11
11
  end
12
12
 
13
13
  def run
14
- files = Dir.glob(File.join(source, "**/*.{xls,xlsx,csv}"))
15
- puts "Files found: #{files.count}"
14
+ debug "Files found: #{files.count}"
15
+
16
+ progress_bar.progress = 0
16
17
 
17
18
  FileUtils.mkdir_p(destination) unless File.directory?(destination)
18
19
 
19
20
  files.each do |file|
20
21
  process_file(file)
22
+ progress_bar.increment
21
23
  end
24
+
25
+ puts "Conversion complete."
22
26
  end
23
27
 
24
28
  def overwrite?
25
- overwrite == true
29
+ @overwrite ||= options[:overwrite]
30
+ end
31
+
32
+ def debug?
33
+ @debug ||= options[:debug]
26
34
  end
27
35
 
28
36
  private
29
37
 
38
+ def files
39
+ @files ||= Dir.glob(File.join(source, "**/*.{xls,xlsx,csv}"))
40
+ end
41
+
42
+ def progress_bar
43
+ @progress_bar ||= ProgressBar.create(title: "Files", total: files.count)
44
+ end
45
+
46
+ def debug(str)
47
+ return unless debug?
48
+
49
+ progress_bar.log str
50
+ end
51
+
30
52
  def process_csv(file)
31
- puts "Processing as CSV"
53
+ debug "Processing as CSV"
32
54
 
33
55
  output_file_path = File.join(destination, "#{nameify(file)}.json")
34
56
  return if skip?(output_file_path)
35
57
 
36
- puts "File #{output_file_path}"
58
+ debug "File #{output_file_path}"
37
59
 
38
60
  data = CSV.read(file, headers: true).map(&:to_h)
39
61
  write_json(output_file_path, data)
40
- puts "Converted #{file} to #{output_file_path}\n\n"
62
+ debug "Converted #{file} to #{output_file_path}\n\n"
41
63
  end
42
64
 
43
65
  def process_excel(file)
44
- puts "Processing as Excel"
66
+ debug "Processing as Excel"
45
67
  excel = Roo::Spreadsheet.open(file)
46
68
 
47
69
  excel.sheets.each do |sheet_name|
48
70
  output_file_path = File.join(destination, "#{nameify(file)}__sheet__#{nameify(sheet_name)}.json")
49
71
  return if skip?(output_file_path)
50
72
 
51
- puts "Sheet #{output_file_path}"
73
+ debug "Sheet #{output_file_path}"
52
74
 
53
75
  sheet = excel.sheet(sheet_name)
54
76
  header_row = (output_file_path.include?("Synergy_Output__") ? 2 : 1)
55
77
  header = sheet.row(header_row)
56
78
  data = ((header_row + 1)..sheet.last_row).map { |i| Hash[header.zip(sheet.row(i))] }
57
79
  write_json(output_file_path, data)
58
- puts "Converted #{file} to #{output_file_path}\n\n"
80
+ debug "Converted #{file} to #{output_file_path}\n\n"
59
81
  end
60
82
  end
61
83
 
62
84
  def process_file(file)
63
- puts "File: #{file}"
85
+ debug "File: #{file}"
64
86
 
65
87
  if file.include?("~$")
66
- puts "Skipping #{file}\n\n"
88
+ debug "Skipping #{file}\n\n"
67
89
 
68
90
  return
69
91
  end
@@ -76,7 +98,7 @@ module Sheetsy
76
98
  elsif [".xls", ".xlsx"].include?(extension)
77
99
  process_excel(file)
78
100
  else
79
- puts "Unsupported file format: #{file}"
101
+ debug "Unsupported file format: #{file}"
80
102
  return
81
103
  end
82
104
  end
@@ -95,7 +117,7 @@ module Sheetsy
95
117
  return false if overwrite?
96
118
  return false unless File.exist?(file)
97
119
 
98
- puts "Skipping #{file}"
120
+ debug "Skipping #{file}"
99
121
  true
100
122
  end
101
123
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sheetsy
4
- VERSION = "0.1.0"
4
+ VERSION = "1.1.0"
5
5
  end
data/lib/sheetsy.rb CHANGED
@@ -4,6 +4,7 @@ require "json"
4
4
  require "roo"
5
5
  require "csv"
6
6
  require "pry"
7
+ require "ruby-progressbar"
7
8
 
8
9
  require_relative "sheetsy/version"
9
10
  require_relative "sheetsy/converter"
metadata CHANGED
@@ -1,15 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sheetsy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-27 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2024-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '13.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.21'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.21'
55
+ - !ruby/object:Gem::Dependency
56
+ name: roo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: ruby-progressbar
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: thor
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
13
97
  description: Easily convert CSV and Excel sheets to JSON
14
98
  email:
15
99
  - sheetsy@rwj.dev
@@ -56,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
140
  - !ruby/object:Gem::Version
57
141
  version: '0'
58
142
  requirements: []
59
- rubygems_version: 3.3.26
143
+ rubygems_version: 3.4.22
60
144
  signing_key:
61
145
  specification_version: 4
62
146
  summary: Easily convert CSV and Excel sheets to JSON