faker_maker 4.0.0.beta1 → 4.0.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.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/.rubocop.yml +1 -1
  4. data/Gemfile +1 -1
  5. data/MIGRATION_NOTES.md +47 -0
  6. data/TODO.md +16 -0
  7. data/faker_maker.gemspec +1 -1
  8. data/hack/nested.rb +21 -0
  9. data/lib/faker_maker/base.rb +2 -2
  10. data/lib/faker_maker/definition_proxy.rb +2 -2
  11. data/lib/faker_maker/factory.rb +6 -4
  12. data/lib/faker_maker/version.rb +1 -1
  13. data/usefakermaker.com.site/.gitignore +2 -0
  14. data/usefakermaker.com.site/site/assets/favicons/android-chrome-192x192.png +0 -0
  15. data/usefakermaker.com.site/site/assets/favicons/android-chrome-512x512.png +0 -0
  16. data/usefakermaker.com.site/site/assets/favicons/apple-touch-icon.png +0 -0
  17. data/usefakermaker.com.site/site/assets/favicons/favicon-16x16.png +0 -0
  18. data/usefakermaker.com.site/site/assets/favicons/favicon-32x32.png +0 -0
  19. data/usefakermaker.com.site/site/assets/favicons/favicon.ico +0 -0
  20. data/usefakermaker.com.site/site/assets/favicons/site.webmanifest +19 -0
  21. data/usefakermaker.com.site/site/assets/robots.txt +2 -0
  22. data/usefakermaker.com.site/site/assets/styles.css +351 -0
  23. data/{usefakermaker.com/docs/contributing/index.md → usefakermaker.com.site/site/src/docs/contributing/index.page.md} +1 -5
  24. data/{usefakermaker.com/docs/installing/index.md → usefakermaker.com.site/site/src/docs/installing/index.page.md} +1 -5
  25. data/{usefakermaker.com/docs/usage/arrays/index.md → usefakermaker.com.site/site/src/docs/usage/arrays/index.page.md} +1 -4
  26. data/{usefakermaker.com/docs/usage/building-instances/index.md → usefakermaker.com.site/site/src/docs/usage/building-instances/index.page.md} +1 -4
  27. data/{usefakermaker.com/docs/usage/chaos/index.md → usefakermaker.com.site/site/src/docs/usage/chaos/index.page.md} +1 -4
  28. data/{usefakermaker.com/docs/usage/destroying-factories/index.md → usefakermaker.com.site/site/src/docs/usage/destroying-factories/index.page.md} +1 -4
  29. data/{usefakermaker.com/docs/usage/embedding-factories/index.md → usefakermaker.com.site/site/src/docs/usage/embedding-factories/index.page.md} +1 -4
  30. data/{usefakermaker.com/docs/usage/getting-started/index.md → usefakermaker.com.site/site/src/docs/usage/getting-started/index.page.md} +1 -4
  31. data/{usefakermaker.com/docs/usage/history-logging/index.md → usefakermaker.com.site/site/src/docs/usage/history-logging/index.page.md} +1 -6
  32. data/{usefakermaker.com/docs/usage/inheritance/index.md → usefakermaker.com.site/site/src/docs/usage/inheritance/index.page.md} +1 -4
  33. data/{usefakermaker.com/docs/usage/json-field-names/index.md → usefakermaker.com.site/site/src/docs/usage/json-field-names/index.page.md} +1 -4
  34. data/{usefakermaker.com/docs/usage/lifecycle-hooks/index.md → usefakermaker.com.site/site/src/docs/usage/lifecycle-hooks/index.page.md} +1 -4
  35. data/{usefakermaker.com/docs/usage/managing-dependencies/index.md → usefakermaker.com.site/site/src/docs/usage/managing-dependencies/index.page.md} +1 -4
  36. data/{usefakermaker.com/docs/usage/omitting-fields/index.md → usefakermaker.com.site/site/src/docs/usage/omitting-fields/index.page.md} +1 -4
  37. data/{usefakermaker.com/pages/index.markdown → usefakermaker.com.site/site/src/index.page.md} +9 -19
  38. data/usefakermaker.com.site/site/templates/_nav.html.erb +27 -0
  39. data/usefakermaker.com.site/site/templates/layout.html.erb +46 -0
  40. data/usefakermaker.com.site/site/templates/page.html.erb +3 -0
  41. metadata +38 -51
  42. data/usefakermaker.com/.gitignore +0 -5
  43. data/usefakermaker.com/404.html +0 -25
  44. data/usefakermaker.com/Gemfile +0 -39
  45. data/usefakermaker.com/README.md +0 -5
  46. data/usefakermaker.com/_config.yml +0 -299
  47. data/usefakermaker.com/_config.yml.orig +0 -55
  48. data/usefakermaker.com/_data/navigation.yml +0 -51
  49. data/usefakermaker.com/_data/ui-text.yml +0 -2132
  50. data/usefakermaker.com/_site/assets/css/main.css +0 -6
  51. data/usefakermaker.com/_site/assets/css/main.css.map +0 -1
  52. data/usefakermaker.com/_site/assets/js/_main.js +0 -230
  53. data/usefakermaker.com/_site/assets/js/lunr/lunr-en.js +0 -69
  54. data/usefakermaker.com/_site/assets/js/lunr/lunr-gr.js +0 -522
  55. data/usefakermaker.com/_site/assets/js/lunr/lunr-store.js +0 -1
  56. data/usefakermaker.com/_site/assets/js/lunr/lunr.js +0 -3475
  57. data/usefakermaker.com/_site/assets/js/lunr/lunr.min.js +0 -6
  58. data/usefakermaker.com/_site/assets/js/main.min.js +0 -7
  59. data/usefakermaker.com/_site/assets/js/main.min.js.map +0 -1
  60. data/usefakermaker.com/_site/assets/js/plugins/gumshoe.js +0 -484
  61. data/usefakermaker.com/_site/assets/js/plugins/jquery.ba-throttle-debounce.js +0 -252
  62. data/usefakermaker.com/_site/assets/js/plugins/jquery.fitvids.js +0 -82
  63. data/usefakermaker.com/_site/assets/js/plugins/jquery.greedy-navigation.js +0 -128
  64. data/usefakermaker.com/_site/assets/js/plugins/jquery.magnific-popup.js +0 -1860
  65. data/usefakermaker.com/_site/assets/js/plugins/smooth-scroll.js +0 -650
  66. data/usefakermaker.com/_site/assets/js/vendor/jquery/jquery-3.6.0.js +0 -10881
  67. data/usefakermaker.com/_site/feed.xml +0 -1
  68. data/usefakermaker.com/_site/robots.txt +0 -1
  69. data/usefakermaker.com/_site/sitemap.xml +0 -3
  70. data/usefakermaker.com/about.markdown +0 -18
  71. /data/{usefakermaker.com → usefakermaker.com.site/site}/assets/images/pug.png +0 -0
  72. /data/{usefakermaker.com → usefakermaker.com.site/site}/assets/images/unipug.svg +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2010123a071b807d1400f16c16cbaf58b4db86507224c72f50847affcfbc1bd4
4
- data.tar.gz: 8e72393016c7a54106bc1aca8ecccf46d35c94ee1b9fb4b95c6b49ba5bbd2dfc
3
+ metadata.gz: 4f341f27ec954b732dde7141c9ad532346c09dadbbed4ea469894b10cac652f8
4
+ data.tar.gz: 61919d74b140d82fba2750bcf0e1c25473ebe21e02a2b213bd1109d94f22d9e2
5
5
  SHA512:
6
- metadata.gz: f8f73cb6e888ef7f49abd66959c64916df617f0254a98b0ca022c19dbc45aef6e259d92d9186d57128f9180c094c46af4776fb3c087ec3fce94eff1cead58eb0
7
- data.tar.gz: b7baa192ddf36b18f6a696d4cec08b8372e57fd95a44d0397a8a6f94f298938e449553aec1d6b03c32a63544589c421afb46c080f67a699eaace38d5d9f15eaf
6
+ metadata.gz: de3ae09ed6b848612d3fc23533d04f4633eaa4be42f7f7be9fc3f3938f8b86afa2a495f6928a66f38207d63233e2b37ce88897178688a4f3aa2c6c5f524b51e4
7
+ data.tar.gz: cdc3c4509819316bc389d2bf1857883ddfa62b14b93a8f794a043af70bd603dec46f7e0a0c37d29d8814ff447ac2762cd3d56a92fc917338bc3458b4113263c9
@@ -20,7 +20,7 @@ jobs:
20
20
  runs-on: ubuntu-latest
21
21
  strategy:
22
22
  matrix:
23
- ruby-version: ["3.0", "3.1", "3.2", "3.3", "3.4"]
23
+ ruby-version: ["3.4", "4.0"]
24
24
 
25
25
  steps:
26
26
  - uses: actions/checkout@v3
data/.rubocop.yml CHANGED
@@ -52,5 +52,5 @@ Metrics/PerceivedComplexity:
52
52
  Max: 10
53
53
 
54
54
  AllCops:
55
- TargetRubyVersion: 3.4
55
+ TargetRubyVersion: 4.0
56
56
  NewCops: enable
data/Gemfile CHANGED
@@ -11,4 +11,4 @@ gem 'bundler-audit', '~> 0.9.2'
11
11
  gem 'irb', '~> 1.15'
12
12
  gem 'rdoc', '~> 6.13'
13
13
 
14
- gem "awesome_print", "~> 1.9"
14
+ gem 'awesome_print', '~> 1.9'
@@ -0,0 +1,47 @@
1
+ # Jekyll to Jackdaw Migration Notes
2
+
3
+ ## 1. Project Initialization
4
+ * Run `jackdaw new <project_name>` to generate the standard directory structure:
5
+ * `site/src`: Content
6
+ * `site/templates`: ERB Templates
7
+ * `site/assets`: Static files (images, css, favicons)
8
+
9
+ ## 2. Template Conversion
10
+ * **Layouts**: Consolidate Jekyll layouts (default, page, etc.) into `site/templates/layout.html.erb`.
11
+ * Replace `{{ content }}` with `<%= content %>`.
12
+ * Replace `{{ page.title }}` with `<%= title %>`.
13
+ * **Partials**: Convert `{% include file.html %}` to `<%= render 'file' %>`.
14
+ * Rename partial files to start with an underscore (e.g., `_nav.html.erb`).
15
+ * **Assets**:
16
+ * Move CSS/JS/Images to `site/assets/`.
17
+ * **Important**: When referencing in HTML, omit `assets/`.
18
+ * `site/assets/styles.css` -> `<link href="/styles.css">`
19
+ * `site/assets/img/logo.png` -> `<img src="/img/logo.png">`
20
+
21
+ ## 3. Content Migration Strategies
22
+ * **File Extensions**:
23
+ * Regular pages: `.md` -> `.page.md`
24
+ * Blog posts: `.md` -> `.blog.md` (Filename must start with `YYYY-MM-DD-`)
25
+ * **Frontmatter Handling**:
26
+ * Jackdaw renders the *first H1* as the page title.
27
+ * **Task**: Strip YAML frontmatter (`--- ... ---`) and ensure the file starts with `# Page Title`.
28
+ * **Directory Structure**:
29
+ * Keep the same folder structure in `site/src` to maintain URLs.
30
+ * **Conflict Warning**: Do not create `topic.page.md` if you also have a folder named `topic/`. Instead, create `topic/index.page.md`.
31
+
32
+ ## 4. Automation (Ruby Script)
33
+ For bulk migration of documentation, use a script to:
34
+ 1. Iterate through source directories.
35
+ 2. Read file content.
36
+ 3. specific YAML frontmatter values (Title).
37
+ 4. Rewrite file to destination with new header and `.page.md` extension.
38
+
39
+ ## 5. Navigation & Indices
40
+ * Jackdaw does not automatically build navigation menus from folder structure.
41
+ * **Manual**: Edit `site/templates/_nav.html.erb`.
42
+ * **Auto-generated Indices**: Write scripts to generate index markdown files (e.g., "List of all Rules") if the content changes frequently.
43
+
44
+ ## 6. Styling
45
+ * Jackdaw provides no default styling.
46
+ * Create a robust `styles.css` using CSS Variables for theming.
47
+ * Link fonts and stylesheets in the `<head>` of `layout.html.erb`.
data/TODO.md ADDED
@@ -0,0 +1,16 @@
1
+ -- DONE - sorta
2
+ 2. get attributes including embedded attr -- THIS WORKS IF USING THE FACTORY PARAMETER, NOT PROC EMBEDDED FACTORIES -- NEED A CHANGE TO OSL FACTORIES
3
+ 3. What the hell is going on with @embedded factories -- why is this always nil CHECK -- FOR THE LOVE OF GOD, WRITE DOCUMENTATION FOR THIS
4
+ 4. Factory#attribute_names line ~ 110
5
+
6
+ -- TODO
7
+
8
+ 1. nested builds using the build method -- this is hidden at the moment, it sets the value of the key to a hash rather than recursively calling the field#field method
9
+ 5. FM[:foo].build( attributes: { does_not_exist: 1 }, raise_on_error: false ) # RAISE_ON_ERROR
10
+ 5. FM[:foo].build( attributes: { does_not_exist: 1 }, strict: false ) # RAISE_ON_ERROR
11
+ 5. FM[:foo].build( attributes: { does_not_exist: 1 }, very_strict: false ) # RAISE_ON_ERROR
12
+
13
+
14
+ building embedded factories need to know the build options passed in to the top level build call -- e.g. is chaos on or not
15
+
16
+ check naming strategies still work
data/faker_maker.gemspec CHANGED
@@ -43,7 +43,7 @@ Gem::Specification.new do |spec|
43
43
 
44
44
  spec.add_dependency 'activesupport', '>= 5.2', '< 9'
45
45
 
46
- spec.add_development_dependency 'bundler', '~> 2'
46
+ spec.add_development_dependency 'bundler', '>= 2'
47
47
  spec.add_development_dependency 'faker', '~> 3.2'
48
48
  spec.add_development_dependency 'guard', '~> 2.16'
49
49
  spec.add_development_dependency 'guard-bundler', '~> 3.0'
data/hack/nested.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'faker_maker'
2
+ require 'awesome_print'
3
+
4
+ FM.factory :random do
5
+ flavour { 'blue' }
6
+ end
7
+
8
+ FM.factory :item do
9
+ name { 'toothpaste' }
10
+ price { 0.99 }
11
+ end
12
+
13
+ FM.factory :coupon do
14
+ discount { 0.10 }
15
+ end
16
+
17
+ FM.factory :basket do
18
+ items( factory: %i[item random] )
19
+ end
20
+
21
+ # { a: 1, b: { x: 2 } }
@@ -3,12 +3,12 @@
3
3
  module FakerMaker
4
4
  # Base module for defining the DSL
5
5
  module Base
6
- def factory(name, options = {}, &block)
6
+ def factory(name, options = {}, &)
7
7
  factory = FakerMaker.find_factory(name)
8
8
  if factory.nil?
9
9
  factory = FakerMaker::Factory.new name, options
10
10
  proxy = DefinitionProxy.new factory
11
- proxy.instance_eval( &block ) if block_given?
11
+ proxy.instance_eval( & ) if block_given?
12
12
  FakerMaker.register_factory factory
13
13
  else
14
14
  factory
@@ -13,8 +13,8 @@ module FakerMaker
13
13
  @factory
14
14
  end
15
15
 
16
- def method_missing(name, *args, &block)
17
- attribute = FakerMaker::Attribute.new name, block, *args
16
+ def method_missing(name, *, &block)
17
+ attribute = FakerMaker::Attribute.new(name, block, *)
18
18
  @factory.attach_attribute attribute
19
19
  end
20
20
 
@@ -155,9 +155,10 @@ module FakerMaker
155
155
  # @param include_embeddings [Boolean] whether to include attributes from embedded factories (default: true)
156
156
  # @return [Array] the collection of attributes, possibly including embedded factory attributes as hashes
157
157
  #
158
- # If the factory has a parent, its attributes are merged in. Attributes without embedded factories are added directly.
159
- # If `include_embeddings` is true, attributes with embedded factories are added as hashes mapping the attribute to the
160
- # flattened attributes of its embedded factories. If false, only the attribute itself is added.
158
+ # If the factory has a parent, its attributes are merged in. Attributes without embedded factories are added
159
+ # directly. If `include_embeddings` is true, attributes with embedded factories are added as hashes mapping
160
+ # the attribute to the flattened attributes of its embedded factories. If false, only the attribute itself
161
+ # is added.
161
162
  def attributes( collection = [], include_embeddings: true )
162
163
  collection |= FakerMaker[parent].attributes( collection ) if parent?
163
164
  collection |= @attributes.reject { |attr| attr.embedded_factories.any? }
@@ -196,7 +197,8 @@ module FakerMaker
196
197
  #
197
198
  # @param instance [Object] The object instance to populate with attribute values.
198
199
  # @param attr_override_values [Hash] A hash of attribute names and their override values.
199
- # @param chaos [Boolean, Integer, nil] If truthy, enables chaos mode which may randomize or select a subset of attributes.
200
+ # @param chaos [Boolean, Integer, nil] If truthy, enables chaos mode which may randomize or select a subset
201
+ # of attributes.
200
202
  # @return [void]
201
203
  #
202
204
  # If the factory has a parent, its attributes are populated first.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FakerMaker
4
- VERSION = '4.0.0.beta1'
4
+ VERSION = '4.0.0'
5
5
  end
@@ -0,0 +1,2 @@
1
+ public/
2
+ .DS_Store
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "FakerMaker",
3
+ "short_name": "FakerMaker",
4
+ "icons": [
5
+ {
6
+ "src": "/favicons/android-chrome-192x192.png",
7
+ "sizes": "192x192",
8
+ "type": "image/png"
9
+ },
10
+ {
11
+ "src": "/favicons/android-chrome-512x512.png",
12
+ "sizes": "512x512",
13
+ "type": "image/png"
14
+ }
15
+ ],
16
+ "theme_color": "#ffffff",
17
+ "background_color": "#ffffff",
18
+ "display": "standalone"
19
+ }
@@ -0,0 +1,2 @@
1
+ User-agent: *
2
+ Allow: /
@@ -0,0 +1,351 @@
1
+ :root {
2
+ --font-sans: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
3
+ --font-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
4
+
5
+ --color-bg: #ffffff;
6
+ --color-text: #1a202c;
7
+ --color-primary: #3182ce;
8
+ --color-primary-hover: #2c5282;
9
+ --color-sidebar-bg: #f7fafc;
10
+ --color-border: #e2e8f0;
11
+ --color-code-bg: #edf2f7;
12
+
13
+ --spacing-unit: 1rem;
14
+ --sidebar-width: 280px;
15
+ }
16
+
17
+ @media (prefers-color-scheme: dark) {
18
+ :root {
19
+ --color-bg: #1a202c;
20
+ --color-text: #e2e8f0;
21
+ --color-primary: #63b3ed;
22
+ --color-primary-hover: #4299e1;
23
+ --color-sidebar-bg: #2d3748;
24
+ --color-border: #4a5568;
25
+ --color-code-bg: #2d3748;
26
+ }
27
+ }
28
+
29
+ * {
30
+ box-sizing: border-box;
31
+ }
32
+
33
+ body {
34
+ margin: 0;
35
+ font-family: var(--font-sans);
36
+ color: var(--color-text);
37
+ background-color: var(--color-bg);
38
+ line-height: 1.6;
39
+ }
40
+
41
+ .layout {
42
+ display: flex;
43
+ min-height: 100vh;
44
+ }
45
+
46
+ .sidebar {
47
+ width: var(--sidebar-width);
48
+ background: var(--color-sidebar-bg);
49
+ border-right: 1px solid var(--color-border);
50
+ padding: 2rem;
51
+ overflow-y: auto;
52
+ position: sticky;
53
+ top: 0;
54
+ height: 100vh;
55
+ flex-shrink: 0;
56
+ }
57
+
58
+ .page-container {
59
+ flex: 1;
60
+ display: flex;
61
+ flex-direction: column;
62
+ min-height: 100vh;
63
+ }
64
+
65
+ .main-content {
66
+ flex: 1;
67
+ padding: 2rem 4rem;
68
+ max-width: 1000px;
69
+ width: 100%;
70
+ }
71
+
72
+ .site-footer {
73
+ padding: 2rem 4rem;
74
+ border-top: 1px solid var(--color-border);
75
+ margin-top: 4rem;
76
+ display: flex;
77
+ justify-content: space-between;
78
+ align-items: center;
79
+ font-size: 0.9rem;
80
+ color: var(--color-text);
81
+ opacity: 0.7;
82
+ }
83
+
84
+ .site-footer p {
85
+ margin: 0;
86
+ }
87
+
88
+ .site-footer a {
89
+ color: inherit;
90
+ font-weight: 500;
91
+ }
92
+
93
+ /* Typography */
94
+ h1 {
95
+ font-size: 2.5rem;
96
+ margin-bottom: 1rem;
97
+ line-height: 1.2;
98
+ }
99
+
100
+ h2 {
101
+ font-size: 1.75rem;
102
+ margin-top: 2.5rem;
103
+ margin-bottom: 1rem;
104
+ padding-bottom: 0.5rem;
105
+ border-bottom: 1px solid var(--color-border);
106
+ }
107
+
108
+ h3 {
109
+ font-size: 1.25rem;
110
+ margin-top: 2rem;
111
+ }
112
+
113
+ a {
114
+ color: var(--color-primary);
115
+ text-decoration: none;
116
+ }
117
+
118
+ a:hover {
119
+ text-decoration: underline;
120
+ }
121
+
122
+ /* Navigation */
123
+ .nav-section {
124
+ margin-bottom: 2rem;
125
+ }
126
+
127
+ .nav-title {
128
+ font-weight: bold;
129
+ text-transform: uppercase;
130
+ font-size: 0.85rem;
131
+ color: var(--color-text);
132
+ letter-spacing: 0.05em;
133
+ margin-bottom: 0.5rem;
134
+ opacity: 0.7;
135
+ }
136
+
137
+ .nav-links {
138
+ display: flex;
139
+ flex-direction: column;
140
+ gap: 0.5rem;
141
+ }
142
+
143
+ .nav-link {
144
+ color: var(--color-text);
145
+ font-size: 0.95rem;
146
+ opacity: 0.8;
147
+ transition: opacity 0.2s;
148
+ }
149
+
150
+ .nav-link:hover {
151
+ opacity: 1;
152
+ color: var(--color-primary);
153
+ text-decoration: none;
154
+ }
155
+
156
+ .logo {
157
+ font-size: 1.5rem;
158
+ font-weight: bold;
159
+ display: block;
160
+ margin-bottom: 2rem;
161
+ color: var(--color-text);
162
+ }
163
+
164
+ /* Code Blocks */
165
+ pre {
166
+ background: var(--color-code-bg);
167
+ padding: 1rem;
168
+ border-radius: 0.5rem;
169
+ overflow-x: auto;
170
+ font-family: var(--font-mono);
171
+ font-size: 0.9em;
172
+ }
173
+
174
+ code {
175
+ font-family: var(--font-mono);
176
+ background: var(--color-code-bg);
177
+ padding: 0.2em 0.4em;
178
+ border-radius: 0.25rem;
179
+ font-size: 0.85em;
180
+ }
181
+
182
+ pre code {
183
+ background: transparent;
184
+ padding: 0;
185
+ }
186
+
187
+ /* Components */
188
+ .btn {
189
+ display: inline-block;
190
+ background: var(--color-primary);
191
+ color: white;
192
+ padding: 0.75rem 1.5rem;
193
+ border-radius: 0.375rem;
194
+ font-weight: 600;
195
+ transition: background-color 0.2s;
196
+ text-decoration: none !important;
197
+ }
198
+
199
+ .btn:hover {
200
+ background: var(--color-primary-hover);
201
+ color: white;
202
+ }
203
+
204
+ .hero {
205
+ text-align: center;
206
+ padding: 4rem 2rem;
207
+ background: var(--color-sidebar-bg);
208
+ border-radius: 1rem;
209
+ margin-bottom: 2rem;
210
+ }
211
+
212
+ .hero h2 {
213
+ border-bottom: none;
214
+ font-size: 2rem;
215
+ margin-top: 0;
216
+ }
217
+
218
+ /* Mobile Navigation */
219
+ .menu-toggle {
220
+ display: none;
221
+ position: fixed;
222
+ bottom: 1.5rem;
223
+ right: 1.5rem;
224
+ width: 3.5rem;
225
+ height: 3.5rem;
226
+ border-radius: 50%;
227
+ background: var(--color-primary);
228
+ border: none;
229
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
230
+ cursor: pointer;
231
+ z-index: 100;
232
+ padding: 0;
233
+ align-items: center;
234
+ justify-content: center;
235
+ }
236
+
237
+ .hamburger {
238
+ width: 24px;
239
+ height: 2px;
240
+ background: white;
241
+ position: relative;
242
+ transition: all 0.3s;
243
+ }
244
+
245
+ .hamburger::before,
246
+ .hamburger::after {
247
+ content: '';
248
+ position: absolute;
249
+ width: 24px;
250
+ height: 2px;
251
+ background: white;
252
+ left: 0;
253
+ transition: all 0.3s;
254
+ }
255
+
256
+ .hamburger::before {
257
+ top: -8px;
258
+ }
259
+
260
+ .hamburger::after {
261
+ top: 8px;
262
+ }
263
+
264
+ .sidebar-open .hamburger {
265
+ background: transparent;
266
+ }
267
+
268
+ .sidebar-open .hamburger::before {
269
+ top: 0;
270
+ transform: rotate(45deg);
271
+ }
272
+
273
+ .sidebar-open .hamburger::after {
274
+ top: 0;
275
+ transform: rotate(-45deg);
276
+ }
277
+
278
+ .sidebar-overlay {
279
+ position: fixed;
280
+ top: 0;
281
+ left: 0;
282
+ right: 0;
283
+ bottom: 0;
284
+ background: rgba(0, 0, 0, 0.5);
285
+ z-index: 40;
286
+ display: none;
287
+ opacity: 0;
288
+ transition: opacity 0.3s;
289
+ }
290
+
291
+ .sidebar-open .sidebar-overlay {
292
+ display: block;
293
+ opacity: 1;
294
+ }
295
+
296
+ /* Responsive */
297
+ @media (max-width: 768px) {
298
+ .menu-toggle {
299
+ display: flex;
300
+ }
301
+
302
+ .layout {
303
+ display: block;
304
+ }
305
+
306
+ .sidebar {
307
+ position: fixed;
308
+ top: 0;
309
+ left: 0;
310
+ bottom: 0;
311
+ width: 280px;
312
+ z-index: 50;
313
+ transform: translateX(-100%);
314
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
315
+ box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
316
+ }
317
+
318
+ .sidebar-open .sidebar {
319
+ transform: translateX(0);
320
+ }
321
+
322
+ .sidebar-open {
323
+ overflow: hidden;
324
+ }
325
+
326
+ /* Update main-content selector usage if needed or ensure page-container behaves on mobile */
327
+ .page-container {
328
+ width: 100%;
329
+ }
330
+
331
+ .main-content {
332
+ padding: 1.5rem;
333
+ width: 100%;
334
+ }
335
+
336
+ .site-footer {
337
+ padding: 1.5rem;
338
+ flex-direction: column;
339
+ gap: 1rem;
340
+ text-align: center;
341
+ }
342
+
343
+ /* Adjust typography for mobile */
344
+ h1 {
345
+ font-size: 2rem;
346
+ }
347
+
348
+ .logo {
349
+ margin-bottom: 2rem;
350
+ }
351
+ }
@@ -1,7 +1,3 @@
1
- ---
2
- layout: single
3
- title: Contributing
4
- nav_order: 2
5
- ---
1
+ # Contributing
6
2
 
7
3
  Bug reports and pull requests are welcome on GitHub at <https://github.com/BillyRuffian/faker_maker>
@@ -1,8 +1,4 @@
1
- ---
2
- layout: single
3
- title: Installing Faker Maker
4
- nav_order: 2
5
- ---
1
+ # Installing Faker Maker
6
2
 
7
3
  Add this line to your application's Gemfile:
8
4
 
@@ -1,7 +1,4 @@
1
- ---
2
- layout: single
3
- title: Arrays
4
- ---
1
+ # Arrays
5
2
 
6
3
  It is possible to declare an attribute as having multiple values.
7
4
 
@@ -1,7 +1,4 @@
1
- ---
2
- layout: single
3
- title: Building Instances
4
- ---
1
+ # Building Instances
5
2
 
6
3
  Instances are Plain Ol' Ruby Objects and the attributes are attached with getters and setters with their values assigned to the value return from their block at build time.
7
4
 
@@ -1,7 +1,4 @@
1
- ---
2
- layout: single
3
- title: Chaos
4
- ---
1
+ # Chaos
5
2
 
6
3
  Chaos mode introduces extra spice to your generated factories.
7
4
 
@@ -1,7 +1,4 @@
1
- ---
2
- layout: single
3
- title: Destroying Factories
4
- ---
1
+ # Destroying Factories
5
2
 
6
3
  ## A Cautionary Tale
7
4
 
@@ -1,7 +1,4 @@
1
- ---
2
- layout: single
3
- title: Embedding Factories
4
- ---
1
+ # Embedding Factories
5
2
 
6
3
  To use factories with factories, the following pattern is recommended:
7
4
 
@@ -1,7 +1,4 @@
1
- ---
2
- layout: single
3
- title: Getting started
4
- ---
1
+ # Getting started
5
2
 
6
3
  FakerMaker generates factories that build disposable objects for testing. Each factory has a name and a set of attributes.
7
4
 
@@ -1,9 +1,4 @@
1
- ---
2
- layout: single
3
- title: History logging
4
- parent: Usage
5
- nav_order: 10
6
- ---
1
+ # History logging
7
2
 
8
3
  _(since 1.3.0)_
9
4