factory-dumps 0.0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7c135b07df07ba1f90dae506ab2d747bbf585963e5a0387bdef033335271f55b
4
+ data.tar.gz: ec2d673289abc3edde3c8b408284650c431471a1f4de79c9124d66de46b3d049
5
+ SHA512:
6
+ metadata.gz: 916db779cc5f008a7fed23b796911acd57b648032ef5e8d505a10850b2d93508484238018c2ed2d5ef6a5b698474a52d5666ec59c1e4a6d0bbfd042aa6c5922a
7
+ data.tar.gz: 07fb24cc4d831184b4656ec6e1c46a266f581c07dccadb045eeba4b0c5bb5ff896dfd84615e233ce8ae29511d47a2f43be44e5d81d4a7c3c5324dc7fb85ad838
data/bin/setup ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ require "fileutils"
3
+
4
+ # path to your application root.
5
+ APP_ROOT = File.expand_path("..", __dir__)
6
+
7
+ def system!(*args)
8
+ system(*args) || abort("\n== Command #{args} failed ==")
9
+ end
10
+
11
+ FileUtils.chdir APP_ROOT do
12
+ # This script is a way to set up or update your development environment automatically.
13
+ # Add necessary setup steps to this file.
14
+
15
+ puts "== Installing dependencies =="
16
+ system! "gem install bundler --conservative"
17
+ system("bundle check") || system!("bundle install")
18
+
19
+ puts "\n== Removing old logs and tempfiles =="
20
+ system! "rm -f log/*"
21
+ system! "rm -rf tmp/cache"
22
+
23
+ puts "\n== Removing old test files =="
24
+ system! "rm -f *.xls"
25
+
26
+ puts "\n== All done! =="
27
+ end
@@ -0,0 +1,59 @@
1
+ require "csv"
2
+ require "writeexcel"
3
+ require "factory_bot"
4
+
5
+ module FactoryDumps
6
+ class Exporter
7
+ def initialize(factory_name)
8
+ @factory_name = factory_name
9
+ @factory = FactoryBot.factories.find(@factory_name)
10
+ raise KeyError, "Factory '#{factory_name}' not found" unless @factory
11
+ end
12
+
13
+ def to_csv(count = 1, attributes = nil)
14
+ records = generate_records(count)
15
+ attributes ||= get_default_attributes
16
+
17
+ CSV.generate do |csv|
18
+ csv << attributes
19
+ records.each do |record|
20
+ csv << attributes.map { |attr| record.send(attr) }
21
+ end
22
+ end
23
+ end
24
+
25
+ def to_excel(count = 1, attributes = nil, filename = "export.xls")
26
+ records = generate_records(count)
27
+ attributes ||= get_default_attributes
28
+
29
+ workbook = WriteExcel.new(filename)
30
+ worksheet = workbook.add_worksheet
31
+
32
+ # Write headers
33
+ attributes.each_with_index do |attr, col|
34
+ worksheet.write(0, col, attr.to_s)
35
+ end
36
+
37
+ # Write data
38
+ records.each_with_index do |record, row|
39
+ attributes.each_with_index do |attr, col|
40
+ worksheet.write(row + 1, col, record.send(attr))
41
+ end
42
+ end
43
+
44
+ workbook.close
45
+ filename
46
+ end
47
+
48
+ private
49
+
50
+ def generate_records(count)
51
+ Array.new(count) { FactoryBot.create(@factory_name) }
52
+ end
53
+
54
+ def get_default_attributes
55
+ model_class = @factory.build_class
56
+ model_class.column_names.map(&:to_sym)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,9 @@
1
+ module FactoryDumps
2
+ class Railtie < Rails::Railtie
3
+ initializer "factory_dumps" do
4
+ ActiveSupport.on_load(:active_record) do
5
+ extend FactoryDumps
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module FactoryDumps
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,60 @@
1
+ require "factory_dumps/version"
2
+ require "factory_dumps/exporter"
3
+ require "factory_dumps/railtie" if defined?(Rails)
4
+ require "fileutils"
5
+
6
+ module FactoryDumps
7
+ class Error < StandardError; end
8
+
9
+ class << self
10
+ attr_accessor :configuration
11
+
12
+ def configure
13
+ self.configuration ||= Configuration.new
14
+ yield(configuration)
15
+ end
16
+ end
17
+
18
+ class Configuration
19
+ attr_accessor :default_excel_filename, :dumps_directory
20
+
21
+ def initialize
22
+ @default_excel_filename = "export.xls"
23
+ @dumps_directory = "db/dumps"
24
+ end
25
+
26
+ def csv_directory
27
+ File.join(dumps_directory, "csv")
28
+ end
29
+
30
+ def excel_directory
31
+ File.join(dumps_directory, "excel")
32
+ end
33
+ end
34
+
35
+ def self.export_to_csv(factory_name, count: 1, attributes: nil, filename: nil)
36
+ exporter = Exporter.new(factory_name)
37
+ csv_data = exporter.to_csv(count, attributes)
38
+
39
+ if filename
40
+ ensure_directory(configuration&.csv_directory)
41
+ filepath = File.join(configuration&.csv_directory || File.join("db/dumps", "csv"), filename)
42
+ File.write(filepath, csv_data)
43
+ filepath
44
+ else
45
+ csv_data
46
+ end
47
+ end
48
+
49
+ def self.export_to_excel(factory_name, count: 1, attributes: nil, filename: configuration&.default_excel_filename || "export.xls")
50
+ ensure_directory(configuration&.excel_directory)
51
+ filepath = File.join(configuration&.excel_directory || File.join("db/dumps", "excel"), filename)
52
+ Exporter.new(factory_name).to_excel(count, attributes, filepath)
53
+ end
54
+
55
+ private
56
+
57
+ def self.ensure_directory(dir)
58
+ FileUtils.mkdir_p(dir)
59
+ end
60
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: factory-dumps
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Peter Sowah
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 2025-03-22 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rails
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '6.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '6.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: factory_bot
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '6.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '6.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: writeexcel
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: csv
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '3.0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '3.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '3.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: rake
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '13.0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '13.0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: standard
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.32'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.32'
110
+ - !ruby/object:Gem::Dependency
111
+ name: sqlite3
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 1.7.3
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 1.7.3
124
+ - !ruby/object:Gem::Dependency
125
+ name: activerecord
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '7.0'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '7.0'
138
+ description: A Rails gem that allows you to easily export factory data to CSV and
139
+ Excel formats using your existing factories
140
+ email:
141
+ - peter.sowah@example.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - bin/setup
147
+ - lib/factory_dumps.rb
148
+ - lib/factory_dumps/exporter.rb
149
+ - lib/factory_dumps/railtie.rb
150
+ - lib/factory_dumps/version.rb
151
+ homepage: https://github.com/petersowah/factory-dumps
152
+ licenses:
153
+ - MIT
154
+ metadata:
155
+ homepage_uri: https://github.com/petersowah/factory-dumps
156
+ source_code_uri: https://github.com/petersowah/factory-dumps
157
+ changelog_uri: https://github.com/petersowah/factory-dumps/blob/main/CHANGELOG.md
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 2.6.0
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubygems_version: 3.6.6
173
+ specification_version: 4
174
+ summary: Export factory data to CSV and Excel formats
175
+ test_files: []