Class: BallonizerProxyGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/ballonizer_proxy.rb

Overview

A class to automate the creation of an rack app that offer multiple BallonizerProxys. The constructor only takes a hash (often parsed from a JSON config file) and create a rack app that can be accessed by #app.

The hash format is as follows:

h has a String path (that start and end with slashes) all the proxy apps will be inside this namespace/‘virtual directory’.

h has an Array with the Hashes of the individual settings of each ballonizer proxy. The ‘proxy_path’, ‘original_domain’, ‘original_paths’ are as the PrettyProxy parameters with the same name. The ‘database_uri’ is equivalent to the database parameter of the Ballonizer constructor. These four are obrigatory. The rest of the options are as the ones described for the settings hash of the Ballonizer constructor. It’s NOT RECOMMENDED to configure the :form_handler_url, :add_required_*, :add_js_for_edition, :*_asset_path_for_link, options, these options are automatically defined. The purpose of this class is mainly to handle this configuration for you, so doesn’t make much sense to define these settings.

Use ‘rake example’ to run the example. You can see the results in localhost:your_server_port/proxys/xkcd/pt-br/ and localhost:your_server_port/proxys/cardboad-crack/pt-br/. The configuration file is in example/settings_example.json

This documentation is also avaliable in: www.omniref.com/ruby/gems/ballonizer_proxy

Author:

  • Henrique Becker

Instance Method Summary collapse

Constructor Details

#initialize(settings) ⇒ BallonizerProxyGenerator

Returns a new instance of BallonizerProxyGenerator.



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
# File 'lib/ballonizer_proxy.rb', line 120

def initialize(settings)
  @settings = PrivateUtils.deep_freeze(settings)
  @ballonizer_proxys = []
  @settings['ballonizer_proxys'].each do | bp_config |
    ballonizer_settings = {}
    Ballonizer::DEFAULT_SETTINGS.each_key do | key |
      value = bp_config[key.to_s]
      if value
        ballonizer_settings[key] = value
      end
    end
    ballonizer_settings = { 
      form_handler_url: bp_config['proxy_path'] + 'request_handler',
      add_required_css: true,
      add_required_js_libs_for_edition: true,
      add_js_for_edition: true,
      jquery_no_conflict: true,
      create_tables_if_none: true,
      # the paths for assets are made absolute in BallonizerProxy
      css_asset_path_for_link: ASSET_PATH,
      js_asset_path_for_link: ASSET_PATH
    }.merge(ballonizer_settings)
    @ballonizer_proxys << BallonizerProxy.new(
      @settings['proxys_namespace'] + bp_config['proxy_path'][1..-1],
      bp_config['original_domain'],
      bp_config['original_paths'],
      bp_config['database_uri'],
      ballonizer_settings
    )
  end

  proxys_namespace = @settings['proxys_namespace']
  ballonizer_proxys = @ballonizer_proxys

  @app = Rack::Builder.new do
    map ASSET_PATH do
      run Ballonizer.assets_app
    end
    ballonizer_proxys.each do | bp |
      map bp.proxy_path do
        run bp
      end

      map bp.ballonizer.settings[:form_handler_url] do
        run(lambda do | env |
          begin
            bp.ballonizer.process_submit(env)
            [200, {}, ['your changes have been stored successfully']]
          rescue Ballonizer::SubmitError => e
            [200, {}, [e.message]]
          end
        end)
      end
    end
  end
end

Instance Method Details

#appObject



177
178
179
# File 'lib/ballonizer_proxy.rb', line 177

def app
  @app
end