lolita 3.0.5 → 3.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.rspec +2 -0
  2. data/GUIDELINE +20 -20
  3. data/VERSION +1 -1
  4. data/app/views/components/lolita/field/_boolean.html.erb +1 -0
  5. data/app/views/components/lolita/field/_select.html.erb +1 -1
  6. data/app/views/components/lolita/field/_text.html.erb +1 -1
  7. data/app/views/components/lolita/navigation/_display.html.erb +1 -1
  8. data/app/views/components/lolita/shared/_flash.html.erb +1 -1
  9. data/app/views/lolita/layouts/application.html.erb +3 -2
  10. data/lib/generators/lolita/{copy_assets_generator.rb → assets_generator.rb} +1 -1
  11. data/lib/generators/lolita/install_generator.rb +6 -3
  12. data/lib/lolita.rb +136 -135
  13. data/lib/lolita/adapter/active_record.rb +110 -110
  14. data/lib/lolita/adapter/mongoid.rb +104 -104
  15. data/lib/lolita/base_configuration.rb +49 -21
  16. data/lib/lolita/configuration/base.rb +76 -76
  17. data/lib/lolita/configuration/factory.rb +46 -0
  18. data/lib/lolita/configuration/field.rb +31 -45
  19. data/lib/lolita/configuration/field/boolean.rb +10 -0
  20. data/lib/lolita/configuration/{field_extensions → field}/collection.rb +25 -17
  21. data/lib/lolita/configuration/field/datetime.rb +10 -0
  22. data/lib/lolita/configuration/field/disabled.rb +10 -0
  23. data/lib/lolita/configuration/field/integer.rb +10 -0
  24. data/lib/lolita/configuration/field/password.rb +10 -0
  25. data/lib/lolita/configuration/field/string.rb +11 -0
  26. data/lib/lolita/configuration/field/text.rb +10 -0
  27. data/lib/lolita/configuration/tab.rb +5 -25
  28. data/lib/lolita/configuration/tab/default.rb +24 -0
  29. data/lib/lolita/configuration/tabs.rb +7 -3
  30. data/lib/lolita/controllers/component_helpers.rb +16 -1
  31. data/lib/lolita/errors.rb +2 -0
  32. data/lib/lolita/mapping.rb +17 -4
  33. data/lib/lolita/modules/rest.rb +1 -1
  34. data/lib/lolita/rails/routes.rb +21 -12
  35. data/lolita.gemspec +15 -5
  36. data/public/javascripts/lolita/main.js +7 -6
  37. data/public/javascripts/lolita/tab.js +36 -36
  38. data/spec/configuration/field_spec.rb +3 -3
  39. data/spec/configuration/tab_spec.rb +2 -2
  40. data/spec/configuration/tabs_spec.rb +7 -0
  41. data/spec/rails_app/public/javascripts/lolita/tab.js +36 -36
  42. data/spec/rails_app/public/javascripts/rails.js +137 -137
  43. metadata +16 -6
  44. data/lib/lolita/version.rb +0 -3
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format d
data/GUIDELINE CHANGED
@@ -1,20 +1,20 @@
1
- # Creating GEM for Lolita
2
-
3
- When creating GEM, that include new module in one or more of lolita modules, use
4
- Lolita.send(:include,YourModule) instead of reopening module.
5
-
6
- # How to install
7
-
8
- gem install lolita
9
-
10
- cd your_project
11
-
12
- rails g lolita:install
13
-
14
- change your project initializers/lolita.rb
15
-
16
- # For cucumber testing
17
- gem install akephalos
18
- bundle exec cucumber features
19
-
20
-
1
+ # Creating GEM for Lolita
2
+
3
+ When creating GEM, that include new module in one or more of lolita modules, use
4
+ Lolita.send(:include,YourModule) instead of reopening module.
5
+
6
+ # How to install
7
+
8
+ gem install lolita
9
+
10
+ cd your_project
11
+
12
+ rails g lolita:install
13
+
14
+ change your project initializers/lolita.rb
15
+
16
+ # For cucumber testing
17
+ gem install akephalos
18
+ bundle exec cucumber features
19
+
20
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.5
1
+ 3.0.6
@@ -0,0 +1 @@
1
+ <%= check_box resource_name, field.name %>
@@ -1 +1 @@
1
- <%= select resource_name, field.name, field.association_values %>
1
+ <%= select resource_name, field.name, field.association_values.respond_to?(:call) ? field.association_values.call(self) : field.association_values %>
@@ -7,7 +7,7 @@
7
7
  theme: "advanced",
8
8
  skin: "cirkuit",
9
9
  mode: "textareas",
10
- theme_advanced_buttons1 : "bold,italic,underline,|,justifyleft,justifycenter,justifyright,|,formatselect,|,link,unlink,image",
10
+ theme_advanced_buttons1 : "bold,italic,underline,|,justifyleft,justifycenter,justifyright,|,formatselect,|,link,unlink,image,code",
11
11
  theme_advanced_buttons2 : "",
12
12
  theme_advanced_buttons3 : "",
13
13
  theme_advanced_toolbar_location: "top",
@@ -1,6 +1,6 @@
1
1
  <nav>
2
2
  <ul>
3
- <% Lolita.mappings.each do |name,mapping| %>
3
+ <% Lolita.resources.each do |name,mapping| %>
4
4
  <li <%=mapping.to==resource_class ? "class='active'" : ""%> >
5
5
  <%= link_to mapping.name.to_s.humanize, lolita_resources_path(mapping) %>
6
6
  </li>
@@ -9,5 +9,5 @@
9
9
  setTimeout(function() {
10
10
  $("#flash").slideUp("fast")
11
11
  }, 10000); //wait 10 seconds and then slide up
12
- </script>
12
+ </script>
13
13
  <% end%>
@@ -13,6 +13,7 @@
13
13
  <link rel="shortcut icon" href="/favicon.ico">
14
14
 
15
15
  <%= stylesheet_link_tag "lolita/default","lolita/style" %>
16
+ <%= yield :style %>
16
17
  <%= javascript_include_tag "modernizr-1.7.min" %>
17
18
  <%= raw csrf_meta_tag %>
18
19
  </head>
@@ -32,9 +33,9 @@
32
33
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.js">
33
34
  </script>
34
35
  <script>
35
- window.jQuery || document.write('<script src="jquery-1.5.1.min.js">\x3C/script>')
36
+ window.jQuery || document.write('<script src="/javascripts/jquery-1.5.1.min.js">\x3C/script>')
36
37
  </script>
37
- <%= javascript_include_tag "rails","lolita/tab" %>
38
+ <%= javascript_include_tag "rails","lolita/tab","lolita/main" %>
38
39
  <%= content_for :script %>
39
40
  </body>
40
41
  </html>
@@ -1,7 +1,7 @@
1
1
  require 'generators/helpers/file_helper'
2
2
  module Lolita
3
3
  module Generators
4
- class CopyAssetsGenerator < Rails::Generators::Base
4
+ class AssetsGenerator < Rails::Generators::Base
5
5
  include Lolita::Generators::FileHelper
6
6
  desc "Copy all from lolita public directory to project public directory."
7
7
  def copy_all
@@ -13,11 +13,14 @@ module Lolita
13
13
  end
14
14
 
15
15
  def copy_assets
16
- generate("lolita:copy_assets")
16
+ generate("lolita:assets")
17
17
  end
18
18
 
19
- def load_seed
20
- eval(File.new(File.join(LOLITA_ROOT,"db","seed.rb")).read)
19
+ def install_modules
20
+ Lolita.modules.each do |module_name|
21
+
22
+ invoke "#{module_name.to_s.underscore.gsub("/","_")}:install"
23
+ end
21
24
  end
22
25
 
23
26
  end
data/lib/lolita.rb CHANGED
@@ -1,136 +1,137 @@
1
- main_time=Time.now
2
-
3
- $:<<File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
4
-
5
- require 'abstract' #FIXME remove from gem
6
- require 'active_support/core_ext/numeric/time'
7
- require 'active_support/concern'
8
- require 'active_support/callbacks'
9
- require 'active_support/dependencies'
10
- require 'lolita/errors'
11
- # Require all ruby extensions
12
- Dir["#{File.dirname(__FILE__)}/lolita/ruby_ext/**/*.*"].each do |path|
13
- require path
14
- end
15
-
16
- module Lolita
17
- autoload(:LazyLoader,'lolita/lazy_loader')
18
- autoload(:VERSION,'lolita/version')
19
- autoload(:ObservedArray,'lolita/observed_array')
20
- autoload(:Builder,'lolita/builder')
21
- autoload(:BaseConfiguration,'lolita/base_configuration')
22
- module Adapter
23
- autoload :AbstractAdapter, 'lolita/adapter/abstract_adapter'
24
- autoload :ActiveRecord, 'lolita/adapter/active_record'
25
- autoload :Mongoid, 'lolita/adapter/mongoid'
26
- end
27
-
28
- module DBI
29
- autoload :Base, 'lolita/dbi/base'
30
- end
31
-
32
- module Hooks
33
- require 'lolita/hooks/hooks'
34
- include Lolita::Hooks::Hooks
35
- autoload :Base, 'lolita/hooks/base'
36
- autoload :Component, 'lolita/hooks/component'
37
- end
38
-
39
- module Configuration
40
- autoload :Base, 'lolita/configuration/base'
41
- autoload :Column, 'lolita/configuration/column'
42
- autoload :Columns, 'lolita/configuration/columns'
43
- autoload :Field, 'lolita/configuration/field'
44
- autoload :FieldSet, 'lolita/configuration/field_set'
45
- autoload :List, 'lolita/configuration/list'
46
- autoload :Page, 'lolita/configuration/page'
47
- autoload :Tab, 'lolita/configuration/tab'
48
- autoload :Tabs, 'lolita/configuration/tabs'
49
-
50
- Dir["#{File.dirname(__FILE__)}/lolita/configuration/tab/**/*.*"].each do |path|
51
- base_name=File.basename(path,".rb")
52
- autoload :"#{base_name.capitalize}Tab", "lolita/configuration/tab/#{base_name}"
53
- end
54
-
55
- module FieldExtensions
56
- Dir["#{File.dirname(__FILE__)}/lolita/configuration/field_extensions/**/*.*"].each do |path|
57
- base_name=File.basename(path,".rb")
58
- autoload base_name.capitalize.to_sym, "lolita/configuration/field_extensions/#{base_name}"
59
- end
60
- end
61
-
62
-
63
- def self.included(base)
64
- base.class_eval do
65
- extend ClassMethods
66
- def lolita
67
- self.class.lolita
68
- end
69
- end
70
- end
71
-
72
- module ClassMethods
73
- def lolita(&block)
74
- Lolita::LazyLoader.lazy_load(self,:@lolita,Lolita::Configuration::Base,self,&block)
75
- end
76
- def lolita=(value)
77
- if value.is_a?(Lolita::Configuration::Base)
78
- @lolita=value
79
- else
80
- raise ArgumentError.new("Only Lolita::Configuration::Base is acceptable.")
81
- end
82
- end
83
- end
84
- end
85
-
86
- module Test
87
- autoload :Matchers, 'lolita/test/matchers'
88
- end
89
-
90
- module Controllers
91
- autoload :InternalHelpers, 'lolita/controllers/internal_helpers'
92
- autoload :UserHelpers, 'lolita/controllers/user_helpers'
93
- autoload :UrlHelpers, 'lolita/controllers/url_helpers'
94
- autoload :ComponentHelpers, 'lolita/controllers/component_helpers'
95
- autoload :ViewUserHelpers, 'lolita/controllers/view_user_helpers'
96
- end
97
-
98
- @@scopes={}
99
-
100
- def self.scope name=nil
101
- name||=scope_name
102
- @@scopes[name]||=Lolita::BaseConfiguration.new(name)
103
- @@scopes[name]
104
- end
105
-
106
- def self.setup
107
- yield scope
108
- end
109
-
110
- def self.scope_name
111
- :default
112
- end
113
-
114
- def self.root
115
- @@root||=File.expand_path("#{__FILE__}/../..")
116
- end
117
-
118
- def self.app_root
119
- @@app_root||=File.join(File.expand_path("#{__FILE__}/../.."),"app")
120
- end
121
-
122
- def self.method_missing method_name, *args, &block
123
- scope.send(method_name,*args,&block)
124
- end
125
-
126
- end
127
-
128
- engine_time=Time.now
129
-
130
- if defined?(Rails)
131
- require 'lolita/rails/all'
132
- end
133
-
134
- puts "Lolita engine started in #{Time.at(Time.now-engine_time).strftime("%M:%S.%3N")}"
135
-
1
+ main_time=Time.now
2
+
3
+ $:<<File.dirname(__FILE__) unless $:.include?(File.dirname(__FILE__))
4
+
5
+ require 'abstract' #FIXME remove from gem
6
+ require 'active_support/core_ext/numeric/time'
7
+ require 'active_support/concern'
8
+ require 'active_support/callbacks'
9
+ require 'active_support/dependencies'
10
+ require 'lolita/errors'
11
+ # Require all ruby extensions
12
+ Dir["#{File.dirname(__FILE__)}/lolita/ruby_ext/**/*.*"].each do |path|
13
+ require path
14
+ end
15
+
16
+ module Lolita
17
+ autoload(:LazyLoader,'lolita/lazy_loader')
18
+ autoload(:VERSION,'lolita/version')
19
+ autoload(:ObservedArray,'lolita/observed_array')
20
+ autoload(:Builder,'lolita/builder')
21
+ autoload(:BaseConfiguration,'lolita/base_configuration')
22
+ module Adapter
23
+ autoload :AbstractAdapter, 'lolita/adapter/abstract_adapter'
24
+ autoload :ActiveRecord, 'lolita/adapter/active_record'
25
+ autoload :Mongoid, 'lolita/adapter/mongoid'
26
+ end
27
+
28
+ module DBI
29
+ autoload :Base, 'lolita/dbi/base'
30
+ end
31
+
32
+ module Hooks
33
+ require 'lolita/hooks/hooks'
34
+ include Lolita::Hooks::Hooks
35
+ autoload :Base, 'lolita/hooks/base'
36
+ autoload :Component, 'lolita/hooks/component'
37
+ end
38
+
39
+ module Configuration
40
+ autoload :Factory, 'lolita/configuration/factory'
41
+ autoload :Base, 'lolita/configuration/base'
42
+ autoload :Column, 'lolita/configuration/column'
43
+ autoload :Columns, 'lolita/configuration/columns'
44
+ autoload :Field, 'lolita/configuration/field'
45
+ autoload :FieldSet, 'lolita/configuration/field_set'
46
+ autoload :List, 'lolita/configuration/list'
47
+ autoload :Page, 'lolita/configuration/page'
48
+ autoload :Tab, 'lolita/configuration/tab'
49
+ autoload :Tabs, 'lolita/configuration/tabs'
50
+
51
+ ["tab","field"].each do |type|
52
+ Dir["#{File.dirname(__FILE__)}/lolita/configuration/#{type}/**/*.*"].each do |path|
53
+ base_name=File.basename(path,".rb")
54
+ autoload :"#{base_name.capitalize}#{type.humanize}", "lolita/configuration/#{type}/#{base_name}"
55
+ end
56
+ end
57
+
58
+
59
+ def self.included(base)
60
+ base.class_eval do
61
+ extend ClassMethods
62
+ def lolita
63
+ self.class.lolita
64
+ end
65
+ end
66
+ end
67
+
68
+ module ClassMethods
69
+ def lolita(&block)
70
+ Lolita::LazyLoader.lazy_load(self,:@lolita,Lolita::Configuration::Base,self,&block)
71
+ end
72
+ def lolita=(value)
73
+ if value.is_a?(Lolita::Configuration::Base)
74
+ @lolita=value
75
+ else
76
+ raise ArgumentError.new("Only Lolita::Configuration::Base is acceptable.")
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ module Test
83
+ autoload :Matchers, 'lolita/test/matchers'
84
+ end
85
+
86
+ module Controllers
87
+ autoload :InternalHelpers, 'lolita/controllers/internal_helpers'
88
+ autoload :UserHelpers, 'lolita/controllers/user_helpers'
89
+ autoload :UrlHelpers, 'lolita/controllers/url_helpers'
90
+ autoload :ComponentHelpers, 'lolita/controllers/component_helpers'
91
+ autoload :ViewUserHelpers, 'lolita/controllers/view_user_helpers'
92
+ end
93
+
94
+
95
+ @@scopes={}
96
+
97
+ def self.scope name=nil
98
+ name||=scope_name
99
+ @@scopes[name]||=Lolita::BaseConfiguration.new(name)
100
+ @@scopes[name]
101
+ end
102
+
103
+ def self.setup
104
+ yield scope
105
+ end
106
+
107
+ def self.scope_name
108
+ :default
109
+ end
110
+
111
+ def self.root
112
+ @@root||=File.expand_path("#{__FILE__}/../..")
113
+ end
114
+
115
+ def self.app_root
116
+ @@app_root||=File.join(File.expand_path("#{__FILE__}/../.."),"app")
117
+ end
118
+
119
+ def self.method_missing method_name, *args, &block
120
+ scope.send(method_name,*args,&block)
121
+ end
122
+
123
+ module Generators
124
+ autoload :FileHelper, File.join(Lolita.root,"lib","generators","helpers","file_helper")
125
+ end
126
+
127
+ end
128
+
129
+ engine_time=Time.now
130
+
131
+ if defined?(Rails)
132
+ require 'lolita/rails/all'
133
+ end
134
+
135
+ puts "Lolita engine started in #{Time.at(Time.now-engine_time).strftime("%M:%S.%3N")}"
136
+
136
137
  puts "Lolita started in #{Time.at(Time.now-main_time).strftime("%M:%S.%3N")}"
@@ -1,111 +1,111 @@
1
- module Lolita
2
- module Adapter
3
- class ActiveRecord
4
- include Lolita::Adapter::AbstractAdapter
5
-
6
- attr_reader :dbi, :klass
7
- def initialize(dbi)
8
- @dbi=dbi
9
- @klass=dbi.klass
10
- end
11
-
12
- def associations
13
- klass.reflections
14
- end
15
-
16
- # Same as in mongoid
17
- def associations_klass_names
18
- names=[]
19
- associations.each{|name,association|
20
- names << association.class_name
21
- }
22
- names
23
- end
24
-
25
- def reflect_on_association(name)
26
- klass.reflect_on_association(name)
27
- end
28
-
29
- def association_macro(association)
30
- type=association.macro
31
- case type
32
- when :has_many
33
- :many
34
- when :has_one
35
- :one
36
- when :belongs_to
37
- :one
38
- when :has_and_belongs_to_many
39
- :many
40
- end
41
- end
42
-
43
- def association_class_name(association)
44
- association.class_name
45
- end
46
-
47
- def fields
48
- @fields||=self.klass.columns.collect{|column|
49
- field_to_hash(column)
50
- }.reject{|column|
51
- column[:options][:primary]
52
- }
53
- @fields
54
- end
55
-
56
- def find_by_id(id)
57
- self.klass.where(:id=>id).first
58
- end
59
-
60
- def find(*args)
61
- self.klass.find(*args)
62
- end
63
-
64
- def paginate(opt={})
65
- #FIXME depend on will_paginate
66
- if order=opt.delete(:sort)
67
- order.map{|c| c.join(" ")}.join(", ")
68
- opt[:order_by]=order
69
- end
70
- self.klass.paginate(opt)
71
- end
72
-
73
- def db
74
- self.klass.connection
75
- end
76
-
77
- def db_name
78
- db.current_database
79
- end
80
-
81
- def collection
82
- self.klass #FIXME not realy same as in mongoid
83
- end
84
-
85
- def collection_name
86
- self.klass.table_name
87
- end
88
-
89
- def collections
90
- self.klass #FIXME not realy same as in mongoid
91
- end
92
-
93
- def collection_names
94
- self.klass.connection.select_all("show tables from #{db_name}").map{|r| r.values.first}
95
- end
96
-
97
- private
98
-
99
- def field_to_hash(column)
100
- {
101
- :name=>column.name,
102
- :type=>column.type.to_s,
103
- :title=>column.name.to_s.humanize,
104
- :options=>{
105
- :primary=>column.primary
106
- }
107
- }
108
- end
109
- end
110
- end
1
+ module Lolita
2
+ module Adapter
3
+ class ActiveRecord
4
+ include Lolita::Adapter::AbstractAdapter
5
+
6
+ attr_reader :dbi, :klass
7
+ def initialize(dbi)
8
+ @dbi=dbi
9
+ @klass=dbi.klass
10
+ end
11
+
12
+ def associations
13
+ klass.reflections
14
+ end
15
+
16
+ # Same as in mongoid
17
+ def associations_klass_names
18
+ names=[]
19
+ associations.each{|name,association|
20
+ names << association.class_name
21
+ }
22
+ names
23
+ end
24
+
25
+ def reflect_on_association(name)
26
+ klass.reflect_on_association(name)
27
+ end
28
+
29
+ def association_macro(association)
30
+ type=association.macro
31
+ case type
32
+ when :has_many
33
+ :many
34
+ when :has_one
35
+ :one
36
+ when :belongs_to
37
+ :one
38
+ when :has_and_belongs_to_many
39
+ :many
40
+ end
41
+ end
42
+
43
+ def association_class_name(association)
44
+ association.class_name
45
+ end
46
+
47
+ def fields
48
+ @fields||=self.klass.columns.collect{|column|
49
+ field_to_hash(column)
50
+ }.reject{|column|
51
+ column[:options][:primary]
52
+ }
53
+ @fields
54
+ end
55
+
56
+ def find_by_id(id)
57
+ self.klass.where(:id=>id).first
58
+ end
59
+
60
+ def find(*args)
61
+ self.klass.find(*args)
62
+ end
63
+
64
+ def paginate(opt={})
65
+ #FIXME depend on will_paginate
66
+ if order=opt.delete(:sort)
67
+ order.map{|c| c.join(" ")}.join(", ")
68
+ opt[:order_by]=order
69
+ end
70
+ self.klass.paginate(opt)
71
+ end
72
+
73
+ def db
74
+ self.klass.connection
75
+ end
76
+
77
+ def db_name
78
+ db.current_database
79
+ end
80
+
81
+ def collection
82
+ self.klass #FIXME not realy same as in mongoid
83
+ end
84
+
85
+ def collection_name
86
+ self.klass.table_name
87
+ end
88
+
89
+ def collections
90
+ self.klass #FIXME not realy same as in mongoid
91
+ end
92
+
93
+ def collection_names
94
+ self.klass.connection.select_all("show tables from #{db_name}").map{|r| r.values.first}
95
+ end
96
+
97
+ private
98
+
99
+ def field_to_hash(column)
100
+ {
101
+ :name=>column.name,
102
+ :type=>column.type.to_s,
103
+ :title=>column.name.to_s.humanize,
104
+ :options=>{
105
+ :primary=>column.primary
106
+ }
107
+ }
108
+ end
109
+ end
110
+ end
111
111
  end