puffer 0.0.29 → 0.0.30

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.
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