bhf 0.1.6 → 0.2.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.
- 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
|