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 +7 -0
- data/bin/setup +27 -0
- data/lib/factory_dumps/exporter.rb +59 -0
- data/lib/factory_dumps/railtie.rb +9 -0
- data/lib/factory_dumps/version.rb +3 -0
- data/lib/factory_dumps.rb +60 -0
- metadata +175 -0
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,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: []
|