yescode 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 179d3590c5376a70115b2e0287a90e786bd38efd7360a95dc7d3d5dd4a871ee6
4
- data.tar.gz: 78994d192bcd5459c6029b1e5bb716a205a6b022011707133713095f8502cfe9
3
+ metadata.gz: bba722061e9892e11115b24728699e0ce482589d2c487c4771238f4e3b843d6a
4
+ data.tar.gz: 44412a17dc90765b1957ca598cbbe72555b595b35eefb6994445c00b8d30bd0a
5
5
  SHA512:
6
- metadata.gz: de7bff8cb3e6d2f82a24c8daaaa78c96c7f0df0da54e18391c5852bd025ab9a1e1d04170a00a8a6e00beb48b2b7ec56af9fa00be077fce44c9a2b4de814c5523
7
- data.tar.gz: 83669e3e586ab2d131ddcd1739c90085873d5546d5e88b9fc305db9292052f6a2d789d0b932670be76b8e48a3cb8da3bee952e4b067604f2e3a7a0e489d8e23e
6
+ metadata.gz: a44dc51208d7e1332c67c595269e7d59ff816135fbbde13ec9fd2a0e863b323b22c0477660f79edce60fa9c7ac8660a0bdfbbbbc3640e2961c55bfb13adf61c5
7
+ data.tar.gz: de2ba9836e599de6b60a8aaee5d1e155a173f7ba3734e2661bf8357f47bf24c9d22bd36af3f6418a52fc36d277594c4efb14fe9a99713bc092837df4b9131018
data/.gitattributes ADDED
@@ -0,0 +1,2 @@
1
+ # emote is closest to erb
2
+ *.emote linguist-language=erb
data/exe/yescode CHANGED
@@ -1,16 +1,40 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # frozen_string_literal: true
4
+
3
5
  require "yescode"
4
6
 
7
+ HELP_MESSAGE = <<~TXT
8
+ Usage: yescode <command> [options]
9
+
10
+ Supported yescode commands:
11
+ generate Generate new code (aliases: g, gen)
12
+ migrate Migrates the database with up sql in ./db/migrations/*.sql
13
+ rollback Rolls the database back with down sql in ./db/migrations/*.sql
14
+
15
+ new Create a new Yescode application
16
+
17
+ Example:
18
+ yescode new my_app
19
+
20
+ This will create a new application in ./my_app
21
+ TXT
22
+
5
23
  command, *args = ARGV
6
24
 
7
25
  case command
8
26
  when "g", "gen", "generate"
9
27
  Yescode::Generator.generate(*args)
28
+ when "new"
29
+ Yescode::Generator.generate_app(args[0])
10
30
  when "migrate"
11
- Yescode::Database.migrate
31
+ Yescode::Database.migrate("db/migrations")
12
32
  when "rollback"
13
- Yescode::Database.rollback(*args)
33
+ Yescode::Database.rollback_schema("db/migrations", step: args[0])
34
+ when "-v", "--version"
35
+ puts Yescode::VERSION
36
+ when "-h", "--help"
37
+ puts HELP_MESSAGE
14
38
  else
15
- puts Yescode::Generator::INVALID_COMMAND_MESSAGE
39
+ puts HELP_MESSAGE
16
40
  end
data/lib/yes_mail.rb CHANGED
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Mail.defaults do
2
- delivery_method :logger, logger: Logger.new($stdout) if Yescode.env.development?
4
+ delivery_method :logger, logger: Logger.new($stdout) if Yescode.env.development? || Yescode.env.test?
3
5
  end
4
6
 
5
7
  class YesMail
6
- using Refinements
8
+ extend Yescode::Strings
7
9
  include Emote::Helpers
8
10
 
9
11
  class << self
@@ -44,29 +46,7 @@ class YesMail
44
46
  end
45
47
 
46
48
  def mail(from: nil, to: nil, subject: nil)
47
- mail = Mail.new
48
- mail[:from] = from || self.class._from
49
- mail[:to] = to
50
- mail[:subject] = subject
51
-
52
- default_name = self.class.to_s.snake_case
53
-
54
- text = part(self.class._text_view || "#{default_name}.text.emote")
55
- html = part(self.class._html_view || "#{default_name}.html.emote")
56
-
57
- text_part = Mail::Part.new do
58
- body text
59
- end
60
-
61
- html_part = Mail::Part.new do
62
- content_type "text/html; charset=UTF-8"
63
- body html
64
- end
65
-
66
- mail.text_part = text_part
67
- mail.html_part = html_part
68
-
69
- mail.deliver
49
+ new_mail(from:, to:, subject:).deliver
70
50
  end
71
51
 
72
52
  private
@@ -79,10 +59,39 @@ class YesMail
79
59
  content = template(name)
80
60
  layout = template(self.class._layout || "layout")
81
61
 
62
+ return unless File.exist?(layout) || File.exist?(content)
63
+
82
64
  if File.exist?(layout)
83
65
  emote(layout, { content: })
84
66
  else
85
67
  emote(content)
86
68
  end
87
69
  end
70
+
71
+ def new_mail(from:, to:, subject:)
72
+ mail = Mail.new
73
+ mail[:from] = from || self.class._from
74
+ mail[:to] = to
75
+ mail[:subject] = subject
76
+
77
+ filename = self.class.filename
78
+
79
+ text = part(self.class._text_view || "#{filename}.text.emote")
80
+ html = part(self.class._html_view || "#{filename}.html.emote")
81
+
82
+ if text
83
+ mail.text_part = Mail::Part.new do
84
+ body text
85
+ end
86
+ end
87
+
88
+ if html
89
+ mail.html_part = Mail::Part.new do
90
+ content_type "text/html; charset=UTF-8"
91
+ body html
92
+ end
93
+ end
94
+
95
+ mail
96
+ end
88
97
  end
data/lib/yes_record.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class YesRecord
4
- using Refinements
4
+ extend Yescode::Strings
5
5
 
6
6
  class QueryNotFound < StandardError; end
7
7
  class RecordNotFound < StandardError; end
@@ -12,7 +12,7 @@ class YesRecord
12
12
  attr_writer :table_name
13
13
 
14
14
  def table_name
15
- @table_name || to_s.snake_case
15
+ @table_name || filename
16
16
  end
17
17
 
18
18
  def table(name)
data/lib/yes_routes.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class YesRoutes
4
- using Refinements
5
4
  class RouteDoesNotExistError < StandardError; end
6
5
  class RouteParamsNilError < StandardError; end
7
6
 
@@ -37,17 +36,16 @@ class YesRoutes
37
36
  end
38
37
 
39
38
  def resource(path_string, class_name)
40
- snake_case = class_name.snake_case
41
39
  [
42
- [:get, "index", ""],
43
- [:get, "new", "/new"],
44
- [:post, "create", "/new"],
45
- [:get, "show", "/:#{snake_case}"],
46
- [:get, "edit", "/:#{snake_case}/edit"],
47
- [:post, "update", "/:#{snake_case}/edit"],
48
- [:post, "delete", "/:#{snake_case}/edit"]
40
+ ["GET", :index, ""],
41
+ ["GET", :new, "/new"],
42
+ ["POST", :create, "/new"],
43
+ ["GET", :show, "/:id"],
44
+ ["GET", :edit, "/:id/edit"],
45
+ ["POST", :update, "/:id/edit"],
46
+ ["POST", :delete, "/:id/delete"]
49
47
  ].each do |method, method_name, suffix|
50
- public_send(method, [path_string, suffix].join("/").gsub(%r{/+}, "/"), class_name, method_name)
48
+ match(method, full_path(path_string, suffix), class_name, method_name)
51
49
  end
52
50
  end
53
51
 
@@ -60,5 +58,9 @@ class YesRoutes
60
58
 
61
59
  path.gsub(re, params)
62
60
  end
61
+
62
+ def full_path(prefix, suffix)
63
+ "#{prefix}/#{suffix}".gsub(%r{/+}, "/").chomp("/")
64
+ end
63
65
  end
64
66
  end
data/lib/yes_view.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class YesView
4
- using Refinements
4
+ extend Yescode::Strings
5
5
  include Emote::Helpers
6
6
 
7
7
  class << self
@@ -25,7 +25,7 @@ class YesView
25
25
  end
26
26
 
27
27
  def template_name
28
- @template_name || "#{to_s.snake_case}.emote"
28
+ @template_name || "#{filename}.emote"
29
29
  end
30
30
  end
31
31
 
@@ -19,6 +19,8 @@ module Yescode
19
19
  end
20
20
 
21
21
  def migrate(filenames)
22
+ return unless connection_string
23
+
22
24
  execute "create table if not exists yescode_migrations ( version integer primary key )"
23
25
  rows = execute("select version from yescode_migrations").map { |r| r["version"] }
24
26
  file_versions = filenames.map { |f| version(f) }
@@ -38,6 +40,8 @@ module Yescode
38
40
  end
39
41
 
40
42
  def rollback_schema(filenames, step: 1)
43
+ return unless connection_string
44
+
41
45
  execute "create table if not exists yescode_migrations ( version integer primary key )"
42
46
  rows = execute("select version from yescode_migrations order by version desc limit #{step}").map { |r| r["version"] }
43
47
 
data/lib/yescode/emote.rb CHANGED
@@ -21,8 +21,6 @@
21
21
  require "cgi/escape"
22
22
 
23
23
  class Emote
24
- VERSION = "1.3.1".freeze
25
-
26
24
  PATTERN = /
27
25
  ^[^\S\n]*(%)[^\S\n]*(.*?)(?:\n|\Z) | # Ruby evaluated lines
28
26
  (<\?)\s+(.*?)\s+\?> | # Multiline Ruby blocks
@@ -5,10 +5,169 @@ require "securerandom"
5
5
 
6
6
  module Yescode
7
7
  class Generator
8
- INVALID_COMMAND_MESSAGE = "Command not supported. Try g, gen, generate, migrate or rollback."
8
+ extend Strings
9
+
9
10
  VIEW_DIR = File.join(".", "app", "views")
10
11
 
11
- using Refinements
12
+ APP_HELP_MESSAGE = <<~TXT
13
+ Usage: yescode new [name]
14
+
15
+ Create a new Yescode application
16
+
17
+ Example:
18
+ yescode new todos
19
+
20
+ This will generate a new Yescode application in ./todos
21
+ TXT
22
+
23
+ CONTROLLER_HELP_MESSAGE = <<~TXT
24
+ Usage: yescode generate controller [name]
25
+
26
+ Create a new controller with all available actions
27
+
28
+ Example:
29
+ yescode generate controller todos
30
+
31
+ This will generate a controller named Todos in ./app/controllers/todos.rb
32
+ TXT
33
+
34
+ MIGRATION_HELP_MESSAGE = <<~TXT
35
+ Usage: yescode generate migration [name]
36
+
37
+ Create a new migration with -- up and -- down placeholders in ./db/migrations/[timestamp]_[migration name].sql
38
+
39
+ Example:
40
+ yescode generate migration create_table_todo
41
+
42
+ This will generate a common create table sql statement below -- up and a drop table below -- down
43
+
44
+
45
+ Example:
46
+ yescode generate migration add_created_at_to_todo
47
+
48
+ This will generate an empty sql file with -- up and -- down placeholders
49
+ TXT
50
+
51
+ MODEL_HELP_MESSAGE = <<~TXT
52
+ Usage: yescode generate model [name]
53
+
54
+ Create a new model
55
+
56
+ Example:
57
+ yescode generate model todo
58
+
59
+ This will generate a model named Todo in ./app/models/todo.rb
60
+ TXT
61
+
62
+ MVC_HELP_MESSAGE = <<~TXT
63
+ Usage: yescode generate mvc [name]
64
+
65
+ Create a new model, common views and controller all at once
66
+
67
+ Example:
68
+ yescode generate mvc todo
69
+
70
+ This will generate a model, common sql queries, views and controller:
71
+
72
+ - ./app/models/todo.rb
73
+ - ./app/models/todo.sql
74
+ - ./app/controllers/todos.rb
75
+ - ./app/views/todos_edit.rb
76
+ - ./app/views/todos_edit.emote
77
+ - ./app/views/todos_index.rb
78
+ - ./app/views/todos_index.emote
79
+ - ./app/views/todos_new.rb
80
+ - ./app/views/todos_new.emote
81
+ - ./app/views/todos_show.rb
82
+ - ./app/views/todos_show.emote
83
+ TXT
84
+
85
+ QUERIES_HELP_MESSAGE = <<~TXT
86
+ Usage: yescode generate queries [name]
87
+
88
+ Create common sql queries for a given table
89
+
90
+ Example:
91
+ yescode generate queries todo
92
+
93
+ This will generate common sql queries in ./app/models/todo.sql
94
+ TXT
95
+
96
+ TEMPLATE_HELP_MESSAGE = <<~TXT
97
+ Usage: yescode generate template [name]
98
+
99
+ Create a template file
100
+
101
+ Example:
102
+ yescode generate template todos_index
103
+
104
+ This will generate ./app/views/todos_index.emote
105
+ TXT
106
+
107
+ TEMPLATES_HELP_MESSAGE = <<~TXT
108
+ Usage: yescode generate templates [name]
109
+
110
+ Create common templates for a given controller
111
+
112
+ Example:
113
+ yescode generate templates todos
114
+
115
+ This will generate the following templates
116
+ - ./app/views/todos_edit.emote
117
+ - ./app/views/todos_index.emote
118
+ - ./app/views/todos_new.emote
119
+ - ./app/views/todos_show.emote
120
+ - ./app/views/todos_form.emote
121
+ TXT
122
+
123
+ VIEW_HELP_MESSAGE = <<~TXT
124
+ Usage: yescode generate view [name]
125
+
126
+ Create the view and template
127
+
128
+ Example:
129
+ yescode generate view todos_index
130
+
131
+ This will generate the following view and template:
132
+ - ./app/views/todos_index.rb
133
+ - ./app/views/todos_index.emote
134
+ TXT
135
+
136
+ VIEWS_HELP_MESSAGE = <<~TXT
137
+ Usage: yescode generate views [name]
138
+
139
+ Create common views and templates for a given controller
140
+
141
+ Example:
142
+ yescode generate views todos
143
+
144
+ This will generate the following views and templates
145
+ - ./app/views/todos_edit.rb
146
+ - ./app/views/todos_edit.emote
147
+ - ./app/views/todos_index.rb
148
+ - ./app/views/todos_index.emote
149
+ - ./app/views/todos_new.rb
150
+ - ./app/views/todos_new.emote
151
+ - ./app/views/todos_show.rb
152
+ - ./app/views/todos_show.emote
153
+ - ./app/views/todos_form.rb
154
+ - ./app/views/todos_form.emote
155
+ TXT
156
+
157
+ HELP_MESSAGE = <<~TXT
158
+ Usage: yescode generate GENERATOR [options]
159
+
160
+ Supported yescode generators:
161
+ controller Create a new controller with all available actions
162
+ migration Create a new migration
163
+ model Create a new model
164
+ mvc Create a new model, views and controller all at once
165
+ queries Create common sql queries for a given table
166
+ template Create just a template file
167
+ templates Create just the templates for a given controller
168
+ view Create the view and template
169
+ views Create common views and templates for a given controller
170
+ TXT
12
171
 
13
172
  class << self
14
173
  def generate(*gen_args)
@@ -27,6 +186,8 @@ module Yescode
27
186
  generate_views(*args)
28
187
  when "template"
29
188
  generate_template(*args)
189
+ when "templates"
190
+ generate_templates(*args)
30
191
  when "migration"
31
192
  generate_migration(*args)
32
193
  when "mvc"
@@ -34,11 +195,16 @@ module Yescode
34
195
  when "app"
35
196
  generate_app(*args)
36
197
  else
37
- puts INVALID_COMMAND_MESSAGE
198
+ puts HELP_MESSAGE
38
199
  end
39
200
  end
40
201
 
41
- def generate_app(dir)
202
+ def generate_app(dir = nil)
203
+ if dir.nil?
204
+ puts APP_HELP_MESSAGE
205
+ return
206
+ end
207
+
42
208
  FileUtils.mkdir_p(File.join(".", dir))
43
209
  {
44
210
  "public" => %w[css js],
@@ -281,13 +447,23 @@ module Yescode
281
447
  # app.rb
282
448
  end
283
449
 
284
- def generate_mvc(filename)
450
+ def generate_mvc(filename = nil)
451
+ if filename.nil?
452
+ puts MVC_HELP_MESSAGE
453
+ return
454
+ end
455
+
285
456
  generate_model(filename)
286
457
  generate_controller(filename)
287
458
  generate_views(filename)
288
459
  end
289
460
 
290
- def generate_queries(filename)
461
+ def generate_queries(filename = nil)
462
+ if filename.nil?
463
+ puts QUERIES_HELP_MESSAGE
464
+ return
465
+ end
466
+
291
467
  filepath = File.join(".", "app", "models", "#{filename}.sql")
292
468
  contents = <<~SQL
293
469
  -- name: all
@@ -324,9 +500,14 @@ module Yescode
324
500
  File.write(filepath, contents)
325
501
  end
326
502
 
327
- def generate_model(filename)
503
+ def generate_model(filename = nil)
504
+ if filename.nil?
505
+ puts MODEL_HELP_MESSAGE
506
+ return
507
+ end
508
+
328
509
  filepath = File.join(".", "app", "models", "#{filename}.rb")
329
- class_name = filename.pascal_case
510
+ class_name = pascal_case(filename)
330
511
  contents = <<~RB
331
512
  class #{class_name} < AppRecord
332
513
  queries "#{filename}.sql"
@@ -338,8 +519,13 @@ module Yescode
338
519
  generate_queries(filename)
339
520
  end
340
521
 
341
- def generate_controller(filename)
342
- class_name = filename.pascal_case
522
+ def generate_controller(filename = nil)
523
+ if filename.nil?
524
+ puts CONTROLLER_HELP_MESSAGE
525
+ return
526
+ end
527
+
528
+ class_name = pascal_case(filename)
343
529
  var_name = filename
344
530
  route = <<~RB
345
531
  class #{class_name} < AppController
@@ -412,8 +598,13 @@ module Yescode
412
598
  File.write routes_filename, routes_file
413
599
  end
414
600
 
415
- def generate_view(filename, accessors = [])
416
- class_name = filename.pascal_case
601
+ def generate_view(filename = nil, accessors = [])
602
+ if filename.nil?
603
+ puts VIEW_HELP_MESSAGE
604
+ return
605
+ end
606
+
607
+ class_name = pascal_case(filename)
417
608
  filepath = File.join(VIEW_DIR, "#{filename}.rb")
418
609
 
419
610
  return if File.exist?(filepath)
@@ -434,12 +625,22 @@ module Yescode
434
625
  end
435
626
 
436
627
  def generate_views(prefix)
628
+ if prefix.nil?
629
+ puts VIEWS_HELP_MESSAGE
630
+ return
631
+ end
632
+
437
633
  %w[new show edit index].each do |suffix|
438
634
  generate_view("#{prefix}_#{suffix}", [])
439
635
  end
440
636
  end
441
637
 
442
- def generate_template(filename)
638
+ def generate_template(filename = nil)
639
+ if filename.nil?
640
+ puts TEMPLATE_HELP_MESSAGE
641
+ return
642
+ end
643
+
443
644
  filename = File.join(VIEW_DIR, "#{filename}.emote")
444
645
 
445
646
  return if File.exist?(filename)
@@ -447,13 +648,22 @@ module Yescode
447
648
  File.write(filename, "<div></div>")
448
649
  end
449
650
 
450
- def generate_templates(prefix)
651
+ def generate_templates(prefix = nil)
652
+ if prefix.nil?
653
+ puts TEMPLATES_HELP_MESSAGE
654
+ return
655
+ end
656
+
451
657
  %w[index new edit show form].each do |page|
452
658
  generate_template("#{prefix}_#{page}")
453
659
  end
454
660
  end
455
661
 
456
- def generate_migration(filename, columns = [])
662
+ def generate_migration(filename = nil, columns = [])
663
+ if filename.nil?
664
+ puts MIGRATION_HELP_MESSAGE
665
+ return
666
+ end
457
667
  table_name = filename.split('_').last
458
668
  column_string = columns.map do |c|
459
669
  name, type = c.split(':')
@@ -1,3 +1,26 @@
1
+ # Copyright (c) 2012 Steve Klabnik
2
+ #
3
+ # MIT License
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining
6
+ # a copy of this software and associated documentation files (the
7
+ # "Software"), to deal in the Software without restriction, including
8
+ # without limitation the rights to use, copy, modify, merge, publish,
9
+ # distribute, sublicense, and/or sell copies of the Software, and to
10
+ # permit persons to whom the Software is furnished to do so, subject to
11
+ # the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be
14
+ # included in all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
1
24
  module Yescode
2
25
  module RequestCache
3
26
  class Middleware
@@ -1,3 +1,23 @@
1
+ # Copyright (c) 2012 Steve Klabnik
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the "Software"), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in
11
+ # all copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ # THE SOFTWARE.
20
+
1
21
  module Yescode
2
22
  module RequestCache
3
23
  def self.store
@@ -8,8 +8,6 @@ module Yescode
8
8
  class ServerError < StandardError; end
9
9
 
10
10
  class Router
11
- using Refinements
12
-
13
11
  class << self
14
12
  attr_accessor :logger
15
13
  end
@@ -1,23 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yescode
4
- class Strings
4
+ module Strings
5
5
  SNAKE_CASE_REGEX = /\B([A-Z])/
6
6
 
7
- class << self
8
- def snake_case(str)
9
- str.gsub(SNAKE_CASE_REGEX, '_\1').downcase
10
- end
7
+ def snake_case(str)
8
+ str.gsub(SNAKE_CASE_REGEX, '_\1').downcase
9
+ end
10
+
11
+ def camel_case(str)
12
+ result = pascal_case(str)
13
+ result[0] = result[0].downcase
14
+
15
+ result
16
+ end
11
17
 
12
- def camel_case(str)
13
- return str if !str.include?('_') && str =~ /[A-Z]+.*/
18
+ def pascal_case(str)
19
+ str.split("_").map(&:capitalize).join
20
+ end
14
21
 
15
- str.split('_').map(&:capitalize).join
16
- end
22
+ def class_name
23
+ to_s.split("::").last
24
+ end
17
25
 
18
- def pascal_case(str)
19
- camel_case(str).capitalize
20
- end
26
+ def filename
27
+ snake_case(class_name)
21
28
  end
22
29
  end
23
30
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yescode
4
+ VERSION = "1.1.0"
5
+ end
data/lib/yescode.rb CHANGED
@@ -9,29 +9,29 @@ require "rack/csrf"
9
9
  require "stringio"
10
10
  require "sqlite3"
11
11
 
12
- require "yescode/request_cache"
13
- require "yescode/request_cache/middleware"
14
- require "yescode/refinements"
15
- require "yescode/emote"
16
- require "yescode/strings"
17
- require "yescode/env"
18
- require "yescode/logfmt_formatter"
19
- require "yescode/router"
20
- require "yescode/database"
21
- require "yescode/queries"
22
- require "yescode/assets"
23
- require "yescode/asset_compiler"
24
- require "yescode/generator"
12
+ require_relative "./yescode/request_cache"
13
+ require_relative "./yescode/request_cache/middleware"
14
+ require_relative "./yescode/emote"
15
+ require_relative "./yescode/strings"
16
+ require_relative "./yescode/env"
17
+ require_relative "./yescode/logfmt_formatter"
18
+ require_relative "./yescode/router"
19
+ require_relative "./yescode/database"
20
+ require_relative "./yescode/queries"
21
+ require_relative "./yescode/assets"
22
+ require_relative "./yescode/asset_compiler"
23
+ require_relative "./yescode/generator"
24
+ require_relative "./yescode/version"
25
25
 
26
- require "yes_static"
27
- require "yes_logger"
28
- require "yes_rack_logger"
29
- require "yes_routes"
30
- require "yes_controller"
31
- require "yes_view"
32
- require "yes_record"
33
- require "yes_mail"
34
- require "yes_app"
26
+ require_relative "./yes_static"
27
+ require_relative "./yes_logger"
28
+ require_relative "./yes_rack_logger"
29
+ require_relative "./yes_routes"
30
+ require_relative "./yes_controller"
31
+ require_relative "./yes_view"
32
+ require_relative "./yes_record"
33
+ require_relative "./yes_mail"
34
+ require_relative "./yes_app"
35
35
 
36
36
  def require_all(paths)
37
37
  paths.each do |path|
data/yescode.gemspec CHANGED
@@ -1,9 +1,9 @@
1
- # frozen_string_literal: true
1
+ require_relative "./lib/yescode/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.platform = Gem::Platform::RUBY
5
5
  spec.name = "yescode"
6
- spec.version = "1.0.0"
6
+ spec.version = Yescode::VERSION
7
7
  spec.author = "Sean Walker"
8
8
  spec.email = "sean@swlkr.com"
9
9
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yescode
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Walker
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-11 00:00:00.000000000 Z
11
+ date: 2022-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -101,6 +101,7 @@ executables:
101
101
  extensions: []
102
102
  extra_rdoc_files: []
103
103
  files:
104
+ - ".gitattributes"
104
105
  - CHANGELOG.md
105
106
  - Dockerfile
106
107
  - Gemfile
@@ -126,11 +127,11 @@ files:
126
127
  - lib/yescode/generator.rb
127
128
  - lib/yescode/logfmt_formatter.rb
128
129
  - lib/yescode/queries.rb
129
- - lib/yescode/refinements.rb
130
130
  - lib/yescode/request_cache.rb
131
131
  - lib/yescode/request_cache/middleware.rb
132
132
  - lib/yescode/router.rb
133
133
  - lib/yescode/strings.rb
134
+ - lib/yescode/version.rb
134
135
  - yescode.gemspec
135
136
  homepage: https://github.com/swlkr/yescode
136
137
  licenses:
@@ -1,19 +0,0 @@
1
- module Refinements
2
- SNAKE_CASE_REGEX = /\B([A-Z])/
3
-
4
- refine String do
5
- def snake_case
6
- gsub(SNAKE_CASE_REGEX, '_\1').downcase
7
- end
8
-
9
- def camel_case
10
- first, *rest = split("_")
11
-
12
- "#{first}#{rest.map(&:capitalize).join}"
13
- end
14
-
15
- def pascal_case
16
- split("_").map(&:capitalize).join
17
- end
18
- end
19
- end