Skip to content

Commit abf631d

Browse files
committed
feature: making paths configurable
1 parent b28f15d commit abf631d

File tree

9 files changed

+36
-87
lines changed

9 files changed

+36
-87
lines changed

src/lib/preset.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ pub trait Preset<T> {
2121
/// The following are just aliases
2222
///
2323
pub type RewriteFns = Vec<fn(&str, &RewriteContext) -> String>;
24-
pub type ResourceDef<'a> = (&'a str, Method, fn(&HttpRequest<AppState>) -> HttpResponse);
25-
pub type AsyncResourceDef<'a> = (&'a str, Method, fn(&HttpRequest<AppState>) -> FutResp);
24+
pub type ResourceDef = (String, Method, fn(&HttpRequest<AppState>) -> HttpResponse);
25+
pub type AsyncResourceDef = (String, Method, fn(&HttpRequest<AppState>) -> FutResp);

src/lib/presets/m2/handlers/config_capture.rs

+8
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ use app_state::AppState;
33
use presets::m2::preset_m2::FutResp;
44
use proxy_utils::apply_to_proxy_body;
55
use rjs::RequireJsClientConfig;
6+
use actix_web::http::Method;
7+
use preset::ResourceDef;
8+
use preset::AsyncResourceDef;
69

710
///
811
/// This handler will record the incoming string from the Magento-generated
@@ -26,3 +29,8 @@ pub fn handle(original_request: &HttpRequest<AppState>) -> FutResp {
2629
b
2730
})
2831
}
32+
33+
pub fn register(path: Option<String>) -> AsyncResourceDef {
34+
let p = path.unwrap();
35+
(p.clone(), Method::GET, handle)
36+
}

src/lib/presets/m2/handlers/config_post.rs

-32
This file was deleted.

src/lib/presets/m2/handlers/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
pub mod build;
22
pub mod config;
33
pub mod config_capture;
4-
pub mod config_post;
54
pub mod err_response;
65
pub mod loaders;
76
pub mod req_capture;

src/lib/presets/m2/handlers/serve_r_js.rs

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
use actix_web::HttpRequest;
22
use actix_web::HttpResponse;
33
use app_state::AppState;
4+
use presets::m2::opts::M2PresetOptions;
5+
use actix_web::http::Method;
6+
use preset::ResourceDef;
47

58
const INSTRUMENTED_REQUIRE_JS: &'static str = include_str!("../static/requirejs.js");
69

@@ -13,3 +16,8 @@ pub fn handle(_req: &HttpRequest<AppState>) -> HttpResponse {
1316
.content_type("application/javascript")
1417
.body(INSTRUMENTED_REQUIRE_JS)
1518
}
19+
20+
pub fn register(path: Option<String>) -> ResourceDef {
21+
let p = path.unwrap();
22+
(p.clone(), Method::GET, handle)
23+
}

src/lib/presets/m2/opts.rs

+10
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ use serde_json;
33

44
#[derive(Deserialize, Debug)]
55
pub struct M2PresetOptions {
6+
67
#[serde(default = "default_require_path")]
78
pub require_path: Option<String>,
9+
10+
#[serde(default = "default_require_conf_path")]
11+
pub require_conf_path: Option<String>,
12+
813
pub bundle_config: Option<String>,
914
pub auth_basic: Option<AuthBasic>,
1015
pub module_blacklist: Option<Vec<String>>,
@@ -14,10 +19,15 @@ fn default_require_path() -> Option<String> {
1419
Some("/static/{version}/frontend/{vendor}/{theme}/{locale}/requirejs/require.js".into())
1520
}
1621

22+
fn default_require_conf_path() -> Option<String> {
23+
Some("/static/{version}/frontend/{vendor}/{theme}/{locale}/requirejs-config.js".into())
24+
}
25+
1726
impl Default for M2PresetOptions {
1827
fn default() -> Self {
1928
M2PresetOptions {
2029
require_path: None,
30+
require_conf_path: None,
2131
bundle_config: None,
2232
auth_basic: None,
2333
module_blacklist: None,

src/lib/presets/m2/preset_m2.rs

+7-18
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@ impl M2Preset {
3131
}
3232
}
3333

34-
const PATH_REQUIRE_JS: &'static str =
35-
"/static/{version}/frontend/{vendor}/{theme}/{locale}/requirejs/require.js";
36-
const PATH_REQUIRE_CNF: &'static str =
37-
"/static/{version}/frontend/{vendor}/{theme}/{locale}/requirejs-config.js";
38-
const PATH_CONF_POST: &'static str = "/__bs/post";
39-
4034
///
4135
/// The M2Preset adds some middleware, resources and
4236
/// rewrites
@@ -52,25 +46,20 @@ impl Preset<AppState> for M2Preset {
5246
// which is suitable for most routes.
5347
//
5448
let http_responders: Vec<ResourceDef> = vec![
55-
(PATH_REQUIRE_JS, Method::GET, handlers::serve_r_js::handle),
56-
("/__bs/reqs.json", Method::GET, handlers::requests::handle),
57-
("/__bs/config.json", Method::GET, handlers::config::handle),
58-
("/__bs/build.json", Method::GET, handlers::build::handle),
59-
("/__bs/loaders.js", Method::GET, handlers::loaders::handle),
60-
("/__bs/seed.json", Method::GET, handlers::seed::handle),
49+
handlers::serve_r_js::register(self.options.require_path.clone()),
50+
("/__bs/reqs.json".to_string(), Method::GET, handlers::requests::handle),
51+
("/__bs/config.json".to_string(), Method::GET, handlers::config::handle),
52+
("/__bs/build.json".to_string(), Method::GET, handlers::build::handle),
53+
("/__bs/loaders.js".to_string(), Method::GET, handlers::loaders::handle),
54+
("/__bs/seed.json".to_string(), Method::GET, handlers::seed::handle),
6155
];
6256

6357
//
6458
// Async Responders are needed when there's additional
6559
// work to be done in a handler.
6660
//
6761
let http_async_responders: Vec<AsyncResourceDef> = vec![
68-
(PATH_CONF_POST, Method::POST, handlers::config_post::handle),
69-
(
70-
PATH_REQUIRE_CNF,
71-
Method::GET,
72-
handlers::config_capture::handle,
73-
),
62+
handlers::config_capture::register(self.options.require_conf_path.clone())
7463
];
7564

7665
let app = http_responders

test/fixtures/config.json

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"name": "m2",
55
"options": {
66
"bundle_config": "file:test/fixtures/bundle-config.json",
7+
"require_path": "/static/{version}/frontend/{vendor}/{theme}/{locale}/requirejs/require.js",
78
"auth_basic": {
89
"username": "acme",
910
"password": "acmepw"

tests/api.rs

-34
Original file line numberDiff line numberDiff line change
@@ -109,40 +109,6 @@ fn test_build_json_without_config() {
109109
});
110110
}
111111

112-
#[test]
113-
fn test_capture_requirejs() {
114-
let args = vec!["config-gen", "http://example.com"];
115-
let path = "/__bs/post";
116-
let get = "/__bs/build.json";
117-
run_with_args(args, move |result: RunResult| {
118-
let (_sys, url) = result.expect("system started");
119-
let api1 = format!("{}{}", url, path);
120-
let client = reqwest::Client::new();
121-
122-
client
123-
.post(&api1)
124-
.body(include_str!(
125-
"../test/fixtures/requirejs-config-generated.js"
126-
)).send()
127-
.expect("POST sent");
128-
129-
let api2 = format!("{}{}", url, get);
130-
let mut res2 = reqwest::get(api2.as_str()).expect("call build.json api endpoint");
131-
let actual: RequireJsBuildConfig =
132-
serde_json::from_str(&res2.text().expect("res.text")).expect("serde_unwrap");
133-
let expected: RequireJsBuildConfig =
134-
serde_json::from_str(include_str!("../test/fixtures/rjs-config-expected.json"))
135-
.expect("serde expected");
136-
137-
assert_eq!(actual.deps, expected.deps);
138-
assert_eq!(actual.paths, expected.paths);
139-
assert_eq!(actual.map, expected.map);
140-
assert_eq!(actual.modules, expected.modules);
141-
assert_eq!(actual.optimize, expected.optimize);
142-
assert_eq!(actual.shim, expected.shim);
143-
});
144-
}
145-
146112
#[test]
147113
fn test_build_json_with_seed_without_config() {
148114
let args = vec![

0 commit comments

Comments
 (0)