jun 0.3.0 → 0.3.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70a404db6997b3aa8f1a682cfaac1d401e5a78aa2c6344645aed5819f9a7c617
4
- data.tar.gz: 6ef4729b48e1f780a2004515c00a2ee6efbea77cade3522d942d05f602b509b8
3
+ metadata.gz: 6b6cc6a15d5af338fd4de1afc935b39f43dd28967b636fc5bb652d014232d139
4
+ data.tar.gz: 0755de2dc72eb2c0879fcb42af4230073c5b0e15c31e393bf7f4db3238f1dc1e
5
5
  SHA512:
6
- metadata.gz: fa512bde19df4fb617e5d49f6336433cff2ed31ba3dcfba942ed4473b8136a943ff92afcf0fb0a9dcf3f9ebc795f796393e0340a23bbfec183f7987cab90b841
7
- data.tar.gz: 5bf62a8d2e2cfaedfce5435b44bc54388f2792b48459b028436c4baf40c8971a9bb6a53c3e63eda0126087142da5742cee470cb69890c50c2d23af228f883cad
6
+ metadata.gz: 79d60c6c07d2f0680c454c620b6c4d32938cc14de180fedef634fb47b3ff56b53a490eeefbabc67371af9e1116ffa19362d554828373da19775ff9b3a8660777
7
+ data.tar.gz: 034d8cebfd5e1e371564c33017dfdcaed4cefdd71a920d8e0a38a06a15d0fbe22ec924a5dfe44ecc3bc0923e169df0f8a488b732cb85ce07f71a20b8a8cd842a
@@ -6,9 +6,14 @@
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
7
 
8
8
  <style>
9
+ :root {
10
+ --background-color: #fff3f3;
11
+ --primary-color: #fc7e70;
12
+ }
13
+
9
14
  body {
10
15
  font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
11
- background-color: #fff3f3;
16
+ background-color: var(--background-color);
12
17
  color: #7d3737;
13
18
  }
14
19
 
@@ -21,12 +26,42 @@
21
26
  text-align: center;
22
27
  }
23
28
 
29
+ .button {
30
+ background-color: var(--primary-color);
31
+ color: #fff;
32
+ margin: 0 0.2rem;
33
+ padding: 0.5rem 0.75rem;
34
+ border-radius: 3px;
35
+ text-decoration: none;
36
+ user-select: none;
37
+ }
38
+
39
+ .button:hover {
40
+ background-color: #ef7769;
41
+ }
42
+
43
+ .docs-links {
44
+ margin: 1.5rem 0;
45
+ }
46
+
24
47
  .sunspot {
25
48
  width: 100px;
26
49
  height: 100px;
27
50
  border-radius: 50%;
28
- background-color: #fc7e70;
51
+ background-color: var(--primary-color);
29
52
  margin: 2rem auto;
53
+ position: relative;
54
+ }
55
+
56
+ .sunspot::before {
57
+ content: "";
58
+ width: 50px;
59
+ height: 50px;
60
+ position: absolute;
61
+ background-color: var(--background-color);
62
+ border-radius: 50%;
63
+ top: 25px;
64
+ left: 25px;
30
65
  }
31
66
  </style>
32
67
  </head>
@@ -35,6 +70,11 @@
35
70
  <div class="root">
36
71
  <div class="sunspot"></div>
37
72
  <h1>Welcome to Jun!</h1>
73
+ <p>Get started by checking out the guide or reading up on the docs.</p>
74
+ <div class="docs-links">
75
+ <a class="button" href="https://www.rubydoc.info/gems/jun/<%= Jun::VERSION %>#getting-started">Getting Started</a>
76
+ <a class="button" href="https://www.rubydoc.info/gems/jun/<%= Jun::VERSION %>">Documentation</a>
77
+ </div>
38
78
  <small>Jun v<%= Jun::VERSION %> | Ruby v<%= RUBY_VERSION %> (<%= RUBY_PLATFORM %>)</small>
39
79
  </div>
40
80
  </body>
@@ -1,26 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Array
4
+ # Returns the second element in the array.
4
5
  def second
5
6
  self[1]
6
7
  end
7
8
 
9
+ # Returns the third element in the array.
8
10
  def third
9
11
  self[2]
10
12
  end
11
13
 
14
+ # Returns the fourth element in the array.
12
15
  def fourth
13
16
  self[3]
14
17
  end
15
18
 
19
+ # Returns the fifth element in the array.
16
20
  def fifth
17
21
  self[4]
18
22
  end
19
23
 
24
+ # Returns the third-to-last element in the array.
20
25
  def third_to_last
21
26
  self[-3]
22
27
  end
23
28
 
29
+ # Returns the second-to-last element in the array.
24
30
  def second_to_last
25
31
  self[-2]
26
32
  end
@@ -1,6 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Array
4
+ # Converts the array to a comma-separated sentence.
5
+ #
6
+ # ["one", "two", "three"].to_sentence #=> "one, two and three"
7
+ # ["left", "right"].to_sentence(last_delimiter: "or") #=> "left or right"
8
+ # [].to_sentence #=> ""
9
+ #
10
+ # @param delimiter [String] the delimiter value for connecting array elements.
11
+ # @param last_delimiter [String] the connecting word for the last array element.
4
12
  def to_sentence(delimiter: ", ", last_delimiter: "and")
5
13
  return "" if none?
6
14
  return self.first if one?
@@ -1,18 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Hash
4
+ # Returns a new hash with all keys converted to strings.
5
+ #
6
+ # { name: "Tom", age: 50 }.stringify_keys #=> {"name"=>"Tom", "age"=>50}
4
7
  def stringify_keys
5
8
  transform_keys(&:to_s)
6
9
  end
7
10
 
11
+ # Modifies the hash in place to convert all keys to strings.
12
+ # Same as +stringify_keys+ but modifies +self+.
8
13
  def stringify_keys!
9
14
  transform_keys!(&:to_s)
10
15
  end
11
16
 
17
+ # Returns a new hash with all keys converted to symbols.
18
+ #
19
+ # { "name" => "Tom", "age" => 50 }.symbolize_keys #=> {:name=>"Tom", :age=>50 }
12
20
  def symbolize_keys
13
21
  transform_keys { |key| key.to_sym rescue key }
14
22
  end
15
23
 
24
+ # Modifies the hash in place to convert all keys to symbols.
25
+ # Same as +symbolize_keys+ but modifies +self+.
16
26
  def symbolize_keys!
17
27
  transform_keys! { |key| key.to_sym rescue key }
18
28
  end
@@ -1,14 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class String
4
+ # Returns a character at the given integer of the string. The first character
5
+ # would be returned for index 0, the second at index 1, and onward. If a range
6
+ # is given, a substring conaining the characters within the range of the given
7
+ # indicies is returned. If a Regex is provided, the matching substring is returned.
8
+ #
9
+ # string = "smoki"
10
+ # string.at(0) # => "s"
11
+ # string.at(1..3) # => "mok"
12
+ # string.at(-2) # => "k"
13
+ # string.at(/oki/) # => "oki"
4
14
  def at(position)
5
15
  self[position]
6
16
  end
7
17
 
18
+ # Returns a substring from the given position (index) to the end of the string.
19
+ # If the position is negative, the starting point is counted from the end of the string.
20
+ #
21
+ # string = "smoki"
22
+ # string.from(0) # => "smoki"
23
+ # string.from(3) # => "ki"
24
+ # string.from(-2) # => "ki"
8
25
  def from(position)
9
26
  self[position, length]
10
27
  end
11
28
 
29
+ # Returns a substring from the beginning of the string to the given position (index).
30
+ # If the position is negative, the ending point is counted from the end of the string.
31
+ #
32
+ # string = "smoki"
33
+ # string.to(0) # => "s"
34
+ # string.to(3) # => "smok"
35
+ # string.to(-2) # => "smok"
12
36
  def to(position)
13
37
  position += size if position.negative?
14
38
  position = -1 if position.negative?
@@ -68,6 +68,11 @@ module Inflector
68
68
  'equipment'
69
69
  ]
70
70
 
71
+ # Returns the plural form of the string.
72
+ #
73
+ # "task".pluralize #=> "tasks"
74
+ # "octopus".pluralize #=> "octopi"
75
+ # "fish".singularize #=> "fish"
71
76
  def pluralize
72
77
  return self if UNCHANGEABLE.include? self
73
78
 
@@ -82,6 +87,11 @@ module Inflector
82
87
  self.sub(pattern, replacement)
83
88
  end
84
89
 
90
+ # Returns the singular form of the string.
91
+ #
92
+ # "tasks".singularize #=> "task"
93
+ # "octopi".singularize #=> "octopus"
94
+ # "fish".singularize #=> "fish"
85
95
  def singularize
86
96
  return self if UNCHANGEABLE.include? self
87
97
 
@@ -96,6 +106,10 @@ module Inflector
96
106
  self.sub(pattern, replacement)
97
107
  end
98
108
 
109
+ # Converts a string to under_score format.
110
+ #
111
+ # "HelloThere".underscore #=> "hello_there"
112
+ # "Foo::BarBaz".underscore #=> "foo/bar_baz"
99
113
  def underscore
100
114
  gsub(/::/, '/').
101
115
  gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
@@ -104,6 +118,10 @@ module Inflector
104
118
  downcase
105
119
  end
106
120
 
121
+ # Converts a string to CamelCase format.
122
+ #
123
+ # "hello_there".camelize #=> "HelloThere"
124
+ # "foo/bar_baz".camelize #=> "Foo::BarBaz"
107
125
  def camelize
108
126
  sub(/^[a-z\d]*/) { |match| match.capitalize }.
109
127
  gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.
@@ -8,6 +8,8 @@ module Jun
8
8
  attr_accessor :autoload_paths
9
9
  self.autoload_paths = []
10
10
 
11
+ # Returns the filepath for a given filename if the file exists
12
+ # in one of the directories specified in +autoload_paths+.
11
13
  def find_file(filename)
12
14
  autoload_paths.each do |path|
13
15
  filepath = File.join(path, "#{filename}.rb")
@@ -15,6 +15,8 @@ module Jun
15
15
  @routes ||= Jun::ActionDispatch::Routing::RouteSet.new
16
16
  end
17
17
 
18
+ # Initializes the Jun application.
19
+ # @return [Boolean] +true+ if successful, +false+ if already initialized.
18
20
  def initialize!
19
21
  return false if initialized? || Jun.application.nil?
20
22
 
@@ -38,6 +40,8 @@ module Jun
38
40
  @initialized = true
39
41
  end
40
42
 
43
+ # Checks whether the Jun application has been initialized.
44
+ # @return [Boolean] +true+ if initialized, +false+ if not initialized.
41
45
  def initialized?
42
46
  !!@initialized
43
47
  end
data/lib/jun/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jun
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zoran
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-31 00:00:00.000000000 Z
11
+ date: 2023-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -110,21 +110,14 @@ dependencies:
110
110
  version: '0.14'
111
111
  description: A simple web framework inspired by Rails. Not meant for production use.
112
112
  email:
113
- - zspesic@gmail.com
114
113
  executables:
115
114
  - jun
116
115
  extensions: []
117
116
  extra_rdoc_files: []
118
117
  files:
119
- - ".rubocop.yml"
120
- - Gemfile
121
118
  - LICENSE.txt
122
119
  - README.md
123
- - Rakefile
124
- - bin/console
125
- - bin/setup
126
120
  - exe/jun
127
- - jun.gemspec
128
121
  - lib/jun.rb
129
122
  - lib/jun/action_controller/base.rb
130
123
  - lib/jun/action_controller/callbacks.rb
@@ -197,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
190
  - !ruby/object:Gem::Version
198
191
  version: '0'
199
192
  requirements: []
200
- rubygems_version: 3.2.32
193
+ rubygems_version: 3.4.3
201
194
  signing_key:
202
195
  specification_version: 4
203
196
  summary: A simple Ruby web framework.
data/.rubocop.yml DELETED
@@ -1,13 +0,0 @@
1
- AllCops:
2
- TargetRubyVersion: 2.6
3
-
4
- Style/StringLiterals:
5
- Enabled: true
6
- EnforcedStyle: double_quotes
7
-
8
- Style/StringLiteralsInInterpolation:
9
- Enabled: true
10
- EnforcedStyle: double_quotes
11
-
12
- Layout/LineLength:
13
- Max: 120
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source "https://rubygems.org"
4
-
5
- gemspec
data/Rakefile DELETED
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rake/testtask"
5
-
6
- Rake::TestTask.new(:test) do |t|
7
- t.libs << "test"
8
- t.libs << "lib"
9
- t.test_files = FileList["test/**/*_test.rb"]
10
- end
11
-
12
- require "rubocop/rake_task"
13
-
14
- RuboCop::RakeTask.new
15
-
16
- task default: %i[test rubocop]
data/bin/console DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require "bundler/setup"
5
- require "pry"
6
- require "jun"
7
-
8
- Pry.start
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/jun.gemspec DELETED
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "lib/jun/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "jun"
7
- spec.version = Jun::VERSION
8
- spec.authors = ["Zoran"]
9
- spec.email = ["zspesic@gmail.com"]
10
-
11
- spec.summary = "A simple Ruby web framework."
12
- spec.description = "A simple web framework inspired by Rails. Not meant for production use."
13
- spec.homepage = "https://github.com/zokioki/jun"
14
- spec.license = "MIT"
15
- spec.required_ruby_version = ">= 2.6.0"
16
-
17
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
- `git ls-files -z`.split("\x0").reject do |f|
19
- (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
20
- end
21
- end
22
-
23
- spec.bindir = "exe"
24
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
25
- spec.require_paths = ["lib"]
26
-
27
- spec.add_runtime_dependency "rack", "~> 2.2"
28
- spec.add_runtime_dependency "tilt", "~> 2.0"
29
- spec.add_runtime_dependency "sqlite3", "~> 1.4"
30
-
31
- spec.add_development_dependency "rake", "~> 13.0"
32
- spec.add_development_dependency "minitest", "~> 5.0"
33
- spec.add_development_dependency "rubocop", "~> 1.21"
34
- spec.add_development_dependency "pry", "~> 0.14"
35
- end