puffer 0.0.29 → 0.0.30

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/Gemfile +1 -0
  2. data/Gemfile.lock +56 -52
  3. data/README.md +51 -43
  4. data/VERSION +1 -1
  5. data/app/assets/javascripts/puffer/application.js +3 -1
  6. data/app/assets/stylesheets/puffer/application.css +2 -0
  7. data/app/assets/stylesheets/puffer/puffer.css +5 -9
  8. data/app/components/base_component.rb +0 -1
  9. data/app/components/boolean/index.html.erb +1 -1
  10. data/app/components/boolean_component.rb +1 -1
  11. data/app/components/references_many/index.html.erb +1 -0
  12. data/app/components/references_many_component.rb +8 -0
  13. data/app/components/references_one_component.rb +6 -1
  14. data/app/components/select/filter.html.erb +2 -0
  15. data/app/components/select/form.html.erb +1 -1
  16. data/app/components/select_component.rb +13 -2
  17. data/app/controllers/admin/puffer_users_controller.rb +5 -1
  18. data/app/controllers/admin/sessions_controller.rb +4 -1
  19. data/app/controllers/puffer/base.rb +1 -1
  20. data/app/controllers/puffer/sessions_base.rb +3 -0
  21. data/app/controllers/puffer/tree_base.rb +4 -4
  22. data/app/helpers/puffer_helper.rb +16 -15
  23. data/app/models/puffer/puffer_user.rb +11 -10
  24. data/app/models/puffer_user.rb +14 -2
  25. data/app/views/layouts/puffer.html.erb +16 -17
  26. data/app/views/layouts/puffer_base.html.erb +1 -2
  27. data/app/views/layouts/puffer_dashboard.html.erb +2 -2
  28. data/app/views/puffer/base/edit.html.erb +12 -3
  29. data/app/views/puffer/base/new.html.erb +12 -3
  30. data/app/views/puffer/dashboard_base/index.html.erb +5 -5
  31. data/lib/generators/puffer/component/component_generator.rb +0 -1
  32. data/lib/generators/puffer/controller/controller_generator.rb +1 -1
  33. data/lib/generators/puffer/controller/templates/controller.rb +8 -0
  34. data/lib/puffer.rb +77 -13
  35. data/lib/puffer/component.rb +14 -9
  36. data/lib/puffer/controller/auth.rb +41 -2
  37. data/lib/puffer/controller/config.rb +1 -1
  38. data/lib/puffer/controller/mutate.rb +15 -6
  39. data/lib/puffer/extensions/core.rb +4 -0
  40. data/lib/puffer/extensions/directive_processor.rb +36 -0
  41. data/lib/puffer/extensions/form.rb +1 -1
  42. data/lib/puffer/extensions/mapper.rb +74 -149
  43. data/lib/puffer/field.rb +2 -4
  44. data/lib/puffer/field_set.rb +3 -15
  45. data/lib/puffer/filters.rb +105 -0
  46. data/lib/puffer/orm_adapter/active_record.rb +33 -0
  47. data/lib/puffer/orm_adapter/base.rb +4 -0
  48. data/lib/puffer/orm_adapter/mongoid.rb +29 -0
  49. data/lib/puffer/resource.rb +63 -62
  50. data/lib/puffer/resource/node.rb +71 -0
  51. data/lib/puffer/resource/routing.rb +4 -4
  52. data/lib/puffer/resource/tree.rb +36 -0
  53. data/puffer.gemspec +28 -8
  54. data/spec/dummy/app/controllers/admin/posts_controller.rb +1 -1
  55. data/spec/dummy/app/controllers/admin/users_controller.rb +1 -0
  56. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  57. data/spec/dummy/app/controllers/orms/active_record_orm_primals_controller.rb +36 -0
  58. data/spec/dummy/app/controllers/orms/mongoid_orm_primals_controller.rb +42 -0
  59. data/spec/dummy/app/models/active_record_orm.rb +5 -0
  60. data/spec/dummy/app/models/active_record_orm/primal.rb +2 -0
  61. data/spec/dummy/app/models/{mongoid_test.rb → mongoid_orm.rb} +1 -1
  62. data/spec/dummy/app/models/mongoid_orm/primal.rb +46 -0
  63. data/spec/dummy/config/environments/development.rb +3 -0
  64. data/spec/dummy/config/routes.rb +2 -1
  65. data/spec/dummy/db/migrate/20110930183902_create_active_record_orm_primals.rb +17 -0
  66. data/spec/dummy/db/schema.rb +15 -1
  67. data/spec/fabricators/active_record_orm/primal.rb +13 -0
  68. data/spec/fabricators/mongoid_orm/primal.rb +12 -0
  69. data/spec/generators/puffer/component/component_generator_spec.rb +32 -0
  70. data/spec/generators/puffer/controller/controller_generator_spec.rb +31 -0
  71. data/spec/helpers/puffer_helper_spec.rb +62 -0
  72. data/spec/lib/filters_spec.rb +21 -0
  73. data/spec/lib/orm_adapter/active_record_spec.rb +33 -0
  74. data/spec/lib/orm_adapter/base_shared.rb +97 -0
  75. data/spec/lib/orm_adapter/mongoid_spec.rb +46 -0
  76. data/spec/lib/resource/routing_spec.rb +5 -5
  77. data/spec/lib/resource/tree_spec.rb +31 -0
  78. data/spec/lib/resource_spec.rb +36 -37
  79. data/spec/spec_helper.rb +3 -2
  80. metadata +71 -43
  81. data/app/views/puffer/base/_form.html.erb +0 -11
  82. data/lib/generators/puffer/component/templates/component_spec.rb +0 -19
  83. data/lib/puffer/resource/scoping.rb +0 -19
  84. data/spec/dummy/app/controllers/orms/mongoid_tests_controller.rb +0 -19
  85. data/spec/lib/params_spec.rb +0 -120
@@ -15,7 +15,7 @@ module Puffer
15
15
  end
16
16
 
17
17
  def new_url *args
18
- new_polymorphic_url *route_args(controller_name.singularize, *args)
18
+ new_polymorphic_url *route_args(name.to_s.singularize, *args)
19
19
  end
20
20
 
21
21
  def edit_url *args
@@ -25,12 +25,12 @@ module Puffer
25
25
 
26
26
  def route_args *args
27
27
  options = args.extract_options!
28
- resource = args.shift
29
- return args + [namespace] + ancestors.map(&:route_member) + [resource], options
28
+ resource = Array.wrap(args)
29
+ return [scope] + ancestors.map(&:route_member) + resource, options
30
30
  end
31
31
 
32
32
  def route_member suggest = nil
33
- plural? ? (suggest || member) : controller_name.singularize
33
+ plural? ? (suggest || member) : name.to_s.singularize
34
34
  end
35
35
 
36
36
  def default_url_options *args
@@ -0,0 +1,36 @@
1
+ module Puffer
2
+ class Resource
3
+ class Tree
4
+ attr_accessor :nodes
5
+
6
+ def initialize
7
+ @nodes = []
8
+ end
9
+
10
+ def append_node *args
11
+ options = args.extract_options!
12
+ parent = args.first
13
+
14
+ parent = case parent
15
+ when Integer then
16
+ nodes[parent]
17
+ when Puffer::Resource::Node, nil then
18
+ parent
19
+ else
20
+ return
21
+ end
22
+
23
+ push Puffer::Resource::Node.new(parent, options)
24
+ size.pred
25
+ end
26
+
27
+ def roots
28
+ nodes.select &:root?
29
+ end
30
+
31
+ def method_missing method, *args, &block
32
+ nodes.send method, *args, &block if nodes.respond_to? method
33
+ end
34
+ end
35
+ end
36
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{puffer}
8
- s.version = "0.0.29"
8
+ s.version = "0.0.30"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{pyromaniac}]
12
- s.date = %q{2011-09-12}
12
+ s.date = %q{2011-10-22}
13
13
  s.description = %q{In Soviet Russia puffer admins you}
14
14
  s.email = %q{kinwizard@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -54,10 +54,12 @@ Gem::Specification.new do |s|
54
54
  "app/components/password/form.html.erb",
55
55
  "app/components/password_component.rb",
56
56
  "app/components/references_many/form.html.erb",
57
+ "app/components/references_many/index.html.erb",
57
58
  "app/components/references_many_component.rb",
58
59
  "app/components/references_one/choose.html.erb",
59
60
  "app/components/references_one/form.html.erb",
60
61
  "app/components/references_one_component.rb",
62
+ "app/components/select/filter.html.erb",
61
63
  "app/components/select/form.html.erb",
62
64
  "app/components/select_component.rb",
63
65
  "app/components/string/form.html.erb",
@@ -81,7 +83,6 @@ Gem::Specification.new do |s|
81
83
  "app/views/layouts/puffer_base.html.erb",
82
84
  "app/views/layouts/puffer_dashboard.html.erb",
83
85
  "app/views/layouts/puffer_sessions.html.erb",
84
- "app/views/puffer/base/_form.html.erb",
85
86
  "app/views/puffer/base/_table.html.erb",
86
87
  "app/views/puffer/base/edit.html.erb",
87
88
  "app/views/puffer/base/index.html.erb",
@@ -98,7 +99,6 @@ Gem::Specification.new do |s|
98
99
  "lib/generators/puffer/component/USAGE",
99
100
  "lib/generators/puffer/component/component_generator.rb",
100
101
  "lib/generators/puffer/component/templates/component.rb",
101
- "lib/generators/puffer/component/templates/component_spec.rb",
102
102
  "lib/generators/puffer/controller/USAGE",
103
103
  "lib/generators/puffer/controller/controller_generator.rb",
104
104
  "lib/generators/puffer/controller/templates/controller.rb",
@@ -112,17 +112,20 @@ Gem::Specification.new do |s|
112
112
  "lib/puffer/engine.rb",
113
113
  "lib/puffer/extensions/controller.rb",
114
114
  "lib/puffer/extensions/core.rb",
115
+ "lib/puffer/extensions/directive_processor.rb",
115
116
  "lib/puffer/extensions/engine.rb",
116
117
  "lib/puffer/extensions/form.rb",
117
118
  "lib/puffer/extensions/mapper.rb",
118
119
  "lib/puffer/field.rb",
119
120
  "lib/puffer/field_set.rb",
121
+ "lib/puffer/filters.rb",
120
122
  "lib/puffer/orm_adapter/active_record.rb",
121
123
  "lib/puffer/orm_adapter/base.rb",
122
124
  "lib/puffer/orm_adapter/mongoid.rb",
123
125
  "lib/puffer/resource.rb",
126
+ "lib/puffer/resource/node.rb",
124
127
  "lib/puffer/resource/routing.rb",
125
- "lib/puffer/resource/scoping.rb",
128
+ "lib/puffer/resource/tree.rb",
126
129
  "puffer.gemspec",
127
130
  "spec/app/components/base_component_spec.rb",
128
131
  "spec/app/components/boolean_component_spec.rb",
@@ -148,11 +151,15 @@ Gem::Specification.new do |s|
148
151
  "spec/dummy/app/controllers/admin/tags_controller.rb",
149
152
  "spec/dummy/app/controllers/admin/users_controller.rb",
150
153
  "spec/dummy/app/controllers/application_controller.rb",
151
- "spec/dummy/app/controllers/orms/mongoid_tests_controller.rb",
154
+ "spec/dummy/app/controllers/orms/active_record_orm_primals_controller.rb",
155
+ "spec/dummy/app/controllers/orms/mongoid_orm_primals_controller.rb",
152
156
  "spec/dummy/app/helpers/application_helper.rb",
157
+ "spec/dummy/app/models/active_record_orm.rb",
158
+ "spec/dummy/app/models/active_record_orm/primal.rb",
153
159
  "spec/dummy/app/models/category.rb",
154
160
  "spec/dummy/app/models/friendship.rb",
155
- "spec/dummy/app/models/mongoid_test.rb",
161
+ "spec/dummy/app/models/mongoid_orm.rb",
162
+ "spec/dummy/app/models/mongoid_orm/primal.rb",
156
163
  "spec/dummy/app/models/news.rb",
157
164
  "spec/dummy/app/models/post.rb",
158
165
  "spec/dummy/app/models/post_category.rb",
@@ -191,6 +198,7 @@ Gem::Specification.new do |s|
191
198
  "spec/dummy/db/migrate/20110107082706_create_friendships.rb",
192
199
  "spec/dummy/db/migrate/20110301072545_create_news.rb",
193
200
  "spec/dummy/db/migrate/20110912114129_create_puffer_users.rb",
201
+ "spec/dummy/db/migrate/20110930183902_create_active_record_orm_primals.rb",
194
202
  "spec/dummy/db/schema.rb",
195
203
  "spec/dummy/db/seeds.rb",
196
204
  "spec/dummy/public/404.html",
@@ -199,18 +207,27 @@ Gem::Specification.new do |s|
199
207
  "spec/dummy/public/favicon.ico",
200
208
  "spec/dummy/public/robots.txt",
201
209
  "spec/dummy/script/rails",
210
+ "spec/fabricators/active_record_orm/primal.rb",
202
211
  "spec/fabricators/categories_fabricator.rb",
212
+ "spec/fabricators/mongoid_orm/primal.rb",
203
213
  "spec/fabricators/news_fabricator.rb",
204
214
  "spec/fabricators/posts_fabricator.rb",
205
215
  "spec/fabricators/profiles_fabricator.rb",
206
216
  "spec/fabricators/tags_fabricator.rb",
207
217
  "spec/fabricators/users_fabricator.rb",
218
+ "spec/generators/puffer/component/component_generator_spec.rb",
219
+ "spec/generators/puffer/controller/controller_generator_spec.rb",
220
+ "spec/helpers/puffer_helper_spec.rb",
208
221
  "spec/integration/navigation_spec.rb",
209
222
  "spec/lib/component_spec.rb",
210
223
  "spec/lib/extensions/core_spec.rb",
211
224
  "spec/lib/fields_spec.rb",
212
- "spec/lib/params_spec.rb",
225
+ "spec/lib/filters_spec.rb",
226
+ "spec/lib/orm_adapter/active_record_spec.rb",
227
+ "spec/lib/orm_adapter/base_shared.rb",
228
+ "spec/lib/orm_adapter/mongoid_spec.rb",
213
229
  "spec/lib/resource/routing_spec.rb",
230
+ "spec/lib/resource/tree_spec.rb",
214
231
  "spec/lib/resource_spec.rb",
215
232
  "spec/puffer_spec.rb",
216
233
  "spec/spec_helper.rb"
@@ -234,6 +251,7 @@ Gem::Specification.new do |s|
234
251
  s.add_development_dependency(%q<rspec-rails>, [">= 0"])
235
252
  s.add_development_dependency(%q<capybara>, [">= 0"])
236
253
  s.add_development_dependency(%q<database_cleaner>, [">= 0"])
254
+ s.add_development_dependency(%q<ammeter>, [">= 0"])
237
255
  s.add_development_dependency(%q<guard>, [">= 0"])
238
256
  s.add_development_dependency(%q<libnotify>, [">= 0"])
239
257
  s.add_development_dependency(%q<guard-rspec>, [">= 0"])
@@ -252,6 +270,7 @@ Gem::Specification.new do |s|
252
270
  s.add_dependency(%q<rspec-rails>, [">= 0"])
253
271
  s.add_dependency(%q<capybara>, [">= 0"])
254
272
  s.add_dependency(%q<database_cleaner>, [">= 0"])
273
+ s.add_dependency(%q<ammeter>, [">= 0"])
255
274
  s.add_dependency(%q<guard>, [">= 0"])
256
275
  s.add_dependency(%q<libnotify>, [">= 0"])
257
276
  s.add_dependency(%q<guard-rspec>, [">= 0"])
@@ -271,6 +290,7 @@ Gem::Specification.new do |s|
271
290
  s.add_dependency(%q<rspec-rails>, [">= 0"])
272
291
  s.add_dependency(%q<capybara>, [">= 0"])
273
292
  s.add_dependency(%q<database_cleaner>, [">= 0"])
293
+ s.add_dependency(%q<ammeter>, [">= 0"])
274
294
  s.add_dependency(%q<guard>, [">= 0"])
275
295
  s.add_dependency(%q<libnotify>, [">= 0"])
276
296
  s.add_dependency(%q<guard-rspec>, [">= 0"])
@@ -6,7 +6,7 @@ class Admin::PostsController < Puffer::Base
6
6
 
7
7
  index do
8
8
  field 'user.email'
9
- field :status
9
+ field :status, :select => Post.statuses
10
10
  field :title
11
11
  field :body
12
12
  end
@@ -15,6 +15,7 @@ class Admin::UsersController < Puffer::Base
15
15
  index do
16
16
  field :email
17
17
  field :password, :type => :password
18
+ field :posts
18
19
  end
19
20
 
20
21
  form do
@@ -1,3 +1,7 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  protect_from_forgery
3
+
4
+ def has_puffer_access? namespace
5
+ true
6
+ end
3
7
  end
@@ -0,0 +1,36 @@
1
+ class Orms::ActiveRecordOrmPrimalsController < Puffer::Base
2
+
3
+ setup do
4
+ group :active_record
5
+ model_name 'active_record_orm/primal'
6
+ end
7
+
8
+ index do
9
+ field :string_field
10
+ field :text_field
11
+ field :select_field, :select => (1..5).map {|i| "option #{i}"}
12
+ field :integer_field
13
+ field :float_field
14
+ field :decimal_field
15
+ field :datetime_field
16
+ field :timestamp_field
17
+ field :time_field
18
+ field :date_field
19
+ field :boolean_field
20
+ end
21
+
22
+ form do
23
+ field :string_field
24
+ field :text_field
25
+ field :select_field, :select => (1..5).map {|i| "option #{i}"}
26
+ field :integer_field
27
+ field :float_field
28
+ field :decimal_field
29
+ field :datetime_field
30
+ field :timestamp_field
31
+ field :time_field
32
+ field :date_field
33
+ field :boolean_field
34
+ end
35
+
36
+ end
@@ -0,0 +1,42 @@
1
+ class Orms::MongoidOrmPrimalsController < Puffer::Base
2
+
3
+ setup do
4
+ group :mongoid
5
+ model_name 'mongoid_orm/primal'
6
+ end
7
+
8
+ index do
9
+ field :string_field
10
+ field :symbol_field
11
+ field :select_field, :select => (1..5).map {|i| "option #{i}"}
12
+ field :integer_field
13
+ field :float_field
14
+ field :decimal_field
15
+ field :datetime_field
16
+ field :time_field
17
+ field :date_field
18
+ field :boolean_field
19
+ field :array_field
20
+ field :hash_field
21
+ field :set_field
22
+ field :range_field
23
+ end
24
+
25
+ form do
26
+ field :string_field
27
+ field :symbol_field
28
+ field :select_field, :select => (1..5).map {|i| "option #{i}"}
29
+ field :integer_field
30
+ field :float_field
31
+ field :decimal_field
32
+ field :datetime_field
33
+ field :time_field
34
+ field :date_field
35
+ field :boolean_field
36
+ field :array_field
37
+ field :hash_field
38
+ field :set_field
39
+ field :range_field
40
+ end
41
+
42
+ end
@@ -0,0 +1,5 @@
1
+ module ActiveRecordOrm
2
+ def self.table_name_prefix
3
+ 'active_record_orm_'
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ class ActiveRecordOrm::Primal < ActiveRecord::Base
2
+ end
@@ -1,4 +1,4 @@
1
- class MongoidTest
1
+ class MongoidOrm
2
2
  include Mongoid::Document
3
3
 
4
4
  field :string_field, :type => String
@@ -0,0 +1,46 @@
1
+ class MongoidOrm::Primal
2
+ include Mongoid::Document
3
+
4
+ field :string_field, :type => String
5
+ field :symbol_field, :type => Symbol
6
+ field :select_field, :type => String
7
+ field :integer_field, :type => Integer
8
+ field :float_field, :type => Float
9
+ field :decimal_field, :type => BigDecimal
10
+ field :datetime_field, :type => DateTime
11
+ field :time_field, :type => Time
12
+ field :date_field, :type => Date
13
+ field :boolean_field, :type => Boolean
14
+ field :array_field, :type => Array
15
+ field :hash_field, :type => Hash
16
+ field :set_field, :type => ::Set
17
+ field :range_field, :type => Range
18
+
19
+ def array_field_before_type_cast
20
+ array_field.join(', ') if array_field.present?
21
+ end
22
+
23
+ def array_field= value
24
+ value = value.split(',').map(&:strip).map(&:presence).compact if value.is_a? String
25
+ write_attribute :array_field, value
26
+ end
27
+
28
+ def set_field_before_type_cast
29
+ set_field.to_a.join(', ') if set_field.present?
30
+ end
31
+
32
+ def set_field= value
33
+ value = value.split(',').map(&:strip).map(&:presence).compact if value.is_a? String
34
+ write_attribute :set_field, value
35
+ end
36
+
37
+ def range_field_before_type_cast
38
+ range_field.to_s
39
+ end
40
+
41
+ def range_field= value
42
+ value = Range.new(*value.split('..', 2).map(&:to_i)) rescue nil if value.is_a? String
43
+ write_attribute :range_field, value
44
+ end
45
+
46
+ end
@@ -24,4 +24,7 @@ Dummy::Application.configure do
24
24
 
25
25
  # Do not compress assets
26
26
  config.assets.compress = false
27
+
28
+ # Expands the lines which load the assets
29
+ config.assets.debug = true
27
30
  end
@@ -30,7 +30,8 @@ Dummy::Application.routes.draw do
30
30
  end
31
31
 
32
32
  namespace :orms do
33
- resources :mongoid_tests
33
+ resources :active_record_orm_primals
34
+ resources :mongoid_orm_primals
34
35
  end
35
36
 
36
37
  end
@@ -0,0 +1,17 @@
1
+ class CreateActiveRecordOrmPrimals < ActiveRecord::Migration
2
+ def change
3
+ create_table :active_record_orm_primals do |t|
4
+ t.string :string_field
5
+ t.text :text_field
6
+ t.string :select_field
7
+ t.integer :integer_field
8
+ t.float :float_field
9
+ t.decimal :decimal_field
10
+ t.datetime :datetime_field
11
+ t.timestamp :timestamp_field
12
+ t.time :time_field
13
+ t.date :date_field
14
+ t.boolean :boolean_field
15
+ end
16
+ end
17
+ end
@@ -11,7 +11,21 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20110912114129) do
14
+ ActiveRecord::Schema.define(:version => 20110930183902) do
15
+
16
+ create_table "active_record_orm_primals", :force => true do |t|
17
+ t.string "string_field"
18
+ t.text "text_field"
19
+ t.string "select_field"
20
+ t.integer "integer_field"
21
+ t.float "float_field"
22
+ t.decimal "decimal_field"
23
+ t.datetime "datetime_field"
24
+ t.datetime "timestamp_field"
25
+ t.time "time_field"
26
+ t.date "date_field"
27
+ t.boolean "boolean_field"
28
+ end
15
29
 
16
30
  create_table "categories", :force => true do |t|
17
31
  t.string "title"
@@ -0,0 +1,13 @@
1
+ Fabricator :active_record_orm_primal, :class_name => 'active_record_orm/primal' do
2
+ string_field { Forgery::LoremIpsum.sentence }
3
+ text_field { Forgery::LoremIpsum.paragraphs 3 }
4
+ select_field { sequence(:select_field) {|i| "option #{i}" } }
5
+ integer_field { sequence :integer_field }
6
+ float_field { sequence :float_field }
7
+ decimal_field { sequence :decimal_field }
8
+ datetime_field { sequence(:datetime_field) {|i| DateTime.now + i.days } }
9
+ timestamp_field { sequence(:timestamp_field) {|i| DateTime.now + i.days } }
10
+ time_field { sequence(:time_field) {|i| DateTime.now + i.hours } }
11
+ date_field { sequence(:date_field) {|i| DateTime.now + i.days } }
12
+ boolean_field { rand 2 }
13
+ end