data_spork 0.0.4 → 0.0.5

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWE4Y2U5ODQyMzI2YmQzYmJhYTdkY2IxYTBjNGMxMjliZWQxYjVlMA==
4
+ ODkyMWQ2NjNjMGJmY2M0MWZjZGZhNTlhYjhmMmJhZDA2NDJlMjQ2ZA==
5
5
  data.tar.gz: !binary |-
6
- YjgwOWVjMmQ4NjRhODk4ZTAxNWI1NDVlZDMyNmQ5YTY0YzU1MWVhNw==
6
+ MWViN2E3NjJhYWIzNzJhZjZjMmI2N2RiODc2MmRlMWI1NjA2ZDMwMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTZmOWRmYzY3ZTE2YWU3YjA0ZGM4ZDAyY2M5YzJiMzJiODg3NmE2ZjViZTM5
10
- M2FmYjMwOGFmYTNiNTI4NGE0MzNiNmNjOThmYmU5N2E0NDI5YzQ3MjFlMDgx
11
- ZWI3MjUwM2E0YTE3NjRhYmZiODYzMWM4NmRmZDBmOTQ1YjZiNmU=
9
+ ZWY4NTE3ZmM1YzY5YzNkNzIwOTZiNjdkN2NlOTg0NDc4Yjk5MGZiNDQ1MjYx
10
+ YzA4MWNhNTEzNTMxYjVhNDIzYTFlN2UyN2ZhZDMzYjgxZjExOGU4YTA4N2I3
11
+ NzhhN2I3OGExNTBmZTFiNzcwMThjZDY4NjY5MGNlYmUyYjk4ZDY=
12
12
  data.tar.gz: !binary |-
13
- YzNjZTUzN2JjNWQzYTE4Y2Q2ZjY3YmI2ZWYzMTJmYmYyNGQ2OWQyN2ViY2Qy
14
- MDY3ODBjNTIyZWE0MDI3N2Q5OWEzYzYzYmVkMzNkZWI4Yjg1NTA2MzgxMGM5
15
- NTQyYzJkMzJkZGUyZjBkZGJjNjE3NDkzZGYyOWRkOWI1NTRmMDQ=
13
+ YjY0YWQ3MTRhNTkyZDk4MzFlNGVhYTAwOWQ4NDIxNjZhOGUzMGExMWEzYzQ5
14
+ ZDhhZjgwYTIxMTkyNTUyNzM5YmFlMWFmMzdiMTIzOTc3YWQwNzNmNDRiNTg5
15
+ NWNiYWI4Y2RjZTRiZWVmNzE1YzkwNWFmNGVhN2UwOGY4ZmU2OTI=
@@ -0,0 +1,46 @@
1
+ module DataSpork
2
+ class BaseWriter
3
+ attr_accessor :started
4
+ attr_reader :owner
5
+
6
+ delegate :print, :print_error, :to => :owner
7
+ delegate :effective_date, :col_tags, :root_tag, :row_tag, :header, :col_value, :to => :owner
8
+
9
+ def initialize(owner)
10
+ @owner = owner
11
+ @started = false
12
+ end
13
+
14
+ def started?
15
+ started
16
+ end
17
+
18
+ # Start the document output - subclasses usually override :start_document instead.
19
+ def start
20
+ start_document
21
+ self.started = true
22
+ end
23
+
24
+ def start_document
25
+ # override this
26
+ end
27
+
28
+ def begin_put_row
29
+ # override this
30
+ end
31
+
32
+ def put_column
33
+ # override this
34
+ end
35
+
36
+ def end_put_row
37
+ # override this
38
+ end
39
+
40
+ # Close out the document.
41
+ def finish
42
+ # override this
43
+ end
44
+
45
+ end
46
+ end
@@ -1,19 +1,21 @@
1
1
  require 'data_spork/base_reader'
2
+ require 'data_spork/base_writer'
2
3
  require 'data_spork/xml_writer'
4
+ require 'data_spork/json_writer'
3
5
  require 'data_spork/google_spreadsheet'
4
6
 
5
7
  module DataSpork
6
8
 
7
9
  class Importer
8
- attr_reader :headers, :input_type, :options, :writer
10
+ attr_reader :headers, :input_type, :options, :writers
9
11
  attr_reader :row_num, :row, :col_map
10
- attr_reader :root_tag, :row_tag, :xml_tags
12
+ attr_reader :root_tag, :row_tag, :col_tags
11
13
  attr_accessor :col_num, :setup_state, :blank_row
12
14
  attr_accessor :effective_date
13
15
 
14
- # Entry point to convert the input menu and output it as a menu board.
16
+ # Entry point to convert the input document and output it to the selected format(s).
15
17
  #
16
- # @param :input_type symbol indicating whether to output :xlsx or :csv
18
+ # @param :input_type symbol indicating whether to output :xlsx, :csv, or :json
17
19
  # @param :options hash with options to control the behavior of the conversion
18
20
  def self.convert(input_type, options = nil)
19
21
  self.new(input_type, options).convert
@@ -23,7 +25,7 @@ module DataSpork
23
25
  def initialize(input_type, options = nil)
24
26
  @input_type = input_type
25
27
  init_options options
26
- @writer = XmlWriter.new(self)
28
+ init_writers
27
29
  end
28
30
 
29
31
  def init_options(options)
@@ -31,6 +33,15 @@ module DataSpork
31
33
  @options[:output_path] = @options[:source_path] if @options[:output_path].nil? and @options[:output_file]
32
34
  end
33
35
 
36
+ def init_writers
37
+ @writers = [ ]
38
+ add_writers
39
+ end
40
+
41
+ def add_writers
42
+ writers << XmlWriter.new(self)
43
+ end
44
+
34
45
  def effective_date_pattern
35
46
  /^[Ee]ffective [Dd]ate+/
36
47
  end
@@ -43,6 +54,10 @@ module DataSpork
43
54
  $stderr.puts str
44
55
  end
45
56
 
57
+ def write(msg)
58
+ writers.each {|writer| writer.send msg }
59
+ end
60
+
46
61
  def source_name
47
62
  base = DEFAULT_INPUT_NAME
48
63
  modifier = ''
@@ -108,12 +123,11 @@ module DataSpork
108
123
  end
109
124
  @row_num = 0
110
125
  @headers = []
111
- self.setup_state = :setup_writer
126
+ self.setup_state = :setup_writers
112
127
  end
113
128
 
114
129
  def finish
115
- writer.finish
116
- finish_capture
130
+ write :finish
117
131
  end
118
132
 
119
133
  # Appends the specified row to the output.
@@ -182,39 +196,6 @@ module DataSpork
182
196
  !headers.empty?
183
197
  end
184
198
 
185
- def begin_menu_group(name)
186
- self.menu_group_name = name
187
- id = menu_board.size + 1
188
- self.menu_group = { id: id, name: name, display_order: id, choices: [] }
189
- menu_board[name] = menu_group
190
- end
191
-
192
- def capture_row
193
- order = menu_group[:choices].size + 1
194
- self.menu_choice = { id: row_num, display_order: order, menu_group_id: menu_group[:id], options: { } }
195
- self.menu_group[:choices] << menu_choice
196
- end
197
-
198
- def capture_column
199
- key = case header
200
- when 'ingredients'
201
- 'description'
202
- when 'trademarked'
203
- 'is_trademarked'
204
- else
205
- header
206
- end
207
- if %w(trademarked image_url).include?(key)
208
- menu_choice[:options][key.to_sym] = col_value
209
- else
210
- menu_choice[key.to_sym] = col_value
211
- end
212
- end
213
-
214
- def finish_capture
215
- # empty - subclass should override
216
- end
217
-
218
199
  # Output the current row of data, which were parsed from the CSV input.
219
200
  def output
220
201
  unless reject?.tap { |r| print "rejected #{row_num}: #{row}" if r and VERBOSE }
@@ -242,8 +223,8 @@ module DataSpork
242
223
  end
243
224
 
244
225
  # Initializes the xml document and transfers setup_state to :setup
245
- def setup_writer
246
- writer.start
226
+ def setup_writers
227
+ write :start
247
228
  self.setup_state = :setup
248
229
  send setup_state # automatically transition to next state
249
230
  end
@@ -268,21 +249,31 @@ module DataSpork
268
249
 
269
250
  # Answer true when the current column should be included in the output.
270
251
  def output_column?
271
- xml_tags.include? header
252
+ col_tags.include? header
253
+ end
254
+
255
+ def on_begin_row
256
+ write :begin_put_row
257
+ end
258
+
259
+ def on_output_column
260
+ write :put_column
261
+ end
262
+
263
+ def on_end_row
264
+ write :end_put_row
272
265
  end
273
266
 
274
267
  # Output the current row, one column at a time.
275
268
  def put_row
276
- writer.begin_put_row
277
- capture_row
269
+ on_begin_row
278
270
  row.each_index do |index|
279
271
  self.col_num = index
280
272
  if output_column?
281
- writer.put_column
282
- capture_column
273
+ on_output_column
283
274
  end
284
275
  end
285
- writer.end_put_row
276
+ on_end_row
286
277
  end
287
278
 
288
279
  end
@@ -0,0 +1,2 @@
1
+ class DataSpork::JsonWriter < DataSpork::BaseWriter
2
+ end
@@ -1,3 +1,3 @@
1
1
  module DataSpork
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,43 +1,23 @@
1
- class DataSpork::XmlWriter
2
-
3
- attr_accessor :started
4
- attr_reader :owner
5
-
6
- delegate :print, :print_error, :to => :owner
7
- delegate :effective_date, :xml_tags, :root_tag, :row_tag, :header, :col_value, :to => :owner
8
-
9
- def initialize(owner)
10
- @owner = owner
11
- @started = false
12
- end
13
-
14
- # Output the XML preface.
15
- def start
16
- start_document
17
- start_schema
18
- self.started = true
19
- end
1
+ class DataSpork::XmlWriter < DataSpork::BaseWriter
20
2
 
21
3
  # Output the XML document preface.
22
4
  def start_document
23
5
  print '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>'
6
+ start_schema
24
7
  end
25
8
 
26
9
  # Output the schema with the root tag.
27
10
  def start_schema
28
- if owner.respond_to?(:xml_start_schema)
29
- print owner.xml_start_schema(self)
30
- else
31
- print begin_tag %Q(#{root_tag} #{schema_uri} effective_date="#{effective_date}")
32
- end
11
+ print begin_tag(build_schema_tag)
33
12
  end
34
13
 
35
- def schema_uri
36
- %q(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")
14
+ # Output the schema with the root tag.
15
+ def build_schema_tag
16
+ %Q(#{root_tag} #{schema_uri} effective_date="#{effective_date}")
37
17
  end
38
18
 
39
- def started?
40
- started
19
+ def schema_uri
20
+ %q(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance")
41
21
  end
42
22
 
43
23
  # Close out the XML document.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_spork
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
  - Brian Jackson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-06 00:00:00.000000000 Z
11
+ date: 2014-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -89,8 +89,10 @@ extra_rdoc_files: []
89
89
  files:
90
90
  - lib/data_spork.rb
91
91
  - lib/data_spork/base_reader.rb
92
+ - lib/data_spork/base_writer.rb
92
93
  - lib/data_spork/google_spreadsheet.rb
93
94
  - lib/data_spork/importer.rb
95
+ - lib/data_spork/json_writer.rb
94
96
  - lib/data_spork/version.rb
95
97
  - lib/data_spork/xml_writer.rb
96
98
  homepage: http://bitbucket.org/leadbaxter/data_spork
@@ -116,5 +118,6 @@ rubyforge_project:
116
118
  rubygems_version: 2.2.1
117
119
  signing_key:
118
120
  specification_version: 4
119
- summary: Import CSV, Excel [.XLS, .XLSX] and Google Drive Spreadsheets.
121
+ summary: Import CSV, Excel [.XLS, .XLSX] and Google Drive Spreadsheets. Output to
122
+ XML or JSON (more formats to come!)
120
123
  test_files: []