Module: Typus

Defined in:
lib/typus.rb,
lib/typus/format.rb,
lib/typus/locale.rb,
lib/typus/reloader.rb,
lib/typus/generator.rb,
lib/typus/quick_edit.rb,
lib/typus/configuration.rb,
lib/typus/authentication.rb

Defined Under Namespace

Modules: Authentication, Configuration, Format, Locale, QuickEdit, Reloader

Class Method Summary collapse

Class Method Details

.application(name) ⇒ Object

List of the modules of an application.



26
27
28
# File 'lib/typus.rb', line 26

def application(name)
  Typus::Configuration.config.collect { |i| i.first if i.last['application'] == name }.compact.uniq.sort
end

.applicationsObject



21
22
23
# File 'lib/typus.rb', line 21

def applications
  Typus::Configuration.config.collect { |i| i.last['application'] }.compact.uniq.sort
end

.boot!Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/typus.rb', line 70

def boot!

  # return unless File.exists?("#{Rails.root}/config/initializers/typus.rb") || testing?
  return if %w( script/generate script/destroy ).include?($0)

  if testing?
    Typus::Configuration.options[:config_folder] = 'vendor/plugins/typus/test/config/working'
  end

  # Ruby Extensions
  require 'typus/hash'
  require 'typus/object'
  require 'typus/string'

  # Load configuration and roles.
  Typus::Configuration.config!
  Typus::Configuration.roles!

  # Load translation files from the plugin or the gem.
  if plugin?
    I18n.load_path += Dir[File.join(root, 'config', 'locales', '**', '*.{rb,yml}')]
  else
    Gem.path.each { |g| I18n.load_path += Dir[File.join("#{g}/gems/*typus-#{version}/config/locales/**/*.{rb,yml}")] }
  end

  # Require the test/models on when testing.
  require File.dirname(__FILE__) + '/../test/models' if testing?

  # Rails Extensions.
  require 'typus/active_record'
  require 'typus/extensions/routes'

  # Mixins.
  require 'typus/authentication'
  require 'typus/format'
  require 'typus/generator'
  require 'typus/locale'
  require 'typus/reloader'
  require 'typus/quick_edit'
  require 'typus/user'

  # Vendor.
  require 'vendor/active_record'
  require 'vendor/paginator'

  # Run controllers generator ...
  generator unless testing? || Rails.env.production?

end

.default_localeObject



17
18
19
# File 'lib/typus.rb', line 17

def default_locale
  locales.map(&:last).first
end

.generatorObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/typus/generator.rb', line 5

def self.generator

  # Create app/controllers/admin if doesn't exist.
  admin_controllers_folder = "#{Rails.root}/app/controllers/admin"
  Dir.mkdir(admin_controllers_folder) unless File.directory?(admin_controllers_folder)

  # Get a list of controllers under `app/controllers/admin`.
  admin_controllers = Dir["#{Rails.root}/vendor/plugins/*/app/controllers/admin/*.rb", "#{admin_controllers_folder}/*.rb"]
  admin_controllers = admin_controllers.map { |i| File.basename(i) }

  # Create app/views/admin if doesn't exist.
  admin_views_folder = "#{Rails.root}/app/views/admin"
  Dir.mkdir(admin_views_folder) unless File.directory?(admin_views_folder)

  # Create test/functional/admin if doesn't exist.
  admin_controller_tests_folder = "#{Rails.root}/test/functional/admin"
  if File.directory?("#{Rails.root}/test")
    Dir.mkdir(admin_controller_tests_folder) unless File.directory?(admin_controller_tests_folder)
  end

  # Get a list of functional tests under `test/functional/admin`.
  admin_controller_tests = Dir["#{admin_controller_tests_folder}/*.rb"]
  admin_controller_tests = admin_controller_tests.map { |i| File.basename(i) }

  # Generate controllers for tableless models.
  resources.each do |resource|

    controller_filename = "#{resource.underscore}_controller.rb"
    controller_location = "#{admin_controllers_folder}/#{controller_filename}"

    if !admin_controllers.include?(controller_filename)
      template = File.read("#{File.dirname(__FILE__)}/templates/resource_controller.rb.erb")
      content = ERB.new(template).result(binding)
      File.open(controller_location, "w+") { |f| f << content }
    end

    # And now we create the view.
    view_folder = "#{admin_views_folder}/#{resource.underscore}"
    view_filename = "index.html.erb"

    if !File.exist?("#{view_folder}/#{view_filename}")
      Dir.mkdir(view_folder) unless File.directory?(view_folder)
      origin = "#{File.dirname(__FILE__)}/templates/index.html.erb"
      destination = "#{view_folder}/#{view_filename}"
      File.copy(origin, destination)
    end

  end

  # Generate:
  #   `app/controllers/admin/#{resource}_controller.rb`
  #   `test/functional/admin/#{resource}_controller_test.rb`
  models.each do |model|

    controller_filename = "#{model.tableize}_controller.rb"
    controller_location = "#{admin_controllers_folder}/#{controller_filename}"

    if !admin_controllers.include?(controller_filename)
      template = File.read("#{File.dirname(__FILE__)}/templates/resources_controller.rb.erb")
      content = ERB.new(template).result(binding)
      File.open(controller_location, "w+") { |f| f << content }
    end

    test_filename = "#{model.tableize}_controller_test.rb"
    test_location = "#{admin_controller_tests_folder}/#{test_filename}"

    if !admin_controller_tests.include?(test_filename) && File.directory?("#{Rails.root}/test")
      template = File.read("#{File.dirname(__FILE__)}/templates/resource_controller_test.rb.erb")
      content = ERB.new(template).result(binding)
      File.open(test_location, "w+") { |f| f << content }
    end

  end

end

.get_model_namesObject



49
50
51
52
# File 'lib/typus.rb', line 49

def get_model_names
  Dir[ "#{Rails.root}/app/models/**/*.rb", 
       "#{Rails.root}/vendor/plugins/**/app/models/**/*.rb" ].collect { |m| File.basename(m).sub(/\.rb$/,'').camelize }
end

.localesObject



13
14
15
# File 'lib/typus.rb', line 13

def locales
  Typus::Configuration.options[:locales]
end

.modelsObject



30
31
32
# File 'lib/typus.rb', line 30

def models
  Typus::Configuration.config.map { |i| i.first }.sort
end

.models_on_headerObject



34
35
36
# File 'lib/typus.rb', line 34

def models_on_header
  models.collect { |m| m if m.constantize.typus_options_for(:on_header) }.compact
end

.plugin?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/typus.rb', line 66

def plugin?
  File.exist?("#{Rails.root}/vendor/plugins/typus")
end

.resources(models = get_model_names) ⇒ Object

List of resources, which are tableless models.



39
40
41
42
43
44
45
46
47
# File 'lib/typus.rb', line 39

def resources(models = get_model_names)

  all_resources = Typus::Configuration.roles.keys.map do |key|
                    Typus::Configuration.roles[key].keys
                  end.flatten.sort.uniq

  all_resources.delete_if { |x| models.include?(x) || x == 'TypusUser' } rescue []

end

.rootObject



9
10
11
# File 'lib/typus.rb', line 9

def root
  File.dirname(__FILE__) + '/../'
end

.testing?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/typus.rb', line 62

def testing?
  Rails.env.test? && Dir.pwd == "#{Rails.root}/vendor/plugins/typus"
end

.user_classObject



54
55
56
# File 'lib/typus.rb', line 54

def user_class
  Typus::Configuration.options[:user_class_name].constantize
end

.user_fkObject



58
59
60
# File 'lib/typus.rb', line 58

def user_fk
  Typus::Configuration.options[:user_fk]
end

.versionObject



5
6
7
# File 'lib/typus.rb', line 5

def version
  @@version ||= File.read("#{root}/VERSION").strip
end