ss2json 1.0.0.pre → 1.0.0.pre1

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/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rubygems'
3
- require 'bundler/setup'
4
3
 
5
4
 
6
5
 
@@ -9,8 +8,9 @@ require 'bundler/setup'
9
8
  # sh "ruby -I lib -rubygems test/**/*_test.rb"
10
9
  # end
11
10
 
12
- # require 'rake/testtask'
13
- #
14
- # Rake::TestTask.new do |t|
15
- # t.pattern = "test/**/*_test.rb"
16
- # end
11
+ require 'rake/testtask'
12
+
13
+ Rake::TestTask.new do |t|
14
+ t.pattern = "test/**/*_test.rb"
15
+ t.verbose = true
16
+ end
data/bin/ss2json CHANGED
@@ -5,6 +5,8 @@ if ARGV[0] && !(ARGV[0] =~ /^-/)
5
5
  require "ss2json-commands/#{ARGV[0]}"
6
6
  kommand = SS2JSON::Command.const_get(ARGV[0].gsub(/^.|_./){|a| a[-1].chr.upcase})
7
7
  $0="#{$0} #{ARGV[0]}"
8
+ kommand.new(ARGV[1..-1])
9
+ rescue LoadError => e
8
10
  $stderr.puts "ss2json: '#{ARGV[0]}' is not a ss2json command. See 'ss2json --help'. (#{e.message})"
9
11
  exit -1
10
12
  end
@@ -86,6 +86,7 @@ module SS2JSON
86
86
  when /xlsx$/i then Excelx
87
87
  when /xls$/i then Excel
88
88
  when /ods$/i then Openoffice
89
+ when /csv$/i then Csv
89
90
  else
90
91
  raise "Unknown format"
91
92
  end
@@ -1,3 +1,3 @@
1
1
  module SS2JSON
2
- VERSION = "1.0.0.pre"
2
+ VERSION = "1.0.0.pre1"
3
3
  end
@@ -0,0 +1,20 @@
1
+ require 'test/unit'
2
+ require 'json'
3
+
4
+ class ToConstantsCommandTest < Test::Unit::TestCase
5
+ CMD="ruby -I lib -rubygems bin/ss2json constants"
6
+
7
+ # Fixture helper
8
+ def f(name); File.join( File.dirname(__FILE__), name ) ; end
9
+ def r(path); File.read f(path); end
10
+
11
+ def test_without_commands
12
+ assert_equal r("output_constants.txt"), `#{CMD} 2>&1`
13
+ end
14
+
15
+ def test_to_constants
16
+ output = `#{CMD} #{f "table.csv"} | python -mjson.tool`
17
+ assert_equal r("output_constants_table.txt"), output
18
+ end
19
+ end
20
+
@@ -0,0 +1,15 @@
1
+ Incorrect number of parameters
2
+ Usage: bin/ss2json constants FILENAME [options]
3
+ -s, --sheet SHEET_NAME Use other that the first table
4
+ -r, --first-row ROW_NUMBER Set the first row
5
+ -k, --key-column COLUMN_NUMBER Column where the keys are (Default to 1)
6
+ -a, --value-column COLUMN_NUMBER Column where the values are (Default to 2)
7
+
8
+ Data options:
9
+ -i, --ignore-value VALUE Ignore the fields with that value. Could be use several times
10
+ -b, --include-blank Generate a json with the values included in the ignore list
11
+ -d, --disable-conversion Disable the conversion from floats to integers
12
+ -l, --disable-first-letter Will disable the downcase of the first letter of the key
13
+
14
+ -h, --help Show this help
15
+ --version Show the version
@@ -0,0 +1,9 @@
1
+ {
2
+ "planet": {
3
+ "name": " Earth",
4
+ "population": " 4",
5
+ "system": {
6
+ "name": " Solar"
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,4 @@
1
+ planet.name, Earth
2
+ planet.population, 4
3
+ planet.system.name, Solar
4
+ i.accout_number, 65
@@ -0,0 +1,15 @@
1
+ Incorrect number of parameters
2
+ Usage: bin/ss2json to_array FILENAME [options]
3
+ -s, --sheet SHEET_NAME Use other that the first table
4
+ -t, --title-row ROW_NUMBER Row in wich the titles are. Default: 1
5
+ -r, --first-row ROW_NUMBER Set the first row
6
+ -c, --check-column NAME Only output objects wich his property NAME is not in IGNORED VALUES
7
+
8
+ Data options:
9
+ -i, --ignore-value VALUE Ignore the fields with that value. Could be use several times
10
+ -b, --include-blank Generate a json with the values included in the ignore list
11
+ -d, --disable-conversion Disable the conversion from floats to integers
12
+ -l, --disable-first-letter Will disable the downcase of the first letter of the key
13
+
14
+ -h, --help Show this help
15
+ --version Show the version
@@ -0,0 +1,13 @@
1
+ [
2
+ {
3
+ "id": "3",
4
+ "person": {
5
+ "name": "Pepe"
6
+ }
7
+ },
8
+ {
9
+ "person": {
10
+ "name": "Ramon"
11
+ }
12
+ }
13
+ ]
@@ -0,0 +1,5 @@
1
+ id,person.name,person.age,i.notes
2
+ 1,Guillermo,2,"asdf"
3
+ 3,Pepe,,
4
+ ,Ramon,,
5
+
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ require 'json'
3
+
4
+ class ToArrayCommandTest < Test::Unit::TestCase
5
+
6
+
7
+ CMD="ruby -I lib -rubygems bin/ss2json to_array"
8
+
9
+ # Fixture helper
10
+ def f(name); File.join( File.dirname(__FILE__), name ) ; end
11
+ def r(path); File.read f(path); end
12
+
13
+ def test_without_commands
14
+ assert_equal r("output_to_array.txt"), `#{CMD} 2>&1`
15
+ end
16
+
17
+ def test_to_array
18
+ output = `#{CMD} #{f "table.csv"} | python -mjson.tool`
19
+ assert_equal r("output_to_array_table.txt"), output
20
+ end
21
+ end
22
+
@@ -0,0 +1,15 @@
1
+ Incorrect number of parameters
2
+ Usage: bin/ss2json to_hash FILENAME KEY [options]
3
+ -s, --sheet SHEET_NAME Use other that the first table
4
+ -t, --title-row ROW_NUMBER Row in wich the titles are. Default: 1
5
+ -r, --first-row ROW_NUMBER Set the first row of real data. Default: 2
6
+ -n, --dont-remove-key When using a column in the excel as a key for the hash, that column is removed. This option avoid that behaviour
7
+
8
+ Data options:
9
+ -i, --ignore-value VALUE Ignore the fields with that value. Could be use several times
10
+ -b, --include-blank Generate a json with the values included in the ignore list
11
+ -d, --disable-conversion Disable the conversion from floats to integers
12
+ -l, --disable-first-letter Will disable the downcase of the first letter of the key
13
+
14
+ -h, --help Show this help
15
+ --version Show the version
@@ -0,0 +1,13 @@
1
+ {
2
+ "1": {
3
+ "person": {
4
+ "age": "2",
5
+ "name": "Guillermo"
6
+ }
7
+ },
8
+ "3": {
9
+ "person": {
10
+ "name": "Pepe"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,5 @@
1
+ id,person.name,person.age,i.notes
2
+ 1,Guillermo,2,"asdf"
3
+ 3,Pepe,,
4
+ ,Ramon,,
5
+
@@ -0,0 +1,22 @@
1
+ require 'test/unit'
2
+ require 'json'
3
+
4
+ class ToHashCommandTest < Test::Unit::TestCase
5
+
6
+
7
+ CMD="ruby -I lib -rubygems bin/ss2json to_hash"
8
+
9
+ # Fixture helper
10
+ def f(name); File.join( File.dirname(__FILE__), name ) ; end
11
+ def r(path); File.read f(path); end
12
+
13
+ def test_without_commands
14
+ assert_equal r("output_to_hash.txt"), `#{CMD} 2>&1`
15
+ end
16
+
17
+ def test_to_hash
18
+ output = `#{CMD} #{f "table.csv"} id | python -mjson.tool`
19
+ assert_equal r("output_to_hash_table.txt"), output
20
+ end
21
+ end
22
+
@@ -1,60 +1,60 @@
1
-
2
- require 'ss2json'
1
+ require 'rubygems'
2
+ require 'ss2json/row_converter'
3
3
  require 'test/unit'
4
4
 
5
- class Ss2Json::RowConverterTest < Test::Unit::TestCase
5
+ class SS2JSON::RowConverterTest < Test::Unit::TestCase
6
6
 
7
7
  def test_class
8
- nested_hash = Ss2Json::RowConverter.new({})
8
+ nested_hash = SS2JSON::RowConverter.new({})
9
9
  nested_hash.is_a?(Hash)
10
10
  end
11
11
 
12
12
  def test_ignored_values_option
13
13
  options = {:ignored_values => ["???"]}
14
- new_hash = Ss2Json::RowConverter.new({"adsf" => '???'},options)
14
+ new_hash = SS2JSON::RowConverter.new({"adsf" => '???'},options)
15
15
  assert_equal({}, new_hash)
16
- new_hash = Ss2Json::RowConverter.new({"asdf" => 'asdf'}, options)
16
+ new_hash = SS2JSON::RowConverter.new({"asdf" => 'asdf'}, options)
17
17
  assert_equal({"asdf" => 'asdf' }, new_hash)
18
18
  end
19
19
 
20
20
  def test_show_null_option
21
21
  initial_hash = {"asdf" => nil}
22
- new_hash = Ss2Json::RowConverter.new(initial_hash,{:show_null => false})
22
+ new_hash = SS2JSON::RowConverter.new(initial_hash,{:show_null => false})
23
23
  assert_equal({}, new_hash)
24
24
 
25
- new_hash = Ss2Json::RowConverter.new(initial_hash,{:show_null => true})
25
+ new_hash = SS2JSON::RowConverter.new(initial_hash,{:show_null => true})
26
26
  assert_equal({"asdf" => nil}, new_hash)
27
27
  end
28
28
 
29
29
  def test_dont_convert_option
30
30
  initial_hash = { "asdf" => 3.0 }
31
31
 
32
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:dont_convert => true})
32
+ new_hash = SS2JSON::RowConverter.new(initial_hash, {:dont_convert => true})
33
33
  assert_equal(initial_hash, new_hash)
34
34
 
35
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:dont_convert => false})
35
+ new_hash = SS2JSON::RowConverter.new(initial_hash, {:dont_convert => false})
36
36
  assert_equal(initial_hash, { "asdf" => 3 })
37
37
  end
38
38
 
39
39
  def test_downcase_first_letter
40
40
  initial_hash = { "Asdf.pepe" => 3, "asdf.Jose" => 5 }
41
41
 
42
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:downcase_first_letter => false})
42
+ new_hash = SS2JSON::RowConverter.new(initial_hash, {:downcase_first_letter => false})
43
43
  assert_equal({"Asdf"=>{"pepe"=>3}, "asdf"=>{"Jose"=>5}}, new_hash)
44
44
 
45
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:downcase_first_letter => true})
45
+ new_hash = SS2JSON::RowConverter.new(initial_hash, {:downcase_first_letter => true})
46
46
  assert_equal({"asdf" => {"pepe" => 3, "jose" => 5}}, new_hash)
47
47
  end
48
48
 
49
49
  def test_it_ignore_ignored_fields
50
50
  initial_hash = { "i.asdf" => 5}
51
51
 
52
- new_hash = Ss2Json::RowConverter.new(initial_hash)
52
+ new_hash = SS2JSON::RowConverter.new(initial_hash)
53
53
  assert_equal({}, new_hash)
54
54
 
55
55
  initial_hash = { "name.i" => 5}
56
56
 
57
- new_hash = Ss2Json::RowConverter.new(initial_hash)
57
+ new_hash = SS2JSON::RowConverter.new(initial_hash)
58
58
  assert_equal({"name" => {"i" => 5}}, new_hash)
59
59
  end
60
60
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ss2json
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1964060728
4
+ hash: -782823030
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
10
  - pre
11
- version: 1.0.0.pre
11
+ - 1
12
+ version: 1.0.0.pre1
12
13
  platform: ruby
13
14
  authors:
14
15
  - "Guillermo A\xCC\x81lvarez"
@@ -19,9 +20,9 @@ cert_chain: []
19
20
  date: 2012-09-10 00:00:00 Z
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
- prerelease: false
23
23
  name: nested_hash
24
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
28
  - - ">="
@@ -30,12 +31,12 @@ dependencies:
30
31
  segments:
31
32
  - 0
32
33
  version: "0"
33
- requirement: *id001
34
34
  type: :runtime
35
+ version_requirements: *id001
35
36
  - !ruby/object:Gem::Dependency
36
- prerelease: false
37
37
  name: roo
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ">="
@@ -44,12 +45,12 @@ dependencies:
44
45
  segments:
45
46
  - 0
46
47
  version: "0"
47
- requirement: *id002
48
48
  type: :runtime
49
+ version_requirements: *id002
49
50
  - !ruby/object:Gem::Dependency
50
- prerelease: false
51
51
  name: terminal-table
52
- version_requirements: &id003 !ruby/object:Gem::Requirement
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
53
54
  none: false
54
55
  requirements:
55
56
  - - ">="
@@ -58,12 +59,12 @@ dependencies:
58
59
  segments:
59
60
  - 0
60
61
  version: "0"
61
- requirement: *id003
62
62
  type: :runtime
63
+ version_requirements: *id003
63
64
  - !ruby/object:Gem::Dependency
64
- prerelease: false
65
65
  name: json
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
67
68
  none: false
68
69
  requirements:
69
70
  - - ">="
@@ -72,8 +73,8 @@ dependencies:
72
73
  segments:
73
74
  - 0
74
75
  version: "0"
75
- requirement: *id004
76
76
  type: :runtime
77
+ version_requirements: *id004
77
78
  description: Convert SpreadSheet documents to json following some conventions.
78
79
  email:
79
80
  - guillermo@cientifico.net
@@ -108,8 +109,18 @@ files:
108
109
  - ss2json.gemspec
109
110
  - test/catss.fixture
110
111
  - test/catss2.fixture
111
- - test/cli_test.rb
112
- - test/integration_test.rb
112
+ - test/commands/constants/constants_test.rb
113
+ - test/commands/constants/output_constants.txt
114
+ - test/commands/constants/output_constants_table.txt
115
+ - test/commands/constants/table.csv
116
+ - test/commands/to_array/output_to_array.txt
117
+ - test/commands/to_array/output_to_array_table.txt
118
+ - test/commands/to_array/table.csv
119
+ - test/commands/to_array/to_array_test.rb
120
+ - test/commands/to_hash/output_to_hash.txt
121
+ - test/commands/to_hash/output_to_hash_table.txt
122
+ - test/commands/to_hash/table.csv
123
+ - test/commands/to_hash/to_hash_test.rb
113
124
  - test/row_converter_test.rb
114
125
  - test/ss2json (1).ods
115
126
  - test/ss2json.ods
data/test/cli_test.rb DELETED
@@ -1,61 +0,0 @@
1
-
2
-
3
- require 'ss2json'
4
- require 'test/unit'
5
-
6
- class Ss2Json::RowConverterTest < Test::Unit::TestCase
7
-
8
- def test_class
9
- nested_hash = Ss2Json::RowConverter.new({})
10
- nested_hash.is_a?(Hash)
11
- end
12
-
13
- def test_ignored_values_option
14
- options = {:ignored_values => ["???"]}
15
- new_hash = Ss2Json::RowConverter.new({"adsf" => '???'},options)
16
- assert_equal({}, new_hash)
17
- new_hash = Ss2Json::RowConverter.new({"asdf" => 'asdf'}, options)
18
- assert_equal({"asdf" => 'asdf' }, new_hash)
19
- end
20
-
21
- def test_show_null_option
22
- initial_hash = {"asdf" => nil}
23
- new_hash = Ss2Json::RowConverter.new(initial_hash,{:show_null => false})
24
- assert_equal({}, new_hash)
25
-
26
- new_hash = Ss2Json::RowConverter.new(initial_hash,{:show_null => true})
27
- assert_equal({"asdf" => nil}, new_hash)
28
- end
29
-
30
- def test_dont_convert_option
31
- initial_hash = { "asdf" => 3.0 }
32
-
33
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:dont_convert => true})
34
- assert_equal(initial_hash, new_hash)
35
-
36
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:dont_convert => false})
37
- assert_equal(initial_hash, { "asdf" => 3 })
38
- end
39
-
40
- def test_downcase_first_letter
41
- initial_hash = { "Asdf.pepe" => 3, "asdf.Jose" => 5 }
42
-
43
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:downcase_first_letter => false})
44
- assert_equal({"Asdf"=>{"pepe"=>3}, "asdf"=>{"Jose"=>5}}, new_hash)
45
-
46
- new_hash = Ss2Json::RowConverter.new(initial_hash, {:downcase_first_letter => true})
47
- assert_equal({"asdf" => {"pepe" => 3, "jose" => 5}}, new_hash)
48
- end
49
-
50
- def test_it_ignore_ignored_fields
51
- initial_hash = { "i.asdf" => 5}
52
-
53
- new_hash = Ss2Json::RowConverter.new(initial_hash)
54
- assert_equal({}, new_hash)
55
-
56
- initial_hash = { "name.i" => 5}
57
-
58
- new_hash = Ss2Json::RowConverter.new(initial_hash)
59
- assert_equal({"name" => {"i" => 5}}, new_hash)
60
- end
61
- end
@@ -1,90 +0,0 @@
1
- require 'test/unit'
2
- require 'json'
3
-
4
- class Ss2JsonIntegrationTest < Test::Unit::TestCase
5
-
6
-
7
- def call(cmd, args)
8
- `ruby -I lib -rubygems bin/#{cmd} #{args}`
9
- end
10
-
11
- def callP(cmd,args)
12
- JSON.parse(call(cmd,args))
13
- end
14
-
15
-
16
-
17
- # def test_vertical
18
- # data = [ { "child"=>[{"name"=>"pepe", "age"=>2}, {"name"=>"Juanjo"}], "id"=>1, "name"=>{"last"=>"Alvarez", "first"=>"Guillermo"} }, { "child"=>[{"name"=>"Jr"}], "id"=>2, "name"=>{"last"=>"Luther", "first"=>"Martin"} }, {"id"=>3, "name"=>{"first"=>"Jesper"}}, {"id"=>4}, {"id"=>5}, {"id"=>6}]
19
- # assert_equal data, ss2jsonP("-f test/ss2json.xls -s Test1")
20
- # end
21
-
22
- # def test_check_flag
23
- # data = [{"child"=>[{"name"=>"pepe", "age"=>2}, {"name"=>"Juanjo"}], "name"=>{"last"=>"Alvarez", "first"=>"Guillermo"}, "id"=>1}, {"child"=>[{"name"=>"Jr"}], "name"=>{"last"=>"Luther", "first"=>"Martin"}, "id"=>2}, {"name"=>{"first"=>"Jesper"}, "id"=>3}]
24
- # assert_equal data, ss2jsonP("-f test/ss2json.xls -s Test1 -c 'name'")
25
- # end
26
-
27
- # def test_use_key
28
- # data = []
29
- # assert_equal data, ss2jsonP("-f test/ss2json.xls -s Test1 -u 'uuid'")
30
- # end
31
-
32
-
33
-
34
- def test_lsss
35
- assert_equal "Test1\nTest2\nTest3\nTest4\n", call('lsss', 'test/ss2json.xls')
36
- end
37
-
38
- def test_catss
39
- expected = File.read('test/catss.fixture')
40
- assert_equal expected , call('catss', 'test/ss2json.xls')
41
- end
42
-
43
- def test_catss_with_sheet
44
- expected = File.read('test/catss2.fixture')
45
- assert_equal expected , call('catss', 'test/ss2json.xls Test3')
46
- end
47
-
48
- def test_ss2json_horizontal
49
- expected = [
50
- { "child"=> [ { "age"=> 2, "name"=> "pepe" }, { "name"=> "Juanjo" } ], "id"=> 1, "name"=> { "last"=> "Alvarez", "first"=> "Guillermo" } },
51
- { "child"=> [ { "name"=> "Jr" } ], "id"=> 2, "name"=> { "last"=> "Luther", "first"=> "Martin" } },
52
- { "id"=> 3, "name"=> { "first"=> "Jesper" } },
53
- { "id"=> 4 },
54
- { "id"=> 5 },
55
- { "id"=> 6 }
56
- ]
57
- assert_equal expected, callP('ss2json-horizontal', 'test/ss2json.xls -s Test1')
58
- end
59
-
60
- def test_ss2json_horizontal_with_check
61
- expected = [
62
- { "child"=> [ { "age"=> 2, "name"=> "pepe" }, { "name"=> "Juanjo" } ], "id"=> 1, "name"=> { "last"=> "Alvarez", "first"=> "Guillermo" } },
63
- { "child"=> [ { "name"=> "Jr" } ], "id"=> 2, "name"=> { "last"=> "Luther", "first"=> "Martin" } },
64
- { "id"=> 3, "name"=> { "first"=> "Jesper" } }
65
- ]
66
- assert_equal expected, callP('ss2json-horizontal', 'test/ss2json.xls -s Test1 -c name')
67
- end
68
-
69
- def test_ss2json_hash
70
- expected = [
71
- { "child"=> [ { "age"=> 2, "name"=> "pepe" }, { "name"=> "Juanjo" } ], "id"=> 1, "name"=> { "last"=> "Alvarez", "first"=> "Guillermo" } },
72
- { "child"=> [ { "name"=> "Jr" } ], "id"=> 2, "name"=> { "last"=> "Luther", "first"=> "Martin" } },
73
- { "id"=> 3, "name"=> { "first"=> "Jesper" } }
74
- ]
75
- assert_equal expected, callP('ss2json-horizontal-hash', 'test/ss2json.xls id -s Test1')
76
- end
77
-
78
- def test_ss2json_vertical
79
- expected = {}
80
- assert_equal expected, callP('ss2json-vertical', 'test/ss2json.xls -s Test3')
81
- end
82
-
83
-
84
- # compress-json
85
- # merge-jsons
86
- # order-json
87
- # ss2json-horizontal
88
- # ss2json-horizontal-hash
89
- # ss2json-vertical
90
- end