spreadsheet_to_json 0.0.4 → 0.0.5

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
  SHA1:
3
- metadata.gz: a42faa6b5d9367ed8f14491b01e595507ff58ed5
4
- data.tar.gz: 8f70bf37a7a2dfd709183b3bff44852583fc1c27
3
+ metadata.gz: f7f2cca1d78ebef5de7bc27832161ab3610c3302
4
+ data.tar.gz: 9aea7739dc36f85dec28bcfa326bbf8b1bbef8c0
5
5
  SHA512:
6
- metadata.gz: 6868a8ef44a9bca74de6aa9525cc0dff40a91d3032284280d4fb3870b22c719aa32a720968b052538aa652262499ddedc8ace45d4a889cd2e24c6b13eab20e6f
7
- data.tar.gz: 4c4e0ebb74f77d2b29924194b9741e39cbf4b68767a99f5c71d57758d818c6fb075bc57fb3f382cb2bdb150103d8d13fc63f305948d5721ca8cc9112baf04cf8
6
+ metadata.gz: 5c8a4c9f500d99527ddda482bd3e9f31b8316e8084c249e6fd5a02e8c05addd877060bd88526494779a2ca21ca92d29bb9ca59b7b5c36425443a24e974099b41
7
+ data.tar.gz: e69c917410443a02c08ffc782534451216deb377815eda7a30137741541f4a0bb4687e93517ff78308c3fec71f70b533733c83f8c651ff64dc3064c7b18f44e7
@@ -1,73 +1,4 @@
1
- #!/usr/bin/ruby
2
- require 'google_drive'
3
- require 'yaml'
4
- require 'json'
5
- require './lib/spreadsheet'
6
-
7
- class SpreadsheetToJson
8
- def initialize(spreadsheet)
9
- @spreadsheet = spreadsheet
10
- end
11
-
12
- def convert_rows_by_sheet_id(worksheet_id, rows, keys_row_num)
13
- rows_to_json(
14
- @spreadsheet.get_sheet_by_id(worksheet_id),
15
- rows,
16
- keys_row_num
17
- )
18
- end
19
-
20
- def convert_rows_by_sheet_name(worksheet_name, rows, keys_row_num)
21
- rows_to_json(
22
- @spreadsheet.get_sheet_by_name(worksheet_name),
23
- rows,
24
- keys_row_num
25
- )
26
- end
27
-
28
- def convert_a_worksheet_by_name(worksheet_name, keys_row_num)
29
- worksheet = @spreadsheet.get_sheet_by_name(worksheet_name)
30
- rows_to_json(
31
- worksheet,
32
- [*keys_row_num+1..worksheet.num_rows],
33
- keys_row_num
34
- )
35
- end
36
-
37
- def convert_a_worksheet_by_id(worksheet_id, keys_row_num)
38
- worksheet = @spreadsheet.get_sheet_by_id(worksheet_id)
39
- rows_to_json(
40
- worksheet,
41
- [*keys_row_num+1..worksheet.num_rows],
42
- keys_row_num
43
- )
44
- end
45
-
46
- def output_json_file(content, output_path)
47
- unless File.exist?(output_path)
48
- File.new(output_path, 'w+')
49
- end
50
- File.open(output_path, 'w+') {|file| file.write(content) }
51
- end
52
-
53
- private
54
- def rows_to_json(worksheet, rows, keys_row_num)
55
- rows.collect {|row_num| construct_hash(worksheet, keys_row_num-2, row_num-2)}.to_json
56
- end
57
-
58
- def construct_hash(worksheet, keys_row_num, row=1)
59
- if row < 1
60
- puts "illeagal row num"
61
- exit
62
- end
63
-
64
- begin
65
- json_keys = worksheet.list[keys_row_num].to_hash.values
66
- rescue NoMethodError
67
- puts "worksheet_id is not exist"
68
- exit
69
- end
70
- json_values = worksheet.list[row].to_hash.values
71
- Hash[json_keys.zip(json_values)]
72
- end
73
- end
1
+ require 'spreadsheet_to_json/spreadsheet'
2
+ require 'spreadsheet_to_json/config'
3
+ require 'spreadsheet_to_json/sheet_to_json'
4
+ require 'spreadsheet_to_json/json_to_sheet'
@@ -0,0 +1,38 @@
1
+ require 'google_drive'
2
+
3
+ module SpreadsheetToJson
4
+ class Config
5
+ class << self
6
+ # Get the spreadsheet_key
7
+ def get_spreadsheet_key(config_path)
8
+ get_settings_from_yml(config_path)['spreadsheet_key']
9
+ end
10
+
11
+ # Get the access_token of the auth
12
+ def get_access_token(config_path)
13
+ config = get_settings_from_yml(config_path)
14
+ client = OAuth2::Client.new(
15
+ config['auth']['client_id'],
16
+ config['auth']['client_secret'],
17
+ site: config['auth']['site'],
18
+ token_url: config['auth']['token_url'],
19
+ authorize_url: config['auth']['token_url']
20
+ )
21
+ auth_token = OAuth2::AccessToken.from_hash(
22
+ client,
23
+ {
24
+ :refresh_token => config['auth']['refresh_token'],
25
+ :expires_at => 3600
26
+ }
27
+ )
28
+ auth_token.refresh!.token
29
+ end
30
+
31
+ private
32
+ # Get config file
33
+ def get_settings_from_yml(path)
34
+ File.open(path) { |file| YAML.load(file) }
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ require 'json'
2
+
3
+ module SpreadsheetToJson
4
+ # This is a class to load JSON file to spreadsheet
5
+ class JsonToSheet
6
+ attr_reader :spreadsheet
7
+
8
+ def initialize(spreadsheet)
9
+ @spreadsheet = spreadsheet
10
+ end
11
+
12
+ # Load json to sheet
13
+ def convert_json_to_sheet(json_file_path, sheet_name)
14
+ arrays = json_to_hasharray(File.read(json_file_path))
15
+ if arrays.count <= 0
16
+ puts "the json file is empty"
17
+ exit
18
+ end
19
+ worksheet = spreadsheet.get_sheet_by_name(sheet_name)
20
+ worksheet.list.keys = arrays[0].keys
21
+ arrays.each do |each|
22
+ worksheet.list.push(each)
23
+ end
24
+ worksheet.save
25
+ end
26
+
27
+ private
28
+ def json_to_hasharray(json_content)
29
+ JSON.parse(json_content)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,78 @@
1
+ module SpreadsheetToJson
2
+ class SheetToJson
3
+ attr_reader :spreadsheet
4
+
5
+ def initialize(spreadsheet)
6
+ @spreadsheet = spreadsheet
7
+ end
8
+
9
+ # Convert the selected rows to json with worksheet id, keys_row_num is the sheet's first row number with keys
10
+ def convert_rows_by_sheet_id(worksheet_id, rows, keys_row_num)
11
+ rows_to_json(
12
+ spreadsheet.get_sheet_by_id(worksheet_id),
13
+ rows,
14
+ keys_row_num
15
+ )
16
+ end
17
+
18
+ # Convert the selected rows to json with worksheet name
19
+ def convert_rows_by_sheet_name(worksheet_name, rows, keys_row_num)
20
+ rows_to_json(
21
+ spreadsheet.get_sheet_by_name(worksheet_name),
22
+ rows,
23
+ keys_row_num
24
+ )
25
+ end
26
+
27
+ # Convert a total sheet to json by worksheet name
28
+ def convert_a_worksheet_by_name(worksheet_name, keys_row_num)
29
+ worksheet = spreadsheet.get_sheet_by_name(worksheet_name)
30
+ rows_to_json(
31
+ worksheet,
32
+ [*keys_row_num+1..worksheet.num_rows],
33
+ keys_row_num
34
+ )
35
+ end
36
+
37
+ # Convert a total sheet to json by worksheet id
38
+ def convert_a_worksheet_by_id(worksheet_id, keys_row_num)
39
+ worksheet = spreadsheet.get_sheet_by_id(worksheet_id)
40
+ rows_to_json(
41
+ worksheet,
42
+ [*keys_row_num+1..worksheet.num_rows],
43
+ keys_row_num
44
+ )
45
+ end
46
+
47
+ # Write the json to a file
48
+ def output_json_file(content, output_path)
49
+ unless File.exist?(output_path)
50
+ File.new(output_path, 'w+')
51
+ end
52
+ File.open(output_path, 'w+') {|file| file.write(content) }
53
+ end
54
+
55
+ private
56
+ # Construct rows to json content
57
+ def rows_to_json(worksheet, rows, keys_row_num)
58
+ rows.map { |row_num| construct_hash(worksheet, keys_row_num-2, row_num-2) }.to_json
59
+ end
60
+
61
+ # Construct a hash with one row. param row is the constructed row number
62
+ def construct_hash(worksheet, keys_row_num, row=1)
63
+ if row < 1
64
+ puts "Illeagal row num"
65
+ exit
66
+ end
67
+
68
+ begin
69
+ json_keys = worksheet.list[keys_row_num].to_hash.values
70
+ rescue NoMethodError
71
+ puts "Worksheet does not exist"
72
+ exit
73
+ end
74
+ json_values = worksheet.list[row].to_hash.values
75
+ Hash[json_keys.zip(json_values)]
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,27 @@
1
+ require 'google_drive'
2
+
3
+ module SpreadsheetToJson
4
+ class Spreadsheet
5
+ attr_reader :spreadsheet
6
+ # Initalize the spreadsheet with options hash inlcuding access_token and spreadsheet_key
7
+ def initialize(options = {})
8
+ if options.empty?
9
+ puts "Please pass the parameter options with keys
10
+ of access_token and spreadsheet_key"
11
+ exit
12
+ end
13
+ session = GoogleDrive.login_with_oauth(options[:access_token])
14
+ @spreadsheet = session.spreadsheet_by_key(options[:spreadsheet_key])
15
+ end
16
+
17
+ # Get a sheet by worksheet's id
18
+ def get_sheet_by_id(worksheet_id=0)
19
+ spreadsheet.worksheets[worksheet_id]
20
+ end
21
+
22
+ # Get a sheet by a worksheet's name
23
+ def get_sheet_by_name(worksheet_name)
24
+ spreadsheet.worksheet_by_title(worksheet_name)
25
+ end
26
+ end
27
+ end
metadata CHANGED
@@ -1,27 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spreadsheet_to_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xu Jianyong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-20 00:00:00.000000000 Z
11
+ date: 2015-08-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
- A gem to help you convert your google spreadsheet data to json format. With this gem, you can
15
- choose the worksheet that you want to convert and point the row number you want to convert!
14
+ A gem to help you convert your google spreadsheet data to json
15
+ format and load your json to spreadsheet. With this gem, you can
16
+ choose the worksheet that you want to convert and point the row
17
+ number you want to convert!
16
18
  email: xujianyong1986@gmail.com
17
19
  executables: []
18
20
  extensions: []
19
21
  extra_rdoc_files: []
20
22
  files:
21
- - lib/json_to_spreadsheet.rb
22
- - lib/spreadsheet.rb
23
23
  - lib/spreadsheet_to_json.rb
24
- - lib/util/auth.rb
24
+ - lib/spreadsheet_to_json/config.rb
25
+ - lib/spreadsheet_to_json/json_to_sheet.rb
26
+ - lib/spreadsheet_to_json/sheet_to_json.rb
27
+ - lib/spreadsheet_to_json/spreadsheet.rb
25
28
  homepage: https://github.com/jackxu/google_spreadsheet_to_json
26
29
  licenses:
27
30
  - MIT
@@ -46,5 +49,5 @@ rubygems_version: 2.2.2
46
49
  signing_key:
47
50
  specification_version: 4
48
51
  summary: This is a little gem that helps you to convert your google spreadsheet to
49
- json format
52
+ json format and load your json to spreadsheet
50
53
  test_files: []
@@ -1,30 +0,0 @@
1
- require 'google_drive'
2
- require 'yaml'
3
- require 'json'
4
- require './lib/spreadsheet'
5
-
6
- class JsonToSpreadsheet
7
- def initialize(spreadsheet)
8
- @spreadsheet = spreadsheet
9
- end
10
-
11
- def convert_json_to_sheet(json_file_path, sheet_name)
12
- arrays = json_to_hasharray(File.read(json_file_path))
13
- puts (arrays.class)
14
- if arrays.count <= 0
15
- puts "The JSON file is empty"
16
- exit
17
- end
18
- worksheet = @spreadsheet.get_sheet_by_name(sheet_name)
19
- worksheet.list.keys = arrays[0].keys
20
- arrays.each do |each|
21
- worksheet.list.push(each)
22
- end
23
- worksheet.save
24
- end
25
-
26
- private
27
- def json_to_hasharray(json_content)
28
- JSON.parse(json_content)
29
- end
30
- end
data/lib/spreadsheet.rb DELETED
@@ -1,18 +0,0 @@
1
- require 'google_drive'
2
- require './lib/util/auth'
3
-
4
- class Spreadsheet
5
- def initialize(config_path)
6
- session = GoogleDrive.login_with_oauth(Auth.get_auth_token(config_path))
7
- @instance = session.spreadsheet_by_key(Auth.get_settings_from_yml(config_path)['spreadsheet_key'])
8
- end
9
-
10
- def get_sheet_by_id(worksheet_id=0)
11
- @instance.worksheets[worksheet_id]
12
- end
13
-
14
- def get_sheet_by_name(worksheet_name)
15
- @instance.worksheet_by_title(worksheet_name)
16
- end
17
- end
18
-
data/lib/util/auth.rb DELETED
@@ -1,28 +0,0 @@
1
- require 'google_drive'
2
-
3
- class Auth
4
- class << self
5
- def get_auth_token(config_path)
6
- config = get_settings_from_yml(config_path)
7
- client = OAuth2::Client.new(
8
- config['auth']['client_id'],
9
- config['auth']['client_secret'],
10
- site: config['auth']['site'],
11
- token_url: config['auth']['token_url'],
12
- authorize_url: config['auth']['token_url']
13
- )
14
- auth_token = OAuth2::AccessToken.from_hash(
15
- client,
16
- {
17
- :refresh_token => config['auth']['refresh_token'],
18
- :expires_at => 3600
19
- }
20
- )
21
- auth_token.refresh!.token
22
- end
23
-
24
- def get_settings_from_yml(path)
25
- File.open(path) { |file| YAML.load(file) }
26
- end
27
- end
28
- end