bhf 0.1.6 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/bhf/application_controller.rb +50 -29
- data/app/controllers/bhf/entries_controller.rb +7 -7
- data/app/controllers/bhf/pages_controller.rb +19 -15
- data/app/helpers/bhf/entries_helper.rb +1 -1
- data/app/helpers/bhf/pages_helper.rb +4 -4
- data/app/views/bhf/_footer.haml +11 -1
- data/app/views/bhf/application/index.haml +1 -1
- data/app/views/bhf/entries/_form.haml +4 -2
- data/app/views/bhf/entries/form/belongs_to/_account_scope.haml +2 -0
- data/app/views/bhf/entries/form/belongs_to/_radio.haml +2 -1
- data/app/views/bhf/entries/form/belongs_to/_select.haml +2 -1
- data/app/views/bhf/entries/form/belongs_to/_static.haml +1 -1
- data/app/views/bhf/entries/form/column/_password.haml +2 -0
- data/app/views/bhf/entries/form/column/_static.haml +2 -2
- data/app/views/bhf/entries/form/has_and_belongs_to_many/_account_scope.haml +2 -0
- data/app/views/bhf/entries/form/has_and_belongs_to_many/_check_box.haml +2 -1
- data/app/views/bhf/entries/form/has_and_belongs_to_many/_static.haml +1 -1
- data/app/views/bhf/entries/form/has_many/_static.haml +1 -1
- data/app/views/bhf/entries/form/has_one/_account_scope.haml +3 -0
- data/app/views/bhf/entries/form/has_one/_static.haml +1 -1
- data/app/views/bhf/pages/_platform.haml +10 -10
- data/app/views/layouts/bhf/{default.haml → application.haml} +8 -6
- data/config/locales/en.yml +1 -0
- data/lib/bhf/active_record.rb +30 -9
- data/lib/bhf/data.rb +27 -10
- data/lib/bhf/pagination.rb +10 -11
- data/lib/bhf/platform.rb +62 -41
- data/lib/bhf/settings.rb +8 -9
- data/lib/bhf.rb +2 -1
- data/lib/engine.rb +3 -1
- data/lib/rails/generators/bhf/templates/initializer.rb +4 -3
- data/public/javascripts/bhf.js +1 -1
- data/public/stylesheets/bhf.css +1 -1
- metadata +24 -14
@@ -1,51 +1,72 @@
|
|
1
1
|
class Bhf::ApplicationController < ActionController::Base
|
2
|
-
|
2
|
+
|
3
3
|
protect_from_forgery
|
4
|
-
|
5
|
-
before_filter :init_time, :check_admin_account, :load_config, :set_title
|
6
4
|
|
7
|
-
|
8
|
-
|
5
|
+
before_filter :init_time, :check_admin_account, :setup_current_account, :load_config, :set_title
|
6
|
+
|
7
|
+
helper_method :current_account
|
8
|
+
layout 'bhf/application'
|
9
9
|
|
10
10
|
def index
|
11
11
|
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
14
|
private
|
16
15
|
|
17
16
|
def check_admin_account
|
18
|
-
|
19
|
-
|
20
|
-
if auth_logic.respond_to?(:current_admin_account) && auth_logic.current_admin_account
|
17
|
+
if session[Bhf::Engine.config.session_auth_name.to_s] == true
|
21
18
|
return true
|
22
|
-
else
|
23
|
-
redirect_to(root_url, :error => t('bhf.helpers.login.error')) and return false
|
24
19
|
end
|
25
|
-
end
|
26
20
|
|
27
|
-
|
28
|
-
@config = Bhf::Settings.new(
|
29
|
-
YAML::load(IO.read('config/bhf.yml'))
|
30
|
-
# Bhf::Engine.config.bhf_logic
|
31
|
-
)
|
21
|
+
redirect_to(root_url, :error => t('bhf.helpers.login.error')) and return false
|
32
22
|
end
|
33
23
|
|
34
|
-
|
35
|
-
|
36
|
-
|
24
|
+
def setup_current_account
|
25
|
+
if Bhf::Engine.config.current_admin_account
|
26
|
+
# TODO: wtf ActionDispatch::Cookies::CookieOverflow
|
27
|
+
account = session[Bhf::Engine.config.current_admin_account.to_s]
|
28
|
+
@current_account = account.class.find(account.id)
|
29
|
+
end
|
37
30
|
end
|
38
|
-
|
39
|
-
def
|
40
|
-
|
31
|
+
|
32
|
+
def current_account
|
33
|
+
@current_account
|
41
34
|
end
|
42
35
|
|
43
|
-
def
|
44
|
-
|
36
|
+
def load_config
|
37
|
+
@config = Bhf::Settings.new(roles_yml(get_account_roles))
|
45
38
|
end
|
46
|
-
|
47
|
-
def
|
48
|
-
|
39
|
+
|
40
|
+
def roles_yml(roles = nil)
|
41
|
+
if roles.is_a?(String)
|
42
|
+
load_yml("/#{roles}")
|
43
|
+
elsif roles.is_a?(Array)
|
44
|
+
files = roles.each_with_object({'pages' => []}) do |r, account_roles|
|
45
|
+
pages = load_yml("/#{r}")['pages']
|
46
|
+
account_roles['pages'] += pages if pages
|
47
|
+
end
|
48
|
+
# TODO: merge platforms of the same pages rather the replace them
|
49
|
+
files['pages'].uniq! do |a|
|
50
|
+
a.keys
|
51
|
+
end
|
52
|
+
files
|
53
|
+
else
|
54
|
+
load_yml
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def load_yml(suffix = nil)
|
59
|
+
YAML::load(IO.read("config/bhf#{suffix}.yml"))
|
60
|
+
end
|
61
|
+
|
62
|
+
def get_account_roles
|
63
|
+
return unless current_account
|
64
|
+
|
65
|
+
if current_account.respond_to?(:role)
|
66
|
+
current_account.role.is_a?(String) ? current_account.role : current_account.role.to_bhf_s
|
67
|
+
elsif current_account.respond_to?(:roles)
|
68
|
+
current_account.roles.collect(&:to_bhf_s)
|
69
|
+
end
|
49
70
|
end
|
50
71
|
|
51
72
|
|
@@ -74,4 +95,4 @@ class Bhf::ApplicationController < ActionController::Base
|
|
74
95
|
session[:return_to] = nil
|
75
96
|
end
|
76
97
|
|
77
|
-
end
|
98
|
+
end
|
@@ -6,11 +6,11 @@ class Bhf::EntriesController < Bhf::ApplicationController
|
|
6
6
|
@object = @model.new
|
7
7
|
after_load
|
8
8
|
|
9
|
-
@form_url =
|
9
|
+
@form_url = bhf_entries_path(@platform.name)
|
10
10
|
end
|
11
11
|
|
12
12
|
def edit
|
13
|
-
@form_url =
|
13
|
+
@form_url = bhf_entry_path(@platform.name, @object)
|
14
14
|
|
15
15
|
if @quick_edit
|
16
16
|
render :layout => 'bhf/quick_edit'
|
@@ -26,9 +26,9 @@ class Bhf::EntriesController < Bhf::ApplicationController
|
|
26
26
|
manage_many_to_many
|
27
27
|
after_save
|
28
28
|
|
29
|
-
redirect_back_or_default(
|
29
|
+
redirect_back_or_default(bhf_entry_path(@platform.name, @object), :notice => set_message('create.success', @model))
|
30
30
|
else
|
31
|
-
@form_url =
|
31
|
+
@form_url = bhf_entries_path(@platform.name)
|
32
32
|
render :new
|
33
33
|
end
|
34
34
|
end
|
@@ -43,10 +43,10 @@ class Bhf::EntriesController < Bhf::ApplicationController
|
|
43
43
|
if @quick_edit
|
44
44
|
render :json => object_to_bhf_display_hash, :status => :ok
|
45
45
|
else
|
46
|
-
redirect_back_or_default(
|
46
|
+
redirect_back_or_default(bhf_entry_path(@platform.name, @object), :notice => set_message('update.success', @model))
|
47
47
|
end
|
48
48
|
else
|
49
|
-
@form_url =
|
49
|
+
@form_url = bhf_entry_path(@platform.name, @object)
|
50
50
|
|
51
51
|
r_settings = {:status => :unprocessable_entity}
|
52
52
|
r_settings[:layout] = 'bhf/quick_edit' if @quick_edit
|
@@ -71,7 +71,7 @@ class Bhf::EntriesController < Bhf::ApplicationController
|
|
71
71
|
end
|
72
72
|
|
73
73
|
def load_platform
|
74
|
-
@platform = @config.find_platform(params[:platform])
|
74
|
+
@platform = @config.find_platform(params[:platform], current_account)
|
75
75
|
end
|
76
76
|
|
77
77
|
def load_model
|
@@ -6,9 +6,6 @@ class Bhf::PagesController < Bhf::ApplicationController
|
|
6
6
|
raise Exception.new("Page '#{@page}' could not be found")
|
7
7
|
end
|
8
8
|
|
9
|
-
# TODO: page offset form bhf.yml
|
10
|
-
@pagination = Bhf::Pagination.new(10)
|
11
|
-
|
12
9
|
if request.xhr?
|
13
10
|
params.each do |key, value|
|
14
11
|
return render_platform(key) if value.is_a?(Hash)
|
@@ -16,7 +13,8 @@ class Bhf::PagesController < Bhf::ApplicationController
|
|
16
13
|
end
|
17
14
|
|
18
15
|
@platforms = platform_options.each_with_object([]) do |opts, obj|
|
19
|
-
platform = Bhf::Platform.new(opts, @page)
|
16
|
+
platform = Bhf::Platform.new(opts, @page, current_account)
|
17
|
+
platform.pagination = Bhf::Pagination.new(platform.entries_per_page)
|
20
18
|
platform.paginated_objects = paginate_platform_objects(platform)
|
21
19
|
obj << platform
|
22
20
|
end
|
@@ -24,29 +22,35 @@ class Bhf::PagesController < Bhf::ApplicationController
|
|
24
22
|
|
25
23
|
private
|
26
24
|
|
25
|
+
def set_page
|
26
|
+
@page = params[:page]
|
27
|
+
end
|
28
|
+
|
27
29
|
def render_platform(platform_name)
|
28
|
-
@platform = @config.find_platform(platform_name)
|
30
|
+
@platform = @config.find_platform(platform_name, current_account)
|
29
31
|
|
32
|
+
@platform.pagination = Bhf::Pagination.new(@platform.entries_per_page)
|
30
33
|
@platform.paginated_objects = paginate_platform_objects(@platform)
|
31
34
|
|
32
35
|
render '_platform', :layout => false
|
33
36
|
end
|
34
37
|
|
35
|
-
def set_page
|
36
|
-
@page = params[:page]
|
37
|
-
end
|
38
|
-
|
39
38
|
def check_params(platform)
|
40
39
|
page = 1
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
if params[platform.name] && !params[platform.name][:page].blank?
|
41
|
+
page = params[platform.name][:page].to_i
|
42
|
+
end
|
43
|
+
|
44
|
+
per_page = platform.pagination.offset_per_page
|
45
|
+
if params[platform.name] && !params[platform.name][:per_page].blank?
|
46
|
+
per_page = params[platform.name][:per_page].to_i
|
47
|
+
end
|
44
48
|
|
45
49
|
return :page => page, :per_page => per_page
|
46
50
|
end
|
47
|
-
|
51
|
+
|
48
52
|
def paginate_platform_objects(platform)
|
49
|
-
platform.prepare_objects(params[platform.name] || {}
|
53
|
+
platform.prepare_objects(params[platform.name] || {}, check_params(platform))
|
50
54
|
end
|
51
55
|
|
52
|
-
end
|
56
|
+
end
|
@@ -6,7 +6,7 @@ module Bhf
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def reflection_node(f, field, &block)
|
9
|
-
return if field.form_type
|
9
|
+
return if field.form_type == :static && f.object.new_record? && f.object.send(field.reflection.name).blank?
|
10
10
|
render :partial => 'bhf/helper/reflection_node', :locals => {
|
11
11
|
:f => f, :field => field, :input => with_output_buffer(&block)
|
12
12
|
}
|
@@ -2,13 +2,13 @@ module Bhf
|
|
2
2
|
module PagesHelper
|
3
3
|
|
4
4
|
def get_value(key, platform_name)
|
5
|
-
params[platform_name][key] if params[platform_name] && params[platform_name][key]
|
5
|
+
params[platform_name][key] if params[platform_name] && params[platform_name][key] && params[platform_name][key].is_a?(String)
|
6
6
|
end
|
7
7
|
|
8
8
|
def current_order_path(order_by, platform_name)
|
9
9
|
params_platfrom = params[platform_name] ? params[platform_name].clone : {}
|
10
10
|
|
11
|
-
if params_platfrom['order']
|
11
|
+
if params_platfrom['order'] == order_by && params_platfrom['direction'] != 'desc'
|
12
12
|
params_platfrom['direction'] = 'desc'
|
13
13
|
else
|
14
14
|
params_platfrom['direction'] = 'asc'
|
@@ -21,9 +21,9 @@ module Bhf
|
|
21
21
|
|
22
22
|
def order_class(order_by, platform_name)
|
23
23
|
params_platfrom = params[platform_name] ? params[platform_name] : {}
|
24
|
-
return unless params_platfrom['order']
|
24
|
+
return unless params_platfrom['order'] == order_by
|
25
25
|
|
26
|
-
params_platfrom['direction']
|
26
|
+
params_platfrom['direction'] == 'desc' ? 'sorted desc' : 'sorted asc'
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
data/app/views/bhf/_footer.haml
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
-
|
1
|
+
- if defined?(current_account)
|
2
|
+
-# TODO: i18n and custom logout path
|
3
|
+
%p.user
|
4
|
+
You are logged in as
|
5
|
+
%strong= current_account.name
|
6
|
+
= link_to 'Logout', logout_path, :method => :delete
|
7
|
+
|
8
|
+
- if @start_time
|
9
|
+
%p.stats= "Page rendered in ~#{(Time.now-@start_time).round(2)} seconds"
|
10
|
+
|
2
11
|
%p.copy
|
3
12
|
Made by
|
4
13
|
= link_to '@antpaw', 'http://twitter.com/antpaw'
|
@@ -6,6 +15,7 @@
|
|
6
15
|
= link_to 'Rails 3', 'http://twitter.com/antpaw'
|
7
16
|
and
|
8
17
|
= link_to 'MooTools', 'http://mootools.net/'
|
18
|
+
|
9
19
|
%p.info
|
10
20
|
More information on
|
11
21
|
= link_to 'GitHub', 'http://github.com/antpaw/bahnhof/'
|
@@ -5,10 +5,12 @@
|
|
5
5
|
= render :partial => 'validation_errors', :locals => {:f => f}
|
6
6
|
|
7
7
|
- @platform.fields.each do |field|
|
8
|
-
- unless field.form_type
|
8
|
+
- unless field.form_type == :hidden
|
9
9
|
= render :partial => "bhf/entries/form/#{field.macro}/#{field.form_type}", :locals => {:f => f, :field => field}
|
10
10
|
|
11
11
|
- unless @quick_edit
|
12
12
|
.node
|
13
13
|
.label
|
14
|
-
.input
|
14
|
+
.input
|
15
|
+
= f.submit f.object.new_record? ? new_t(@platform) : edit_t(@platform)
|
16
|
+
= link_to t('bhf.helpers.entry.cancel'), bhf_page_path(@platform.page_name), :class => 'cancel'
|
@@ -1,7 +1,8 @@
|
|
1
|
+
- data_source ||= field.reflection.klass.all
|
1
2
|
= reflection_node f, field do
|
2
3
|
- fk = field.reflection.primary_key_name
|
3
4
|
%ul
|
4
|
-
-
|
5
|
+
- data_source.each do |obj|
|
5
6
|
%li
|
6
7
|
= f.radio_button fk, obj.id, :id => "belongs_to_#{fk}_#{obj.id}"
|
7
8
|
= label_tag "belongs_to_#{fk}_#{obj.id}", obj.to_bhf_s
|
@@ -1,6 +1,7 @@
|
|
1
|
+
- data_source ||= field.reflection.klass.all
|
1
2
|
- fk = field.reflection.primary_key_name
|
2
3
|
.node
|
3
4
|
.label= f.label fk
|
4
5
|
.input
|
5
|
-
= f.select fk, options_from_collection_for_select(
|
6
|
+
= f.select fk, options_from_collection_for_select(data_source, :id, :to_bhf_s, f.object.send(fk)), :include_blank => true
|
6
7
|
= render :partial => 'bhf/helper/field_errors', :locals => {:f => f, :field => fk}
|
@@ -4,6 +4,6 @@
|
|
4
4
|
= t 'bhf.helpers.entry.empty'
|
5
5
|
- else
|
6
6
|
- if field.link
|
7
|
-
= link_to ref_object.to_bhf_s,
|
7
|
+
= link_to ref_object.to_bhf_s, edit_bhf_entry_path(field.link, ref_object), :class => 'quick_edit'
|
8
8
|
- else
|
9
9
|
= ref_object.to_bhf_s
|
@@ -1,8 +1,8 @@
|
|
1
1
|
- if value = f.object.send(field.name)
|
2
2
|
= node f, field do
|
3
|
-
- if field.display_type
|
3
|
+
- if field.display_type == :primary_key
|
4
4
|
%strong= value
|
5
|
-
- elsif field.display_type
|
5
|
+
- elsif field.display_type == :date
|
6
6
|
= l value, :format => :long
|
7
7
|
- else
|
8
8
|
= value
|
@@ -7,6 +7,6 @@
|
|
7
7
|
- ref_objects.each do |ref_object|
|
8
8
|
%li
|
9
9
|
- if field.link
|
10
|
-
= link_to ref_object.to_bhf_s,
|
10
|
+
= link_to ref_object.to_bhf_s, edit_bhf_entry_path(field.link, ref_object), :class => 'quick_edit'
|
11
11
|
- else
|
12
12
|
= ref_object.to_bhf_s
|
@@ -7,6 +7,6 @@
|
|
7
7
|
- ref_objects.each do |ref_object|
|
8
8
|
%li
|
9
9
|
- if field.link
|
10
|
-
= link_to ref_object.to_bhf_s,
|
10
|
+
= link_to ref_object.to_bhf_s, edit_bhf_entry_path(field.link, ref_object), :class => 'quick_edit'
|
11
11
|
- else
|
12
12
|
= ref_object.to_bhf_s
|
@@ -4,6 +4,6 @@
|
|
4
4
|
= t 'bhf.helpers.entry.empty'
|
5
5
|
- else
|
6
6
|
- if field.link
|
7
|
-
= link_to ref_object.to_bhf_s,
|
7
|
+
= link_to ref_object.to_bhf_s, edit_bhf_entry_path(field.link, ref_object), :class => 'quick_edit'
|
8
8
|
- else
|
9
9
|
= ref_object.to_bhf_s
|
@@ -1,8 +1,8 @@
|
|
1
|
-
- @pagination.template = self
|
1
|
+
- @platform.pagination.template = self
|
2
2
|
%table{:class => (@platform.custom_columns? ? 'custom_columns' : 'default_columns')}
|
3
3
|
%caption
|
4
4
|
%h4= @platform.title
|
5
|
-
%p.info= @pagination.info @platform, :entry_name => 'entry'
|
5
|
+
%p.info= @platform.pagination.info @platform, :entry_name => 'entry'
|
6
6
|
|
7
7
|
- if @platform.search?
|
8
8
|
= form_for @platform.name, :html => {:method => 'get', :class => 'search'} do |f|
|
@@ -11,7 +11,7 @@
|
|
11
11
|
= f.hidden_field :order, :value => get_value(:order, @platform.name)
|
12
12
|
= f.hidden_field :direction, :value => get_value(:direction, @platform.name)
|
13
13
|
|
14
|
-
%p.create= link_to new_t(@platform),
|
14
|
+
%p.create= link_to new_t(@platform), new_bhf_entry_path(@platform.name), :class => 'alt_button'
|
15
15
|
|
16
16
|
%thead
|
17
17
|
%tr
|
@@ -25,22 +25,22 @@
|
|
25
25
|
%tfoot
|
26
26
|
%tr
|
27
27
|
%td{:colspan => @platform.columns.count+1}
|
28
|
-
= @pagination.paginate @platform
|
28
|
+
= @platform.pagination.paginate @platform
|
29
29
|
%tbody
|
30
30
|
- if @platform.paginated_objects.any?
|
31
31
|
- @platform.paginated_objects.each do |object|
|
32
|
-
- edit_link =
|
32
|
+
- edit_link = edit_bhf_entry_path(@platform.name, object)
|
33
33
|
%tr
|
34
34
|
- @platform.columns.each do |column|
|
35
35
|
%td{:class => "#{column.field.macro} #{column.field.display_type}", :'data-column-name' => column.name}
|
36
36
|
- unless column.field.macro == :column && object.send(column.name).blank?
|
37
|
-
|
38
|
-
|
39
|
-
|
37
|
+
- p = "bhf/pages/macro/#{column.field.macro}/#{column.field.display_type}"
|
38
|
+
- a = render :partial => p, :locals => {:column => column, :object => object}
|
39
|
+
= column.field.overwrite_display_type ? a : link_to(a.html_safe, edit_link, :class => 'quick_edit')
|
40
40
|
%td.action
|
41
41
|
= link_to edit_t(@platform), edit_link, :class => 'edit'
|
42
|
-
= link_to delete_t(@platform),
|
42
|
+
= link_to delete_t(@platform), bhf_entry_path(@platform.name, object), :method => :delete, :confirm => t('bhf.helpers.promts.confirm'), :class => 'delete'
|
43
43
|
- else
|
44
44
|
%td.no_entries{:colspan => @platform.columns.count+1}
|
45
45
|
= t 'bhf.pagination.info.nothing_found', :name => t('bhf.pagination.entry').pluralize
|
46
|
-
= link_to new_t(@platform),
|
46
|
+
= link_to new_t(@platform), new_bhf_entry_path(@platform.name)
|
@@ -10,13 +10,15 @@
|
|
10
10
|
=# javascript_include_tag 'mootools-core-1.3-full-nocompat-yc.js', 'mootools-more', 'mootools_rails_driver-0.4.1.js', 'class/BrowserUpdate', 'class/Ajaxify', 'class/AjaxEdit', 'class/MooEditable', 'bhf_application'
|
11
11
|
%body
|
12
12
|
%header
|
13
|
+
-# TODO: logo as css bg for better cache and no jumping?
|
13
14
|
%h1= image_tag 'logo_bhf.png'
|
14
|
-
|
15
|
-
%
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
- if @config && @config.pages.any?
|
16
|
+
%nav
|
17
|
+
%ul
|
18
|
+
- @config.pages.each do |page|
|
19
|
+
%li{:class => ('active' if @page == page)}
|
20
|
+
= link_to t("bhf.pages.navigation.#{page}", :default => page.capitalize), bhf_page_path(page)
|
21
|
+
|
20
22
|
#content
|
21
23
|
#main
|
22
24
|
= render :partial => 'bhf/helper/flash', :locals => {:flash => flash}
|
data/config/locales/en.yml
CHANGED
data/lib/bhf/active_record.rb
CHANGED
@@ -1,18 +1,39 @@
|
|
1
1
|
module Bhf
|
2
2
|
module ActiveRecord
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
module Object
|
5
|
+
def to_bhf_s
|
6
|
+
return title if self.respond_to? :title
|
7
|
+
return name if self.respond_to? :name
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
if self.respond_to? :attributes
|
10
|
+
return title if attributes['title']
|
11
|
+
return name if attributes['name']
|
12
|
+
return "#{self.class.to_s.humanize} ID: #{send(self.class.primary_key)}" if attributes[self.class.primary_key]
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
+
self.to_s.humanize
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
19
|
+
module Self
|
20
|
+
def bhf_default_search(search_term)
|
21
|
+
where_statement = []
|
22
|
+
columns_hash.each_pair do |name, props|
|
23
|
+
is_number = search_term.to_i.to_s == search_term || search_term.to_f.to_s == search_term
|
24
|
+
|
25
|
+
if props.type == :string || props.type == :text
|
26
|
+
where_statement << "#{name} LIKE '%#{search_term}%'"
|
27
|
+
elsif props.type == :integer && is_number
|
28
|
+
where_statement << "#{name} = #{search_term.to_i}"
|
29
|
+
elsif props.type == :float && is_number
|
30
|
+
where_statement << "#{name} = #{search_term.to_f}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
where_statement.join(' OR ')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
17
38
|
end
|
18
39
|
end
|
data/lib/bhf/data.rb
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
module Bhf
|
2
2
|
module Data
|
3
|
+
class AbstractField
|
4
|
+
attr_reader :name, :form_type, :info, :macro, :display_type, :overwrite_display_type
|
5
|
+
|
6
|
+
def initialize(props)
|
7
|
+
@name = props[:name]
|
8
|
+
@form_type = props[:type]
|
9
|
+
@display_type = props[:type]
|
10
|
+
@overwrite_display_type = props[:type]
|
11
|
+
@info = props[:info]
|
12
|
+
@macro = :column
|
13
|
+
end
|
14
|
+
end
|
3
15
|
|
4
16
|
class Field
|
5
17
|
|
6
|
-
attr_reader :info
|
18
|
+
attr_reader :info, :overwrite_display_type
|
7
19
|
|
8
20
|
def initialize(props, options = {}, pk = 'id')
|
9
21
|
@props = props
|
10
|
-
@info = options[:info] if options[:info]
|
22
|
+
@info = options[:info] if options[:info] # TODO: i think this is wrong because info is atleast ''
|
11
23
|
|
12
24
|
@overwrite_type = options[:overwrite_type].to_sym if options[:overwrite_type]
|
25
|
+
@overwrite_display_type = options[:overwrite_display_type].to_sym if options[:overwrite_display_type]
|
13
26
|
|
14
27
|
@primary_key = pk
|
15
28
|
end
|
@@ -27,7 +40,7 @@ module Bhf
|
|
27
40
|
def form_type
|
28
41
|
return @overwrite_type if @overwrite_type
|
29
42
|
|
30
|
-
if name
|
43
|
+
if name == @primary_key || name == 'updated_at' || name == 'created_at'
|
31
44
|
:static
|
32
45
|
else
|
33
46
|
supported_types(@props.type)
|
@@ -35,9 +48,11 @@ module Bhf
|
|
35
48
|
end
|
36
49
|
|
37
50
|
def display_type
|
38
|
-
|
51
|
+
return @overwrite_display_type if @overwrite_display_type
|
52
|
+
|
53
|
+
if name == @primary_key
|
39
54
|
:primary_key
|
40
|
-
elsif name
|
55
|
+
elsif name == 'updated_at' || name == 'created_at'
|
41
56
|
:date
|
42
57
|
else
|
43
58
|
supported_types(@props.type)
|
@@ -63,7 +78,7 @@ module Bhf
|
|
63
78
|
def group_types(type_sym)
|
64
79
|
return :date if [:date, :datetime, :timestamp, :time, :year].include?(type_sym)
|
65
80
|
return :number if [:integer, :float].include?(type_sym)
|
66
|
-
return :file if type_sym
|
81
|
+
return :file if type_sym == :file
|
67
82
|
end
|
68
83
|
|
69
84
|
end
|
@@ -71,7 +86,7 @@ module Bhf
|
|
71
86
|
|
72
87
|
class Reflection
|
73
88
|
|
74
|
-
attr_reader :reflection, :info, :link
|
89
|
+
attr_reader :reflection, :info, :link, :overwrite_display_type
|
75
90
|
|
76
91
|
def initialize(reflection, options = {})
|
77
92
|
@reflection = reflection
|
@@ -79,6 +94,7 @@ module Bhf
|
|
79
94
|
@link = options[:link].to_sym if options[:link]
|
80
95
|
|
81
96
|
@overwrite_type = options[:overwrite_type].to_sym if options[:overwrite_type]
|
97
|
+
@overwrite_display_type = options[:overwrite_display_type].to_sym if options[:overwrite_display_type]
|
82
98
|
end
|
83
99
|
|
84
100
|
def macro
|
@@ -88,9 +104,9 @@ module Bhf
|
|
88
104
|
def type
|
89
105
|
return @overwrite_type if @overwrite_type
|
90
106
|
|
91
|
-
if macro
|
107
|
+
if macro == :has_and_belongs_to_many
|
92
108
|
:check_box
|
93
|
-
elsif macro
|
109
|
+
elsif macro == :belongs_to
|
94
110
|
:select
|
95
111
|
else
|
96
112
|
:static
|
@@ -102,6 +118,7 @@ module Bhf
|
|
102
118
|
end
|
103
119
|
|
104
120
|
def display_type
|
121
|
+
return @overwrite_display_type if @overwrite_display_type
|
105
122
|
:default
|
106
123
|
end
|
107
124
|
|
@@ -114,7 +131,7 @@ module Bhf
|
|
114
131
|
|
115
132
|
class Column
|
116
133
|
|
117
|
-
attr_reader :name, :field
|
134
|
+
attr_reader :name, :field, :overwrite_display_type
|
118
135
|
|
119
136
|
def initialize(field)
|
120
137
|
@name = field.name
|