Module: Lanes::Extensions

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

.allObject



33
34
35
# File 'lib/lanes/extension.rb', line 33

def all
    ALL
end

.client_bootstrap_data(view) ⇒ Object



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

def client_bootstrap_data(view)
    data = {
      csrf_token: Rack::Csrf.csrf_token(view.env),
      controlling_extension: controlling.identifier,
      root_view:  Lanes.config.root_view,
      api_path: Lanes.config.mounted_at,
      environment: Lanes.config.environment,
      initial_workspace_screen_id: Lanes.config.initial_workspace_screen_id,
      pub_sub: require_pub_sub?
    }
    each do | ext |
        data[ext.identifier] = ext.client_bootstrap_data(view)
    end
    return data
end

.controllingObject



86
87
88
89
90
# File 'lib/lanes/extension.rb', line 86

def controlling
    last = ALL.last
    each{|ext| return ext if ext.is_a?(last) }
    LanesExtension.new # fallback if can't find an extension
end

.eachObject



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

def each
    sorted.map{ |klass| yield klass.new }
end

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



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

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

.load_after(extension) ⇒ Object



25
26
27
# File 'lib/lanes/extension.rb', line 25

def load_after(extension)
    self.after = extension
end

.load_before(extension) ⇒ Object



29
30
31
# File 'lib/lanes/extension.rb', line 29

def load_before(extension)
    self.before = extension
end

.load_controlling_configObject



108
109
110
111
112
113
# File 'lib/lanes/extension.rb', line 108

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



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

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



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

def lock_controlling!
    self.controlling_locked=true
end

.require_pub_sub?Boolean

Returns:

  • (Boolean)


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

def require_pub_sub?
    all.any?{|ext| ext.uses_pub_sub }
end

.require_workspace?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/lanes/extension.rb', line 37

def require_workspace?
    all.any?{|ext| ext.uses_workspace }
end

.sortedObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/lanes/extension.rb', line 58

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