microframe 0.1.1 → 0.1.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 +4 -4
- data/README.md +2 -1
- data/circle.yml +4 -0
- data/lib/microframe/application/application.rb +1 -4
- data/lib/microframe/application/generators/generator.rb +14 -3
- data/lib/microframe/application/generators/samples/app_sample/config.ru.tt +3 -1
- data/lib/microframe/application/generators/samples/blank.tt +0 -0
- data/lib/microframe/application/generators/samples/sample_model.tt +1 -0
- data/lib/microframe/controller/application_controller.rb +39 -13
- data/lib/microframe/controller/form_helper.rb +54 -0
- data/lib/microframe/controller/helpers.rb +33 -0
- data/lib/microframe/controller/view_object.rb +12 -0
- data/lib/microframe/orm/base.rb +3 -7
- data/lib/microframe/orm/class_queries.rb +29 -40
- data/lib/microframe/orm/connection.rb +3 -5
- data/lib/microframe/orm/instance_queries.rb +9 -23
- data/lib/microframe/orm/query_utils.rb +5 -10
- data/lib/microframe/orm/queryset.rb +66 -0
- data/lib/microframe/orm/relationships.rb +2 -3
- data/lib/microframe/routing/mapper.rb +29 -26
- data/lib/microframe/routing/router.rb +16 -13
- data/lib/microframe/version.rb +1 -1
- data/microframe.gemspec +13 -7
- metadata +131 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a3b1e837b9d372578d058c4a3a5089f1b6745751
|
|
4
|
+
data.tar.gz: e3c33d4c092ddcbe0b199d32665502b596d4b5c6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 02819a23156e8797d73e3c6a170c0babb0ccc86d57dccd6db8bdf2088bc536f7913a6737c7c2d3a3616b94a0f82058a2db5198ba9cb4937b7e41ac80074e1546
|
|
7
|
+
data.tar.gz: 6b191a57a39e6fe0b19883a7c14cdc1533b05b09243de2698491f287cd5f71328dce604be33c48f0379b0e933b6192055e79d36246d74dc7e20643757ed6ca49
|
data/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# Microframe
|
|
2
2
|
|
|
3
|
+
[](https://codeclimate.com/github/andela-ooranagwa/microframe) [](https://codeclimate.com/github/andela-ooranagwa/microframe/coverage)
|
|
4
|
+
|
|
3
5
|
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/microframe`. To experiment with that code, run `bin/console` for an interactive prompt.
|
|
4
6
|
|
|
5
7
|
TODO: Delete this and the text above, and describe your gem
|
|
@@ -38,4 +40,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERN
|
|
|
38
40
|
## License
|
|
39
41
|
|
|
40
42
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
|
41
|
-
|
data/circle.yml
ADDED
|
@@ -14,21 +14,22 @@ module Microframe
|
|
|
14
14
|
def new(name)
|
|
15
15
|
@app_name = name
|
|
16
16
|
directory("app_sample", "#{app_name}")
|
|
17
|
+
init_with_shell_cmds
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
desc "generate TYPE NAME OPTIONS", "Generates microframe resource of TYPE (i.e. model, controller or view) with the given NAME extra options specific to TYPE can also be provided"
|
|
20
21
|
def generate(type, name, *xtras)
|
|
21
22
|
@type = type.downcase
|
|
22
23
|
@name = name.downcase
|
|
23
|
-
@xtras
|
|
24
|
+
@xtras ||= xtras
|
|
24
25
|
|
|
25
26
|
if type == "controller"
|
|
26
27
|
template("sample_controller.tt", File.join(target_root, "controllers", "#{name}_controller.rb"))
|
|
27
|
-
|
|
28
|
+
create_views
|
|
28
29
|
elsif type == "model"
|
|
29
30
|
template("sample_model.tt", File.join(target_root, "models", "#{name}.rb"))
|
|
30
31
|
elsif type == "view"
|
|
31
|
-
|
|
32
|
+
create_views
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
35
|
|
|
@@ -43,5 +44,15 @@ module Microframe
|
|
|
43
44
|
"app/"
|
|
44
45
|
end
|
|
45
46
|
|
|
47
|
+
def create_views
|
|
48
|
+
empty_directory(File.join(target_root, "views", name))
|
|
49
|
+
xtras.each { |f| template("blank.tt", File.join(target_root, "views", name, "#{f}.html.erb")) }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def init_with_shell_cmds
|
|
53
|
+
Dir.chdir(app_name)
|
|
54
|
+
run "bundle install"
|
|
55
|
+
run "git init"
|
|
56
|
+
end
|
|
46
57
|
end
|
|
47
58
|
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
APP_PATH = __dir__
|
|
2
|
+
|
|
1
3
|
require "bundler"
|
|
2
4
|
Bundler.require
|
|
3
5
|
|
|
4
6
|
<%= app_name.capitalize %>Application = Microframe::Application.new
|
|
5
7
|
|
|
6
|
-
require File.join(
|
|
8
|
+
require File.join(APP_PATH, "config", "routes")
|
|
7
9
|
|
|
8
10
|
use Rack::Reloader
|
|
9
11
|
run <%= app_name.capitalize %>Application
|
|
File without changes
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
require File.join(__dir__, "helpers")
|
|
2
|
+
require File.join(__dir__, "view_object")
|
|
3
|
+
|
|
1
4
|
module Microframe
|
|
2
5
|
class ApplicationController
|
|
3
|
-
|
|
6
|
+
include Helpers
|
|
7
|
+
attr_reader :request, :params, :view_rendered, :errors, :child, :action, :view_vars
|
|
4
8
|
|
|
5
9
|
def initialize(request, child, action)
|
|
6
10
|
@request = request
|
|
@@ -13,22 +17,29 @@ module Microframe
|
|
|
13
17
|
{ view: action, layout: "application" }
|
|
14
18
|
end
|
|
15
19
|
|
|
20
|
+
def redirect_to(location)
|
|
21
|
+
@view_rendered = true
|
|
22
|
+
[302, {"Location" => location}, []]
|
|
23
|
+
end
|
|
24
|
+
|
|
16
25
|
def render(options = {})
|
|
17
26
|
@view_rendered = true
|
|
18
27
|
view = get_view(options[:view])
|
|
19
28
|
layout = get_layout(options[:layout])
|
|
20
|
-
|
|
29
|
+
obj = set_up_view_object
|
|
30
|
+
status = 200
|
|
31
|
+
|
|
21
32
|
if(render_error?(view, layout))
|
|
22
|
-
response = Tilt.new(File.join(
|
|
23
|
-
|
|
33
|
+
response = Tilt.new(File.join(APP_PATH, "public", "404.html.erb"))
|
|
34
|
+
status = 404
|
|
35
|
+
response = response.render(obj, errors: @errors)
|
|
24
36
|
else
|
|
25
37
|
template = Tilt::ERBTemplate.new(layout)
|
|
26
38
|
view = Tilt::ERBTemplate.new(view)
|
|
27
|
-
|
|
28
|
-
response = template.render(self, vars){ view.render(self, vars)}
|
|
39
|
+
response = template.render(obj){ view.render(obj)}
|
|
29
40
|
end
|
|
30
41
|
|
|
31
|
-
[
|
|
42
|
+
[status, {}, [response]]
|
|
32
43
|
end
|
|
33
44
|
|
|
34
45
|
def render_view
|
|
@@ -42,18 +53,25 @@ module Microframe
|
|
|
42
53
|
@errors.size > 0
|
|
43
54
|
end
|
|
44
55
|
|
|
45
|
-
def get_view(view)
|
|
56
|
+
def get_view(view = nil)
|
|
46
57
|
view ||= default_render_option[:view]
|
|
47
|
-
file = File.join(
|
|
58
|
+
file = File.join(APP_PATH, "app", "views", child, "#{view}.html.erb")
|
|
48
59
|
unless File.file? file
|
|
49
|
-
file = File.join(
|
|
60
|
+
file = File.join(APP_PATH, "app", "views", "#{view}.html.erb")
|
|
50
61
|
end
|
|
51
62
|
file
|
|
52
63
|
end
|
|
53
64
|
|
|
54
|
-
def get_layout(layout)
|
|
65
|
+
def get_layout(layout = nil)
|
|
55
66
|
layout ||= default_render_option[:layout]
|
|
56
|
-
File.join(
|
|
67
|
+
File.join(APP_PATH, "app", "views", "layouts", layout + ".html.erb")
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def render_partial(partial)
|
|
71
|
+
partial = partial.split("/")
|
|
72
|
+
partial[-1] = "_#{partial[-1]}"
|
|
73
|
+
partial = Tilt::ERBTemplate.new(get_view(partial.join("/")))
|
|
74
|
+
partial.render(self)
|
|
57
75
|
end
|
|
58
76
|
|
|
59
77
|
def set_instance_variables_for_views
|
|
@@ -65,7 +83,15 @@ module Microframe
|
|
|
65
83
|
end
|
|
66
84
|
|
|
67
85
|
def protected_instance_variables_for_views
|
|
68
|
-
[
|
|
86
|
+
[:@request, :@action, :@view_rendered, :@child]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def set_up_view_object
|
|
90
|
+
obj = ViewObject.new(self)
|
|
91
|
+
obj.instance_exec(set_instance_variables_for_views) do |inst_vars|
|
|
92
|
+
inst_vars.each{|key, value| instance_variable_set("@#{key}", value) }
|
|
93
|
+
end
|
|
94
|
+
obj
|
|
69
95
|
end
|
|
70
96
|
end
|
|
71
97
|
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Microframe
|
|
2
|
+
class FormHelper
|
|
3
|
+
attr_reader :target, :target_id, :form_started,:target_name
|
|
4
|
+
|
|
5
|
+
def initialize (target, target_link)
|
|
6
|
+
@target = target
|
|
7
|
+
@target_name = target.class.to_s.downcase
|
|
8
|
+
@link = target_link
|
|
9
|
+
@form_started = false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def start_form
|
|
13
|
+
@form_started = true
|
|
14
|
+
@target_id = target.id ? target.id : nil
|
|
15
|
+
@link ||= "/#{target_name}s/#{target_id || ""}"
|
|
16
|
+
"<form action='#{@link}' method='post'>"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def label(name)
|
|
20
|
+
gatekeeper "<label>#{name}</label>"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def text_area(name)
|
|
24
|
+
gatekeeper "<textarea name = '#{target_name}[#{name}]'>#{target.send(name)}</textarea>"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def text_field(name)
|
|
28
|
+
gatekeeper "<input type = 'text' name = '#{target_name}[#{name}]' value = '#{target.send(name)}'/>"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def submit
|
|
32
|
+
output = ""
|
|
33
|
+
output += "<input type = 'hidden' name = '_method' value = 'put'/>" if target_id
|
|
34
|
+
output += "<input type = 'submit' value = 'save' />"
|
|
35
|
+
output += "</form>"
|
|
36
|
+
gatekeeper output
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def check_box(name, val=nil)
|
|
40
|
+
val ||= target.send(name)
|
|
41
|
+
gatekeeper "<input type = 'checkbox' name = '#{target_name}[#{name}]' checked = '#{val}' value = 'true'/>"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def hidden(val)
|
|
45
|
+
name = val.class.to_s.downcase
|
|
46
|
+
val = val.id
|
|
47
|
+
gatekeeper "<input type = 'hidden' name = '#{name}_id' value = '#{val}'/>"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def gatekeeper(output)
|
|
51
|
+
form_started ? output : start_form + output
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require File.join(__dir__, "form_helper")
|
|
2
|
+
|
|
3
|
+
module Microframe
|
|
4
|
+
module Helpers
|
|
5
|
+
def link_to(link, target, options = {})
|
|
6
|
+
if options[:method]
|
|
7
|
+
target = target.is_a?(String) ? target : "/#{target.class.to_s.downcase}s/#{target.id}"
|
|
8
|
+
|
|
9
|
+
"<form action='#{target}' method='post'><input type='hidden' name='_method' value='#{options[:method]}'/><input type='submit' value='#{link}' /></form>"
|
|
10
|
+
else
|
|
11
|
+
data_options = ""
|
|
12
|
+
options[:data].each { |key, val| data_options << "data-#{key}='#{val}'"} if options[:data]
|
|
13
|
+
"<a href='#{target}' #{data_options} >#{link}</a>"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def form_for(target, link=nil, &block)
|
|
18
|
+
yield(FormHelper.new(target, link))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def image_tag(image, ext = "png")
|
|
22
|
+
File.join(APP_PATH, "app", "assets", "images", "#{image}.#{ext}")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def javascript_tag(js)
|
|
26
|
+
File.join(APP_PATH, "app", "assets", "javascripts", "#{js}.js")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def stylesheet_tag(style, ext = "css")
|
|
30
|
+
File.join(APP_PATH, "app", "assets", "stylesheets", "#{style}.#{ext}")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/microframe/orm/base.rb
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
require File.join(__dir__,"class_queries")
|
|
2
|
-
|
|
2
|
+
require File.join(__dir__,"instance_queries")
|
|
3
|
+
|
|
4
|
+
Dir[File.join(APP_PATH, "app", "models", "*.rb")].each { |file| require file}
|
|
3
5
|
|
|
4
6
|
module Microframe
|
|
5
7
|
module ORM
|
|
6
8
|
class Base
|
|
7
|
-
|
|
8
|
-
def update_queryset(key, value)
|
|
9
|
-
@queryset ||= Hash.new(Array.new)
|
|
10
|
-
@queryset[key] = @queryset[key] << value
|
|
11
|
-
end
|
|
12
|
-
|
|
13
9
|
def table_name
|
|
14
10
|
self.class.table_name
|
|
15
11
|
end
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
require File.join(__dir__,"
|
|
2
|
-
require File.join(__dir__,"instance_queries")
|
|
1
|
+
require File.join(__dir__,"queryset")
|
|
3
2
|
require File.join(__dir__,"relationships")
|
|
4
3
|
|
|
5
4
|
module Microframe
|
|
6
5
|
module ORM
|
|
7
6
|
class Base
|
|
8
|
-
@@
|
|
7
|
+
@@create_table_query = []
|
|
9
8
|
class << self
|
|
10
|
-
include QueryUtils
|
|
11
9
|
include Relationships
|
|
12
10
|
|
|
13
11
|
def inherited(base)
|
|
14
12
|
base.include InstanceQueries
|
|
15
|
-
base.include QueryUtils
|
|
16
13
|
end
|
|
17
14
|
|
|
18
15
|
def property(col_name, options = {})
|
|
19
|
-
@@create_table_query ||= []
|
|
20
16
|
options[:type] = options[:type].to_s.upcase
|
|
21
17
|
options[:nullable] = options[:nullable] ? "NULL" : "NOT NULL"
|
|
22
18
|
options[:primary_key] = options[:primary_key] ? "PRIMARY KEY AUTOINCREMENT" : ""
|
|
23
|
-
@@create_table_query << col_name.to_s + " " + options.values.join(" ")
|
|
19
|
+
@@create_table_query << (col_name.to_s + " " + options.values.join(" "))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def get_create_table_query
|
|
23
|
+
@@create_table_query
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def create_table
|
|
27
27
|
query = "CREATE TABLE IF NOT EXISTS #{table_name} (#{@@create_table_query.join(", ")})"
|
|
28
28
|
if Connection.execute(query)
|
|
29
|
-
@@create_table_query =
|
|
29
|
+
@@create_table_query = []
|
|
30
30
|
define_attributes
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def define_attributes
|
|
35
|
+
save_data = []
|
|
35
36
|
Connection.retrieve_columns(table_name).each do |column|
|
|
37
|
+
save_data << column
|
|
36
38
|
define_method("#{column}=") do |val|
|
|
37
39
|
instance_var = "@#{column}"
|
|
38
|
-
instance_variable_set("@save_queryset", {}) unless @save_queryset
|
|
39
|
-
@save_queryset[column] = val unless column == "id"
|
|
40
40
|
instance_variable_set(instance_var, val)
|
|
41
41
|
end
|
|
42
42
|
|
|
@@ -45,6 +45,10 @@ module Microframe
|
|
|
45
45
|
instance_variable_get(instance_var)
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
|
+
|
|
49
|
+
define_method("models_columns") do
|
|
50
|
+
save_data
|
|
51
|
+
end
|
|
48
52
|
end
|
|
49
53
|
|
|
50
54
|
def create(options={})
|
|
@@ -52,7 +56,7 @@ module Microframe
|
|
|
52
56
|
values = options.values
|
|
53
57
|
placeholders = Array.new(values.size, "?").join(", ")
|
|
54
58
|
Connection.connect.execute("INSERT INTO #{table_name} (#{keys}) VALUES (#{placeholders})", values)
|
|
55
|
-
self
|
|
59
|
+
self.last
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def table_name
|
|
@@ -60,51 +64,43 @@ module Microframe
|
|
|
60
64
|
end
|
|
61
65
|
|
|
62
66
|
def all
|
|
63
|
-
|
|
64
|
-
fetch_result
|
|
67
|
+
init_queryset(:select, "*").fetch
|
|
65
68
|
end
|
|
66
69
|
|
|
67
70
|
def find(id)
|
|
68
71
|
find_by(id: id)
|
|
69
72
|
end
|
|
70
73
|
|
|
71
|
-
def find_by(options
|
|
72
|
-
|
|
74
|
+
def find_by(options)
|
|
75
|
+
init_queryset(:find_by, options).fetch.first
|
|
73
76
|
end
|
|
74
77
|
|
|
75
|
-
def where(options
|
|
76
|
-
|
|
77
|
-
options.each {|key, val| sql << "#{key.to_s} = '#{val}'"}
|
|
78
|
-
add_query("WHERE", sql)
|
|
78
|
+
def where(options)
|
|
79
|
+
init_queryset(:where, options)
|
|
79
80
|
end
|
|
80
81
|
|
|
81
82
|
def select(val)
|
|
82
|
-
|
|
83
|
+
init_queryset(:select, val)
|
|
83
84
|
end
|
|
84
85
|
|
|
85
86
|
def count
|
|
86
|
-
|
|
87
|
-
result.size
|
|
87
|
+
all.size
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
def first
|
|
91
|
-
limit(1)
|
|
92
|
-
fetch_result
|
|
91
|
+
limit(1).fetch.first
|
|
93
92
|
end
|
|
94
93
|
|
|
95
94
|
def last
|
|
96
|
-
limit(1).order("id DESC")
|
|
97
|
-
fetch_result
|
|
95
|
+
limit(1).order("id DESC").fetch.first
|
|
98
96
|
end
|
|
99
97
|
|
|
100
98
|
def limit(val)
|
|
101
|
-
|
|
102
|
-
self
|
|
99
|
+
init_queryset(:limit, val)
|
|
103
100
|
end
|
|
104
101
|
|
|
105
102
|
def order(val)
|
|
106
|
-
|
|
107
|
-
self
|
|
103
|
+
init_queryset(:order, val)
|
|
108
104
|
end
|
|
109
105
|
|
|
110
106
|
def destroy(id)
|
|
@@ -113,19 +109,12 @@ module Microframe
|
|
|
113
109
|
|
|
114
110
|
def destroy_all(xtra = "; VACUUM")
|
|
115
111
|
query = "DELETE FROM #{table_name} #{xtra}"
|
|
116
|
-
execute(query)
|
|
112
|
+
Connection.connect.execute(query)
|
|
117
113
|
self
|
|
118
114
|
end
|
|
119
115
|
|
|
120
|
-
def
|
|
121
|
-
|
|
122
|
-
@@queryset[key] = @@queryset[key] ? @@queryset[key] << value : [value]
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def fetch_result
|
|
126
|
-
result = process_query(@@queryset)
|
|
127
|
-
@@queryset = {}
|
|
128
|
-
parse_result_to_objects(result)
|
|
116
|
+
def init_queryset(mtd, option)
|
|
117
|
+
Queryset.new(self).send(mtd, option)
|
|
129
118
|
end
|
|
130
119
|
end
|
|
131
120
|
end
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
require File.join(APP_PATH, "db", "config")
|
|
2
|
+
|
|
1
3
|
module Microframe
|
|
2
4
|
module ORM
|
|
3
5
|
class Connection
|
|
4
6
|
class << self
|
|
5
7
|
|
|
6
8
|
def connect
|
|
7
|
-
@@db ||= SQLite3::Database.open(File.join("db", @@dbname + ".sqlite"))
|
|
9
|
+
@@db ||= SQLite3::Database.open(File.join(APP_PATH, "db", @@dbname + ".sqlite"))
|
|
8
10
|
@@db.results_as_hash = true
|
|
9
11
|
connection
|
|
10
12
|
end
|
|
@@ -13,10 +15,6 @@ module Microframe
|
|
|
13
15
|
@@db.execute2("SELECT * FROM #{table} WHERE id = 0")[0]
|
|
14
16
|
end
|
|
15
17
|
|
|
16
|
-
def set_dbname(name)
|
|
17
|
-
@@dbname = name
|
|
18
|
-
end
|
|
19
|
-
|
|
20
18
|
def connection
|
|
21
19
|
@@db ||= connect
|
|
22
20
|
end
|
|
@@ -1,41 +1,27 @@
|
|
|
1
1
|
module Microframe
|
|
2
2
|
module ORM
|
|
3
3
|
module InstanceQueries
|
|
4
|
+
include QueryUtils
|
|
4
5
|
def save
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
queryset = {}
|
|
7
|
+
models_columns.each { |col| queryset[col] = send(col) }
|
|
8
|
+
keys = queryset.keys.join(", ")
|
|
9
|
+
values = queryset.values
|
|
9
10
|
placeholders = Array.new(values.size, "?").join(", ")
|
|
10
|
-
result =
|
|
11
|
+
result = Connection.connection.execute("REPLACE INTO #{table_name} (#{keys}) VALUES (#{placeholders})", values)
|
|
11
12
|
result ? self.class.last : self
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def update(options = {})
|
|
15
|
-
|
|
16
|
-
@save_queryset.merge(options)
|
|
16
|
+
options.each{ |col, val| send("#{col}=", val) }
|
|
17
17
|
save
|
|
18
18
|
end
|
|
19
|
-
# def order
|
|
20
|
-
# end
|
|
21
|
-
|
|
22
|
-
# def limit
|
|
23
|
-
# end
|
|
24
|
-
|
|
25
|
-
# def offset
|
|
26
|
-
# end
|
|
27
|
-
|
|
28
|
-
# def update
|
|
29
|
-
# end
|
|
30
19
|
|
|
31
20
|
def destroy
|
|
32
21
|
query = "DELETE FROM #{table_name} WHERE id =#{id}"
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
execute(query)
|
|
23
|
+
self
|
|
35
24
|
end
|
|
36
|
-
|
|
37
|
-
# def group
|
|
38
|
-
# end
|
|
39
25
|
end
|
|
40
26
|
end
|
|
41
27
|
end
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
module Microframe
|
|
2
2
|
module ORM
|
|
3
3
|
module QueryUtils
|
|
4
|
-
def add_query(key, value)
|
|
5
|
-
update_queryset(key, value)
|
|
6
|
-
self
|
|
7
|
-
end
|
|
8
|
-
|
|
9
4
|
def process_query(queryset)
|
|
10
5
|
return unless queryset
|
|
11
6
|
query = build_query(queryset)
|
|
@@ -13,7 +8,7 @@ module Microframe
|
|
|
13
8
|
end
|
|
14
9
|
|
|
15
10
|
def execute(query)
|
|
16
|
-
|
|
11
|
+
Connection.execute(query)
|
|
17
12
|
end
|
|
18
13
|
|
|
19
14
|
def process_select(queryhash)
|
|
@@ -22,8 +17,8 @@ module Microframe
|
|
|
22
17
|
end
|
|
23
18
|
|
|
24
19
|
def process_from(queryhash)
|
|
25
|
-
queryhash["FROM"] ||=
|
|
26
|
-
"FROM #{queryhash["FROM"]}
|
|
20
|
+
queryhash["FROM"] ||= table_name
|
|
21
|
+
"FROM #{queryhash["FROM"]}"
|
|
27
22
|
end
|
|
28
23
|
|
|
29
24
|
def process_where(queryhash)
|
|
@@ -57,7 +52,7 @@ module Microframe
|
|
|
57
52
|
def parse_result_to_objects(result)
|
|
58
53
|
hash_objects = []
|
|
59
54
|
result.each do |hash|
|
|
60
|
-
obj =
|
|
55
|
+
obj = @model.new
|
|
61
56
|
hash.each do |key, val|
|
|
62
57
|
if key.is_a? String
|
|
63
58
|
obj.instance_variable_set("@#{key}", val)
|
|
@@ -65,7 +60,7 @@ module Microframe
|
|
|
65
60
|
end
|
|
66
61
|
hash_objects << obj
|
|
67
62
|
end
|
|
68
|
-
|
|
63
|
+
hash_objects
|
|
69
64
|
end
|
|
70
65
|
end
|
|
71
66
|
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require File.join(__dir__,"query_utils")
|
|
2
|
+
|
|
3
|
+
module Microframe
|
|
4
|
+
module ORM
|
|
5
|
+
class Queryset
|
|
6
|
+
include QueryUtils
|
|
7
|
+
|
|
8
|
+
attr_reader :queryset, :table_name
|
|
9
|
+
|
|
10
|
+
def initialize(model)
|
|
11
|
+
@queryset = {}
|
|
12
|
+
@table_name = model.table_name
|
|
13
|
+
@model = model
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def where(options)
|
|
17
|
+
sql = []
|
|
18
|
+
options.each {|key, val| sql << "#{key.to_s} = '#{val}'"}
|
|
19
|
+
add_query("WHERE", sql.join(" AND "))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def all(val = "*")
|
|
23
|
+
add_query("SELECT", "#{val}") unless queryset["SELECT"]
|
|
24
|
+
fetch
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def find(id)
|
|
28
|
+
where(id: id)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def find_by(option)
|
|
32
|
+
where(option)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def select(val)
|
|
36
|
+
add_query("SELECT", val)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def limit(val)
|
|
40
|
+
@queryset["LIMIT"] = val
|
|
41
|
+
self
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def order(val)
|
|
45
|
+
@queryset["ORDER BY"] = val
|
|
46
|
+
self
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def add_query(field, condition)
|
|
50
|
+
@queryset ||= {}
|
|
51
|
+
@queryset[field] = queryset[field] ? queryset[field] << condition : [condition]
|
|
52
|
+
self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def fetch
|
|
56
|
+
result = process_query(queryset)
|
|
57
|
+
@queryset = {}
|
|
58
|
+
parse_result_to_objects(result)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def load
|
|
62
|
+
fetch.first
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -12,11 +12,10 @@ module Microframe
|
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def belongs_to(model, options = {})
|
|
15
|
-
model = model.to_s
|
|
16
15
|
define_method(model) do
|
|
17
16
|
options[:foreign_key] ||= "id"
|
|
18
|
-
model_id = send(
|
|
19
|
-
Module.const_get(model.capitalize).where(options[:foreign_key] => model_id )
|
|
17
|
+
model_id = send("#{model}_id")
|
|
18
|
+
Module.const_get(model.to_s.capitalize).where(options[:foreign_key] => model_id ).fetch.first
|
|
20
19
|
end
|
|
21
20
|
end
|
|
22
21
|
|
|
@@ -3,6 +3,7 @@ module Microframe
|
|
|
3
3
|
attr_reader :routes, :placeholders
|
|
4
4
|
def initialize(routes)
|
|
5
5
|
@routes = routes
|
|
6
|
+
@placeholders = {};
|
|
6
7
|
end
|
|
7
8
|
|
|
8
9
|
def self.start(route)
|
|
@@ -11,42 +12,44 @@ module Microframe
|
|
|
11
12
|
|
|
12
13
|
def map(verb, path)
|
|
13
14
|
value = nil
|
|
14
|
-
routes[verb]
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
if routes[verb]
|
|
16
|
+
routes[verb].each do |route, target|
|
|
17
|
+
if match_this(route, path)
|
|
18
|
+
value = target
|
|
19
|
+
break
|
|
20
|
+
end
|
|
18
21
|
end
|
|
19
22
|
end
|
|
20
23
|
value
|
|
21
24
|
end
|
|
22
25
|
|
|
23
|
-
def match_components(
|
|
26
|
+
def match_components(defined_elt, incoming_elt)
|
|
24
27
|
found = false
|
|
25
|
-
if
|
|
28
|
+
if defined_elt == incoming_elt
|
|
26
29
|
found = true
|
|
27
|
-
elsif
|
|
28
|
-
@placeholders[
|
|
30
|
+
elsif defined_elt[0] == ":" && defined_elt[-1] != ")" && defined_elt[-1] != "(" && !incoming_elt.nil?
|
|
31
|
+
@placeholders[defined_elt[1..-1].to_sym] = incoming_elt
|
|
29
32
|
found = true
|
|
30
33
|
end
|
|
31
34
|
return found
|
|
32
35
|
end
|
|
33
36
|
|
|
34
|
-
def match_begin_of_optional_components(
|
|
35
|
-
if
|
|
37
|
+
def match_begin_of_optional_components(defined_elt, optional)
|
|
38
|
+
if defined_elt[-1] == "("
|
|
36
39
|
optional += 1
|
|
37
|
-
|
|
40
|
+
defined_elt.sub!("(", "")
|
|
38
41
|
changed = true
|
|
39
42
|
end
|
|
40
|
-
return
|
|
43
|
+
return defined_elt, optional, changed
|
|
41
44
|
end
|
|
42
45
|
|
|
43
|
-
def match_end_of_optional_components(
|
|
44
|
-
if
|
|
46
|
+
def match_end_of_optional_components(defined_elt, optional)
|
|
47
|
+
if defined_elt[-1] == ")"
|
|
45
48
|
optional -= 1
|
|
46
|
-
|
|
49
|
+
defined_elt.sub!(")", "")
|
|
47
50
|
changed = true
|
|
48
51
|
end
|
|
49
|
-
return
|
|
52
|
+
return defined_elt, optional, changed
|
|
50
53
|
end
|
|
51
54
|
|
|
52
55
|
def match_optional_components(match, optional, index)
|
|
@@ -57,22 +60,22 @@ module Microframe
|
|
|
57
60
|
return match, index, match
|
|
58
61
|
end
|
|
59
62
|
|
|
60
|
-
def match_this(
|
|
61
|
-
match = [];
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
def match_this(defined, incoming)
|
|
64
|
+
match = []; index = 0;
|
|
65
|
+
defined_route = defined.split("/")
|
|
66
|
+
incoming_route = incoming.split("/")
|
|
64
67
|
|
|
65
|
-
return false if
|
|
68
|
+
return false if defined_route.size < incoming_route.size
|
|
66
69
|
|
|
67
|
-
|
|
70
|
+
defined_route.each do |route_elt|
|
|
68
71
|
pending_match = true; matched = false; optional = 0;
|
|
69
|
-
|
|
72
|
+
incoming_elt = incoming_route[index]
|
|
70
73
|
|
|
71
74
|
while pending_match
|
|
72
|
-
matched = match_components(
|
|
75
|
+
matched = match_components(route_elt, incoming_elt)
|
|
73
76
|
pending_match = false
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
route_elt, optional, pending_match = match_begin_of_optional_components(route_elt, optional) unless matched || pending_match
|
|
78
|
+
route_elt, optional, pending_match = match_end_of_optional_components(route_elt, optional) unless matched || pending_match
|
|
76
79
|
matched, index, pending_match = match_optional_components(matched, optional, index) unless matched || pending_match
|
|
77
80
|
end
|
|
78
81
|
|
|
@@ -3,19 +3,22 @@ require File.join(__dir__, "mapper")
|
|
|
3
3
|
|
|
4
4
|
module Microframe
|
|
5
5
|
class Router
|
|
6
|
-
attr_reader :
|
|
6
|
+
attr_reader :routes, :mapper, :object
|
|
7
7
|
attr_accessor :request
|
|
8
8
|
|
|
9
9
|
def initialize
|
|
10
|
-
@
|
|
10
|
+
@routes = Hash.new
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def handle_request
|
|
14
|
-
|
|
13
|
+
def handle_request
|
|
14
|
+
verb = request.request_method
|
|
15
|
+
path = request.path_info
|
|
16
|
+
@mapper ||= Mapper.start(routes)
|
|
15
17
|
handler = @mapper.map(verb, path) #get_handler(verb, path)
|
|
18
|
+
|
|
16
19
|
return missing_path unless handler
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
request.params.merge!(@mapper.placeholders)
|
|
19
22
|
|
|
20
23
|
response = setup_controller(handler)
|
|
21
24
|
unless object.view_rendered
|
|
@@ -36,8 +39,7 @@ module Microframe
|
|
|
36
39
|
|
|
37
40
|
def self.setup_verbs(*verbs)
|
|
38
41
|
verbs.each do |verb|
|
|
39
|
-
verb
|
|
40
|
-
define_method(verb) { |path, handler| set_route(verb.upcase, path, handler) }
|
|
42
|
+
define_method(verb) { |path, handler| set_route(verb.to_s.upcase, path, handler) }
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
|
|
@@ -45,7 +47,7 @@ module Microframe
|
|
|
45
47
|
|
|
46
48
|
def draw(&block)
|
|
47
49
|
instance_eval(&block)
|
|
48
|
-
@
|
|
50
|
+
@routes.default = {}
|
|
49
51
|
end
|
|
50
52
|
|
|
51
53
|
def resources(name)
|
|
@@ -56,18 +58,19 @@ module Microframe
|
|
|
56
58
|
get("/#{name}/:id/edit", to: "#{name}#edit")
|
|
57
59
|
post("/#{name}", to: "#{name}#create")
|
|
58
60
|
patch("/#{name}/:id", to: "#{name}#update")
|
|
59
|
-
|
|
61
|
+
put("/#{name}/:id", to: "#{name}#update")
|
|
62
|
+
delete("/#{name}/:id", to: "#{name}#destroy")
|
|
60
63
|
end
|
|
61
64
|
|
|
62
65
|
private
|
|
63
66
|
|
|
64
67
|
def get_handler(verb, path)
|
|
65
|
-
|
|
68
|
+
routes[verb][path]
|
|
66
69
|
end
|
|
67
70
|
|
|
68
71
|
def set_route(verb, path, handler = {})
|
|
69
|
-
@
|
|
70
|
-
@
|
|
72
|
+
@routes[verb] ||= {}
|
|
73
|
+
@routes[verb][path] = setup_handler(handler)
|
|
71
74
|
end
|
|
72
75
|
|
|
73
76
|
def setup_handler(handler)
|
|
@@ -76,7 +79,7 @@ module Microframe
|
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
def get_handler_file(controller)
|
|
79
|
-
require File.join(
|
|
82
|
+
require File.join(APP_PATH, "app", "controllers", controller + "_controller")
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
def missing_path
|
data/lib/microframe/version.rb
CHANGED
data/microframe.gemspec
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
-
lib = File.expand_path(
|
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
4
|
+
require "microframe/version"
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = "microframe"
|
|
@@ -13,10 +13,10 @@ Gem::Specification.new do |spec|
|
|
|
13
13
|
spec.homepage = "https://github.com/andela-ooranagwa/microframe"
|
|
14
14
|
spec.license = "MIT"
|
|
15
15
|
|
|
16
|
-
# Prevent pushing this gem to RubyGems.org by setting
|
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting "allowed_push_host", or
|
|
17
17
|
# delete this section to allow pushing this gem to any host.
|
|
18
18
|
if spec.respond_to?(:metadata)
|
|
19
|
-
spec.metadata[
|
|
19
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
20
20
|
else
|
|
21
21
|
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
|
22
22
|
end
|
|
@@ -26,9 +26,15 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.executables = %w{microframe}
|
|
27
27
|
spec.require_paths = ["lib"]
|
|
28
28
|
|
|
29
|
-
spec.add_runtime_dependency "
|
|
29
|
+
spec.add_runtime_dependency "rack", "~> 1.6", ">= 1.6.4"
|
|
30
|
+
spec.add_runtime_dependency "bundler"
|
|
30
31
|
spec.add_runtime_dependency "thor", "~> 0.19.1"
|
|
31
32
|
spec.add_development_dependency "pry-nav", "~> 0.2.4"
|
|
32
|
-
spec.add_development_dependency "rake",
|
|
33
|
-
spec.add_development_dependency "minitest",
|
|
33
|
+
spec.add_development_dependency "rake", "~> 10.4", ">= 10.4.2"
|
|
34
|
+
spec.add_development_dependency "minitest", "~> 5.8", ">= 5.8.3"
|
|
35
|
+
spec.add_development_dependency "capybara", "~> 2.5", ">= 2.5.0"
|
|
36
|
+
spec.add_development_dependency "sqlite3", "~> 1.3", ">= 1.3.11"
|
|
37
|
+
spec.add_development_dependency "tilt", "~> 2.0", ">= 2.0.1"
|
|
38
|
+
spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4", ">= 0.4.8"
|
|
39
|
+
spec.add_development_dependency "simplecov", "~> 0.10", ">= 0.10.0"
|
|
34
40
|
end
|
metadata
CHANGED
|
@@ -1,29 +1,49 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: microframe
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Osmond
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-12-
|
|
11
|
+
date: 2015-12-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: rack
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.
|
|
19
|
+
version: '1.6'
|
|
20
|
+
- - ">="
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: 1.6.4
|
|
20
23
|
type: :runtime
|
|
21
24
|
prerelease: false
|
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
26
|
requirements:
|
|
24
27
|
- - "~>"
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.
|
|
29
|
+
version: '1.6'
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 1.6.4
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: bundler
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
type: :runtime
|
|
41
|
+
prerelease: false
|
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
27
47
|
- !ruby/object:Gem::Dependency
|
|
28
48
|
name: thor
|
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -92,6 +112,106 @@ dependencies:
|
|
|
92
112
|
- - ">="
|
|
93
113
|
- !ruby/object:Gem::Version
|
|
94
114
|
version: 5.8.3
|
|
115
|
+
- !ruby/object:Gem::Dependency
|
|
116
|
+
name: capybara
|
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - "~>"
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: '2.5'
|
|
122
|
+
- - ">="
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: 2.5.0
|
|
125
|
+
type: :development
|
|
126
|
+
prerelease: false
|
|
127
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '2.5'
|
|
132
|
+
- - ">="
|
|
133
|
+
- !ruby/object:Gem::Version
|
|
134
|
+
version: 2.5.0
|
|
135
|
+
- !ruby/object:Gem::Dependency
|
|
136
|
+
name: sqlite3
|
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
|
138
|
+
requirements:
|
|
139
|
+
- - "~>"
|
|
140
|
+
- !ruby/object:Gem::Version
|
|
141
|
+
version: '1.3'
|
|
142
|
+
- - ">="
|
|
143
|
+
- !ruby/object:Gem::Version
|
|
144
|
+
version: 1.3.11
|
|
145
|
+
type: :development
|
|
146
|
+
prerelease: false
|
|
147
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
+
requirements:
|
|
149
|
+
- - "~>"
|
|
150
|
+
- !ruby/object:Gem::Version
|
|
151
|
+
version: '1.3'
|
|
152
|
+
- - ">="
|
|
153
|
+
- !ruby/object:Gem::Version
|
|
154
|
+
version: 1.3.11
|
|
155
|
+
- !ruby/object:Gem::Dependency
|
|
156
|
+
name: tilt
|
|
157
|
+
requirement: !ruby/object:Gem::Requirement
|
|
158
|
+
requirements:
|
|
159
|
+
- - "~>"
|
|
160
|
+
- !ruby/object:Gem::Version
|
|
161
|
+
version: '2.0'
|
|
162
|
+
- - ">="
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: 2.0.1
|
|
165
|
+
type: :development
|
|
166
|
+
prerelease: false
|
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - "~>"
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: '2.0'
|
|
172
|
+
- - ">="
|
|
173
|
+
- !ruby/object:Gem::Version
|
|
174
|
+
version: 2.0.1
|
|
175
|
+
- !ruby/object:Gem::Dependency
|
|
176
|
+
name: codeclimate-test-reporter
|
|
177
|
+
requirement: !ruby/object:Gem::Requirement
|
|
178
|
+
requirements:
|
|
179
|
+
- - "~>"
|
|
180
|
+
- !ruby/object:Gem::Version
|
|
181
|
+
version: '0.4'
|
|
182
|
+
- - ">="
|
|
183
|
+
- !ruby/object:Gem::Version
|
|
184
|
+
version: 0.4.8
|
|
185
|
+
type: :development
|
|
186
|
+
prerelease: false
|
|
187
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
188
|
+
requirements:
|
|
189
|
+
- - "~>"
|
|
190
|
+
- !ruby/object:Gem::Version
|
|
191
|
+
version: '0.4'
|
|
192
|
+
- - ">="
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: 0.4.8
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: simplecov
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - "~>"
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '0.10'
|
|
202
|
+
- - ">="
|
|
203
|
+
- !ruby/object:Gem::Version
|
|
204
|
+
version: 0.10.0
|
|
205
|
+
type: :development
|
|
206
|
+
prerelease: false
|
|
207
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
208
|
+
requirements:
|
|
209
|
+
- - "~>"
|
|
210
|
+
- !ruby/object:Gem::Version
|
|
211
|
+
version: '0.10'
|
|
212
|
+
- - ">="
|
|
213
|
+
- !ruby/object:Gem::Version
|
|
214
|
+
version: 0.10.0
|
|
95
215
|
description:
|
|
96
216
|
email:
|
|
97
217
|
- osmond.oranagwa@andela.com
|
|
@@ -110,6 +230,7 @@ files:
|
|
|
110
230
|
- bin/console
|
|
111
231
|
- bin/microframe
|
|
112
232
|
- bin/setup
|
|
233
|
+
- circle.yml
|
|
113
234
|
- lib/microframe.rb
|
|
114
235
|
- lib/microframe/application/application.rb
|
|
115
236
|
- lib/microframe/application/generators/generator.rb
|
|
@@ -124,14 +245,19 @@ files:
|
|
|
124
245
|
- lib/microframe/application/generators/samples/app_sample/config/routes.rb.tt
|
|
125
246
|
- lib/microframe/application/generators/samples/app_sample/db/config.rb.tt
|
|
126
247
|
- lib/microframe/application/generators/samples/app_sample/public/404.html.erb.tt
|
|
248
|
+
- lib/microframe/application/generators/samples/blank.tt
|
|
127
249
|
- lib/microframe/application/generators/samples/sample_controller.tt
|
|
128
250
|
- lib/microframe/application/generators/samples/sample_model.tt
|
|
129
251
|
- lib/microframe/controller/application_controller.rb
|
|
252
|
+
- lib/microframe/controller/form_helper.rb
|
|
253
|
+
- lib/microframe/controller/helpers.rb
|
|
254
|
+
- lib/microframe/controller/view_object.rb
|
|
130
255
|
- lib/microframe/orm/base.rb
|
|
131
256
|
- lib/microframe/orm/class_queries.rb
|
|
132
257
|
- lib/microframe/orm/connection.rb
|
|
133
258
|
- lib/microframe/orm/instance_queries.rb
|
|
134
259
|
- lib/microframe/orm/query_utils.rb
|
|
260
|
+
- lib/microframe/orm/queryset.rb
|
|
135
261
|
- lib/microframe/orm/relationships.rb
|
|
136
262
|
- lib/microframe/routing/mapper.rb
|
|
137
263
|
- lib/microframe/routing/router.rb
|