ss2json 0.0.3 → 0.1.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.
data/Changelog CHANGED
@@ -4,6 +4,9 @@
4
4
  right now is cleaner and showing the list of available spreadsheets.
5
5
  * row_converter.rb (sanitize_key) : [bug] sanitify_key fail if the key is
6
6
  just one letter. Now it is fixed.
7
+ * cli.rb (process_vertical) : New mode for processing in vertical was added.
8
+ * cli.rb (open) : Added support for old excel files (not so much tested).
9
+ * options.rb (initialize) : Added --version support.
7
10
 
8
11
  2012-05-23 Guillermo Alvarez <guillermo@cientifico.net>
9
12
 
data/lib/ss2json/cli.rb CHANGED
@@ -24,6 +24,9 @@ class Ss2Json
24
24
  # * **:sheet** Name of the sheet to use.
25
25
  # * **:first_row** Where the title of the columns is.
26
26
  # * **:check_column** Output only the results with a value present on the specific field.
27
+ # * **:orientation** The data orientation (:horizontal/:vertical).
28
+ # * **:key_column** Column of the keys for vertical mode.
29
+ # * **:value_column** Column of the values.
27
30
  # * **:action** Could
28
31
  # * *:convert* Do the normal conversion.
29
32
  # * *:list* Will list the sheets.
@@ -34,7 +37,13 @@ class Ss2Json
34
37
  if options[:action] == :list
35
38
  @doc.sheets.join("\n")
36
39
  else
37
- process_document
40
+ if options[:orientation] == :horizontal
41
+ process_horizontal
42
+ elsif options[:orientation] == :vertical
43
+ process_vertical
44
+ else
45
+ raise "Orientation #{options[:orientation]} not recognized"
46
+ end
38
47
  end
39
48
  end
40
49
 
@@ -51,7 +60,7 @@ class Ss2Json
51
60
  @doc.header_line = @options[:first_row] if @options[:first_row]
52
61
  end
53
62
 
54
- def process_document
63
+ def process_horizontal
55
64
  @content = []
56
65
  (@options[:first_row]+1).upto(@doc.last_row).each do |row_n|
57
66
  row = @doc.find(row_n)[0]
@@ -63,11 +72,22 @@ class Ss2Json
63
72
  end
64
73
  end
65
74
 
75
+ def process_vertical
76
+ hash = {}
77
+ @options[:first_row].upto(@doc.last_row) do |row|
78
+ key = @doc.cell(row, @options[:key_column])
79
+ value = @doc.cell(row, @options[:value_column])
80
+ hash[key] = value
81
+ end
82
+ @content = RowConverter.new(hash, @options[:converter])
83
+ end
84
+
66
85
 
67
86
  def open
68
87
  kclass = case @options[:file][/\.(.*)$/,1]
69
- when /xlsx/i then Excelx
70
- when /ods/i then Openoffice
88
+ when /xlsx$/i then Excelx
89
+ when /xls$/i then Excel
90
+ when /ods$/i then Openoffice
71
91
  else
72
92
  raise "Unknown format"
73
93
  end
@@ -10,6 +10,9 @@ class Ss2Json
10
10
  :file => nil,
11
11
  :check_column => nil,
12
12
  :action => :convert,
13
+ :orientation => :horizontal,
14
+ :key_column => 1,
15
+ :value_column => 2,
13
16
  :converter => {
14
17
  :show_null => false,
15
18
  :dont_convert => false,
@@ -30,21 +33,53 @@ class Ss2Json
30
33
  @help = opts
31
34
 
32
35
  opts.banner = "Usage: #{File.basename $0} -f FILENAME [options]"
33
- opts.separator ""
36
+
37
+ opts.separator "\nMode options:"
38
+
39
+ opts.on("-h", "--horizontal", "Normal processing mode (DEFAULT). Can be ommited") do
40
+ @options[:orientation] = :horizontal
41
+ end
42
+
43
+ opts.on("-v", "--vertical", "Process the spreadhsheet on vertical") do
44
+ @options[:orientation] = :vertical
45
+ end
46
+
47
+ opts.on("-l", "--list-sheets", "Return the list of sheets") do |file|
48
+ @options[:action] = :list
49
+ end
50
+
51
+ opts.separator "Common options:"
52
+
53
+ opts.on("-f", "--file FILENAME", "Use the filename") do |file|
54
+ File.file?(file) or die("Can't find the file #{file}.")
55
+ @options[:file] = File.expand_path(file)
56
+ end
57
+
34
58
  opts.on("-s", "--sheet SHEET_NAME", "Use other that the first table") do |sheet|
35
59
  @options[:sheet] = sheet
36
60
  end
37
61
 
38
- opts.on("-r", "--first-row ROW_NUMBER", "Set the default first row") do |row|
62
+ opts.separator "\nHorizontal and Vertical mode options:"
63
+
64
+ opts.on("-r", "--first-row ROW_NUMBER", "Set the first row") do |row|
39
65
  die("Can't understand the row #{row}. Use a number") unless row =~ /\A\d*\z/
40
- @options[:first_row] = row.to_i
66
+ @options[:first_row] = row.to_i
41
67
  end
42
68
 
43
- opts.on("-f", "--file FILENAME", "Use the filename") do |file|
44
- File.file?(file) or die("Can't find the file #{file}.")
45
- @options[:file] = file
69
+ opts.separator "\nVertical mode options:"
70
+
71
+ opts.on("-k", "--key-column", "Column where the keys are (Default to 1)") do |column|
72
+ die("Can't understand the column #{column}. Use a number") unless column =~ /\A\d*\z/
73
+ @options[:key_column] = column.to_i
74
+ end
75
+
76
+ opts.on("-a", "--value-column", "Column where the values are (Default to 2)") do |column|
77
+ die("Can't understand the column #{column}. Use a number") unless column =~ /\A\d*\z/
78
+ @options[:value_column] = column.to_i
46
79
  end
47
80
 
81
+ opts.separator "\nData options:"
82
+
48
83
  opts.on("-i", "--ignore-value VALUE", "Ignore the fields with that value. Could be use several times") do |t|
49
84
  @options[:converter][:ignored_values] << t
50
85
  end
@@ -53,10 +88,6 @@ class Ss2Json
53
88
  @options[:converter][:show_null] = true
54
89
  end
55
90
 
56
- opts.on("-c", "--check-column NAME", "Only output objects wich his property NAME is not in IGNORED VALUES") do |t|
57
- @options[:check_column] = t
58
- end
59
-
60
91
  opts.on("-d", "--disable-conversion", "Disable the conversion from floats to integers") do
61
92
  @options[:converter][:dont_convert] = true
62
93
  end
@@ -65,18 +96,25 @@ class Ss2Json
65
96
  @options[:converter][:downcase_first_letter] = false
66
97
  end
67
98
 
68
- opts.separator ""
99
+ opts.separator "\nFilter options:"
69
100
 
70
- opts.on("-l", "--list-sheets", "Return the list of sheets") do |file|
71
- @options[:action] = :list
101
+ opts.on("-c", "--check-column NAME", "Only output objects wich his property NAME is not in IGNORED VALUES") do |t|
102
+ @options[:check_column] = t
72
103
  end
73
104
 
74
- opts.separator ""
105
+
106
+ opts.separator "\n"
75
107
 
76
108
  opts.on_tail("-h","--help", "Show this help") do
77
109
  puts opts
78
110
  exit 0
79
111
  end
112
+
113
+ opts.on_tail("--version", "Show the version") do
114
+ puts "#{File.basename($0)} Version: #{Ss2Json::VERSION}"
115
+ exit 0
116
+ end
117
+
80
118
  end.parse!
81
119
 
82
120
  die("You need to at least specify a file") if @options[:file].nil?
@@ -1,3 +1,3 @@
1
- class Ss2json
2
- VERSION = "0.0.3"
1
+ class Ss2Json
2
+ VERSION = "0.1.0"
3
3
  end
data/ss2json.gemspec CHANGED
@@ -4,7 +4,7 @@ require "ss2json/version"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "ss2json"
7
- s.version = Ss2json::VERSION
7
+ s.version = Ss2Json::VERSION
8
8
  s.authors = ["Guillermo Álvarez"]
9
9
  s.email = ["guillermo@cientifico.net"]
10
10
  s.homepage = ""
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ss2json
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 3
10
- version: 0.0.3
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Guillermo A\xCC\x81lvarez"