lolita 3.0.5 → 3.0.6

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