@el-j/magic-helix-core 4.0.0-beta.2 → 4.0.0-beta.4

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 (165) hide show
  1. package/dist/index-B88j4AyE.js +13 -0
  2. package/dist/index-B88j4AyE.js.map +1 -0
  3. package/dist/index-CY-pQbuu.cjs +2 -0
  4. package/dist/index-CY-pQbuu.cjs.map +1 -0
  5. package/dist/index.cjs +75 -1
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.mjs +2214 -51
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/pattern-combiner.d.ts +1 -1
  11. package/dist/plugin-loader.d.ts +2 -1
  12. package/package.json +4 -4
  13. package/dist/BasePlugin-6wv0hYJ9.js +0 -98
  14. package/dist/BasePlugin-6wv0hYJ9.js.map +0 -1
  15. package/dist/BasePlugin-odQJAKA-.cjs +0 -2
  16. package/dist/BasePlugin-odQJAKA-.cjs.map +0 -1
  17. package/dist/builtin-plugins/base/BasePlugin.d.ts +0 -69
  18. package/dist/builtin-plugins/cpp/index.d.ts +0 -46
  19. package/dist/builtin-plugins/csharp/index.d.ts +0 -20
  20. package/dist/builtin-plugins/go/index.d.ts +0 -23
  21. package/dist/builtin-plugins/index.d.ts +0 -16
  22. package/dist/builtin-plugins/java/index.d.ts +0 -22
  23. package/dist/builtin-plugins/nodejs/index.d.ts +0 -44
  24. package/dist/builtin-plugins/php/index.d.ts +0 -20
  25. package/dist/builtin-plugins/python/index.d.ts +0 -27
  26. package/dist/builtin-plugins/ruby/index.d.ts +0 -20
  27. package/dist/builtin-plugins/rust/index.d.ts +0 -53
  28. package/dist/builtin-plugins/swift/index.d.ts +0 -22
  29. package/dist/default_templates/angular/angular-core.md +0 -19
  30. package/dist/default_templates/architecture/codeowners.md +0 -123
  31. package/dist/default_templates/architecture/monorepo.md +0 -146
  32. package/dist/default_templates/architecture/nx.md +0 -122
  33. package/dist/default_templates/architecture/turborepo.md +0 -114
  34. package/dist/default_templates/ci/github-actions.md +0 -268
  35. package/dist/default_templates/ci/gitlab-ci.md +0 -330
  36. package/dist/default_templates/containers/docker-multistage.md +0 -120
  37. package/dist/default_templates/containers/kubernetes-deploy.md +0 -210
  38. package/dist/default_templates/devops/docker-compose.md +0 -111
  39. package/dist/default_templates/devops/docker-dockerfile.md +0 -94
  40. package/dist/default_templates/devops/github-actions.md +0 -160
  41. package/dist/default_templates/devops/gitlab-ci.md +0 -210
  42. package/dist/default_templates/dotnet/framework-aspnetcore.md +0 -205
  43. package/dist/default_templates/dotnet/framework-blazor.md +0 -271
  44. package/dist/default_templates/dotnet/lang-csharp.md +0 -162
  45. package/dist/default_templates/generic/lang-typescript.md +0 -57
  46. package/dist/default_templates/generic/state-redux.md +0 -21
  47. package/dist/default_templates/generic/state-rxjs.md +0 -6
  48. package/dist/default_templates/generic/style-mui.md +0 -23
  49. package/dist/default_templates/generic/style-tailwind.md +0 -76
  50. package/dist/default_templates/generic/test-cypress.md +0 -21
  51. package/dist/default_templates/generic/test-jest.md +0 -20
  52. package/dist/default_templates/generic/test-playwright.md +0 -21
  53. package/dist/default_templates/generic/test-vitest.md +0 -131
  54. package/dist/default_templates/go/lang-go.md +0 -571
  55. package/dist/default_templates/java/build-gradle.md +0 -102
  56. package/dist/default_templates/java/build-maven.md +0 -86
  57. package/dist/default_templates/java/framework-spring-boot.md +0 -179
  58. package/dist/default_templates/java/lang-java.md +0 -78
  59. package/dist/default_templates/java/lang-kotlin.md +0 -88
  60. package/dist/default_templates/meta/magic-helix-meta.md +0 -213
  61. package/dist/default_templates/meta/meta-debug.md +0 -459
  62. package/dist/default_templates/meta/meta-implement.md +0 -450
  63. package/dist/default_templates/meta/meta-roadmap.md +0 -265
  64. package/dist/default_templates/nestjs/nestjs-core.md +0 -7
  65. package/dist/default_templates/patterns/architecture/clean-architecture.md +0 -469
  66. package/dist/default_templates/patterns/architecture/dependency-injection.md +0 -517
  67. package/dist/default_templates/patterns/architecture/domain-driven-design.md +0 -621
  68. package/dist/default_templates/patterns/architecture/layered-architecture.md +0 -382
  69. package/dist/default_templates/patterns/architecture/repository-pattern.md +0 -408
  70. package/dist/default_templates/patterns/domain-expertise/nextjs-rules.md +0 -115
  71. package/dist/default_templates/patterns/domain-expertise/react-patterns.md +0 -181
  72. package/dist/default_templates/patterns/domain-expertise/server-components.md +0 -212
  73. package/dist/default_templates/patterns/domain-expertise/shadcn-ui.md +0 -52
  74. package/dist/default_templates/patterns/domain-expertise/tailwind-patterns.md +0 -52
  75. package/dist/default_templates/patterns/environment/container-awareness.md +0 -17
  76. package/dist/default_templates/patterns/environment/ide-features.md +0 -17
  77. package/dist/default_templates/patterns/environment/os-commands.md +0 -17
  78. package/dist/default_templates/patterns/organization/heading-hierarchy.md +0 -103
  79. package/dist/default_templates/patterns/organization/sequential-workflows.md +0 -102
  80. package/dist/default_templates/patterns/organization/xml-rule-groups.md +0 -64
  81. package/dist/default_templates/patterns/reasoning/agent-loop.md +0 -151
  82. package/dist/default_templates/patterns/reasoning/confirmation-gates.md +0 -141
  83. package/dist/default_templates/patterns/reasoning/dependency-analysis.md +0 -132
  84. package/dist/default_templates/patterns/reasoning/one-tool-per-iteration.md +0 -152
  85. package/dist/default_templates/patterns/reasoning/preview-before-action.md +0 -194
  86. package/dist/default_templates/patterns/reasoning/reflection-checkpoints.md +0 -166
  87. package/dist/default_templates/patterns/reasoning/result-verification.md +0 -157
  88. package/dist/default_templates/patterns/reasoning/subtask-breakdown.md +0 -131
  89. package/dist/default_templates/patterns/reasoning/thinking-tags.md +0 -100
  90. package/dist/default_templates/patterns/role-definition/capability-declarations.md +0 -72
  91. package/dist/default_templates/patterns/role-definition/expert-identity.md +0 -45
  92. package/dist/default_templates/patterns/role-definition/scope-boundaries.md +0 -61
  93. package/dist/default_templates/patterns/safety/code-safety-rules.md +0 -17
  94. package/dist/default_templates/patterns/safety/credential-handling.md +0 -17
  95. package/dist/default_templates/patterns/safety/destructive-warnings.md +0 -17
  96. package/dist/default_templates/patterns/safety/refusal-messages.md +0 -17
  97. package/dist/default_templates/patterns/tone/adaptive-tone.md +0 -17
  98. package/dist/default_templates/patterns/tone/concise-communication.md +0 -17
  99. package/dist/default_templates/patterns/tone/forbidden-phrases.md +0 -17
  100. package/dist/default_templates/patterns/tool-guidelines/function-schemas.md +0 -143
  101. package/dist/default_templates/patterns/tool-guidelines/parameter-examples.md +0 -137
  102. package/dist/default_templates/patterns/tool-guidelines/usage-policies.md +0 -105
  103. package/dist/default_templates/php/framework-laravel.md +0 -112
  104. package/dist/default_templates/php/lang-php.md +0 -94
  105. package/dist/default_templates/python/lang-python.md +0 -508
  106. package/dist/default_templates/react/react-core.md +0 -677
  107. package/dist/default_templates/react/react-zustand.md +0 -7
  108. package/dist/default_templates/ruby/framework-rails.md +0 -309
  109. package/dist/default_templates/ruby/framework-sinatra.md +0 -227
  110. package/dist/default_templates/ruby/lang-ruby.md +0 -216
  111. package/dist/default_templates/rust/lang-rust.md +0 -89
  112. package/dist/default_templates/swift/framework-vapor.md +0 -352
  113. package/dist/default_templates/swift/lang-swift.md +0 -291
  114. package/dist/default_templates/vue/style-primevue.md +0 -6
  115. package/dist/default_templates/vue/style-quasar.md +0 -22
  116. package/dist/default_templates/vue/vue-core.md +0 -108
  117. package/dist/default_templates/vue/vue-pinia.md +0 -5
  118. package/dist/index-0GK4RlUx.js +0 -1748
  119. package/dist/index-0GK4RlUx.js.map +0 -1
  120. package/dist/index-AkVwRl-r.js +0 -92
  121. package/dist/index-AkVwRl-r.js.map +0 -1
  122. package/dist/index-B6BeG1yT.cjs +0 -68
  123. package/dist/index-B6BeG1yT.cjs.map +0 -1
  124. package/dist/index-B8pyjKdF.js +0 -94
  125. package/dist/index-B8pyjKdF.js.map +0 -1
  126. package/dist/index-BQ6v041y.js +0 -13
  127. package/dist/index-BQ6v041y.js.map +0 -1
  128. package/dist/index-Baxb1vI_.js +0 -210
  129. package/dist/index-Baxb1vI_.js.map +0 -1
  130. package/dist/index-Bg8DD8ku.js +0 -216
  131. package/dist/index-Bg8DD8ku.js.map +0 -1
  132. package/dist/index-BqTqxCpG.cjs +0 -89
  133. package/dist/index-BqTqxCpG.cjs.map +0 -1
  134. package/dist/index-Bv4Q1Pr7.cjs +0 -33
  135. package/dist/index-Bv4Q1Pr7.cjs.map +0 -1
  136. package/dist/index-CN8J45Nc.cjs +0 -24
  137. package/dist/index-CN8J45Nc.cjs.map +0 -1
  138. package/dist/index-CPbv2Od1.js +0 -62
  139. package/dist/index-CPbv2Od1.js.map +0 -1
  140. package/dist/index-Cf-MC6Al.js +0 -63
  141. package/dist/index-Cf-MC6Al.js.map +0 -1
  142. package/dist/index-DDPXXXDy.cjs +0 -19
  143. package/dist/index-DDPXXXDy.cjs.map +0 -1
  144. package/dist/index-DO30AzDe.cjs +0 -19
  145. package/dist/index-DO30AzDe.cjs.map +0 -1
  146. package/dist/index-DkvW5yBY.js +0 -2249
  147. package/dist/index-DkvW5yBY.js.map +0 -1
  148. package/dist/index-Dn1ehjIj.cjs +0 -80
  149. package/dist/index-Dn1ehjIj.cjs.map +0 -1
  150. package/dist/index-DqHvgoXJ.cjs +0 -19
  151. package/dist/index-DqHvgoXJ.cjs.map +0 -1
  152. package/dist/index-K39pdw94.cjs +0 -31
  153. package/dist/index-K39pdw94.cjs.map +0 -1
  154. package/dist/index-OT2XAJkc.js +0 -117
  155. package/dist/index-OT2XAJkc.js.map +0 -1
  156. package/dist/index-TPAX4XKg.cjs +0 -30
  157. package/dist/index-TPAX4XKg.cjs.map +0 -1
  158. package/dist/index-WmVSB57y.js +0 -107
  159. package/dist/index-WmVSB57y.js.map +0 -1
  160. package/dist/index-mYXvc3Fs.js +0 -68
  161. package/dist/index-mYXvc3Fs.js.map +0 -1
  162. package/dist/index-nioXOg4m.cjs +0 -76
  163. package/dist/index-nioXOg4m.cjs.map +0 -1
  164. package/dist/index-okhY3fWD.cjs +0 -2
  165. package/dist/index-okhY3fWD.cjs.map +0 -1
@@ -1,309 +0,0 @@
1
- # Ruby on Rails Framework Instructions
2
-
3
- ## Project Structure
4
- ```
5
- app/
6
- ├── models/ # Database models
7
- ├── controllers/ # Request handlers
8
- ├── views/ # Templates
9
- ├── jobs/ # Background jobs
10
- ├── mailers/ # Email templates
11
- └── channels/ # WebSocket channels
12
- config/
13
- ├── routes.rb # URL routing
14
- ├── database.yml # Database config
15
- └── application.rb # App config
16
- db/
17
- ├── migrate/ # Database migrations
18
- └── schema.rb # Current schema
19
- ```
20
-
21
- ## MVC Pattern
22
-
23
- ### Model
24
- ```ruby
25
- class User < ApplicationRecord
26
- has_many :posts
27
- validates :email, presence: true, uniqueness: true
28
- validates :name, presence: true
29
-
30
- scope :active, -> { where(active: true) }
31
-
32
- def full_name
33
- "#{first_name} #{last_name}"
34
- end
35
- end
36
- ```
37
-
38
- ### Controller
39
- ```ruby
40
- class UsersController < ApplicationController
41
- before_action :set_user, only: [:show, :update, :destroy]
42
- before_action :authenticate_user!
43
-
44
- def index
45
- @users = User.active.page(params[:page])
46
- render json: @users
47
- end
48
-
49
- def create
50
- @user = User.new(user_params)
51
-
52
- if @user.save
53
- render json: @user, status: :created
54
- else
55
- render json: @user.errors, status: :unprocessable_entity
56
- end
57
- end
58
-
59
- private
60
-
61
- def set_user
62
- @user = User.find(params[:id])
63
- end
64
-
65
- def user_params
66
- params.require(:user).permit(:name, :email)
67
- end
68
- end
69
- ```
70
-
71
- ### View (ERB)
72
- ```erb
73
- <h1>Users</h1>
74
-
75
- <% @users.each do |user| %>
76
- <div class="user">
77
- <h2><%= user.name %></h2>
78
- <p><%= user.email %></p>
79
- <%= link_to 'Show', user_path(user) %>
80
- </div>
81
- <% end %>
82
-
83
- <%= paginate @users %>
84
- ```
85
-
86
- ## Routing
87
-
88
- ```ruby
89
- # config/routes.rb
90
- Rails.application.routes.draw do
91
- root 'home#index'
92
-
93
- resources :users do
94
- resources :posts
95
- end
96
-
97
- namespace :api do
98
- namespace :v1 do
99
- resources :users, only: [:index, :show, :create]
100
- end
101
- end
102
-
103
- get '/health', to: 'health#index'
104
- end
105
- ```
106
-
107
- ## Database Migrations
108
-
109
- ```bash
110
- rails generate migration CreateUsers name:string email:string
111
- rails db:migrate
112
- rails db:rollback
113
- rails db:migrate:status
114
- ```
115
-
116
- ```ruby
117
- class CreateUsers < ActiveRecord::Migration[7.0]
118
- def change
119
- create_table :users do |t|
120
- t.string :name, null: false
121
- t.string :email, null: false
122
- t.boolean :active, default: true
123
-
124
- t.timestamps
125
- end
126
-
127
- add_index :users, :email, unique: true
128
- end
129
- end
130
- ```
131
-
132
- ## Active Record Queries
133
-
134
- ```ruby
135
- # Find
136
- User.find(1)
137
- User.find_by(email: 'user@example.com')
138
-
139
- # Where
140
- User.where(active: true)
141
- User.where('created_at > ?', 1.week.ago)
142
-
143
- # Joins
144
- User.joins(:posts).where(posts: { published: true })
145
-
146
- # Eager loading (avoid N+1)
147
- User.includes(:posts).all
148
-
149
- # Aggregations
150
- User.count
151
- User.average(:age)
152
- User.group(:country).count
153
- ```
154
-
155
- ## Background Jobs (Sidekiq)
156
-
157
- ```ruby
158
- class UserMailerJob < ApplicationJob
159
- queue_as :default
160
-
161
- def perform(user_id)
162
- user = User.find(user_id)
163
- UserMailer.welcome_email(user).deliver_now
164
- end
165
- end
166
-
167
- # Enqueue job
168
- UserMailerJob.perform_later(user.id)
169
- ```
170
-
171
- ## API Development
172
-
173
- ### JSON API
174
- ```ruby
175
- class Api::V1::UsersController < ApplicationController
176
- def index
177
- users = User.active
178
- render json: users, each_serializer: UserSerializer
179
- end
180
- end
181
-
182
- class UserSerializer < ActiveModel::Serializer
183
- attributes :id, :name, :email, :created_at
184
-
185
- has_many :posts
186
- end
187
- ```
188
-
189
- ### Jbuilder
190
- ```ruby
191
- # app/views/users/index.json.jbuilder
192
- json.array! @users do |user|
193
- json.id user.id
194
- json.name user.name
195
- json.email user.email
196
- json.posts user.posts, :id, :title
197
- end
198
- ```
199
-
200
- ## Testing with RSpec
201
-
202
- ```ruby
203
- # spec/requests/users_spec.rb
204
- require 'rails_helper'
205
-
206
- RSpec.describe 'Users API', type: :request do
207
- describe 'GET /api/v1/users' do
208
- it 'returns all active users' do
209
- create_list(:user, 3, active: true)
210
-
211
- get '/api/v1/users'
212
-
213
- expect(response).to have_http_status(:ok)
214
- expect(JSON.parse(response.body).size).to eq(3)
215
- end
216
- end
217
- end
218
-
219
- # spec/models/user_spec.rb
220
- require 'rails_helper'
221
-
222
- RSpec.describe User, type: :model do
223
- it { should validate_presence_of(:email) }
224
- it { should have_many(:posts) }
225
-
226
- describe '.active' do
227
- it 'returns only active users' do
228
- active_user = create(:user, active: true)
229
- create(:user, active: false)
230
-
231
- expect(User.active).to eq([active_user])
232
- end
233
- end
234
- end
235
- ```
236
-
237
- ## Configuration
238
-
239
- ### Database (config/database.yml)
240
- ```yaml
241
- production:
242
- adapter: postgresql
243
- url: <%= ENV['DATABASE_URL'] %>
244
- pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
245
- ```
246
-
247
- ### Credentials
248
- ```bash
249
- rails credentials:edit
250
- ```
251
-
252
- ```yaml
253
- # config/credentials.yml.enc
254
- secret_key_base: xxx
255
- aws:
256
- access_key_id: xxx
257
- secret_access_key: xxx
258
- ```
259
-
260
- ```ruby
261
- # Access in code
262
- Rails.application.credentials.aws[:access_key_id]
263
- ```
264
-
265
- ## Docker Production Setup
266
-
267
- ```dockerfile
268
- FROM ruby:3.2-alpine
269
- WORKDIR /app
270
-
271
- RUN apk add --no-cache postgresql-client tzdata
272
-
273
- COPY --from=builder /usr/local/bundle /usr/local/bundle
274
- COPY . .
275
-
276
- RUN adduser -D -u 1000 rails && chown -R rails /app
277
- USER rails
278
-
279
- ENV RAILS_ENV=production
280
- ENV RAILS_SERVE_STATIC_FILES=true
281
- ENV RAILS_LOG_TO_STDOUT=true
282
-
283
- EXPOSE 3000
284
-
285
- CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
286
- ```
287
-
288
- ## Performance Best Practices
289
-
290
- - Use database indexes strategically
291
- - Eager load associations with `includes`
292
- - Use `pluck` for simple data extraction
293
- - Cache expensive operations
294
- - Use fragment caching for views
295
- - Optimize database queries (N+1 detection)
296
- - Use background jobs for slow operations
297
- - Enable YJIT in Ruby 3.x
298
- - Use ActionCable for real-time features
299
-
300
- ## Security Best Practices
301
-
302
- - Use strong parameters
303
- - Enable CSRF protection (default)
304
- - Use `has_secure_password` for authentication
305
- - Set secure headers
306
- - Use SSL in production
307
- - Sanitize user input
308
- - Use parameterized queries (ActiveRecord default)
309
- - Keep dependencies updated
@@ -1,227 +0,0 @@
1
- # Sinatra Framework Instructions
2
-
3
- ## Minimal Web Framework
4
-
5
- Sinatra is a lightweight Ruby web framework for quick web applications and APIs.
6
-
7
- ## Basic Application
8
-
9
- ```ruby
10
- require 'sinatra'
11
- require 'json'
12
-
13
- # Simple route
14
- get '/' do
15
- 'Hello World!'
16
- end
17
-
18
- # Route with parameters
19
- get '/users/:id' do
20
- user = User.find(params[:id])
21
- user.to_json
22
- end
23
-
24
- # POST request
25
- post '/users' do
26
- request.body.rewind
27
- data = JSON.parse(request.body.read)
28
- user = User.create(data)
29
- status 201
30
- user.to_json
31
- end
32
- ```
33
-
34
- ## Modular Application
35
-
36
- ```ruby
37
- # app.rb
38
- require 'sinatra/base'
39
-
40
- class MyApp < Sinatra::Base
41
- configure do
42
- set :show_exceptions, false
43
- set :raise_errors, true
44
- end
45
-
46
- before do
47
- content_type :json
48
- end
49
-
50
- get '/api/users' do
51
- User.all.to_json
52
- end
53
-
54
- error 404 do
55
- { error: 'Not Found' }.to_json
56
- end
57
-
58
- run! if app_file == $0
59
- end
60
- ```
61
-
62
- ## Configuration
63
-
64
- ### config.ru
65
- ```ruby
66
- require './app'
67
-
68
- use Rack::Logger
69
- use Rack::Session::Cookie, secret: ENV['SESSION_SECRET']
70
-
71
- run MyApp
72
- ```
73
-
74
- ## Middleware
75
-
76
- ```ruby
77
- class MyApp < Sinatra::Base
78
- use Rack::Auth::Basic do |username, password|
79
- username == 'admin' && password == 'secret'
80
- end
81
-
82
- use Rack::Cors do
83
- allow do
84
- origins '*'
85
- resource '*', headers: :any, methods: [:get, :post]
86
- end
87
- end
88
- end
89
- ```
90
-
91
- ## Helpers
92
-
93
- ```ruby
94
- class MyApp < Sinatra::Base
95
- helpers do
96
- def authenticated?
97
- session[:user_id].present?
98
- end
99
-
100
- def current_user
101
- @current_user ||= User.find(session[:user_id]) if authenticated?
102
- end
103
-
104
- def require_authentication!
105
- halt 401, { error: 'Unauthorized' }.to_json unless authenticated?
106
- end
107
- end
108
-
109
- before '/api/*' do
110
- require_authentication!
111
- end
112
- end
113
- ```
114
-
115
- ## Templates (ERB)
116
-
117
- ```ruby
118
- get '/users/:id' do
119
- @user = User.find(params[:id])
120
- erb :user
121
- end
122
- ```
123
-
124
- ```erb
125
- <!-- views/user.erb -->
126
- <h1><%= @user.name %></h1>
127
- <p><%= @user.email %></p>
128
- ```
129
-
130
- ## Testing with RSpec
131
-
132
- ```ruby
133
- # spec/app_spec.rb
134
- require 'rack/test'
135
- require './app'
136
-
137
- RSpec.describe 'MyApp' do
138
- include Rack::Test::Methods
139
-
140
- def app
141
- MyApp
142
- end
143
-
144
- describe 'GET /api/users' do
145
- it 'returns all users' do
146
- create_list(:user, 3)
147
-
148
- get '/api/users'
149
-
150
- expect(last_response.status).to eq(200)
151
- expect(JSON.parse(last_response.body).size).to eq(3)
152
- end
153
- end
154
- end
155
- ```
156
-
157
- ## Docker Setup
158
-
159
- ```dockerfile
160
- FROM ruby:3.2-alpine
161
- WORKDIR /app
162
-
163
- RUN apk add --no-cache build-base
164
-
165
- COPY Gemfile Gemfile.lock ./
166
- RUN bundle install --without development test
167
-
168
- COPY . .
169
-
170
- RUN adduser -D -u 1000 sinatra && chown -R sinatra /app
171
- USER sinatra
172
-
173
- EXPOSE 4567
174
-
175
- CMD ["ruby", "app.rb", "-o", "0.0.0.0"]
176
- ```
177
-
178
- ## Running the Application
179
-
180
- ```bash
181
- # Development
182
- ruby app.rb
183
-
184
- # With Puma
185
- bundle exec puma config.ru
186
-
187
- # Production (Puma)
188
- bundle exec puma -C config/puma.rb
189
- ```
190
-
191
- ## Common Extensions
192
-
193
- ```ruby
194
- # Gemfile
195
- gem 'sinatra'
196
- gem 'sinatra-contrib' # Reloader, JSON helpers
197
- gem 'puma' # Web server
198
- gem 'activerecord' # Database ORM
199
- gem 'rack-cors' # CORS support
200
- gem 'rack-protection' # Security
201
- ```
202
-
203
- ## Best Practices
204
-
205
- - Use modular style for larger apps
206
- - Implement proper error handling
207
- - Use middleware for cross-cutting concerns
208
- - Keep routes organized
209
- - Use helpers for common logic
210
- - Implement authentication/authorization
211
- - Use environment variables for config
212
- - Add logging
213
- - Implement health checks
214
-
215
- ## When to Use Sinatra
216
-
217
- ✅ **Good for:**
218
- - Simple APIs
219
- - Microservices
220
- - Prototypes
221
- - Lightweight web services
222
-
223
- ❌ **Use Rails instead for:**
224
- - Large applications
225
- - Complex business logic
226
- - Need for convention over configuration
227
- - Built-in admin interfaces