puffer 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +3 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +14 -0
- data/Gemfile.lock +98 -80
- data/README.md +6 -0
- data/Rakefile +1 -1
- data/app/assets/javascripts/puffer/puffer.js +15 -3
- data/app/assets/javascripts/puffer/right-sortable-src.js +28 -306
- data/app/assets/stylesheets/puffer/application.css +2 -0
- data/app/assets/stylesheets/puffer/file_input.css +59 -0
- data/app/assets/stylesheets/puffer/puffer.css +1 -0
- data/app/assets/stylesheets/puffer/puffer_grid.css +23 -0
- data/app/components/boolean/filter.html.erb +9 -0
- data/app/components/boolean_component.rb +4 -0
- data/app/components/carrierwave/form.html.erb +34 -0
- data/app/components/carrierwave/index.html.erb +6 -0
- data/app/components/carrierwave_component.rb +16 -0
- data/app/components/references_one/form.html.erb +2 -3
- data/app/controllers/admin/dashboard_controller.rb +0 -1
- data/app/controllers/admin/puffer_users_controller.rb +3 -7
- data/app/controllers/admin/sessions_controller.rb +1 -1
- data/app/models/puffer_user.rb +3 -18
- data/app/views/layouts/puffer.html.erb +2 -0
- data/app/views/puffer/base/_edit.html.erb +1 -1
- data/app/views/puffer/base/new.html.erb +1 -1
- data/app/views/puffer/grid_base/_grid.html.erb +9 -0
- data/app/views/puffer/grid_base/_index.html.erb +26 -0
- data/config/routes.rb +1 -1
- data/gemfiles/Gemfile-rails-3.1 +5 -0
- data/gemfiles/Gemfile-rails-3.1.lock +201 -0
- data/gemfiles/Gemfile-rails-3.2 +5 -0
- data/gemfiles/Gemfile-rails-3.2.lock +199 -0
- data/lib/puffer.rb +38 -12
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/base.rb +1 -2
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/dashboard_base.rb +0 -1
- data/lib/puffer/backends/controllers/grid_base.rb +12 -0
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/puffer_users_base.rb +0 -0
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/base.rb +0 -1
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/clearance.rb +13 -5
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/devise.rb +1 -1
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/simple.rb +1 -1
- data/{app/controllers/puffer → lib/puffer/backends/controllers}/tree_base.rb +0 -1
- data/lib/puffer/backends/models/user/active_record.rb +9 -0
- data/lib/puffer/backends/models/user/base.rb +30 -0
- data/lib/puffer/backends/models/user/mongoid.rb +15 -0
- data/lib/puffer/component.rb +2 -2
- data/lib/puffer/controller/auth.rb +48 -47
- data/lib/puffer/controller/config.rb +4 -6
- data/lib/puffer/controller/dsl.rb +2 -4
- data/lib/puffer/controller/mutate.rb +23 -26
- data/lib/puffer/extensions/directive_processor.rb +11 -16
- data/lib/puffer/extensions/engine.rb +7 -9
- data/lib/puffer/extensions/{mapper.rb → mapper31.rb} +10 -12
- data/lib/puffer/extensions/mapper32.rb +108 -0
- data/lib/puffer/filters.rb +15 -3
- data/lib/puffer/orm_adapter/active_record.rb +15 -2
- data/lib/puffer/orm_adapter/base.rb +4 -0
- data/lib/puffer/orm_adapter/mongoid.rb +15 -2
- data/lib/puffer/resource.rb +1 -1
- data/lib/puffer/version.rb +1 -1
- data/puffer.gemspec +10 -4
- data/spec/{app/components → components}/base_component_spec.rb +0 -0
- data/spec/{app/components → components}/boolean_component_spec.rb +0 -0
- data/spec/{app/components → components}/date_time_component_spec.rb +0 -0
- data/spec/{app/components → components}/file_component_spec.rb +0 -0
- data/spec/{app/components → components}/hidden_component_spec.rb +0 -0
- data/spec/{app/components → components}/password_component_spec.rb +0 -0
- data/spec/{app/components → components}/references_many_component_spec.rb +0 -0
- data/spec/{app/components → components}/references_one_component_spec.rb +0 -0
- data/spec/{app/components → components}/select_component_spec.rb +0 -0
- data/spec/{app/components → components}/string_component_spec.rb +0 -0
- data/spec/{app/components → components}/text_component_spec.rb +0 -0
- data/spec/controllers/sessions/base_shared.rb +66 -0
- data/spec/controllers/sessions/clearance_spec.rb +21 -0
- data/spec/controllers/sessions/simple_spec.rb +14 -0
- data/spec/dummy/app/controllers/admin/news_controller.rb +1 -1
- data/spec/dummy/app/controllers/admin/profiles_controller.rb +3 -1
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/orms/mongoid_orm_primals_controller.rb +16 -0
- data/spec/dummy/app/helpers/news_helper.rb +1 -1
- data/spec/dummy/app/models/clearance_user.rb +3 -0
- data/spec/dummy/app/models/mongoid_orm/embeds_many_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/embeds_one_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/has_many_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/has_one_reference.rb +9 -0
- data/spec/dummy/app/models/mongoid_orm/primal.rb +8 -0
- data/spec/dummy/app/models/profile.rb +2 -0
- data/spec/dummy/app/uploaders/avatar_uploader.rb +8 -0
- data/spec/dummy/config/application.rb +5 -3
- data/spec/dummy/config/initializers/clearance.rb +3 -0
- data/spec/dummy/config/initializers/devise.rb +34 -22
- data/spec/dummy/config/locales/devise.en.yml +6 -7
- data/spec/dummy/config/routes.rb +0 -1
- data/spec/dummy/db/migrate/{20100930133425_create_admin_profiles.rb → 20100930133425_create_profiles.rb} +2 -1
- data/spec/dummy/db/migrate/20111208222355_create_clearance_users.rb +13 -0
- data/spec/dummy/db/migrate/20120129091339_upgrade_clearance_to_diesel.rb +19 -0
- data/spec/dummy/db/schema.rb +12 -1
- data/spec/fabricators/clearance_user_fabricator.rb +4 -0
- data/spec/fabricators/puffer_user_fabricator.rb +5 -0
- data/spec/lib/filters_spec.rb +1 -1
- data/spec/lib/orm_adapter/active_record_spec.rb +0 -1
- data/spec/lib/orm_adapter/base_shared.rb +80 -76
- data/spec/lib/orm_adapter/mongoid_spec.rb +0 -2
- data/spec/lib/resource/tree_spec.rb +0 -1
- data/spec/spec_helper.rb +5 -3
- metadata +150 -75
- data/VERSION +0 -1
- data/app/models/puffer/puffer_user.rb +0 -25
data/lib/puffer/filters.rb
CHANGED
@@ -22,7 +22,7 @@ module Puffer
|
|
22
22
|
delegate :model_name, :special_attributes, :to => 'self.class'
|
23
23
|
|
24
24
|
def self.special_attributes
|
25
|
-
%w(puffer_search puffer_order)
|
25
|
+
%w(puffer_search puffer_order puffer_per_page)
|
26
26
|
end
|
27
27
|
|
28
28
|
special_attributes.each do |attribute|
|
@@ -59,7 +59,7 @@ module Puffer
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def any?
|
62
|
-
attributes.values.any?
|
62
|
+
attributes.except(:puffer_per_page).values.any?
|
63
63
|
end
|
64
64
|
|
65
65
|
def attributes
|
@@ -94,18 +94,26 @@ module Puffer
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def conditions
|
97
|
-
fieldset.
|
97
|
+
fieldset.reduce(ActiveSupport::HashWithIndifferentAccess.new()) do |res, field|
|
98
|
+
attribute = field.field_name
|
98
99
|
value = send(attribute)
|
99
100
|
|
100
101
|
unless value.blank?
|
102
|
+
if field.column_type == :boolean
|
103
|
+
value = true if Puffer::TRUE_VALUES.include?(value)
|
104
|
+
value = false if Puffer::FALSE_VALUES.include?(value)
|
105
|
+
end
|
106
|
+
|
101
107
|
value = case value
|
102
108
|
when 'puffer_nil' then nil
|
103
109
|
when 'puffer_blank' then ''
|
104
110
|
else value
|
105
111
|
end
|
112
|
+
|
106
113
|
res[attribute] = value
|
107
114
|
end
|
108
115
|
|
116
|
+
|
109
117
|
res
|
110
118
|
end
|
111
119
|
end
|
@@ -118,6 +126,10 @@ module Puffer
|
|
118
126
|
puffer_order.to_s.split(' ').map(&:to_sym)
|
119
127
|
end
|
120
128
|
|
129
|
+
def per_page
|
130
|
+
puffer_per_page.to_i
|
131
|
+
end
|
132
|
+
|
121
133
|
def query
|
122
134
|
(fieldset.map(&:field_name) + special_attributes).reduce(ActiveSupport::HashWithIndifferentAccess.new()) do |res, attribute|
|
123
135
|
value = send(attribute)
|
@@ -13,7 +13,9 @@ module Puffer
|
|
13
13
|
Reflection.new(
|
14
14
|
:klass => reflection.klass,
|
15
15
|
:macro => reflection.macro,
|
16
|
-
:through? => !!reflection.through_reflection
|
16
|
+
:through? => !!reflection.through_reflection,
|
17
|
+
:accessor => accessor_for(reflection),
|
18
|
+
:primary_key => :id
|
17
19
|
) if reflection
|
18
20
|
end
|
19
21
|
|
@@ -24,7 +26,7 @@ module Puffer
|
|
24
26
|
|
25
27
|
conditions_fields = fields.select {|f| f.column && conditions.keys.include?(f.field_name)}.to_fieldset
|
26
28
|
search_fields = fields.select {|f| f.column && !conditions_fields.include?(f) && search_types.include?(f.column_type)}
|
27
|
-
all_fields = conditions_fields + search_fields
|
29
|
+
all_fields = conditions_fields + search_fields
|
28
30
|
|
29
31
|
scope = scope.includes(includes(all_fields)).includes(reflection_includes(fields)).where(searches(search_fields, options[:search])).order(order)
|
30
32
|
|
@@ -70,6 +72,17 @@ module Puffer
|
|
70
72
|
field.options[:order] || query_column(field)
|
71
73
|
end
|
72
74
|
|
75
|
+
def accessor_for reflection
|
76
|
+
case reflection.macro
|
77
|
+
when :belongs_to then
|
78
|
+
reflection.foreign_key
|
79
|
+
when :has_one then
|
80
|
+
"#{reflection.name}_id"
|
81
|
+
when :has_many, :has_and_belong_to_many then
|
82
|
+
"#{reflection.name.to_s.singularize}_ids"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
73
86
|
end
|
74
87
|
end
|
75
88
|
end
|
@@ -13,7 +13,9 @@ module Puffer
|
|
13
13
|
Reflection.new(
|
14
14
|
:klass => reflection.klass,
|
15
15
|
:macro => reflection.macro,
|
16
|
-
:through? => false
|
16
|
+
:through? => false,
|
17
|
+
:accessor => accessor_for(reflection),
|
18
|
+
:primary_key => :_id
|
17
19
|
) if reflection
|
18
20
|
end
|
19
21
|
|
@@ -25,7 +27,7 @@ module Puffer
|
|
25
27
|
conditions_fields = fields.select {|f| f.column && conditions.keys.include?(f.field_name)}.to_fieldset
|
26
28
|
search_fields = fields.select {|f| f.column && !conditions_fields.include?(f) && search_types.include?(f.column_type)}
|
27
29
|
all_fields = conditions_fields + search_fields
|
28
|
-
|
30
|
+
|
29
31
|
scope = scope.any_of(searches(search_fields, options[:search])) if options[:search].present?
|
30
32
|
scope = scope.order_by(order)
|
31
33
|
|
@@ -60,6 +62,17 @@ module Puffer
|
|
60
62
|
field.options[:order] || field.name
|
61
63
|
end
|
62
64
|
|
65
|
+
def accessor_for reflection
|
66
|
+
case reflection.macro
|
67
|
+
when :referenced_in, :belongs_to then
|
68
|
+
reflection.foreign_key
|
69
|
+
when :references_one, :has_one then
|
70
|
+
"#{reflection.name}_id"
|
71
|
+
when :references_many, :references_and_referenced_in_many, :has_many, :has_and_belong_to_many then
|
72
|
+
"#{reflection.name.to_s.singularize}_ids"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
63
76
|
end
|
64
77
|
end
|
65
78
|
end
|
data/lib/puffer/resource.rb
CHANGED
@@ -19,7 +19,7 @@ module Puffer
|
|
19
19
|
params = ActiveSupport::HashWithIndifferentAccess.new.deep_merge params
|
20
20
|
|
21
21
|
@resource_node = params[:puffer]
|
22
|
-
@scope = swallow_nil{@resource_node.scope} ||
|
22
|
+
@scope = swallow_nil{@resource_node.scope} || controller_instance.puffer_namespace
|
23
23
|
@params = params
|
24
24
|
@controller_instance = controller_instance
|
25
25
|
end
|
data/lib/puffer/version.rb
CHANGED
data/puffer.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = Puffer::VERSION
|
8
8
|
s.authors = ["pyromaniac"]
|
9
9
|
s.email = ["kinwizard@gmail.com"]
|
10
|
-
s.homepage = ""
|
10
|
+
s.homepage = "http://github.com/puffer/puffer"
|
11
11
|
s.summary = %q{In Soviet Russia puffer admins you}
|
12
12
|
s.description = %q{Admin interface builder}
|
13
13
|
|
@@ -19,23 +19,29 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
|
-
s.add_runtime_dependency(%q<rails>, ["~> 3.1
|
22
|
+
s.add_runtime_dependency(%q<rails>, ["~> 3.1"])
|
23
23
|
s.add_runtime_dependency(%q<kaminari>, [">= 0"])
|
24
24
|
s.add_runtime_dependency(%q<orm_adapter>, [">= 0"])
|
25
25
|
|
26
26
|
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
27
27
|
s.add_development_dependency(%q<mongoid>, [">= 0"])
|
28
28
|
s.add_development_dependency(%q<bson_ext>, [">= 0"])
|
29
|
-
s.add_development_dependency(%q<devise>, [">= 0"])
|
30
29
|
s.add_development_dependency(%q<rspec-rails>, [">= 0"])
|
31
30
|
s.add_development_dependency(%q<capybara>, [">= 0"])
|
32
31
|
s.add_development_dependency(%q<database_cleaner>, [">= 0"])
|
33
32
|
s.add_development_dependency(%q<ammeter>, [">= 0"])
|
34
33
|
s.add_development_dependency(%q<timecop>, [">= 0"])
|
35
34
|
s.add_development_dependency(%q<guard>, [">= 0"])
|
36
|
-
s.add_development_dependency(%q<libnotify>, [">= 0"])
|
37
35
|
s.add_development_dependency(%q<guard-rspec>, [">= 0"])
|
36
|
+
s.add_development_dependency(%q<rb-inotify>, [">= 0"])
|
37
|
+
s.add_development_dependency(%q<libnotify>, [">= 0"])
|
38
38
|
s.add_development_dependency(%q<forgery>, [">= 0"])
|
39
39
|
s.add_development_dependency(%q<fabrication>, [">= 0"])
|
40
40
|
s.add_development_dependency(%q<nested_set>, [">= 0"])
|
41
|
+
|
42
|
+
s.add_development_dependency(%q<devise>, [">= 0"])
|
43
|
+
s.add_development_dependency(%q<clearance>, [">= 0"])
|
44
|
+
|
45
|
+
s.add_development_dependency(%q<carrierwave>, [">= 0"])
|
46
|
+
s.add_development_dependency(%q<mini_magick>, [">= 0"])
|
41
47
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples "a session controller" do
|
4
|
+
|
5
|
+
controller do
|
6
|
+
def send_action method_name, *args
|
7
|
+
params[:puffer] = Puffer::Resource::Node.new(nil, :name => :anonymous, :controller => self.class, :singular => false)
|
8
|
+
send method_name, *args
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "GET new" do
|
13
|
+
it "assigns @record" do
|
14
|
+
get :new
|
15
|
+
assigns(:record).should be_a_new controller.model
|
16
|
+
end
|
17
|
+
|
18
|
+
it "renders the new template" do
|
19
|
+
pending 'some strange rspec behavior'
|
20
|
+
get :new
|
21
|
+
response.should render_template
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "POST create" do
|
26
|
+
it "with invalid data" do
|
27
|
+
post :create, param_key => {:email => user.email, :password => '111'}
|
28
|
+
response.should render_template 'new'
|
29
|
+
end
|
30
|
+
|
31
|
+
it "assigns @record with invalid data" do
|
32
|
+
post :create, param_key => {:email => user.email, :password => '111'}
|
33
|
+
assigns(:record).should be_a_new controller.model
|
34
|
+
end
|
35
|
+
|
36
|
+
it "with valid data" do
|
37
|
+
post :create, param_key => {:email => user.email, :password => '123456'}
|
38
|
+
response.should redirect_to '/admin'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "with valid data and return_to" do
|
42
|
+
return_to = "/hello/world"
|
43
|
+
|
44
|
+
post :create, param_key => {:email => user.email, :password => '123456'}, :return_to => return_to
|
45
|
+
response.should redirect_to return_to
|
46
|
+
end
|
47
|
+
|
48
|
+
it "current_puffer_user shoul be set" do
|
49
|
+
post :create, param_key => {:email => user.email, :password => '123456'}
|
50
|
+
controller.current_puffer_user.should == user
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "DELETE destroy" do
|
55
|
+
it "current_puffer_user shoul be nil" do
|
56
|
+
delete :destroy, :id => 42
|
57
|
+
controller.current_puffer_user.should be_nil
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should redirect" do
|
61
|
+
delete :destroy, :id => 42
|
62
|
+
response.should redirect_to '/admin/session/new'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'clearance/testing'
|
2
|
+
require 'controllers/sessions/base_shared'
|
3
|
+
|
4
|
+
describe Puffer::Sessions::Clearance do
|
5
|
+
controller do
|
6
|
+
include Clearance::Authentication
|
7
|
+
|
8
|
+
setup do
|
9
|
+
model_name :clearance_user
|
10
|
+
end
|
11
|
+
|
12
|
+
def current_puffer_user
|
13
|
+
current_user
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it_behaves_like "a session controller" do
|
18
|
+
let(:user) {Fabricate :clearance_user}
|
19
|
+
let(:param_key) {:clearance_user}
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'controllers/sessions/base_shared'
|
2
|
+
|
3
|
+
describe Puffer::Sessions::Simple do
|
4
|
+
controller do
|
5
|
+
def current_puffer_user
|
6
|
+
model.to_adapter.get(session[:puffer_user_id])
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
it_behaves_like "a session controller" do
|
11
|
+
let(:user) {Fabricate :puffer_user}
|
12
|
+
let(:param_key) {:puffer_user}
|
13
|
+
end
|
14
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Admin::ProfilesController < Puffer::
|
1
|
+
class Admin::ProfilesController < Puffer::GridBase
|
2
2
|
|
3
3
|
setup do
|
4
4
|
group :users
|
@@ -8,6 +8,7 @@ class Admin::ProfilesController < Puffer::Base
|
|
8
8
|
field 'user.email'
|
9
9
|
field :name
|
10
10
|
field :surname
|
11
|
+
field :avatar
|
11
12
|
field :birth_date, :format => :long
|
12
13
|
end
|
13
14
|
|
@@ -18,6 +19,7 @@ class Admin::ProfilesController < Puffer::Base
|
|
18
19
|
end
|
19
20
|
field :name
|
20
21
|
field :surname
|
22
|
+
field :avatar
|
21
23
|
field :birth_date
|
22
24
|
field :created_at
|
23
25
|
end
|
@@ -23,6 +23,22 @@ class Orms::MongoidOrmPrimalsController < Puffer::Base
|
|
23
23
|
end
|
24
24
|
|
25
25
|
form do
|
26
|
+
field :has_one_reference do
|
27
|
+
field :name
|
28
|
+
end
|
29
|
+
|
30
|
+
field :has_many_references do
|
31
|
+
field :name
|
32
|
+
end
|
33
|
+
|
34
|
+
field :embeds_one_reference do
|
35
|
+
field :name
|
36
|
+
end
|
37
|
+
|
38
|
+
field :embeds_many_references do
|
39
|
+
field :name
|
40
|
+
end
|
41
|
+
|
26
42
|
field :string_field
|
27
43
|
field :symbol_field
|
28
44
|
field :select_field, :select => (1..5).map {|i| "option #{i}"}
|