active_leonardo 0.2.0 → 0.2.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -43
  3. data/LICENSE +19 -19
  4. data/README.md +173 -173
  5. data/active_template.rb +157 -141
  6. data/lib/generators/active_leonardo.rb +383 -383
  7. data/lib/generators/erb/leosca/leosca_generator.rb +122 -122
  8. data/lib/generators/leolay/USAGE +21 -21
  9. data/lib/generators/leolay/leolay_generator.rb +420 -420
  10. data/lib/generators/leolay/templates/app/admin/users.rb +87 -87
  11. data/lib/generators/leolay/templates/spec/helpers/application_helpers.rb +13 -13
  12. data/lib/generators/leolay/templates/spec/support/devise.rb +4 -4
  13. data/lib/generators/leolay/templates/styles/active/stylesheets/app/custom_active_admin.css.scss +27 -27
  14. data/lib/generators/leosca/USAGE +23 -23
  15. data/lib/generators/rails/leosca/USAGE +39 -39
  16. data/lib/generators/rails/leosca/leosca_generator.rb +55 -55
  17. data/lib/generators/rails/leosca/templates/leosca.css +56 -56
  18. data/lib/generators/rails/leosca_controller/USAGE +23 -23
  19. data/lib/generators/rails/leosca_controller/leosca_controller_generator.rb +192 -192
  20. data/lib/generators/rails/leosca_controller/templates/controller.rb +3 -3
  21. data/lib/generators/rspec/leointegration/leointegration_generator.rb +35 -35
  22. data/lib/generators/rspec/leointegration/templates/admin/feature.rb +67 -67
  23. data/lib/generators/rspec/leointegration/templates/feature.rb +9 -9
  24. data/lib/generators/rspec/leosca/leosca_generator.rb +57 -57
  25. data/lib/generators/rspec/leosca/templates/admin/controller_spec.rb +181 -181
  26. data/lib/generators/rspec/leosca/templates/admin/edit_spec.rb +31 -31
  27. data/lib/generators/rspec/leosca/templates/admin/index_spec.rb +32 -32
  28. data/lib/generators/rspec/leosca/templates/admin/new_spec.rb +30 -30
  29. data/lib/generators/rspec/leosca/templates/admin/routing_spec.rb +39 -39
  30. data/lib/generators/rspec/leosca/templates/admin/show_spec.rb +28 -28
  31. data/lib/generators/rspec/leosca/templates/controller_spec.rb +168 -168
  32. data/lib/generators/rspec/leosca/templates/edit_spec.rb +31 -31
  33. data/lib/generators/rspec/leosca/templates/index_spec.rb +32 -32
  34. data/lib/generators/rspec/leosca/templates/new_spec.rb +30 -30
  35. data/lib/generators/rspec/leosca/templates/routing_spec.rb +39 -39
  36. data/lib/generators/rspec/leosca/templates/show_spec.rb +28 -28
  37. metadata +3 -3
data/active_template.rb CHANGED
@@ -1,141 +1,157 @@
1
- #########################################################
2
- # 2012 Marco Mastrodonato(c)
3
- # This is a Rails 3.1+ template to use with activeleonardo gem
4
- # https://rubygems.org/gems/Activeleonardo
5
- #
6
- # USAGE: rails new yourappname -m active_template.rb
7
- #
8
- # -------------------------------------------------------
9
- #
10
- #########################################################
11
-
12
- puts '*' * 40
13
- puts "* Processing template..."
14
- puts '*' * 40
15
-
16
- use_git = yes?("Do you use git ?")
17
- if use_git
18
- git :init
19
- file ".gitignore", <<-EOS.gsub(/^ /, '')
20
- # See http://help.github.com/ignore-files/ for more about ignoring files.
21
- #
22
- # If you find yourself ignoring temporary files generated by your text editor
23
- # or operating system, you probably want to add a global ignore instead:
24
- # git config --global core.excludesfile ~/.gitignore_global
25
-
26
- # Ignore bundler config
27
- /.bundle
28
- # Ignore the default SQLite database.
29
- /db/*.sqlite3
30
- # Ignore all logfiles and tempfiles.
31
- /log/*.log
32
- /tmp
33
- /nbproject
34
- /.idea
35
- lib/tasks/files/*
36
- /*.cmd
37
- /*.dat
38
- /config/initializers/secret_token.rb
39
- EOS
40
- end
41
-
42
- gem "activeadmin", git: 'http://192.30.252.131/gregbell/active_admin.git'
43
- gem "active_leonardo", git: 'http://172.24.18.42/ErgoVita/Active_Leonardo.git', branch: 'stage'
44
- gem "bourbon"
45
-
46
- easy_develop = yes?("Do you want to make development easier?")
47
- if easy_develop
48
- gem "rack-mini-profiler"
49
- gem "jquery-turbolinks"
50
- gem "awesome_print"
51
- end
52
-
53
- #use_editor = yes?("Do you want a wysihtml editor?")
54
- #if use_editor
55
- # gem 'activeadmin-dragonfly', git: 'https://github.com/stefanoverna/activeadmin-dragonfly'
56
- # gem 'activeadmin-wysihtml5', git: 'https://github.com/stefanoverna/activeadmin-wysihtml5'
57
- #end
58
-
59
- rspec = yes?("Add rspec as testing framework ?")
60
- if rspec
61
- gem 'rspec-rails', :group => [:test, :development]
62
- gem 'capybara', :group => :test
63
- gem 'launchy', :group => :test
64
- gem 'database_cleaner', :group => :test
65
- if /1.8.*/ === RUBY_VERSION
66
- gem 'factory_girl', '2.6.4', :group => :test
67
- gem 'factory_girl_rails', '1.7.0', :group => :test
68
- else
69
- gem 'factory_girl_rails', :group => :test
70
- end
71
- end
72
-
73
- authentication = yes?("Authentication ?")
74
- model_name = authorization = nil
75
- if authentication
76
- default_model_name = "User"
77
- model_name = ask(" Insert model name: [#{default_model_name}]")
78
- if model_name.empty? || model_name == 'y'
79
- model_name = default_model_name
80
- else
81
- model_name = model_name.classify
82
- stdout = <<-REMEM.gsub(/^ /, '')
83
- *************************************************************************
84
- Remember to add your auth class when you use active leonardo's generator.
85
- For example:
86
- rails g leosca Product name price:decimal --auth_class=#{model_name}
87
- *************************************************************************
88
- REMEM
89
- p stdout
90
- end
91
-
92
- authorization = yes?("Authorization ?")
93
- if authorization
94
- gem "cancan"
95
- end
96
- end
97
-
98
- gem 'state_machine' if yes?("Do you have to handle states ?")
99
-
100
- dashboard_root = yes?("Would you use dashboard as root ? (recommended)")
101
- home = yes?("Ok. Would you create home controller as root ?") unless dashboard_root
102
-
103
- if yes?("Bundle install ?")
104
- dir = ask(" Insert folder name to install locally: [blank=default gems path]")
105
- run "bundle install #{"--path=#{dir}" unless dir.empty? || dir=='y'}"
106
- end
107
-
108
- generate "rspec:install" if rspec
109
-
110
- generate "active_admin:install #{authentication ? model_name : "--skip-users"}"
111
-
112
- if authorization
113
- generate "cancan:ability"
114
- generate "migration", "AddRolesMaskTo#{model_name}", "roles_mask:integer"
115
- end
116
-
117
- generate "leolay",
118
- "active", #specify theme
119
- "--auth_class=#{model_name}",
120
- (rspec ? nil : "--skip-rspec"),
121
- (authorization ? nil : "--skip-authorization"),
122
- (authentication ? nil : "--skip-authentication")
123
-
124
-
125
- if dashboard_root
126
- route "root :to => 'admin/dashboard#index'"
127
- elsif home
128
- generate "controller", "home", "index"
129
- route "root :to => 'home#index'"
130
- end
131
-
132
- rake "db:create:all"
133
- rake "db:migrate"
134
- rake "db:seed"
135
-
136
- #rake "gems:unpack" if yes?("Unpack to vendor/gems ?")
137
- if use_git
138
- git :commit => %Q{ -a -m 'Initial commit' }
139
- end
140
-
141
- puts "ENJOY!"
1
+ #########################################################
2
+ # 2014 Marco Mastrodonato(c)
3
+ # This is a Rails 4.0 template to use with activeleonardo gem
4
+ # https://rubygems.org/gems/active_leonardo
5
+ # https://github.com/marcomd/Active_Leonardo
6
+ #
7
+ # USAGE: rails new yourappname -m active_template.rb
8
+ #
9
+ # -------------------------------------------------------
10
+ #
11
+ #########################################################
12
+
13
+ puts '*' * 40
14
+ puts "* Processing template..."
15
+ puts '*' * 40
16
+
17
+ use_git = yes?("Do you use git ?")
18
+ if use_git
19
+ git :init
20
+ file ".gitignore", <<-EOS.gsub(/^ /, '')
21
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
22
+ #
23
+ # If you find yourself ignoring temporary files generated by your text editor
24
+ # or operating system, you probably want to add a global ignore instead:
25
+ # git config --global core.excludesfile ~/.gitignore_global
26
+
27
+ # Ignore bundler config
28
+ /.bundle
29
+ # Ignore the default SQLite database.
30
+ /db/*.sqlite3
31
+ # Ignore all logfiles and tempfiles.
32
+ /log/*.log
33
+ /tmp
34
+ /nbproject
35
+ /.idea
36
+ lib/tasks/files/*
37
+ /*.cmd
38
+ /*.dat
39
+ /config/initializers/secret_token.rb
40
+ EOS
41
+ end
42
+
43
+ gem "activeadmin", git: 'http://github.com/gregbell/active_admin.git'
44
+ gem "active_leonardo"
45
+ gem "jquery-turbolinks"
46
+ gem "bourbon"
47
+
48
+ easy_develop = yes?("Do you want to make development easier?")
49
+ if easy_develop
50
+ gem "rack-mini-profiler", :group => :development
51
+ gem "better_errors", :group => :development
52
+ gem "awesome_print", :group => :development
53
+ end
54
+
55
+ #use_editor = yes?("Do you want a wysihtml editor?")
56
+ #if use_editor
57
+ # gem 'activeadmin-dragonfly', git: 'http://192.30.252.131/stefanoverna/activeadmin-dragonfly'
58
+ # gem 'activeadmin-wysihtml5', git: 'http://192.30.252.131/stefanoverna/activeadmin-wysihtml5'
59
+ #end
60
+
61
+ easy_develop = yes?("Do you want to make development easier?")
62
+ if easy_develop
63
+ gem "rack-mini-profiler"
64
+ gem "jquery-turbolinks"
65
+ gem "awesome_print"
66
+ end
67
+
68
+ #use_editor = yes?("Do you want a wysihtml editor?")
69
+ #if use_editor
70
+ # gem 'activeadmin-dragonfly', git: 'https://github.com/stefanoverna/activeadmin-dragonfly'
71
+ # gem 'activeadmin-wysihtml5', git: 'https://github.com/stefanoverna/activeadmin-wysihtml5'
72
+ #end
73
+
74
+ rspec = yes?("Add rspec as testing framework ?")
75
+ if rspec
76
+ gem 'rspec-rails', :group => [:test, :development]
77
+ gem 'capybara', :group => :test
78
+ gem 'launchy', :group => :test
79
+ gem 'database_cleaner', :group => :test
80
+ if /1.8.*/ === RUBY_VERSION
81
+ gem 'factory_girl', '2.6.4', :group => :test
82
+ gem 'factory_girl_rails', '1.7.0', :group => :test
83
+ else
84
+ gem 'factory_girl_rails', :group => :test
85
+ end
86
+ end
87
+
88
+ authentication = yes?("Authentication ?")
89
+ model_name = authorization = nil
90
+ if authentication
91
+ default_model_name = "User"
92
+ model_name = ask(" Insert model name: [#{default_model_name}]")
93
+ if model_name.empty? || model_name == 'y'
94
+ model_name = default_model_name
95
+ else
96
+ model_name = model_name.classify
97
+ stdout = <<-REMEM.gsub(/^ /, '')
98
+ *************************************************************************
99
+ Remember to add your auth class when you use active leonardo's generator.
100
+ For example:
101
+ rails g leosca Product name price:decimal --auth_class=#{model_name}
102
+ *************************************************************************
103
+ REMEM
104
+ p stdout
105
+ end
106
+
107
+ authorization = yes?("Authorization ?")
108
+ if authorization
109
+ gem "cancan"
110
+ end
111
+ end
112
+
113
+ gem 'state_machine' if yes?("Do you have to handle states ?")
114
+
115
+ dashboard_root = yes?("Would you use dashboard as root ? (recommended)")
116
+ home = yes?("Ok. Would you create home controller as root ?") unless dashboard_root
117
+
118
+ if yes?("Bundle install ?")
119
+ dir = ask(" Insert folder name to install locally: [blank=default gems path]")
120
+ run "bundle install #{"--path=#{dir}" unless dir.empty? || dir=='y'}"
121
+ end
122
+
123
+ generate "rspec:install" if rspec
124
+
125
+ generate "active_admin:install #{authentication ? model_name : "--skip-users"}"
126
+
127
+ if authorization
128
+ generate "cancan:ability"
129
+ generate "migration", "AddRolesMaskTo#{model_name}", "roles_mask:integer"
130
+ end
131
+
132
+ generate "leolay",
133
+ "active", #specify theme
134
+ "--auth_class=#{model_name}",
135
+ (rspec ? nil : "--skip-rspec"),
136
+ (authorization ? nil : "--skip-authorization"),
137
+ (authentication ? nil : "--skip-authentication")
138
+
139
+
140
+ if dashboard_root
141
+ route "root :to => 'admin/dashboard#index'"
142
+ elsif home
143
+ generate "controller", "home", "index"
144
+ route "root :to => 'home#index'"
145
+ end
146
+
147
+ rake "db:create:all"
148
+ rake "db:migrate"
149
+ rake "db:seed"
150
+
151
+ #rake "gems:unpack" if yes?("Unpack to vendor/gems ?")
152
+ if use_git
153
+ git :add => "."
154
+ git :commit => %Q{ -m "Initial commit" }
155
+ end
156
+
157
+ puts "ENJOY!"
@@ -1,384 +1,384 @@
1
- module ActiveLeonardo
2
- module Base
3
- protected
4
- def authorization_file
5
- "app/models/ability.rb"
6
- end
7
- def authorization?
8
- File.exists? authorization_file
9
- end
10
- def authentication_file auth_class="User"
11
- "app/models/#{auth_class.downcase}.rb"
12
- end
13
- def authentication? auth_class="User"
14
- return true if File.exists? authentication_file(auth_class)
15
- File.exists? "config/initializers/devise.rb"
16
- end
17
- def activeadmin_file
18
- "config/initializers/active_admin.rb"
19
- end
20
- def activeadmin?
21
- File.exists? activeadmin_file
22
- end
23
- def auth_class
24
- return unless options[:auth_class]
25
- options[:auth_class].classify
26
- end
27
- #def formtastic?
28
- # return false unless options.formtastic?
29
- # File.exists? "config/initializers/formtastic.rb"
30
- #end
31
- #def jquery_ui?
32
- # File.exists? "vendor/assets/javascripts/jquery-ui"
33
- #end
34
- #def pagination?
35
- # File.exists? "config/initializers/kaminari_config.rb"
36
- #end
37
- end
38
-
39
- module Leosca
40
-
41
- protected
42
-
43
- def attribute_to_hash(attribute)
44
- name = case attribute.type
45
- when :references, :belongs_to then ":#{attribute.name}_id"
46
- else ":#{attribute.name}"
47
- end
48
- value = case attribute.type
49
- when :boolean then "true"
50
- when :integer then "#"
51
- when :float, :decimal then "#.46"
52
- when :references, :belongs_to then "rand(#{attribute.name}_from..#{attribute.name}_to)"
53
- when :date then "#{Time.now.strftime("%Y-%m-%d 00:00:00.000")}".inspect
54
- when :datetime then "#{Time.now.strftime("%Y-%m-%d %H:%M:%S.000")}".inspect
55
- when :time, :timestamp then "#{Time.now.strftime("%H:%M:%S.000")}".inspect
56
- else "#{attribute.name.titleize}\#".inspect
57
- end
58
- " #{name} => #{value}"
59
- end
60
- def attribute_to_range(attribute)
61
- case attribute.type
62
- when :references, :belongs_to then "#{attribute.name}_from = #{attribute.name.classify}.first.id; #{attribute.name}_to = #{attribute.name.classify}.last.id#{CRLF}"
63
- else ""
64
- end
65
- end
66
- def attribute_to_factories(attribute)
67
- spaces = 34
68
- space_association = " " * (spaces-11).abs
69
- space_sequence = " " * (spaces-attribute.name.size-11).abs
70
- space_other = " " * (spaces-attribute.name.size).abs
71
- name = case attribute.type
72
- when :references, :belongs_to then "#{singular_table_name[0..0]}.association#{space_association}"
73
- when :boolean, :datetime, :time, :timestamp
74
- then "#{singular_table_name[0..0]}.#{attribute.name}#{space_other}"
75
- else "#{singular_table_name[0..0]}.sequence(:#{attribute.name})#{space_sequence}"
76
- end
77
- value = case attribute.type
78
- when :boolean then "true"
79
- when :integer then "{|n| n }"
80
- when :float, :decimal then "{|n| n }"
81
- when :references, :belongs_to then ":#{attribute.name}"
82
- when :date then "{|n| n.month.ago }"
83
- when :datetime then "#{Time.now.strftime("%Y-%m-%d %H:%M:%S.000")}".inspect
84
- when :time, :timestamp then "#{Time.now.strftime("%H:%M:%S.000")}".inspect
85
- else "{|n| \"#{attribute.name.titleize}\#{n}\" }"
86
- end
87
- " #{name}#{value}"
88
- end
89
- def attribute_to_requests(attribute, object_id=nil)
90
- object_id ||= "#{singular_table_name}_#{attribute.name}"
91
- object_id = object_id.gsub('#', "\#{#{singular_table_name}.id}").gsub('name', attribute.name)
92
- case attribute.type
93
- when :boolean then "check \"#{object_id}\" if #{singular_table_name}.#{attribute.name}"
94
- when :references, :belongs_to then "select #{singular_table_name}.#{attribute.name}.name, :from => \"#{object_id}_id\""
95
- when :datetime, :time, :timestamp
96
- then ""
97
- when :date then "fill_in \"#{object_id}\", :with => #{singular_table_name}.#{attribute.name}.strftime('%d-%m-%Y')"
98
- else "fill_in \"#{object_id}\", :with => #{singular_table_name}.#{attribute.name}"
99
- end
100
- end
101
- #def attribute_to_erb(attribute, object)
102
- # case attribute.name
103
- # when "state" then "<span class=\"state generic <%= #{object}.state_name.to_s %>\"><%= t(\"states.generic.\#{#{object}.state_name.to_s}\") %></span><span style=\"display:block;\"></span>"
104
- # else
105
- # case attribute.type
106
- # when :boolean then "<%= #{object}.#{attribute.name} ? style_image_tag(\"ico_v.png\", :class => \"ico_true\") : style_image_tag(\"ico_x.png\", :class => \"ico_false\") %>"
107
- # when :references, :belongs_to then "<%= link_to(#{object}.#{attribute.name}.try(:name) || \"#\#{#{object}.#{attribute.name}.try(:id)}\", #{object}.#{attribute.name}, :remote => @remote) %>"
108
- # when :integer then "<%= number_with_delimiter #{object}.#{attribute.name} %>"
109
- # when :decimal then "<%= number_to_currency #{object}.#{attribute.name} %>"
110
- # when :float then "<%= number_with_precision #{object}.#{attribute.name} %>"
111
- # when :date then "<%= #{object}.#{attribute.name}.strftime('%d-%m-%Y') if #{object}.#{attribute.name} %>"
112
- # when :datetime then "<%= #{object}.#{attribute.name}.strftime('%d-%m-%Y %H:%M:%S') if #{object}.#{attribute.name} %>"
113
- # when :time, :timestamp then "<%= #{object}.#{attribute.name}.strftime('%H:%M:%S') if #{object}.#{attribute.name} %>"
114
- # else "<%= #{object}.#{attribute.name} %>"
115
- # end
116
- # end
117
- #end
118
- def get_attr_to_match(view=:list)
119
- #attributes.each do |attribute|
120
- # case attribute.type
121
- # when :string, :text then
122
- # return "have_content(#{singular_table_name}.#{attribute.name})",
123
- # "have_no_content(#{singular_table_name}.#{attribute.name})"
124
- # end
125
- #end
126
- attr = get_attr_to_check(view)
127
- return "have_content(#{singular_table_name}.#{attr})",
128
- "have_no_content(#{singular_table_name}.#{attr})" if attr
129
-
130
- #If there are not string or text attributes
131
- case view
132
- when :list
133
- return "have_xpath('//table/tbody/tr')", "have_no_xpath('//table/tbody/tr')"
134
- when :show
135
- return "have_xpath('//table/tbody/tr')", "have_no_xpath('//table/tbody/tr')"
136
- end
137
- end
138
- def get_attr_to_check(view=:list)
139
- case view
140
- when :something
141
- else
142
- attributes.each{|a| case a.type when :string, :text then return a.name end}
143
- attributes.each{|a| case a.type when :references, :belongs_to, :datetime then nil else return a.name end}
144
- end
145
- end
146
- def fill_form_with_values(object_id=nil)
147
- items = []
148
- attributes.each{|a|items << " #{attribute_to_requests(a, object_id)}"}
149
- items
150
- end
151
- end
152
-
153
- #module Nested
154
- # protected
155
- #
156
- # #Add leonardo namespace to class_path
157
- # #def class_path
158
- # # super + base_namespaces
159
- # #end
160
- #
161
- # #product => products_path
162
- # #product under category => category_products_path(@category)
163
- # #product under brand/category => brand_category_products_path(@brand, @category)
164
- # def list_resources_path
165
- # "#{underscore_resource_path(:parent_singular_resource_plural)}_path(#{formatted_parent_resources("@")})"
166
- # end
167
- #
168
- # #product under category => category_products_path(category)
169
- # #product under brand/category => brand_category_products_path(@brand, category)
170
- # #TODO: figure out how to build links for a particular resource in the path
171
- # def list_resources_path_back
172
- # return unless nested?
173
- # "#{underscore_resource_path(:parent_singular_resource_plural)}_path(#{formatted_parent_resources("@").reverse.sub(/@/, "").reverse})"
174
- # end
175
- #
176
- # #product => "product"
177
- # #product under category => "[@category, product]"
178
- # #product under brand/category => "[@brand, @category, product]"
179
- # def destroy_resource_path(prefix_resource="")
180
- # formatted_resource_path("@", prefix_resource, "[]")
181
- # end
182
- #
183
- # #product => "product"
184
- # #product under category => "[@category, product]"
185
- # #product under brand/category => "[@brand, @category, product]"
186
- # def show_resource_path(prefix_resource="")
187
- # formatted_resource_path("@", prefix_resource, "[]")
188
- # end
189
- #
190
- # #product => "@product"
191
- # #product under category => "[@category, @product]"
192
- # #product under brand/category => "[@brand, @category, @product]"
193
- # def form_resource_path
194
- # formatted_resource_path("@", "@", "[]")
195
- # end
196
- #
197
- # #product => new_product_path
198
- # #product under category => new_category_product_path(@category)
199
- # #product under brand/category => new_brand_category_product_path(@brand, @category)
200
- # def new_resource_path
201
- # "new_#{underscore_resource_path}_path(#{formatted_parent_resources("@")})"
202
- # end
203
- #
204
- # #product => edit_product_path(@product)
205
- # #product under category => edit_category_product_path(@category, @product)
206
- # #product under brand/category => edit_brand_category_product_path(@brand, @category, @product)
207
- # def edit_resource_path(prefix_resource="")
208
- # "edit_#{underscore_resource_path}_path(#{formatted_resource_path("@", prefix_resource)})"
209
- # end
210
- #
211
- # #product under brand/category => "[brand, category, product]" or "[@brand, @category, @product]" or "@brand, @category, @product" or [product.brand, product.category, product]
212
- # def formatted_resource_path(prefix_parent="", prefix_resource="", delimiter="", resource=nil)
213
- # formatted_resource_base resource_path(prefix_parent, prefix_resource, resource), delimiter
214
- # end
215
- #
216
- # #product under brand/category => "[brand, category]" or "[@brand, @category]" or "@brand, @category" or product.brand, product.category
217
- # def formatted_parent_resources(prefix_parent="", delimiter="", resource=nil)
218
- # prefix_parent = "#{resource}." if resource
219
- # formatted_resource_base parent_resources(prefix_parent), delimiter
220
- # end
221
- #
222
- # def formatted_resource_base(resources, delimiter="")
223
- # str_resources = resources.join(', ')
224
- # resources.size > 1 ? "#{delimiter[0..0]}#{str_resources}#{delimiter[1..1]}" : str_resources
225
- # end
226
- #
227
- # #product under brand/category => "brand_category_product"
228
- # def underscore_resource_path(names=:all_singular)
229
- # case names
230
- # when :all_singular
231
- # resource_path.join('_')
232
- # #when :all_plural
233
- # #who needs?
234
- # when :parent_singular_resource_plural
235
- # resource_path.join('_').pluralize
236
- # else
237
- # "#{names.to_s}_not_supported"
238
- # end
239
- # end
240
- #
241
- # #product under brand/category => ["brand", "category", "product"] or ["@brand", "@category", "@product"]
242
- # def resource_path(prefix_parent="", prefix_resource="", resource=nil, prefix_namespace="")
243
- # if resource
244
- # prefix_parent = "#{resource}."
245
- # else
246
- # resource = singular_table_name
247
- # end
248
- #
249
- # prefix_namespace = ":" if prefix_namespace.empty? && prefix_parent.size>0
250
- #
251
- # if nested?
252
- # (base_namespaces(prefix_namespace) + parent_resources(prefix_parent)) << "#{prefix_resource}#{resource}"
253
- # else
254
- # base_namespaces(prefix_namespace) << "#{prefix_resource}#{resource}"
255
- # end
256
- # end
257
- #
258
- # #product under brand/category => "categories"
259
- # def plural_last_parent
260
- # plural_parent_resources.last
261
- # end
262
- #
263
- # #product under brand/category => ["brands", "categories"] or ["@brands", "@categories"]
264
- # def plural_parent_resources(prefix_parent="")
265
- # base_parent_resources.map{|m| "#{prefix_parent}#{m.pluralize}"}
266
- # end
267
- #
268
- # #product under brand/category => ["brand", "category"] or ["@brand", "@category"]
269
- # def parent_resources(prefix_parent="")
270
- # base_parent_resources.map{|m| "#{prefix_parent}#{m}"}
271
- # end
272
- #
273
- # #product under brand/category => "category"
274
- # def last_parent
275
- # base_parent_resources.last
276
- # end
277
- #
278
- # #product under brand/category => ["brand", "category"]
279
- # def base_parent_resources
280
- # return [] unless options[:under].present?
281
- # options[:under].split('/').map{|m| m.underscore}
282
- # end
283
- #
284
- # def nested?
285
- # options[:under].present?
286
- # end
287
- #
288
- # ### NAMESPACE ###
289
- # def leospaced?
290
- # options[:leospace].present?
291
- # end
292
- #
293
- # def base_namespaces(prefix="")
294
- # return [] unless options[:leospace].present?
295
- # options[:leospace].split('/').map{|m| "#{prefix}#{m.underscore}"}
296
- # end
297
- #
298
- # def last_namespace(prefix="")
299
- # base_namespaces(prefix).last
300
- # end
301
- #
302
- # def formatted_namespace_path(separator='/')
303
- # return "" unless leospaced?
304
- # "#{base_namespaces.join(separator)}#{separator}"
305
- # end
306
- #
307
- # module Test
308
- # protected
309
- # #Add parent(s) param(s) to request
310
- # #get :index for a product under category => get :index, :category_id => product.category_id.to_s
311
- # def nested_params_http_request(value=nil)
312
- # return unless nested?
313
- # ", " << base_parent_resources.map{|m| ":#{m}_id => #{value ? value.to_s.inspect : "#{file_name}.#{m}_id.to_s"}"}.join(', ')
314
- # end
315
- #
316
- # #Create new parent(s) and add it to request
317
- # #get :index for a product under category => get :index, :category_id => Factory(:category).id.to_s
318
- # def nested_params_http_request_new_parent
319
- # return unless nested?
320
- # ", " << base_parent_resources.map{|m| ":#{m}_id => Factory(:#{m}).id.to_s"}.join(', ')
321
- # end
322
- #
323
- # #product => products_path
324
- # #product under category => category_products_path(product.category)
325
- # #product under brand/category => brand_category_products_path(product.brand, product.category)
326
- # def list_resources_path_test(resource=nil, prefix_parent=nil)
327
- # unless prefix_parent
328
- # resource ||= singular_table_name
329
- # prefix_parent = "#{resource}."
330
- # end
331
- # "#{underscore_resource_path(:parent_singular_resource_plural)}_path(#{formatted_parent_resources(prefix_parent, "", resource)})"
332
- # end
333
- #
334
- # #product => "product"
335
- # #product under category => "[category, product]" or "[product.category, product]"
336
- # #product under brand/category => "[brand, category, product]" or "[product.brand, product.category, product]"
337
- # def show_resource_path_test(resource=nil, prefix_parent=nil, prefix_resource="")
338
- # resource ||= singular_table_name
339
- # prefix_parent = prefix_parent || "#{resource}."
340
- # formatted_resource_path(prefix_parent, prefix_resource, "[]", resource)
341
- # end
342
- #
343
- # #product => new_product_path
344
- # #product under category => new_category_product_path(product.category)
345
- # #product under brand/category => new_brand_category_product_path(product.brand, product.category)
346
- # def new_resource_path_test(resource=nil, prefix_parent=nil)
347
- # resource ||= singular_table_name
348
- # prefix_parent = prefix_parent || "#{resource}."
349
- # "new_#{underscore_resource_path}_path(#{formatted_parent_resources(prefix_parent, "",resource)})"
350
- # end
351
- # end
352
- #end
353
- module Test
354
- protected
355
- def get_activespace
356
- activespace ||= options[:activespace]
357
- "#{activespace}_" if activespace
358
- end
359
-
360
- #product => activespace_products_path
361
- def list_resources_path_test(resource=nil)
362
- resource ||= plural_table_name
363
- "#{get_activespace}#{resource}_path"
364
- end
365
-
366
- #product => "[:activespace, product]"
367
- def show_resource_path_test(resource=nil)
368
- resource ||= singular_table_name
369
- "[:#{options[:activespace]}, #{resource}]"
370
- end
371
-
372
- #product => new_activespace_product_path
373
- def new_resource_path_test(resource=nil)
374
- resource ||= singular_table_name
375
- "new_#{get_activespace}#{resource}_path"
376
- end
377
-
378
- #product => edit_activespace_product_path
379
- def edit_resource_path_test(resource=nil)
380
- resource ||= singular_table_name
381
- "edit_#{get_activespace}#{resource}_path(#{resource})"
382
- end
383
- end
1
+ module ActiveLeonardo
2
+ module Base
3
+ protected
4
+ def authorization_file
5
+ "app/models/ability.rb"
6
+ end
7
+ def authorization?
8
+ File.exists? authorization_file
9
+ end
10
+ def authentication_file auth_class="User"
11
+ "app/models/#{auth_class.downcase}.rb"
12
+ end
13
+ def authentication? auth_class="User"
14
+ return true if File.exists? authentication_file(auth_class)
15
+ File.exists? "config/initializers/devise.rb"
16
+ end
17
+ def activeadmin_file
18
+ "config/initializers/active_admin.rb"
19
+ end
20
+ def activeadmin?
21
+ File.exists? activeadmin_file
22
+ end
23
+ def auth_class
24
+ return unless options[:auth_class]
25
+ options[:auth_class].classify
26
+ end
27
+ #def formtastic?
28
+ # return false unless options.formtastic?
29
+ # File.exists? "config/initializers/formtastic.rb"
30
+ #end
31
+ #def jquery_ui?
32
+ # File.exists? "vendor/assets/javascripts/jquery-ui"
33
+ #end
34
+ #def pagination?
35
+ # File.exists? "config/initializers/kaminari_config.rb"
36
+ #end
37
+ end
38
+
39
+ module Leosca
40
+
41
+ protected
42
+
43
+ def attribute_to_hash(attribute)
44
+ name = case attribute.type
45
+ when :references, :belongs_to then ":#{attribute.name}_id"
46
+ else ":#{attribute.name}"
47
+ end
48
+ value = case attribute.type
49
+ when :boolean then "true"
50
+ when :integer then "#"
51
+ when :float, :decimal then "#.46"
52
+ when :references, :belongs_to then "rand(#{attribute.name}_from..#{attribute.name}_to)"
53
+ when :date then "#{Time.now.strftime("%Y-%m-%d 00:00:00.000")}".inspect
54
+ when :datetime then "#{Time.now.strftime("%Y-%m-%d %H:%M:%S.000")}".inspect
55
+ when :time, :timestamp then "#{Time.now.strftime("%H:%M:%S.000")}".inspect
56
+ else "#{attribute.name.titleize}\#".inspect
57
+ end
58
+ " #{name} => #{value}"
59
+ end
60
+ def attribute_to_range(attribute)
61
+ case attribute.type
62
+ when :references, :belongs_to then "#{attribute.name}_from = #{attribute.name.classify}.first.id; #{attribute.name}_to = #{attribute.name.classify}.last.id#{CRLF}"
63
+ else ""
64
+ end
65
+ end
66
+ def attribute_to_factories(attribute)
67
+ spaces = 34
68
+ space_association = " " * (spaces-11).abs
69
+ space_sequence = " " * (spaces-attribute.name.size-11).abs
70
+ space_other = " " * (spaces-attribute.name.size).abs
71
+ name = case attribute.type
72
+ when :references, :belongs_to then "#{singular_table_name[0..0]}.association#{space_association}"
73
+ when :boolean, :datetime, :time, :timestamp
74
+ then "#{singular_table_name[0..0]}.#{attribute.name}#{space_other}"
75
+ else "#{singular_table_name[0..0]}.sequence(:#{attribute.name})#{space_sequence}"
76
+ end
77
+ value = case attribute.type
78
+ when :boolean then "true"
79
+ when :integer then "{|n| n }"
80
+ when :float, :decimal then "{|n| n }"
81
+ when :references, :belongs_to then ":#{attribute.name}"
82
+ when :date then "{|n| n.month.ago }"
83
+ when :datetime then "#{Time.now.strftime("%Y-%m-%d %H:%M:%S.000")}".inspect
84
+ when :time, :timestamp then "#{Time.now.strftime("%H:%M:%S.000")}".inspect
85
+ else "{|n| \"#{attribute.name.titleize}\#{n}\" }"
86
+ end
87
+ " #{name}#{value}"
88
+ end
89
+ def attribute_to_requests(attribute, object_id=nil)
90
+ object_id ||= "#{singular_table_name}_#{attribute.name}"
91
+ object_id = object_id.gsub('#', "\#{#{singular_table_name}.id}").gsub('name', attribute.name)
92
+ case attribute.type
93
+ when :boolean then "check \"#{object_id}\" if #{singular_table_name}.#{attribute.name}"
94
+ when :references, :belongs_to then "select #{singular_table_name}.#{attribute.name}.name, :from => \"#{object_id}_id\""
95
+ when :datetime, :time, :timestamp
96
+ then ""
97
+ when :date then "fill_in \"#{object_id}\", :with => #{singular_table_name}.#{attribute.name}.strftime('%d-%m-%Y')"
98
+ else "fill_in \"#{object_id}\", :with => #{singular_table_name}.#{attribute.name}"
99
+ end
100
+ end
101
+ #def attribute_to_erb(attribute, object)
102
+ # case attribute.name
103
+ # when "state" then "<span class=\"state generic <%= #{object}.state_name.to_s %>\"><%= t(\"states.generic.\#{#{object}.state_name.to_s}\") %></span><span style=\"display:block;\"></span>"
104
+ # else
105
+ # case attribute.type
106
+ # when :boolean then "<%= #{object}.#{attribute.name} ? style_image_tag(\"ico_v.png\", :class => \"ico_true\") : style_image_tag(\"ico_x.png\", :class => \"ico_false\") %>"
107
+ # when :references, :belongs_to then "<%= link_to(#{object}.#{attribute.name}.try(:name) || \"#\#{#{object}.#{attribute.name}.try(:id)}\", #{object}.#{attribute.name}, :remote => @remote) %>"
108
+ # when :integer then "<%= number_with_delimiter #{object}.#{attribute.name} %>"
109
+ # when :decimal then "<%= number_to_currency #{object}.#{attribute.name} %>"
110
+ # when :float then "<%= number_with_precision #{object}.#{attribute.name} %>"
111
+ # when :date then "<%= #{object}.#{attribute.name}.strftime('%d-%m-%Y') if #{object}.#{attribute.name} %>"
112
+ # when :datetime then "<%= #{object}.#{attribute.name}.strftime('%d-%m-%Y %H:%M:%S') if #{object}.#{attribute.name} %>"
113
+ # when :time, :timestamp then "<%= #{object}.#{attribute.name}.strftime('%H:%M:%S') if #{object}.#{attribute.name} %>"
114
+ # else "<%= #{object}.#{attribute.name} %>"
115
+ # end
116
+ # end
117
+ #end
118
+ def get_attr_to_match(view=:list)
119
+ #attributes.each do |attribute|
120
+ # case attribute.type
121
+ # when :string, :text then
122
+ # return "have_content(#{singular_table_name}.#{attribute.name})",
123
+ # "have_no_content(#{singular_table_name}.#{attribute.name})"
124
+ # end
125
+ #end
126
+ attr = get_attr_to_check(view)
127
+ return "have_content(#{singular_table_name}.#{attr})",
128
+ "have_no_content(#{singular_table_name}.#{attr})" if attr
129
+
130
+ #If there are not string or text attributes
131
+ case view
132
+ when :list
133
+ return "have_xpath('//table/tbody/tr')", "have_no_xpath('//table/tbody/tr')"
134
+ when :show
135
+ return "have_xpath('//table/tbody/tr')", "have_no_xpath('//table/tbody/tr')"
136
+ end
137
+ end
138
+ def get_attr_to_check(view=:list)
139
+ case view
140
+ when :something
141
+ else
142
+ attributes.each{|a| case a.type when :string, :text then return a.name end}
143
+ attributes.each{|a| case a.type when :references, :belongs_to, :datetime then nil else return a.name end}
144
+ end
145
+ end
146
+ def fill_form_with_values(object_id=nil)
147
+ items = []
148
+ attributes.each{|a|items << " #{attribute_to_requests(a, object_id)}"}
149
+ items
150
+ end
151
+ end
152
+
153
+ #module Nested
154
+ # protected
155
+ #
156
+ # #Add leonardo namespace to class_path
157
+ # #def class_path
158
+ # # super + base_namespaces
159
+ # #end
160
+ #
161
+ # #product => products_path
162
+ # #product under category => category_products_path(@category)
163
+ # #product under brand/category => brand_category_products_path(@brand, @category)
164
+ # def list_resources_path
165
+ # "#{underscore_resource_path(:parent_singular_resource_plural)}_path(#{formatted_parent_resources("@")})"
166
+ # end
167
+ #
168
+ # #product under category => category_products_path(category)
169
+ # #product under brand/category => brand_category_products_path(@brand, category)
170
+ # #TODO: figure out how to build links for a particular resource in the path
171
+ # def list_resources_path_back
172
+ # return unless nested?
173
+ # "#{underscore_resource_path(:parent_singular_resource_plural)}_path(#{formatted_parent_resources("@").reverse.sub(/@/, "").reverse})"
174
+ # end
175
+ #
176
+ # #product => "product"
177
+ # #product under category => "[@category, product]"
178
+ # #product under brand/category => "[@brand, @category, product]"
179
+ # def destroy_resource_path(prefix_resource="")
180
+ # formatted_resource_path("@", prefix_resource, "[]")
181
+ # end
182
+ #
183
+ # #product => "product"
184
+ # #product under category => "[@category, product]"
185
+ # #product under brand/category => "[@brand, @category, product]"
186
+ # def show_resource_path(prefix_resource="")
187
+ # formatted_resource_path("@", prefix_resource, "[]")
188
+ # end
189
+ #
190
+ # #product => "@product"
191
+ # #product under category => "[@category, @product]"
192
+ # #product under brand/category => "[@brand, @category, @product]"
193
+ # def form_resource_path
194
+ # formatted_resource_path("@", "@", "[]")
195
+ # end
196
+ #
197
+ # #product => new_product_path
198
+ # #product under category => new_category_product_path(@category)
199
+ # #product under brand/category => new_brand_category_product_path(@brand, @category)
200
+ # def new_resource_path
201
+ # "new_#{underscore_resource_path}_path(#{formatted_parent_resources("@")})"
202
+ # end
203
+ #
204
+ # #product => edit_product_path(@product)
205
+ # #product under category => edit_category_product_path(@category, @product)
206
+ # #product under brand/category => edit_brand_category_product_path(@brand, @category, @product)
207
+ # def edit_resource_path(prefix_resource="")
208
+ # "edit_#{underscore_resource_path}_path(#{formatted_resource_path("@", prefix_resource)})"
209
+ # end
210
+ #
211
+ # #product under brand/category => "[brand, category, product]" or "[@brand, @category, @product]" or "@brand, @category, @product" or [product.brand, product.category, product]
212
+ # def formatted_resource_path(prefix_parent="", prefix_resource="", delimiter="", resource=nil)
213
+ # formatted_resource_base resource_path(prefix_parent, prefix_resource, resource), delimiter
214
+ # end
215
+ #
216
+ # #product under brand/category => "[brand, category]" or "[@brand, @category]" or "@brand, @category" or product.brand, product.category
217
+ # def formatted_parent_resources(prefix_parent="", delimiter="", resource=nil)
218
+ # prefix_parent = "#{resource}." if resource
219
+ # formatted_resource_base parent_resources(prefix_parent), delimiter
220
+ # end
221
+ #
222
+ # def formatted_resource_base(resources, delimiter="")
223
+ # str_resources = resources.join(', ')
224
+ # resources.size > 1 ? "#{delimiter[0..0]}#{str_resources}#{delimiter[1..1]}" : str_resources
225
+ # end
226
+ #
227
+ # #product under brand/category => "brand_category_product"
228
+ # def underscore_resource_path(names=:all_singular)
229
+ # case names
230
+ # when :all_singular
231
+ # resource_path.join('_')
232
+ # #when :all_plural
233
+ # #who needs?
234
+ # when :parent_singular_resource_plural
235
+ # resource_path.join('_').pluralize
236
+ # else
237
+ # "#{names.to_s}_not_supported"
238
+ # end
239
+ # end
240
+ #
241
+ # #product under brand/category => ["brand", "category", "product"] or ["@brand", "@category", "@product"]
242
+ # def resource_path(prefix_parent="", prefix_resource="", resource=nil, prefix_namespace="")
243
+ # if resource
244
+ # prefix_parent = "#{resource}."
245
+ # else
246
+ # resource = singular_table_name
247
+ # end
248
+ #
249
+ # prefix_namespace = ":" if prefix_namespace.empty? && prefix_parent.size>0
250
+ #
251
+ # if nested?
252
+ # (base_namespaces(prefix_namespace) + parent_resources(prefix_parent)) << "#{prefix_resource}#{resource}"
253
+ # else
254
+ # base_namespaces(prefix_namespace) << "#{prefix_resource}#{resource}"
255
+ # end
256
+ # end
257
+ #
258
+ # #product under brand/category => "categories"
259
+ # def plural_last_parent
260
+ # plural_parent_resources.last
261
+ # end
262
+ #
263
+ # #product under brand/category => ["brands", "categories"] or ["@brands", "@categories"]
264
+ # def plural_parent_resources(prefix_parent="")
265
+ # base_parent_resources.map{|m| "#{prefix_parent}#{m.pluralize}"}
266
+ # end
267
+ #
268
+ # #product under brand/category => ["brand", "category"] or ["@brand", "@category"]
269
+ # def parent_resources(prefix_parent="")
270
+ # base_parent_resources.map{|m| "#{prefix_parent}#{m}"}
271
+ # end
272
+ #
273
+ # #product under brand/category => "category"
274
+ # def last_parent
275
+ # base_parent_resources.last
276
+ # end
277
+ #
278
+ # #product under brand/category => ["brand", "category"]
279
+ # def base_parent_resources
280
+ # return [] unless options[:under].present?
281
+ # options[:under].split('/').map{|m| m.underscore}
282
+ # end
283
+ #
284
+ # def nested?
285
+ # options[:under].present?
286
+ # end
287
+ #
288
+ # ### NAMESPACE ###
289
+ # def leospaced?
290
+ # options[:leospace].present?
291
+ # end
292
+ #
293
+ # def base_namespaces(prefix="")
294
+ # return [] unless options[:leospace].present?
295
+ # options[:leospace].split('/').map{|m| "#{prefix}#{m.underscore}"}
296
+ # end
297
+ #
298
+ # def last_namespace(prefix="")
299
+ # base_namespaces(prefix).last
300
+ # end
301
+ #
302
+ # def formatted_namespace_path(separator='/')
303
+ # return "" unless leospaced?
304
+ # "#{base_namespaces.join(separator)}#{separator}"
305
+ # end
306
+ #
307
+ # module Test
308
+ # protected
309
+ # #Add parent(s) param(s) to request
310
+ # #get :index for a product under category => get :index, :category_id => product.category_id.to_s
311
+ # def nested_params_http_request(value=nil)
312
+ # return unless nested?
313
+ # ", " << base_parent_resources.map{|m| ":#{m}_id => #{value ? value.to_s.inspect : "#{file_name}.#{m}_id.to_s"}"}.join(', ')
314
+ # end
315
+ #
316
+ # #Create new parent(s) and add it to request
317
+ # #get :index for a product under category => get :index, :category_id => Factory(:category).id.to_s
318
+ # def nested_params_http_request_new_parent
319
+ # return unless nested?
320
+ # ", " << base_parent_resources.map{|m| ":#{m}_id => Factory(:#{m}).id.to_s"}.join(', ')
321
+ # end
322
+ #
323
+ # #product => products_path
324
+ # #product under category => category_products_path(product.category)
325
+ # #product under brand/category => brand_category_products_path(product.brand, product.category)
326
+ # def list_resources_path_test(resource=nil, prefix_parent=nil)
327
+ # unless prefix_parent
328
+ # resource ||= singular_table_name
329
+ # prefix_parent = "#{resource}."
330
+ # end
331
+ # "#{underscore_resource_path(:parent_singular_resource_plural)}_path(#{formatted_parent_resources(prefix_parent, "", resource)})"
332
+ # end
333
+ #
334
+ # #product => "product"
335
+ # #product under category => "[category, product]" or "[product.category, product]"
336
+ # #product under brand/category => "[brand, category, product]" or "[product.brand, product.category, product]"
337
+ # def show_resource_path_test(resource=nil, prefix_parent=nil, prefix_resource="")
338
+ # resource ||= singular_table_name
339
+ # prefix_parent = prefix_parent || "#{resource}."
340
+ # formatted_resource_path(prefix_parent, prefix_resource, "[]", resource)
341
+ # end
342
+ #
343
+ # #product => new_product_path
344
+ # #product under category => new_category_product_path(product.category)
345
+ # #product under brand/category => new_brand_category_product_path(product.brand, product.category)
346
+ # def new_resource_path_test(resource=nil, prefix_parent=nil)
347
+ # resource ||= singular_table_name
348
+ # prefix_parent = prefix_parent || "#{resource}."
349
+ # "new_#{underscore_resource_path}_path(#{formatted_parent_resources(prefix_parent, "",resource)})"
350
+ # end
351
+ # end
352
+ #end
353
+ module Test
354
+ protected
355
+ def get_activespace
356
+ activespace ||= options[:activespace]
357
+ "#{activespace}_" if activespace
358
+ end
359
+
360
+ #product => activespace_products_path
361
+ def list_resources_path_test(resource=nil)
362
+ resource ||= plural_table_name
363
+ "#{get_activespace}#{resource}_path"
364
+ end
365
+
366
+ #product => "[:activespace, product]"
367
+ def show_resource_path_test(resource=nil)
368
+ resource ||= singular_table_name
369
+ "[:#{options[:activespace]}, #{resource}]"
370
+ end
371
+
372
+ #product => new_activespace_product_path
373
+ def new_resource_path_test(resource=nil)
374
+ resource ||= singular_table_name
375
+ "new_#{get_activespace}#{resource}_path"
376
+ end
377
+
378
+ #product => edit_activespace_product_path
379
+ def edit_resource_path_test(resource=nil)
380
+ resource ||= singular_table_name
381
+ "edit_#{get_activespace}#{resource}_path(#{resource})"
382
+ end
383
+ end
384
384
  end