Module: Spider::App::ClassMethods

Defined in:
lib/spiderfw/app.rb

Overview

Methods set on the App main module. All instance attributes will be set to default values, but can be overridden by the module by setting the corresponding instance variable. Example:

module MyApp
    include Spider::App
    @controller = :MyController
    @label = 'My Application'
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#gettext_dirsArray (readonly)

Returns A list of directories to look for translations.

Returns:

  • (Array)

    A list of directories to look for translations



67
68
69
# File 'lib/spiderfw/app.rb', line 67

def gettext_dirs
  @gettext_dirs
end

#gettext_domainString (readonly)

Returns Gettext domain of the app. Defaults to the app short name.

Returns:

  • (String)

    Gettext domain of the app. Defaults to the app short name



73
74
75
# File 'lib/spiderfw/app.rb', line 73

def gettext_domain
  @gettext_domain
end

#gettext_extensionsArray (readonly)

Returns File extensions to parse for translations.

Returns:

  • (Array)

    File extensions to parse for translations



69
70
71
# File 'lib/spiderfw/app.rb', line 69

def gettext_extensions
  @gettext_extensions
end

#gettext_parsersArray (readonly)

A list of tettext parsers to use for the app

Returns:

  • (Array)


71
72
73
# File 'lib/spiderfw/app.rb', line 71

def gettext_parsers
  @gettext_parsers
end

#labelString (readonly)

Returns app.

Returns:



59
60
61
# File 'lib/spiderfw/app.rb', line 59

def label
  @label
end

#models_pathString (readonly)

Returns path of the ‘models’ folder.

Returns:

  • (String)

    path of the ‘models’ folder



53
54
55
# File 'lib/spiderfw/app.rb', line 53

def models_path
  @models_path
end

#pathString (readonly)

Returns filesystem path of the app.

Returns:

  • (String)

    filesystem path of the app



39
40
41
# File 'lib/spiderfw/app.rb', line 39

def path
  @path
end

#pub_pathString (readonly)

Returns path of the ‘public’ folder.

Returns:

  • (String)

    path of the ‘public’ folder



41
42
43
# File 'lib/spiderfw/app.rb', line 41

def pub_path
  @pub_path
end

#route_urlString (readonly)

Returns url from which the app will be routed.

Returns:

  • (String)

    url from which the app will be routed



57
58
59
# File 'lib/spiderfw/app.rb', line 57

def route_url
  @route_url
end

#setup_pathString (readonly)

Returns path of the ‘setup’ folder.

Returns:

  • (String)

    path of the ‘setup’ folder



45
46
47
# File 'lib/spiderfw/app.rb', line 45

def setup_path
  @setup_path
end

#short_nameString (readonly)

Returns name, without spaces.

Returns:

  • (String)

    name, without spaces



55
56
57
# File 'lib/spiderfw/app.rb', line 55

def short_name
  @short_name
end

#short_prefixString

Returns prefix used to distinguish Database table.

Returns:

  • (String)

    prefix used to distinguish Database table



63
64
65
# File 'lib/spiderfw/app.rb', line 63

def short_prefix
  @short_prefix
end

#specAppSpec (readonly)

Returns the app’s AppSpec.

Returns:

  • (AppSpec)

    the app’s AppSpec



65
66
67
# File 'lib/spiderfw/app.rb', line 65

def spec
  @spec
end

#tags_pathString (readonly)

Returns path of the ‘tags’ folder.

Returns:

  • (String)

    path of the ‘tags’ folder



51
52
53
# File 'lib/spiderfw/app.rb', line 51

def tags_path
  @tags_path
end

#test_pathString (readonly)

Returns path of the ‘test’ folder.

Returns:

  • (String)

    path of the ‘test’ folder



43
44
45
# File 'lib/spiderfw/app.rb', line 43

def test_path
  @test_path
end

#versionGem::Version (readonly)

Returns app’s version.

Returns:

  • (Gem::Version)

    app’s version



61
62
63
# File 'lib/spiderfw/app.rb', line 61

def version
  @version
end

#views_pathString (readonly)

Returns path of the ‘views’ folder.

Returns:

  • (String)

    path of the ‘views’ folder



49
50
51
# File 'lib/spiderfw/app.rb', line 49

def views_path
  @views_path
end

#widgets_pathString (readonly)

Returns path of the ‘widgets’ folder.

Returns:

  • (String)

    path of the ‘widgets’ folder



47
48
49
# File 'lib/spiderfw/app.rb', line 47

def widgets_path
  @widgets_path
end

Instance Method Details

#appself

Convenience method: since all classes inside the app have an #app method, the App itself has it too

Returns:

  • (self)


264
265
266
# File 'lib/spiderfw/app.rb', line 264

def app
    self
end

#base_pathString

Returns The path to the apps’ container (the home or the Spider lib).

Returns:

  • (String)

    The path to the apps’ container (the home or the Spider lib)



245
246
247
248
249
250
251
# File 'lib/spiderfw/app.rb', line 245

def base_path
    if Spider.paths[:apps] && @path.index(Spider.paths[:apps])
        Spider.paths[:apps]
    else
        $SPIDER_PATH
    end
end

#controllerSpider::Controller

If setting the instance variable, use a Symbol

Returns:



189
190
191
192
193
194
195
196
# File 'lib/spiderfw/app.rb', line 189

def controller
    if (!@controller || !const_defined?(@controller))
        @controller = :AppController
        return const_set(@controller, Spider::PageController.clone)
        
    end
    return const_get(@controller)
end

#controllersArray

Returns An array of all the Controller subclasses defined inside the module.

Returns:

  • (Array)

    An array of all the Controller subclasses defined inside the module



212
213
214
# File 'lib/spiderfw/app.rb', line 212

def controllers
    self.constants.map{ |m| const_get(m) }.select{ |m| m.subclass_of? Spider::Controller }
end

#descriptionString

Returns description or spec.description or name.

Returns:

  • (String)

    description or spec.description or name



116
117
118
119
# File 'lib/spiderfw/app.rb', line 116

def description
    desc = @description || self.spec.description
    desc.blank? ? self.name : desc
end

#find_resource(type, name, cur_path = nil) ⇒ Spider::Resource

Finds a resource (see Spider.find_resource)

Returns:



218
219
220
# File 'lib/spiderfw/app.rb', line 218

def find_resource(type, name, cur_path=nil)
    Spider.find_resource(type, name, cur_path, self)
end

#find_resource_path(type, name, cur_path = nil) ⇒ String

Finds the path of the resource (see Spider#find_resource)

Returns:



224
225
226
227
# File 'lib/spiderfw/app.rb', line 224

def find_resource_path(type, name, cur_path=nil)
    res = Spider.find_resource(type, name, cur_path, self)
    return res ? res.path : nil
end

#full_nameString

Returns The apps’ full_name or spec.name.

Returns:

  • (String)

    The apps’ full_name or spec.name



111
112
113
# File 'lib/spiderfw/app.rb', line 111

def full_name
    @full_name || self.spec.name
end

#get_tag(tag) ⇒ Object

Returns The object corresponding to a registered tag.

Parameters:

Returns:

  • (Object)

    The object corresponding to a registered tag



351
352
353
# File 'lib/spiderfw/app.rb', line 351

def get_tag(tag)
    @tags[tag]
end

#has_tag?(tag) ⇒ bool

Returns Whether the given tag is registered.

Parameters:

Returns:

  • (bool)

    Whether the given tag is registered



357
358
359
360
# File 'lib/spiderfw/app.rb', line 357

def has_tag?(tag)
    return false unless @tags
    @tags[tag] ? true : false
end

#http_s_url(action = nil) ⇒ String

Returns If the site supports SSL, returns the #https_url; otherwise, the #http_url.

Returns:

  • (String)

    If the site supports SSL, returns the #https_url; otherwise, the #http_url



167
168
169
170
# File 'lib/spiderfw/app.rb', line 167

def http_s_url(action=nil)
    return https_url(action) if Spider.site && Spider.site.ssl?
    return http_url(action)
end

#http_url(action = nil) ⇒ String

Returns The full url used to access the application from the browser.

Returns:

  • (String)

    The full url used to access the application from the browser



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/spiderfw/app.rb', line 131

def http_url(action=nil)
    if u = Spider.conf.get("#{@dotted_name}.http_url") 
        if action
            u += '/' if u[-1].chr != '/'
            u += action.to_s
        end
        return u 
    end
    return nil unless Spider.site
    u = "http://#{Spider.site.domain}"
    u += ":#{Spider.site.port}" unless Spider.site.port == 80
    u += url
    u += "/"+action.to_s if action
    u
end

#https_url(action = nil) ⇒ String

The full url used to access the application from the browser, prefixed with https

Returns:



150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/spiderfw/app.rb', line 150

def https_url(action=nil)
    if u = Spider.conf.get("#{@dotted_name}.https_url") 
        if action
            u += '/' if u[-1].chr != '/'
            u += action.to_s
        end
        return u 
    end
    return nil unless Spider.site && Spider.site.ssl?
    u = "https://#{Spider.site.domain}"
    u += ":#{Spider.site.ssl_port}" unless Spider.site.ssl_port == 443
    u += url
    u += "/"+action.to_s if action
    u
end

#initObject

Initializes missing variables to default variables.



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
# File 'lib/spiderfw/app.rb', line 77

def init
    unless @path
        if caller[1].split(":").count <=3 && caller[1].split(":")[0].length > 1
            file = caller[1].split(':')[0]
        else
            file = caller[1].split(':')[0..-(caller[1].split(":").count-1)].join(':')
        end
        dir = File.dirname(file)
        @path = dir
    end
    @path = File.expand_path(@path)
    @short_name ||= Inflector.underscore(self.name).gsub(File::SEPARATOR, '_')
    @dotted_name = Inflector.underscore(self.name).gsub(File::SEPARATOR, '.')
    @pub_path ||= File.join(@path, 'public')
    @test_path ||= File.join(@path, 'test')
    @setup_path ||= File.join(@path, 'setup')
    @models_path ||= File.join(@path, 'models')
    @widgets_path ||= File.join(@path, 'widgets')
    @views_path ||= File.join(@path, '/views')
    @tags_path ||= File.join(@path, 'tags')
    @version = Gem::Version.new(@version.to_s) if @version && !@version.is_a?(Gem::Version)
    spec_path = File.join(@path, "#{@short_name}.appspec")
    load_spec(spec_path) if File.exists?(spec_path)
    @route_url ||= Inflector.underscore(self.name)
    @label ||= @short_name.split('_').each{ |p| p[0] = p[0].chr.upcase }.join(' ')
    @gettext_parsers ||= []
    @gettext_dirs ||= ['lib','bin','controllers','models','views','widgets','public']
    @gettext_extensions ||= ['rb','rhtml','shtml','js']
    @gettext_domain ||= @short_name
    
    find_tags
end

#installed_versionGem::Version

Returns the currently installed version of an app

Returns:

  • (Gem::Version)


307
308
309
310
311
# File 'lib/spiderfw/app.rb', line 307

def installed_version
    FileUtils.mkpath(File.dirname(installed_version_path))
    return unless File.exist?(installed_version_path)
    return Gem::Version.new(IO.read(installed_version_path))
end

#installed_version=(version) ⇒ nil

Sets the currently installed version of an app

Parameters:

  • version (String|Gem::Version)

Returns:

  • (nil)


316
317
318
319
320
321
322
# File 'lib/spiderfw/app.rb', line 316

def installed_version=(version)
    FileUtils.mkpath(File.dirname(installed_version_path))
    version = Gem::Version.new(version) unless version.is_a?(Gem::Version)
    File.open(installed_version_path, 'w') do |f|
        f << version.to_s
    end
end

#load_spec(spec_path = nil) ⇒ AppSpec

Loads the app’s .spec file

Parameters:

  • spec_path (String) (defaults to: nil)

Returns:



327
328
329
330
331
332
# File 'lib/spiderfw/app.rb', line 327

def load_spec(spec_path=nil)
    @spec = AppSpec.load(spec_path)
    @spec.app_id = File.basename(spec_path, 'appsec') unless @spec.app_id
    @version = @spec.version if @spec.version
    @spec
end

#models(container = nil) ⇒ Array

Returns An array of all the BaseModel subclasses defined inside the module.

Returns:

  • (Array)

    An array of all the BaseModel subclasses defined inside the module



199
200
201
202
203
204
205
206
207
208
209
# File 'lib/spiderfw/app.rb', line 199

def models(container=nil)
    container ||= self
    mods = []
    container.constants.each do |c|
        begin
            mods += get_models(container.const_get(c))
        rescue LoadError
        end
    end
    return mods
end

#pub_urlString

option is set to ‘publish’, the app’s url inside the home is returned.

Returns:

  • (String)

    The url to the app’s public content. If the static_content.mode configuration



174
175
176
177
178
179
180
# File 'lib/spiderfw/app.rb', line 174

def pub_url
    if Spider.conf.get('static_content.mode') == 'publish'
        Spider::HomeController.pub_url+'/apps/'+self.short_name
    else
        request_url+'/public'
    end
end

#pub_url!String

Returns The url to the app’s public content, inside the app’s folder (ignoring publishing mode).

Returns:

  • (String)

    The url to the app’s public content, inside the app’s folder (ignoring publishing mode)



183
184
185
# File 'lib/spiderfw/app.rb', line 183

def pub_url!
    request_url+'/public'
end

#register_tag(tag, obj) ⇒ void

This method returns an undefined value.

Register the pointer from a widget tag to the an object

Parameters:



344
345
346
347
# File 'lib/spiderfw/app.rb', line 344

def register_tag(tag, obj)
    @tags ||= {}
    @tags[tag] = obj
end

#relative_pathString

Returns The app’s path, relative to its container (the home or the Spider lib).

Returns:

  • (String)

    The app’s path, relative to its container (the home or the Spider lib)



236
237
238
239
240
241
242
# File 'lib/spiderfw/app.rb', line 236

def relative_path
    if Spider.paths[:apps] && @path.index(Spider.paths[:apps]) == 0
        return @path[Spider.paths[:apps].length+1..-1]
    else
        return @path[$SPIDER_PATHS[:core_apps].length+1..-1]
    end
end

#req(*list) ⇒ nil Also known as: app_require

Require files inside the App’s path

Can accept either a list of files to require, relative to the app’s path; or, a Hash containing arrays for keys corresponding to folders inside app (e.g. :models, :controllers)

If an Hash is provided, will load files in the order :lib, :models, :widgets, :controllers, followed by any additional keys, in the order they are defined in the Hash (under Ruby 1.9.x), or in random order (Ruby 1.8.x)

Parameters:

  • files (Hash|file1, file2, ...)

    to require

Returns:

  • (nil)


277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/spiderfw/app.rb', line 277

def req(*list)
    do_require = Proc.new{ |f| 
        Kernel.require File.join(@path, f) 
    }
    if list.first.is_a?(Hash)
        hash = list.first
        load_keys = ([:lib, :models, :widgets, :controllers] + hash.keys).uniq
        load_keys.each do |k|
            if hash[k].is_a?(Array)
                hash[k].each{ |file| 
                    if k == :widgets
                        file = File.join(file, file)
                    end
                    file = File.join(k.to_s, file)
                    do_require.call(file) 
                }
            end
        end
    else
        list.each do |file|
            do_require.call(file)
        end
    end
end

#request_urlString Also known as: url

Returns The path used to access the application from the browser.

Returns:

  • (String)

    The path used to access the application from the browser



122
123
124
125
126
127
# File 'lib/spiderfw/app.rb', line 122

def request_url
    if u = Spider.conf.get("#{@dotted_name}.url") 
        return u
    end
    Spider::ControllerMixins::HTTPMixin.reverse_proxy_mapping('/'+@route_url)
end

#route(path, dest = nil, options = nil) ⇒ nil

Calls route on the app’s controller (see Dispatcher#route).

Returns:

  • (nil)


231
232
233
# File 'lib/spiderfw/app.rb', line 231

def route(path, dest=nil, options=nil)
    self.controller.route(path, dest, options)
end

#route_path(action = '') ⇒ Object



254
255
256
257
258
# File 'lib/spiderfw/app.rb', line 254

def route_path(action='')
    path = Spider::ControllerMixins::HTTPMixin.reverse_proxy_mapping('/'+@route_url)
    action = action[1..-1] if action[0].chr == '/'
    [path, action].reject{ |p| p.blank? }.join('/')
end