Module: Lanes::Extensions

Extended by:
Enumerable
Defined in:
lib/lanes/extension.rb,
lib/lanes/extension/definition.rb

Defined Under Namespace

Classes: Base, Definition

Constant Summary collapse

ALL =
Array.new

Class Method Summary collapse

Class Method Details

.add(klass) ⇒ Object



26
27
28
29
30
31
32
33
# File 'lib/lanes/extension.rb', line 26

def add(klass)
    @cached_instances = nil
    if Extensions.controlling_locked
        ALL.unshift(klass)
    else
        ALL << klass
    end
end

.allObject



35
36
37
# File 'lib/lanes/extension.rb', line 35

def all
    ALL
end

.client_bootstrap_dataObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/lanes/extension.rb', line 94

def client_bootstrap_data
    data = {
      api_path: Lanes.config.api_path,
      root_path: Lanes.config.mounted_at,
      root_view: Lanes.config.root_view,
      environment: Lanes.config.environment,
      assets_path_prefix: Lanes.config.assets_path_prefix,
      controlling_extension: controlling.identifier,
      initial_workspace_screen_id: Lanes.config.initial_workspace_screen_id
    }
    each do | ext |
        ext_data  = ext.client_bootstrap_data
        data[ext.identifier] = ext_data unless ext_data.nil?
    end
    return data
end

.controllingObject



88
89
90
91
92
# File 'lib/lanes/extension.rb', line 88

def controlling
    last = ALL.last
    each{|ext| return ext if ext.is_a?(last) }
    Lanes.logger.error "Unable to find controlling extension. #{sorted} are loaded"
end

.each(reversed: false) ⇒ Object



81
82
83
84
85
86
# File 'lib/lanes/extension.rb', line 81

def each(reversed: false)
    @cached_instances ||= sorted.map{ |klass| klass.new }
    (reversed ? @cached_instances.reverse : @cached_instances).each do |ext|
        yield ext
    end
end

.each_asset(phase: :early, type: :js) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/lanes/extension.rb', line 44

def each_asset(phase: :early, type: :js)
    each do |ext|
        if phase == :all || ext.load_phase == phase
            asset = case type
                    when :js  then ext.javascript_include
                    when :css then ext.stylesheet_include
                    else nil
                    end
            yield asset unless asset.nil?
        end
    end
end

.for_identifier(identifier) ⇒ Object



39
40
41
42
# File 'lib/lanes/extension.rb', line 39

def for_identifier(identifier)
    each{|ext| return ext if ext.identifier == identifier }
    nil
end

.load_controlling_configObject



111
112
113
114
115
116
# File 'lib/lanes/extension.rb', line 111

def load_controlling_config
    config_file = self.controlling.root_path.join('config','lanes.rb')
    if config_file.exist?
        require config_file
    end
end

.load_screensObject



11
12
13
14
15
16
17
18
# File 'lib/lanes/extension.rb', line 11

def load_screens
    each do | ext |
        screens_config = ext.root_path.join('config','screens.rb')
        if screens_config.exist?
            require screens_config
        end
    end
end

.lock_controlling!Object

lock the current controlling extension so that it can’t be changed by other extensions that are loaded later



22
23
24
# File 'lib/lanes/extension.rb', line 22

def lock_controlling!
    self.controlling_locked=true
end

.sortedObject



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/lanes/extension.rb', line 57

def sorted
    unmapped = all
    mapped   = []
    while unmapped.any?
        mapped_count = mapped.length
        unmapped.each do | ext |
            if !ext.before && !ext.after
                mapped.push(ext)
            end
            if ext.before && (position = mapped.find_index(ext.before))
                mapped.insert(position, ext)
            end
            if ext.after && (position = mapped.find_index(ext.after))
                mapped.insert(position+1, ext)
            end
        end
        if mapped_count == mapped.length # we failed to add any extensions
            Lanes.logger.info "Conflicting load directives.  Some extensions will not be available"
        end
        unmapped -= mapped
    end
    mapped
end