vundabar 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +237 -0
- data/.travis.yml +6 -0
- data/Gemfile +5 -0
- data/README.md +36 -0
- data/Rakefile +6 -0
- data/bin/setup +8 -0
- data/bin/vundabar +13 -0
- data/circle.yml +8 -0
- data/generators/generators.rb +72 -0
- data/generators/templates/Gemfile +4 -0
- data/generators/templates/application.html.erb +10 -0
- data/generators/templates/application.rb +6 -0
- data/generators/templates/config.ru +6 -0
- data/generators/templates/invalid_route.html.erb +38 -0
- data/generators/templates/routes.rb +14 -0
- data/lib/vundabar/controller.rb +69 -0
- data/lib/vundabar/dependencies.rb +6 -0
- data/lib/vundabar/orm/associations.rb +24 -0
- data/lib/vundabar/orm/base_model.rb +121 -0
- data/lib/vundabar/orm/database.rb +12 -0
- data/lib/vundabar/orm/model_helper.rb +85 -0
- data/lib/vundabar/orm/validations.rb +5 -0
- data/lib/vundabar/routing/mapper.rb +30 -0
- data/lib/vundabar/routing/route.rb +18 -0
- data/lib/vundabar/routing/routing.rb +56 -0
- data/lib/vundabar/utilities.rb +19 -0
- data/lib/vundabar/version.rb +3 -0
- data/lib/vundabar.rb +45 -0
- data/vundabar.gemspec +44 -0
- metadata +286 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a40d667bbf9462b66e3a9db53f164f05014bac50
|
4
|
+
data.tar.gz: a6a1a243025c5428612d45400475520172cbba5b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 460a0417ca149659dae914e826061e9a163b3a69637feabccbbbad2b36075501662c90105e826c09cfb92e141ec635d3adf4d041a9996ca1baa1280a01e3939e
|
7
|
+
data.tar.gz: 12374f2a117928e638559c34a223d7c1a3683162e8be02c1306fe3a2bc78f7446b798c1e9b5a9437bf86c2a2dc92efff1e0e2ffc7a53770897739b06ba6115c2
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,237 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- "vendor/**/*"
|
4
|
+
- "db/schema.rb"
|
5
|
+
- "Gemfile"
|
6
|
+
- "config/**/*"
|
7
|
+
- "spec/rails_helper.rb"
|
8
|
+
- "spec/spec_helper.rb"
|
9
|
+
UseCache: false
|
10
|
+
Style/CollectionMethods:
|
11
|
+
Description: Preferred collection methods.
|
12
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#map-find-select-reduce-size
|
13
|
+
Enabled: true
|
14
|
+
PreferredMethods:
|
15
|
+
collect: map
|
16
|
+
collect!: map!
|
17
|
+
find: detect
|
18
|
+
find_all: select
|
19
|
+
reduce: inject
|
20
|
+
Style/DotPosition:
|
21
|
+
Description: Checks the position of the dot in multi-line method calls.
|
22
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-multi-line-chains
|
23
|
+
Enabled: true
|
24
|
+
EnforcedStyle: trailing
|
25
|
+
SupportedStyles:
|
26
|
+
- leading
|
27
|
+
- trailing
|
28
|
+
Style/FileName:
|
29
|
+
Description: Use snake_case for source file names.
|
30
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#snake-case-files
|
31
|
+
Enabled: false
|
32
|
+
Exclude: []
|
33
|
+
Style/GuardClause:
|
34
|
+
Description: Check for conditionals that can be replaced with guard clauses
|
35
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-nested-conditionals
|
36
|
+
Enabled: false
|
37
|
+
MinBodyLength: 1
|
38
|
+
Style/IfUnlessModifier:
|
39
|
+
Description: Favor modifier if/unless usage when you have a single-line body.
|
40
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#if-as-a-modifier
|
41
|
+
Enabled: false
|
42
|
+
MaxLineLength: 80
|
43
|
+
Style/OptionHash:
|
44
|
+
Description: Don't use option hashes when you can use keyword arguments.
|
45
|
+
Enabled: false
|
46
|
+
Style/PercentLiteralDelimiters:
|
47
|
+
Description: Use `%`-literal delimiters consistently
|
48
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#percent-literal-braces
|
49
|
+
Enabled: false
|
50
|
+
PreferredDelimiters:
|
51
|
+
"%": "()"
|
52
|
+
"%i": "()"
|
53
|
+
"%q": "()"
|
54
|
+
"%Q": "()"
|
55
|
+
"%r": "{}"
|
56
|
+
"%s": "()"
|
57
|
+
"%w": "()"
|
58
|
+
"%W": "()"
|
59
|
+
"%x": "()"
|
60
|
+
Style/PredicateName:
|
61
|
+
Description: Check the names of predicate methods.
|
62
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#bool-methods-qmark
|
63
|
+
Enabled: true
|
64
|
+
NamePrefix:
|
65
|
+
- is_
|
66
|
+
- has_
|
67
|
+
- have_
|
68
|
+
NamePrefixBlacklist:
|
69
|
+
- is_
|
70
|
+
Exclude:
|
71
|
+
- spec/**/*
|
72
|
+
Style/RaiseArgs:
|
73
|
+
Description: Checks the arguments passed to raise/fail.
|
74
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#exception-class-messages
|
75
|
+
Enabled: false
|
76
|
+
EnforcedStyle: exploded
|
77
|
+
SupportedStyles:
|
78
|
+
- compact
|
79
|
+
- exploded
|
80
|
+
Style/SignalException:
|
81
|
+
Description: Checks for proper usage of fail and raise.
|
82
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#fail-method
|
83
|
+
Enabled: false
|
84
|
+
EnforcedStyle: semantic
|
85
|
+
SupportedStyles:
|
86
|
+
- only_raise
|
87
|
+
- only_fail
|
88
|
+
- semantic
|
89
|
+
Style/SingleLineBlockParams:
|
90
|
+
Description: Enforces the names of some block params.
|
91
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#reduce-blocks
|
92
|
+
Enabled: false
|
93
|
+
Methods:
|
94
|
+
- reduce:
|
95
|
+
- a
|
96
|
+
- e
|
97
|
+
- inject:
|
98
|
+
- a
|
99
|
+
- e
|
100
|
+
Style/SingleLineMethods:
|
101
|
+
Description: Avoid single-line methods.
|
102
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-single-line-methods
|
103
|
+
Enabled: false
|
104
|
+
AllowIfMethodIsEmpty: true
|
105
|
+
Style/StringLiterals:
|
106
|
+
Description: Checks if uses of quotes match the configured preference.
|
107
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-string-literals
|
108
|
+
Enabled: true
|
109
|
+
EnforcedStyle: double_quotes
|
110
|
+
SupportedStyles:
|
111
|
+
- single_quotes
|
112
|
+
- double_quotes
|
113
|
+
Style/StringLiteralsInInterpolation:
|
114
|
+
Description: Checks if uses of quotes inside expressions in interpolated strings
|
115
|
+
match the configured preference.
|
116
|
+
Enabled: true
|
117
|
+
EnforcedStyle: single_quotes
|
118
|
+
SupportedStyles:
|
119
|
+
- single_quotes
|
120
|
+
- double_quotes
|
121
|
+
Style/TrailingCommaInLiteral:
|
122
|
+
Description: Checks for trailing comma in parameter lists and literals.
|
123
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-trailing-array-commas
|
124
|
+
Enabled: false
|
125
|
+
EnforcedStyleForMultiline: no_comma
|
126
|
+
SupportedStyles:
|
127
|
+
- comma
|
128
|
+
- no_comma
|
129
|
+
Metrics/AbcSize:
|
130
|
+
Description: A calculated magnitude based on number of assignments, branches, and
|
131
|
+
conditions.
|
132
|
+
Enabled: false
|
133
|
+
Max: 15
|
134
|
+
Metrics/ClassLength:
|
135
|
+
Description: Avoid classes longer than 100 lines of code.
|
136
|
+
Enabled: false
|
137
|
+
CountComments: false
|
138
|
+
Max: 100
|
139
|
+
Metrics/ModuleLength:
|
140
|
+
CountComments: false
|
141
|
+
Max: 100
|
142
|
+
Description: Avoid modules longer than 100 lines of code.
|
143
|
+
Enabled: false
|
144
|
+
Metrics/CyclomaticComplexity:
|
145
|
+
Description: A complexity metric that is strongly correlated to the number of test
|
146
|
+
cases needed to validate a method.
|
147
|
+
Enabled: false
|
148
|
+
Max: 6
|
149
|
+
Metrics/MethodLength:
|
150
|
+
Description: Avoid methods longer than 10 lines of code.
|
151
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#short-methods
|
152
|
+
Enabled: false
|
153
|
+
CountComments: false
|
154
|
+
Max: 10
|
155
|
+
Metrics/ParameterLists:
|
156
|
+
Description: Avoid parameter lists longer than three or four parameters.
|
157
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#too-many-params
|
158
|
+
Enabled: false
|
159
|
+
Max: 5
|
160
|
+
CountKeywordArgs: true
|
161
|
+
Metrics/PerceivedComplexity:
|
162
|
+
Description: A complexity metric geared towards measuring complexity for a human
|
163
|
+
reader.
|
164
|
+
Enabled: false
|
165
|
+
Max: 7
|
166
|
+
Lint/AssignmentInCondition:
|
167
|
+
Description: Don't use assignment in conditions.
|
168
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#safe-assignment-in-condition
|
169
|
+
Enabled: false
|
170
|
+
AllowSafeAssignment: true
|
171
|
+
Style/InlineComment:
|
172
|
+
Description: Avoid inline comments.
|
173
|
+
Enabled: false
|
174
|
+
Style/AccessorMethodName:
|
175
|
+
Description: Check the naming of accessor methods for get_/set_.
|
176
|
+
Enabled: false
|
177
|
+
Style/Alias:
|
178
|
+
Description: Use alias_method instead of alias.
|
179
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#alias-method
|
180
|
+
Enabled: false
|
181
|
+
Style/Documentation:
|
182
|
+
Description: Document classes and non-namespace modules.
|
183
|
+
Enabled: false
|
184
|
+
Style/DoubleNegation:
|
185
|
+
Description: Checks for uses of double negation (!!).
|
186
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-bang-bang
|
187
|
+
Enabled: false
|
188
|
+
Style/EachWithObject:
|
189
|
+
Description: Prefer `each_with_object` over `inject` or `reduce`.
|
190
|
+
Enabled: false
|
191
|
+
Style/EmptyLiteral:
|
192
|
+
Description: Prefer literals to Array.new/Hash.new/String.new.
|
193
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#literal-array-hash
|
194
|
+
Enabled: false
|
195
|
+
Style/ModuleFunction:
|
196
|
+
Description: Checks for usage of `extend self` in modules.
|
197
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#module-function
|
198
|
+
Enabled: false
|
199
|
+
Style/OneLineConditional:
|
200
|
+
Description: Favor the ternary operator(?:) over if/then/else/end constructs.
|
201
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#ternary-operator
|
202
|
+
Enabled: false
|
203
|
+
Style/PerlBackrefs:
|
204
|
+
Description: Avoid Perl-style regex back references.
|
205
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-perl-regexp-last-matchers
|
206
|
+
Enabled: false
|
207
|
+
Style/Send:
|
208
|
+
Description: Prefer `Object#__send__` or `Object#public_send` to `send`, as `send`
|
209
|
+
may overlap with existing methods.
|
210
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#prefer-public-send
|
211
|
+
Enabled: false
|
212
|
+
Style/SpecialGlobalVars:
|
213
|
+
Description: Avoid Perl-style global variables.
|
214
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#no-cryptic-perlisms
|
215
|
+
Enabled: false
|
216
|
+
Style/VariableInterpolation:
|
217
|
+
Description: Don't interpolate global, instance and class variables directly in
|
218
|
+
strings.
|
219
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#curlies-interpolate
|
220
|
+
Enabled: false
|
221
|
+
Style/WhenThen:
|
222
|
+
Description: Use when x then ... for one-line cases.
|
223
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#one-line-cases
|
224
|
+
Enabled: false
|
225
|
+
Lint/EachWithObjectArgument:
|
226
|
+
Description: Check for immutable argument given to each_with_object.
|
227
|
+
Enabled: true
|
228
|
+
Lint/HandleExceptions:
|
229
|
+
Description: Don't suppress exception.
|
230
|
+
StyleGuide: https://github.com/bbatsov/ruby-style-guide#dont-hide-exceptions
|
231
|
+
Enabled: false
|
232
|
+
Lint/LiteralInCondition:
|
233
|
+
Description: Checks of literals used in conditions.
|
234
|
+
Enabled: false
|
235
|
+
Lint/LiteralInInterpolation:
|
236
|
+
Description: Checks for literals used in interpolation.
|
237
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# Vundabar
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/vundabar`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'vundabar'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install vundabar
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/vundabar.
|
36
|
+
|
data/Rakefile
ADDED
data/bin/setup
ADDED
data/bin/vundabar
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "vundabar"
|
5
|
+
require_relative File.join(__dir__, "..", "generators", "generators")
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
Vundabar::Generators.start ARGV
|
data/circle.yml
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require "thor"
|
2
|
+
module Vundabar
|
3
|
+
class Generators < Thor
|
4
|
+
include Thor::Actions
|
5
|
+
attr_reader :app
|
6
|
+
def self.source_root
|
7
|
+
File.dirname(__FILE__) + "/templates"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "server", "Starts vundabar server"
|
11
|
+
|
12
|
+
def server
|
13
|
+
exec "rackup"
|
14
|
+
end
|
15
|
+
map %w(s, server) => "server"
|
16
|
+
|
17
|
+
desc "new APP_NAME", "create the app boiler plate file structure"
|
18
|
+
|
19
|
+
def new(app_name)
|
20
|
+
@app = app_name.downcase
|
21
|
+
say "creating your new app #{app}"
|
22
|
+
create_app_directory
|
23
|
+
|
24
|
+
create_config_files
|
25
|
+
empty_directory "#{app}/db"
|
26
|
+
create_public_directory
|
27
|
+
add_files_to_root_folders
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "version", "display the current version of the vundabar gem"
|
31
|
+
|
32
|
+
def version
|
33
|
+
say "Vundabar #{Vundabar::VERSION}"
|
34
|
+
end
|
35
|
+
map %w(-v --version) => "version"
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def create_app_directory
|
40
|
+
empty_directory app.to_s
|
41
|
+
empty_directory "#{app}/app"
|
42
|
+
empty_directory "#{app}/app/controllers"
|
43
|
+
empty_directory "#{app}/app/models"
|
44
|
+
create_views_folders
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_views_folders
|
48
|
+
empty_directory "#{app}/app/views/layouts"
|
49
|
+
copy_file(
|
50
|
+
"application.html.erb",
|
51
|
+
"#{app}/app/views/layouts/application.html.erb"
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def create_config_files
|
56
|
+
say "creating config folder"
|
57
|
+
empty_directory "#{app}/config"
|
58
|
+
copy_file "application.rb", "#{app}/config/application.rb"
|
59
|
+
copy_file "routes.rb", "#{app}/config/routes.rb"
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_public_directory
|
63
|
+
empty_directory "#{app}/public"
|
64
|
+
copy_file "invalid_route.html.erb", "#{app}/public/invalid_route.html.erb"
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_files_to_root_folders
|
68
|
+
copy_file "config.ru", "#{app}/config.ru"
|
69
|
+
copy_file "Gemfile", "#{app}/Gemfile"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset= "UTF-8">
|
5
|
+
<title>Invalid Route</title>
|
6
|
+
<style >
|
7
|
+
body {
|
8
|
+
background-color: #ffffff;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
div.error_box {
|
15
|
+
margin: auto;
|
16
|
+
font-weight: bolder;
|
17
|
+
width: 60%;
|
18
|
+
border: 3px solid #ff3333;
|
19
|
+
padding: 10px;
|
20
|
+
background-color: #ff3333;
|
21
|
+
margin-top: 5%;
|
22
|
+
|
23
|
+
}
|
24
|
+
|
25
|
+
</style>
|
26
|
+
</head>
|
27
|
+
<body>
|
28
|
+
<div class="error_box">
|
29
|
+
OOOPPSSSS!!!, the path "<%= path %>", you seek is not available, Old sport Check the list f the available paths and choose your path.
|
30
|
+
</div>
|
31
|
+
|
32
|
+
<div class="routes-list">
|
33
|
+
<% endpoints.each do |method, route_info| %>
|
34
|
+
|
35
|
+
<%end %>
|
36
|
+
</div>
|
37
|
+
</body>
|
38
|
+
</html>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
VundabarApp.routes.draw do
|
2
|
+
# define your routes here
|
3
|
+
# use root to define you landing routes
|
4
|
+
# Example: root "pages#index"
|
5
|
+
# This will ensure that the index action of the pagesController is your
|
6
|
+
# default action
|
7
|
+
# Available routes requests are get, post, put and delete
|
8
|
+
# Each takes in an alias the first parameter and a hash as the second
|
9
|
+
# The hash key is "to" while the value is the controller and action
|
10
|
+
# Example get "user", to: "sessions#index"
|
11
|
+
# You should define routes
|
12
|
+
# You can also define routes with resources. just add resources :name and you
|
13
|
+
# will have access to all restful urls
|
14
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require "tilt/erb"
|
2
|
+
module Vundabar
|
3
|
+
class BaseController
|
4
|
+
attr_reader :request
|
5
|
+
def initialize(request)
|
6
|
+
@request = request
|
7
|
+
end
|
8
|
+
|
9
|
+
def params
|
10
|
+
request.params
|
11
|
+
end
|
12
|
+
|
13
|
+
def redirect_to(address, status: 301)
|
14
|
+
response([], status, "Location" => address)
|
15
|
+
end
|
16
|
+
|
17
|
+
def render(*args)
|
18
|
+
response(render_template(*args))
|
19
|
+
end
|
20
|
+
|
21
|
+
def response(body, status = 200, header = {})
|
22
|
+
@response = Rack::Response.new(body, status, header)
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_response
|
26
|
+
@response
|
27
|
+
end
|
28
|
+
|
29
|
+
def invalid_route(endpoints)
|
30
|
+
template = File.join(APP_ROOT, "public", "invalid_route.html.erb")
|
31
|
+
locals = { path: request.path_info, endpoints: endpoints }
|
32
|
+
Tilt::ERBTemplate.new(template).render(self, locals)
|
33
|
+
end
|
34
|
+
|
35
|
+
def render_template(view_name, locals = {})
|
36
|
+
layout_template, view_template = prepare_view_template(view_name)
|
37
|
+
title = view_name.to_s.tr("_", " ").capitalize
|
38
|
+
layout_template.render(self, title: title) do
|
39
|
+
view_template.render(self, locals)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def prepare_view_template(view_name)
|
44
|
+
layout_file = File.join(
|
45
|
+
APP_ROOT,
|
46
|
+
"app",
|
47
|
+
"views",
|
48
|
+
"layouts",
|
49
|
+
"application.html.erb"
|
50
|
+
)
|
51
|
+
layout_template = Tilt::ERBTemplate.new(layout_file)
|
52
|
+
view = "#{view_name}.html.erb"
|
53
|
+
view_file = File.join(
|
54
|
+
APP_ROOT,
|
55
|
+
"app",
|
56
|
+
"views",
|
57
|
+
controller_name,
|
58
|
+
view
|
59
|
+
)
|
60
|
+
view_template = Tilt::ERBTemplate.new(view_file)
|
61
|
+
[layout_template, view_template]
|
62
|
+
end
|
63
|
+
|
64
|
+
def controller_name
|
65
|
+
klass = self.class.to_s.gsub(/Controller$/, "")
|
66
|
+
klass.to_snake_case
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Vundabar
|
2
|
+
module Associations
|
3
|
+
def has_many(name, options = {})
|
4
|
+
define_method(name) do
|
5
|
+
class_name = name.to_s.singularize.capitalize
|
6
|
+
model = options.fetch(:class_name, class_name).to_constant
|
7
|
+
foreign_key_column = self.class.to_s.downcase + "_id"
|
8
|
+
foreign_key = options.fetch(:foreign_key, foreign_key_column)
|
9
|
+
model.where("#{foreign_key} LIKE ?", id)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def belongs_to(model_name, options = {})
|
15
|
+
define_method(model_name) do
|
16
|
+
class_name = model_name.to_s.singularize.capitalize
|
17
|
+
model = options.fetch(:class_name, class_name).to_constant
|
18
|
+
foreign_key = model_name.to_s.concat("_id")
|
19
|
+
value = send(foreign_key)
|
20
|
+
model.find_by(id: value)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|