will_filter 3.1.2 → 3.1.3
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/.gitignore +12 -1
- data/.rspec +2 -1
- data/Gemfile.lock +1 -1
- data/app/assets/stylesheets/will_filter/buttons.css.scss +1 -1
- data/app/assets/stylesheets/will_filter/calendar.css.scss +54 -7
- data/app/assets/stylesheets/will_filter/exporter.css.scss +40 -17
- data/app/assets/stylesheets/will_filter/filter.css.scss +169 -144
- data/app/controllers/will_filter/exporter_controller.rb +3 -10
- data/app/views/will_filter/filter/_condition.html.erb +8 -10
- data/app/views/will_filter/filter/_conditions.html.erb +41 -37
- data/app/views/will_filter/filter/_container.html.erb +28 -22
- data/app/views/will_filter/filter/containers/_boolean.html.erb +1 -1
- data/config/will_filter/config.yml +1 -1
- data/lib/generators/will_filter/templates/config.yml +1 -1
- data/lib/will_filter/version.rb +1 -1
- data/spec/config/config_spec.rb +14 -0
- data/spec/extensions/active_record_extension_spec.rb +40 -0
- data/spec/fake_app.rb +57 -0
- data/spec/spec_helper.rb +24 -23
- data/test/.DS_Store +0 -0
- data/test/dummy/.DS_Store +0 -0
- data/test/dummy/config/will_filter/config.yml +1 -1
- data/test/dummy/db/migrate/20110924023807_create_will_filter_filters.rb +19 -0
- metadata +38 -60
- data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/buttons.css.scssc +0 -0
- data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/calendar.css.scssc +0 -0
- data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/exporter.css.scssc +0 -0
- data/test/dummy/.sass-cache/f9cb1ef521115be73f1c61d3d5d64f66c947af63/filter.css.scssc +0 -0
- data/test/dummy/test/functional/welcome_controller_test.rb +0 -9
- data/test/dummy/test/unit/helpers/welcome_helper_test.rb +0 -4
- data/test/fixtures/will_filter/filters.yml +0 -11
- data/test/functional/will_filter/calendar_controller_test.rb +0 -9
- data/test/functional/will_filter/exporter_controller_test.rb +0 -9
- data/test/functional/will_filter/filter_controller_test.rb +0 -9
- data/test/integration/navigation_test.rb +0 -10
- data/test/unit/helpers/will_filter/calendar_helper_test.rb +0 -6
- data/test/unit/helpers/will_filter/exporter_helper_test.rb +0 -6
- data/test/unit/helpers/will_filter/filter_helper_test.rb +0 -6
- data/test/unit/will_filter/filter_test.rb +0 -9
@@ -1,56 +1,60 @@
|
|
1
|
-
|
2
|
-
<%= hidden_field_tag(:
|
3
|
-
<%= hidden_field_tag(:
|
4
|
-
<%= hidden_field_tag(:
|
5
|
-
<%= hidden_field_tag(:
|
6
|
-
<%= hidden_field_tag(:
|
7
|
-
<%= hidden_field_tag(:
|
8
|
-
<%= hidden_field_tag(:
|
9
|
-
|
1
|
+
<div style="margin:0;padding:0;display:inline">
|
2
|
+
<%= hidden_field_tag(:wf_id, wf_filter.id) %>
|
3
|
+
<%= hidden_field_tag(:wf_type, wf_filter.class.name) %>
|
4
|
+
<%= hidden_field_tag(:wf_dirty, "false") %>
|
5
|
+
<%= hidden_field_tag(:wf_submitted, "false") %>
|
6
|
+
<%= hidden_field_tag(:wf_name, wf_filter.name) %>
|
7
|
+
<%= hidden_field_tag(:wf_model, wf_filter.model_class_name) %>
|
8
|
+
<%= hidden_field_tag(:wf_export_format, "") %>
|
9
|
+
<%= hidden_field_tag(:wf_export_fields, "") %>
|
10
|
+
</div>
|
11
|
+
|
10
12
|
<div class="header">
|
11
13
|
<% if wf_filter.show_save_options? %>
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
<div class="end">
|
15
|
+
<%=link_to_function("<span>Save As New...</span>".html_safe, "wfFilter.saveFilter()", :class => "wf_grey_button wf_pcb") %>
|
16
|
+
<%=link_to_function("<span>Update</span>".html_safe, "wfFilter.updateFilter()", :class => "wf_grey_button wf_pcb") %>
|
17
|
+
<%=link_to_function("<span>Delete</span>".html_safe, "wfFilter.deleteFilter()", :class => "wf_grey_button wf_pcb") %>
|
16
18
|
<% if wf_filter.show_export_options? %>
|
17
19
|
<%=link_to_function("<span>Export Data...</span>".html_safe, "wfExporter.show(this)", :class => "wf_grey_button wf_pcb") %>
|
18
20
|
<% end %>
|
19
|
-
|
21
|
+
</div>
|
20
22
|
<% end %>
|
21
|
-
|
23
|
+
<div>
|
22
24
|
<% unless wf_filter.saved_filters.empty? %>
|
23
25
|
<%= select_tag(:wf_key, options_for_select(wf_filter.saved_filters, wf_filter.key), {:onChange=>"wfFilter.loadSavedFilter()"}) %>
|
24
26
|
<% end %>
|
25
|
-
|
27
|
+
</div>
|
26
28
|
</div>
|
27
29
|
|
28
30
|
<div class="body">
|
31
|
+
|
29
32
|
<% if wf_filter.errors[:filter] %>
|
30
33
|
<div class="wf_filter_error">
|
31
34
|
<%= wf_filter.errors[:filter] %>
|
32
35
|
</div>
|
33
36
|
<% end %>
|
34
37
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
38
|
+
<div class="filter_match_type">
|
39
|
+
Match <%= select_tag(:wf_match, options_for_select(wf_filter.match_options, wf_filter.match), {:onChange=>"wfFilter.markDirty()"}) %>
|
40
|
+
of the following conditions:
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<% if wf_filter.size == 0 %>
|
44
|
+
<div class="no_filter_hint">
|
45
|
+
You haven't added any filter conditions, so all of the results were returned.
|
46
|
+
Use the "Add" button in the bottom left corner to add a new condition or select
|
47
|
+
a predefined filter from a drop-down list above.
|
48
|
+
</div>
|
49
|
+
<% else %>
|
50
|
+
<table class="table" cellpadding="0" cellspacing="0">
|
51
|
+
<%
|
52
|
+
0.upto(wf_filter.size-1) do |index|
|
53
|
+
condition = wf_filter.condition_at(index)
|
54
|
+
%>
|
55
|
+
<%= render :partial => "/will_filter/filter/condition", :locals => {:wf_filter => wf_filter, :condition => condition, :index => index}%>
|
56
|
+
<% end %>
|
57
|
+
</table>
|
58
|
+
<% end %>
|
59
|
+
|
56
60
|
</div>
|
@@ -2,30 +2,36 @@
|
|
2
2
|
|
3
3
|
<%= form_tag({}, {:method => :get, :name=>'wf_form', :id => 'wf_form', :class => 'wf_form' }) do %>
|
4
4
|
<div class="wf_container">
|
5
|
-
|
6
|
-
|
5
|
+
<div id="wf_filter_conditions" class="conditions">
|
6
|
+
<%= render :partial=> "/will_filter/filter/conditions", :locals => {:wf_filter => wf_filter} %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div class="footer">
|
10
|
+
<div class="actions">
|
11
|
+
<small>
|
12
|
+
<%=link_to_function("Toggle Conditions", "wfFilter.toggleDebugger()") %>
|
13
|
+
</small>
|
14
|
+
|
15
|
+
Order:
|
16
|
+
<%= select_tag(:wf_order, options_for_select(wf_filter.condition_options, wf_filter.order), {:onChange=>"markDirty()"}) %>
|
17
|
+
<%= select_tag(:wf_order_type, options_for_select(wf_filter.order_type_options, wf_filter.order_type), {:onChange=>"markDirty()"}) %>
|
18
|
+
Per Page:
|
19
|
+
<%= select_tag(:wf_per_page, options_for_select(wf_filter.per_page_options, wf_filter.per_page.to_s), {:onChange=>"markDirty()"}) %>
|
20
|
+
|
21
|
+
<%=link_to_function("<span>Submit Filter</span>".html_safe, "wfFilter.submit()", :class => "wf_grey_button wf_pcb") %>
|
7
22
|
</div>
|
8
|
-
|
9
|
-
|
10
|
-
<
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
<%= select_tag(:wf_order_type, options_for_select(wf_filter.order_type_options, wf_filter.order_type), {:onChange=>"markDirty()"}) %>
|
16
|
-
Per Page:
|
17
|
-
<%= select_tag(:wf_per_page, options_for_select(wf_filter.per_page_options, wf_filter.per_page.to_s), {:onChange=>"markDirty()"}) %>
|
18
|
-
<%=link_to_function("<span>Submit Filter</span>".html_safe, "wfFilter.submit()", :class => "wf_grey_button wf_pcb") %>
|
19
|
-
</div>
|
20
|
-
<div>
|
21
|
-
<%=link_to_function("<span>+ Add</span>".html_safe, "wfFilter.addCondition()", :class => "wf_grey_button wf_pcb") %>
|
22
|
-
<%=link_to_function("<span>- Clear</span>".html_safe, "wfFilter.removeAllConditions()", :class => "wf_grey_button wf_pcb") %>
|
23
|
-
<span id="wf_loader" class="spinner" style="display:none;"><%=image_tag "will_filter/spinner.gif", {:style=>"vertical-align:middle"} %> Loading...</span>
|
24
|
-
</div>
|
23
|
+
<div>
|
24
|
+
<%=link_to_function("<span>+ Add</span>".html_safe, "wfFilter.addCondition()", :class => "wf_grey_button wf_pcb") %>
|
25
|
+
<%=link_to_function("<span>- Clear</span>".html_safe, "wfFilter.removeAllConditions()", :class => "wf_grey_button wf_pcb") %>
|
26
|
+
|
27
|
+
<span id="wf_loader" class="spinner" style="display:none;">
|
28
|
+
<%=image_tag "will_filter/spinner.gif" %> Loading...
|
29
|
+
</span>
|
25
30
|
</div>
|
31
|
+
</div>
|
26
32
|
|
27
|
-
|
28
|
-
|
29
|
-
|
33
|
+
<div id="wf_debugger" class="debugger" style="display:none;">
|
34
|
+
<%= raw(wf_filter.debug_sql_conditions) %>
|
35
|
+
</div>
|
30
36
|
</div>
|
31
37
|
<% end %>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div
|
1
|
+
<div class="boolean_container">
|
2
2
|
<%=radio_button_tag("wf_v#{index}_0", '1', (container.value == '1'), :style => 'width:20px', :onChange => 'wfFilter.fieldChanged(this)')%> True
|
3
3
|
|
4
4
|
<%=radio_button_tag("wf_v#{index}_0", '0', (container.value == '0'), :style => 'width:20px', :onChange => 'wfFilter.fieldChanged(this)')%> False
|
data/lib/will_filter/version.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe WillFilter::Config do
|
4
|
+
subject { WillFilter::Config }
|
5
|
+
describe 'operator_order' do
|
6
|
+
context 'by default' do
|
7
|
+
its(:config) {should_not == nil}
|
8
|
+
its(:containers) {should_not == nil}
|
9
|
+
its(:data_types) {should_not == nil}
|
10
|
+
its(:operators) {should_not == nil}
|
11
|
+
its(:operator_order) {should_not == nil}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.expand_path('../spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe WillFilter::ActiveRecordExtension do
|
4
|
+
describe '#filter' do
|
5
|
+
before :all do
|
6
|
+
5.times {|i| User.create(:first_name => "User #{i}")}
|
7
|
+
end
|
8
|
+
|
9
|
+
context "filtering with no params" do
|
10
|
+
it "should return all of the results" do
|
11
|
+
User.filter(:params => {}).total_count.should == User.count
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "filtering with is operator" do
|
16
|
+
it "should return a single result" do
|
17
|
+
User.filter(:params => {:wf_c0 => "first_name", :wf_o0 => "is", :wf_v0_0 => "User 1"}).total_count.should == 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "filtering with like operator" do
|
22
|
+
it "should return all matched results" do
|
23
|
+
User.filter(:params => {:wf_c0 => "first_name", :wf_o0 => "contains", :wf_v0_0 => "User"}).total_count.should == User.count
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "filtering with ends_with operator" do
|
28
|
+
it "should return all matched results" do
|
29
|
+
User.filter(:params => {:wf_c0 => "first_name", :wf_o0 => "ends_with", :wf_v0_0 => "4"}).total_count.should == 1
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "filtering with starts_with operator" do
|
34
|
+
it "should return all matched results" do
|
35
|
+
User.filter(:params => {:wf_c0 => "first_name", :wf_o0 => "starts_with", :wf_v0_0 => "U"}).total_count.should == User.count
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/spec/fake_app.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'action_controller/railtie'
|
3
|
+
require 'action_view/railtie'
|
4
|
+
|
5
|
+
# database
|
6
|
+
ActiveRecord::Base.configurations = {'test' => {:adapter => 'sqlite3', :database => ':memory:'}}
|
7
|
+
ActiveRecord::Base.establish_connection('test')
|
8
|
+
|
9
|
+
# config
|
10
|
+
app = Class.new(Rails::Application)
|
11
|
+
app.config.secret_token = "3b7cd727ee24e8444053437c36cc66c4"
|
12
|
+
app.config.session_store :cookie_store, :key => "_myapp_session"
|
13
|
+
app.config.active_support.deprecation = :log
|
14
|
+
app.initialize!
|
15
|
+
|
16
|
+
# routes
|
17
|
+
app.routes.draw do
|
18
|
+
resources :users
|
19
|
+
end
|
20
|
+
|
21
|
+
# models
|
22
|
+
class User < ActiveRecord::Base
|
23
|
+
has_many :events
|
24
|
+
has_many :events_users
|
25
|
+
end
|
26
|
+
class Event < ActiveRecord::Base
|
27
|
+
belongs_to :user, :class_name => 'User', :foreign_key => :creator_id
|
28
|
+
has_many :event_users
|
29
|
+
end
|
30
|
+
class EventUser < ActiveRecord::Base
|
31
|
+
belongs_to :event
|
32
|
+
belongs_to :user
|
33
|
+
end
|
34
|
+
|
35
|
+
# controllers
|
36
|
+
class ApplicationController < ActionController::Base; end
|
37
|
+
class UsersController < ApplicationController
|
38
|
+
def index
|
39
|
+
@users = User.filter(:params => params)
|
40
|
+
render :inline => <<-ERB
|
41
|
+
<%= will_filter_tag(@users) %>
|
42
|
+
ERB
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# helpers
|
47
|
+
Object.const_set(:ApplicationHelper, Module.new)
|
48
|
+
|
49
|
+
#migrations
|
50
|
+
class CreateAllTables < ActiveRecord::Migration
|
51
|
+
def self.up
|
52
|
+
Dir["#{File.dirname(__FILE__)}/../test/dummy/db/migrate/*.rb"].each do |f|
|
53
|
+
require f
|
54
|
+
f.split("/").last.gsub('.rb', '').split('_')[1..-1].join('_').camelcase.constantize.up
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,27 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require '
|
5
|
-
|
6
|
-
|
7
|
-
# in spec/support/ and its subdirectories.
|
8
|
-
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rails'
|
4
|
+
require 'kaminari'
|
5
|
+
require 'database_cleaner'
|
6
|
+
require 'will_filter'
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
8
|
+
# Ensure we use 'syck' instead of 'psych' in 1.9.2
|
9
|
+
# RubyGems >= 1.5.0 uses 'psych' on 1.9.2, but
|
10
|
+
# Psych does not yet support YAML 1.1 merge keys.
|
11
|
+
# Merge keys is often used in mongoid.yml
|
12
|
+
# See: http://redmine.ruby-lang.org/issues/show/4300
|
13
|
+
if RUBY_VERSION >= '1.9.2'
|
14
|
+
YAML::ENGINE.yamler = 'syck'
|
15
|
+
end
|
16
|
+
require File.join(File.dirname(__FILE__), 'fake_app')
|
19
17
|
|
20
|
-
|
21
|
-
|
18
|
+
require 'rspec/rails'
|
19
|
+
# Requires supporting files with custom matchers and macros, etc,
|
20
|
+
# in ./support/ and its subdirectories.
|
21
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
RSpec.configure do |config|
|
24
|
+
config.mock_with :rr
|
25
|
+
config.before :all do
|
26
|
+
CreateAllTables.up unless ActiveRecord::Base.connection.table_exists? 'users'
|
27
|
+
end
|
27
28
|
end
|
data/test/.DS_Store
CHANGED
Binary file
|
data/test/dummy/.DS_Store
CHANGED
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateWillFilterFilters < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :will_filter_filters do |t|
|
4
|
+
t.string :type
|
5
|
+
t.string :name
|
6
|
+
t.text :data
|
7
|
+
t.integer :user_id
|
8
|
+
t.string :model_class_name
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :will_filter_filters, [:user_id]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.down
|
17
|
+
drop_table :will_filter_filters
|
18
|
+
end
|
19
|
+
end
|