puffer 0.1.0 → 0.1.1
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 +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}"}
|