usda-nutrient-database 1.4.1 → 1.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b828c4a6e16e2136f5eda8372159bc822ddcff44
4
- data.tar.gz: 5ee0841df5cc1b4fa1b835a821662b481298477a
3
+ metadata.gz: 0939aaca9f37d86998fb685c9dfbcd672c483b01
4
+ data.tar.gz: 1adb4ebe955fa5cd4b6f17ea4f851cb72f7d456e
5
5
  SHA512:
6
- metadata.gz: 24eb084caf4d83da0b2422895ac7d8c79b1159ac2116676935f3d3281ac87d183ce56d888fab4c209e683f56d8645c7ce3166fc29def97122cdd71ed29217363
7
- data.tar.gz: 395783ce1ef08de5f0a6841049598e046a7f6a43d973b608c1ecfe7d9217509ffe9ec57df005eaa938646e07158192a59284f16377f0859709d674e62baeb8a7
6
+ metadata.gz: 2a52d264629a668a674b364aab1b286ee2300f3501ab8909892572cc46c355026de6c9e4c94e384414edaac35f0a52fa2de055eef9565449fef27ddac2a9c4cd
7
+ data.tar.gz: fafe5a7ecd2dcedcb16e816b346418668ecee60c07f5b489aafd44669e7dc1420fc77440a6b69f58c57494f4d073ecffb3a8ef37923aab04a4da3576cf973966
@@ -32,10 +32,18 @@ module UsdaNutrientDatabase
32
32
  end
33
33
  end
34
34
 
35
+ def activerecord_import?
36
+ defined?(ActiveRecord::Import)
37
+ end
38
+
35
39
  def configuration
36
40
  @configuration ||= UsdaNutrientDatabase::Configuration.new
37
41
  end
38
42
 
43
+ def batch_size
44
+ @batch_fize ||= configuration.batch_size
45
+ end
46
+
39
47
  def usda_version
40
48
  @usda_version ||= configuration.usda_version
41
49
  end
@@ -1,9 +1,14 @@
1
1
  module UsdaNutrientDatabase
2
2
  class Configuration
3
3
  attr_accessor :logger
4
- attr_writer :perform_logging,
4
+ attr_writer :batch_size,
5
+ :perform_logging,
5
6
  :usda_version
6
7
 
8
+ def batch_size
9
+ @batch_size ||= 10000
10
+ end
11
+
7
12
  def logger
8
13
  @logger ||= Logger.new(STDOUT)
9
14
  end
@@ -5,24 +5,35 @@ module UsdaNutrientDatabase
5
5
  class Base
6
6
  def initialize(directory)
7
7
  @directory = directory
8
+ @objects_to_import = []
8
9
  end
9
10
 
10
11
  def import
11
12
  log_import_started
12
13
  CSV.open(file_location, 'r:iso-8859-1:utf-8', csv_options) do |csv|
13
- csv.each { |row| extract_row(row) }
14
+ csv.each { |row| objects_to_import << extract_row(row) }
14
15
  end
16
+ ar_import? ? save_objects : objects_to_import.each(&:save)
15
17
  end
16
18
 
17
19
  private
18
20
 
19
- attr_reader :directory
21
+ attr_reader :directory,
22
+ :objects_to_import
23
+
24
+ def ar_import?
25
+ UsdaNutrientDatabase.activerecord_import?
26
+ end
20
27
 
21
28
  def extract_row(row)
22
- build_object(apply_typecasts(row)).save!
29
+ build_object(apply_typecasts(row))
23
30
  end
24
31
 
25
32
  def build_object(row)
33
+ ar_import? ? build_values_array(row) : build_ar_object(row)
34
+ end
35
+
36
+ def build_ar_object(row)
26
37
  find_or_initialize(row).tap do |object|
27
38
  columns.each_with_index do |column, index|
28
39
  object.send("#{column}=", row[index])
@@ -30,6 +41,10 @@ module UsdaNutrientDatabase
30
41
  end
31
42
  end
32
43
 
44
+ def build_values_array(row)
45
+ columns.map.with_index { |_, index| row[index] }
46
+ end
47
+
33
48
  def columns
34
49
  raise NotImplementedError
35
50
  end
@@ -53,6 +68,10 @@ module UsdaNutrientDatabase
53
68
  def csv_options
54
69
  { col_sep: '^', quote_char: '~' }
55
70
  end
71
+
72
+ def save_objects
73
+ raise NotImplementedError
74
+ end
56
75
  end
57
76
  end
58
77
  end
@@ -19,6 +19,16 @@ module UsdaNutrientDatabase
19
19
  def log_import_started
20
20
  UsdaNutrientDatabase.log 'Importing food groups'
21
21
  end
22
+
23
+ def save_objects
24
+ UsdaNutrientDatabase::FoodGroup.import(columns, objects_to_import, {
25
+ validate: false,
26
+ on_duplicate_key_update: {
27
+ conflict_target: :code,
28
+ columns: %i(description)
29
+ }
30
+ })
31
+ end
22
32
  end
23
33
  end
24
34
  end
@@ -32,6 +32,16 @@ module UsdaNutrientDatabase
32
32
  :protein_factor, :fat_factor, :carbohydrate_factor
33
33
  ]
34
34
  end
35
+
36
+ def save_objects
37
+ UsdaNutrientDatabase::Food.import(columns, objects_to_import, {
38
+ validate: false,
39
+ on_duplicate_key_update: {
40
+ conflict_target: :nutrient_databank_number,
41
+ columns: columns
42
+ }
43
+ })
44
+ end
35
45
  end
36
46
  end
37
47
  end
@@ -4,6 +4,11 @@ module UsdaNutrientDatabase
4
4
 
5
5
  private
6
6
 
7
+ def apply_typecasts(row)
8
+ row[8] = row[8] == 'Y'
9
+ row
10
+ end
11
+
7
12
  def columns
8
13
  [
9
14
  :nutrient_databank_number, :nutrient_number, :nutrient_value,
@@ -15,8 +20,9 @@ module UsdaNutrientDatabase
15
20
  end
16
21
 
17
22
  def find_or_initialize(row)
18
- UsdaNutrientDatabase::FoodsNutrient.find_or_initialize_by(
19
- nutrient_databank_number: row[0], nutrient_number: row[1]
23
+ UsdaNutrientDatabase::FoodsNutrient.new(
24
+ nutrient_databank_number: row[0],
25
+ nutrient_number: row[3]
20
26
  )
21
27
  end
22
28
 
@@ -27,6 +33,26 @@ module UsdaNutrientDatabase
27
33
  def log_import_started
28
34
  UsdaNutrientDatabase.log 'Importing foods_nutrients'
29
35
  end
36
+
37
+ def save_objects
38
+ options = {
39
+ batch_size: UsdaNutrientDatabase.batch_size,
40
+ validate: false
41
+ }
42
+ if UsdaNutrientDatabase::FoodsNutrient.exists?
43
+ options.merge!(
44
+ on_duplicate_key_update: {
45
+ conflict_target: %i(nutrient_databank_number nutrient_number),
46
+ columns: columns
47
+ }
48
+ )
49
+ end
50
+ UsdaNutrientDatabase::FoodsNutrient.import(
51
+ columns,
52
+ objects_to_import,
53
+ options
54
+ )
55
+ end
30
56
  end
31
57
  end
32
58
  end
@@ -25,6 +25,16 @@ module UsdaNutrientDatabase
25
25
  def log_import_started
26
26
  UsdaNutrientDatabase.log 'Importing footnotes'
27
27
  end
28
+
29
+ def save_objects
30
+ UsdaNutrientDatabase::Footnote.import(columns, objects_to_import, {
31
+ validate: false,
32
+ on_duplicate_key_update: {
33
+ conflict_target: %i(nutrient_databank_number nutrient_number footnote_number),
34
+ columns: columns
35
+ }
36
+ })
37
+ end
28
38
  end
29
39
  end
30
40
  end
@@ -23,6 +23,16 @@ module UsdaNutrientDatabase
23
23
  def log_import_started
24
24
  UsdaNutrientDatabase.log 'Importing nutrients'
25
25
  end
26
+
27
+ def save_objects
28
+ UsdaNutrientDatabase::Nutrient.import(columns, objects_to_import, {
29
+ validate: false,
30
+ on_duplicate_key_update: {
31
+ conflict_target: :nutrient_number,
32
+ columns: columns
33
+ }
34
+ })
35
+ end
26
36
  end
27
37
  end
28
38
  end
@@ -13,12 +13,22 @@ module UsdaNutrientDatabase
13
13
  end
14
14
 
15
15
  def log_import_started
16
- UsdaNutrientDatabase.log 'Source code import started'
16
+ UsdaNutrientDatabase.log 'Import source codes'
17
17
  end
18
18
 
19
19
  def filename
20
20
  'SRC_CD.txt'
21
21
  end
22
+
23
+ def save_objects
24
+ UsdaNutrientDatabase::SourceCode.import(columns, objects_to_import, {
25
+ validate: false,
26
+ on_duplicate_key_update: {
27
+ conflict_target: :code,
28
+ columns: columns
29
+ }
30
+ })
31
+ end
22
32
  end
23
33
  end
24
34
  end
@@ -26,6 +26,16 @@ module UsdaNutrientDatabase
26
26
  def log_import_started
27
27
  UsdaNutrientDatabase.log 'Importing weights'
28
28
  end
29
+
30
+ def save_objects
31
+ UsdaNutrientDatabase::Weight.import(columns, objects_to_import, {
32
+ validate: false,
33
+ on_duplicate_key_update: {
34
+ conflict_target: %i(nutrient_databank_number sequence_number),
35
+ columns: columns
36
+ }
37
+ })
38
+ end
29
39
  end
30
40
  end
31
41
  end
@@ -1,3 +1,3 @@
1
1
  module UsdaNutrientDatabase
2
- VERSION = '1.4.1'
2
+ VERSION = '1.5.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usda-nutrient-database
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Beedle