comet-cpp 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. checksums.yaml +7 -0
  2. data/bin/comet-html +69 -0
  3. data/bin/comet-make +53 -0
  4. data/bin/comet-new +62 -0
  5. data/bin/comet-web +14 -0
  6. data/lib/comet-html/generator.rb +220 -0
  7. data/lib/comet-html/header-generator.rb +145 -0
  8. data/lib/comet-html/parser-binding.rb +42 -0
  9. data/lib/comet-html/parser-class.rb +168 -0
  10. data/lib/comet-html/parser-context.rb +61 -0
  11. data/lib/comet-html/parser-reference.rb +98 -0
  12. data/lib/comet-html/parser-repeater.rb +58 -0
  13. data/lib/comet-html/parser-slot.rb +108 -0
  14. data/lib/comet-html/source-generator.rb +285 -0
  15. data/lib/comet-html/utils.rb +88 -0
  16. data/lib/guard/comet-html.rb +32 -0
  17. data/lib/guard/comet.rb +36 -0
  18. data/vendor/project/Gemfile +4 -0
  19. data/vendor/project/Guardfile +5 -0
  20. data/vendor/project/app/application.hpp +29 -0
  21. data/vendor/project/app/collections/.gitkeep +0 -0
  22. data/vendor/project/app/controllers/.gitkeep +0 -0
  23. data/vendor/project/app/main.cpp +6 -0
  24. data/vendor/project/app/models/.gitkeep +0 -0
  25. data/vendor/project/app/routes.cpp +7 -0
  26. data/vendor/project/app/views/layouts/.gitkeep +0 -0
  27. data/vendor/project/public/index.html +7 -0
  28. data/vendor/src/anchorable_element.hpp +79 -0
  29. data/vendor/src/append_semantics.hpp +73 -0
  30. data/vendor/src/bindable.cpp +99 -0
  31. data/vendor/src/bindable.hpp +106 -0
  32. data/vendor/src/cheerp_parse_cookie_values.cpp +58 -0
  33. data/vendor/src/comment_element.cpp +11 -0
  34. data/vendor/src/comment_element.hpp +17 -0
  35. data/vendor/src/cookies.cpp +94 -0
  36. data/vendor/src/cookies.hpp +60 -0
  37. data/vendor/src/custom_element.hpp +61 -0
  38. data/vendor/src/datatree.cpp +198 -0
  39. data/vendor/src/datatree.hpp +233 -0
  40. data/vendor/src/document.cpp +62 -0
  41. data/vendor/src/document.hpp +31 -0
  42. data/vendor/src/element.cpp +358 -0
  43. data/vendor/src/element.hpp +138 -0
  44. data/vendor/src/events.hpp +76 -0
  45. data/vendor/src/exception.cpp +13 -0
  46. data/vendor/src/exception.hpp +11 -0
  47. data/vendor/src/from_string.cpp +99 -0
  48. data/vendor/src/from_string.hpp +37 -0
  49. data/vendor/src/globals.cpp +6 -0
  50. data/vendor/src/globals.hpp +15 -0
  51. data/vendor/src/http.cpp +93 -0
  52. data/vendor/src/http.hpp +72 -0
  53. data/vendor/src/lexical_cast.hpp +51 -0
  54. data/vendor/src/local_storage.cpp +75 -0
  55. data/vendor/src/local_storage.hpp +53 -0
  56. data/vendor/src/mvc/collection.hpp +154 -0
  57. data/vendor/src/mvc/controller.hpp +59 -0
  58. data/vendor/src/mvc/id_type.hpp +9 -0
  59. data/vendor/src/mvc/layout.hpp +44 -0
  60. data/vendor/src/mvc/model.cpp +89 -0
  61. data/vendor/src/mvc/model.hpp +50 -0
  62. data/vendor/src/object.cpp +71 -0
  63. data/vendor/src/object.hpp +298 -0
  64. data/vendor/src/parse_cookie_values.hpp +12 -0
  65. data/vendor/src/promise.cpp +50 -0
  66. data/vendor/src/promise.hpp +43 -0
  67. data/vendor/src/repeater.hpp +116 -0
  68. data/vendor/src/router.cpp +62 -0
  69. data/vendor/src/router.hpp +34 -0
  70. data/vendor/src/router_base.hpp +107 -0
  71. data/vendor/src/signal.hpp +150 -0
  72. data/vendor/src/slot_element.hpp +61 -0
  73. data/vendor/src/url.cpp +19 -0
  74. data/vendor/src/url.hpp +15 -0
  75. data/vendor/src/window.cpp +22 -0
  76. data/vendor/src/window.hpp +24 -0
  77. metadata +134 -0
@@ -0,0 +1,107 @@
1
+ #ifndef ROUTER_BASE_HPP
2
+ # define ROUTER_BASE_HPP
3
+
4
+ # include <functional>
5
+ # include <vector>
6
+ # include <string>
7
+ # define ROUTER_PARAM_PATTERN "[a-zA-Z0-9_-]*"
8
+ # include "object.hpp"
9
+
10
+ namespace Comet
11
+ {
12
+ template<typename PARAMS, typename ACTION>
13
+ class RouterBase
14
+ {
15
+ public:
16
+ typedef ACTION Action;
17
+ typedef Comet::ObjectImpl<client::RegExp> JsRegExp;
18
+
19
+ struct Item
20
+ {
21
+ Item() : regexp(new client::RegExp("")) {}
22
+
23
+ Action run;
24
+ std::string method;
25
+ std::string regexp_src, regexp_original;
26
+ JsRegExp regexp;
27
+ std::vector<std::string> param_names;
28
+ };
29
+
30
+ typedef std::vector<Item> Items;
31
+
32
+ const Action* get_action(const std::string& method, const std::string& uri, PARAMS& query_params) const
33
+ {
34
+ using namespace std;
35
+ Comet::String js_uri(uri);
36
+
37
+ for (const Item& item : routes)
38
+ {
39
+ bool does_match = item.regexp->test(*js_uri);
40
+
41
+ if (does_match)
42
+ {
43
+ auto matches = Comet::Object(js_uri->match(*item.regexp)).to_vector<std::string>();
44
+
45
+ for (unsigned short i = 1 ; i < matches.size() ; ++i)
46
+ {
47
+ const string& param_name = item.param_names[i - 1];
48
+ const string& param_value = matches[i];
49
+
50
+ query_params[param_name] = param_value;
51
+ }
52
+ return &(item.run);
53
+ }
54
+ }
55
+ return 0;
56
+ }
57
+
58
+ void match(const std::string& route, Action callback)
59
+ {
60
+ match("", route, callback);
61
+ }
62
+
63
+ void match(const std::string& method, const std::string& route, Action callback)
64
+ {
65
+ Item item;
66
+
67
+ item_initialize_regex(item, '^' + route + '$');
68
+ item.method = method;
69
+ item.run = callback;
70
+ routes.push_back(item);
71
+ }
72
+
73
+ private:
74
+ void item_initialize_regex(Item& item, const std::string& route)
75
+ {
76
+ using namespace std;
77
+ string find_params_str(':' + std::string(ROUTER_PARAM_PATTERN));
78
+ JsRegExp find_params(new client::RegExp(find_params_str.c_str(), "g"));
79
+ string regexified_route;
80
+ auto matches = Comet::Object(
81
+ Comet::String(route)->match(*find_params)
82
+ ).to_vector<string>();
83
+ size_t last_position = 0;
84
+
85
+ for (unsigned short i = 0 ; i < matches.size() ; ++i)
86
+ {
87
+ const string& match = matches[i];
88
+ size_t match_position = route.find(match);
89
+
90
+ regexified_route += route.substr(last_position, match_position - last_position);
91
+ regexified_route = regexified_route + '(' + ROUTER_PARAM_PATTERN + ')';
92
+ item.param_names.push_back(route.substr(match_position + 1, match.length() - 1));
93
+ last_position = match_position + match.length();
94
+ }
95
+ regexified_route += route.substr(last_position);
96
+ item.regexp_src = regexified_route;
97
+ item.regexp_original = route;
98
+ item.regexp = new client::RegExp(regexified_route.c_str());
99
+ }
100
+
101
+ public:
102
+ Items routes;
103
+ };
104
+ }
105
+
106
+ #endif
107
+
@@ -0,0 +1,150 @@
1
+ #ifndef COMET_SIGNAL_HPP
2
+ # define COMET_SIGNAL_HPP
3
+
4
+ # include <map>
5
+ # include <vector>
6
+
7
+ namespace Comet
8
+ {
9
+ class ISignal
10
+ {
11
+ public:
12
+ virtual void disconnect(unsigned long) = 0;
13
+ private:
14
+ };
15
+
16
+ class Listener
17
+ {
18
+ public:
19
+ virtual ~Listener()
20
+ {
21
+ stop_listening();
22
+ }
23
+
24
+ template<typename SIGNAL>
25
+ void listen_to(SIGNAL& signal, typename SIGNAL::Callback callback)
26
+ {
27
+ unsigned long id = signal.connect(callback);
28
+
29
+ connections.push_back(std::pair<ISignal*,unsigned long>(&signal, id));
30
+ }
31
+
32
+ void stop_listening(ISignal* ptr = 0)
33
+ {
34
+ for (auto it = connections.begin() ; it != connections.end() ;)
35
+ {
36
+ if (ptr == 0 || it->first == ptr)
37
+ {
38
+ it->first->disconnect(it->second);
39
+ it = connections.erase(it);
40
+ }
41
+ else
42
+ it++;
43
+ }
44
+ }
45
+
46
+ private:
47
+ std::vector<std::pair<ISignal*,unsigned long> > connections;
48
+ };
49
+
50
+ template<typename ...Args>
51
+ class Signal : public ISignal
52
+ {
53
+ friend class Listener;
54
+ typedef std::function<void (Args...)> Callback;
55
+ public:
56
+ Signal() : listener_i(0)
57
+ {
58
+ }
59
+
60
+ Signal(const Signal& cpy) : listener_i(0)
61
+ {
62
+ }
63
+
64
+ Signal& operator=(const Signal& cpy)
65
+ {
66
+ return *this;
67
+ }
68
+
69
+ void trigger(Args... args)
70
+ {
71
+ for (auto slot : callbacks)
72
+ slot.second(args...);
73
+ }
74
+
75
+ unsigned long connect(Callback callback)
76
+ {
77
+ callbacks.insert(std::pair<unsigned long, Callback>(listener_i, callback));
78
+ listener_i++;
79
+ return listener_i - 1;
80
+ }
81
+
82
+ void disconnect(unsigned long i)
83
+ {
84
+ for (auto it = callbacks.begin() ; it != callbacks.end() ; ++it)
85
+ {
86
+ if (it->first == i)
87
+ {
88
+ callbacks.erase(it);
89
+ break ;
90
+ }
91
+ }
92
+ }
93
+
94
+ private:
95
+ int listener_i;
96
+ std::map<unsigned long, Callback> callbacks;
97
+ };
98
+
99
+ template<>
100
+ class Signal<void> : public ISignal
101
+ {
102
+ friend class Listener;
103
+ typedef std::function<void (void)> Callback;
104
+ public:
105
+ Signal() : listener_i(0)
106
+ {
107
+ }
108
+
109
+ Signal(const Signal& cpy) : listener_i(0)
110
+ {
111
+ }
112
+
113
+ Signal& operator=(const Signal& cpy)
114
+ {
115
+ return *this;
116
+ }
117
+
118
+ void trigger()
119
+ {
120
+ for (auto slot : callbacks)
121
+ slot.second();
122
+ }
123
+
124
+ unsigned long connect(Callback callback)
125
+ {
126
+ callbacks.insert(std::pair<unsigned long, Callback>(listener_i, callback));
127
+ listener_i++;
128
+ return listener_i - 1;
129
+ }
130
+
131
+ void disconnect(unsigned long i)
132
+ {
133
+ for (auto it = callbacks.begin() ; it != callbacks.end() ; ++it)
134
+ {
135
+ if (it->first == i)
136
+ {
137
+ callbacks.erase(it);
138
+ break ;
139
+ }
140
+ }
141
+ }
142
+
143
+ private:
144
+ int listener_i;
145
+ std::map<unsigned long, Callback> callbacks;
146
+ };
147
+
148
+ }
149
+
150
+ #endif
@@ -0,0 +1,61 @@
1
+ #ifndef CRAILS_FRONT_SLOT_ELEMENT_HPP
2
+ # define CRAILS_FRONT_SLOT_ELEMENT_HPP
3
+
4
+ # include "anchorable_element.hpp"
5
+ # include "bindable.hpp"
6
+
7
+ namespace Comet
8
+ {
9
+ class SlotElement : public AnchorableElement
10
+ {
11
+ std::shared_ptr<IBindableView> element;
12
+ IBindableView* element_ptr = nullptr;
13
+
14
+ public:
15
+ bool has_element() const
16
+ {
17
+ return element_ptr != nullptr;
18
+ }
19
+
20
+ IBindableView* get_element() const
21
+ {
22
+ return element_ptr;
23
+ }
24
+
25
+ void attach()
26
+ {
27
+ std::vector<Comet::Element*> element_list;
28
+
29
+ element_list.push_back(get_element());
30
+ attach_elements(element_list);
31
+ }
32
+
33
+ void set_element(IBindableView& el)
34
+ {
35
+ cleanup();
36
+ element_ptr = &el;
37
+ if (is_anchorable())
38
+ attach();
39
+ }
40
+
41
+ template<typename ELEMENT>
42
+ void set_element(std::shared_ptr<ELEMENT> pointer)
43
+ {
44
+ cleanup();
45
+ element = std::dynamic_pointer_cast<IBindableView>(pointer);
46
+ element_ptr = element.get();
47
+ if (is_anchorable() && has_element())
48
+ attach();
49
+ }
50
+ private:
51
+ void cleanup()
52
+ {
53
+ if (has_element())
54
+ get_element()->destroy();
55
+ element = nullptr;
56
+ element_ptr = nullptr;
57
+ }
58
+ };
59
+ }
60
+
61
+ #endif
@@ -0,0 +1,19 @@
1
+ #include "url.hpp"
2
+ #include "globals.hpp"
3
+
4
+ using namespace std;
5
+ using namespace Comet;
6
+
7
+ string Url::encode(const string& src)
8
+ {
9
+ Comet::String js_string(src.c_str());
10
+
11
+ return window.apply("encodeURIComponent", js_string);
12
+ }
13
+
14
+ string Url::decode(const string& src)
15
+ {
16
+ Comet::String js_string(src.c_str());
17
+
18
+ return window.apply("decodeURIComponent", js_string);
19
+ }
@@ -0,0 +1,15 @@
1
+ #ifndef COMET_HTTP_HPP
2
+ # define COMET_HTTP_HPP
3
+
4
+ # include <string>
5
+
6
+ namespace Comet
7
+ {
8
+ namespace Url
9
+ {
10
+ std::string encode(const std::string&);
11
+ std::string decode(const std::string&);
12
+ }
13
+ }
14
+
15
+ #endif
@@ -0,0 +1,22 @@
1
+ #include "window.hpp"
2
+ #include "globals.hpp"
3
+
4
+ using namespace Comet;
5
+ using namespace std;
6
+
7
+ Comet::Window Comet::window;
8
+
9
+ Window::Window() : ObjectImpl((client::Window*)&client::window), events(make_shared<JavascriptEvents>((client::EventTarget*)&client::window))
10
+ {
11
+ events->on("resize", [this]() { resized.trigger(); });
12
+ }
13
+
14
+ void Window::set_timeout(function<void()> callback, double interval) const
15
+ {
16
+ client::window.setTimeout(cheerp::Callback(callback), interval);
17
+ }
18
+
19
+ void Window::set_interval(function<void()> callback, double interval) const
20
+ {
21
+ client::window.setInterval(cheerp::Callback(callback), interval);
22
+ }
@@ -0,0 +1,24 @@
1
+ #ifndef CRAILS_FRONT_WINDOW_HPP
2
+ # define CRAILS_FRONT_WINDOW_HPP
3
+
4
+ # include "object.hpp"
5
+ # include "signal.hpp"
6
+ # include "events.hpp"
7
+
8
+ namespace Comet
9
+ {
10
+ class Window : public ObjectImpl<client::Window>
11
+ {
12
+ public:
13
+ std::shared_ptr<JavascriptEvents> events;
14
+
15
+ Signal<void> resized;
16
+
17
+ Window();
18
+
19
+ void set_timeout(std::function<void()>, double interval) const;
20
+ void set_interval(std::function<void()>, double interval) const;
21
+ };
22
+ }
23
+
24
+ #endif
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: comet-cpp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Michael Martin Moro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-03-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: nokogiri
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.10.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.10.8
27
+ description: ''
28
+ email: michael@unetresgrossebite.com
29
+ executables:
30
+ - comet-make
31
+ - comet-html
32
+ - comet-new
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - bin/comet-html
37
+ - bin/comet-make
38
+ - bin/comet-new
39
+ - bin/comet-web
40
+ - lib/comet-html/generator.rb
41
+ - lib/comet-html/header-generator.rb
42
+ - lib/comet-html/parser-binding.rb
43
+ - lib/comet-html/parser-class.rb
44
+ - lib/comet-html/parser-context.rb
45
+ - lib/comet-html/parser-reference.rb
46
+ - lib/comet-html/parser-repeater.rb
47
+ - lib/comet-html/parser-slot.rb
48
+ - lib/comet-html/source-generator.rb
49
+ - lib/comet-html/utils.rb
50
+ - lib/guard/comet-html.rb
51
+ - lib/guard/comet.rb
52
+ - vendor/project/Gemfile
53
+ - vendor/project/Guardfile
54
+ - vendor/project/app/application.hpp
55
+ - vendor/project/app/collections/.gitkeep
56
+ - vendor/project/app/controllers/.gitkeep
57
+ - vendor/project/app/main.cpp
58
+ - vendor/project/app/models/.gitkeep
59
+ - vendor/project/app/routes.cpp
60
+ - vendor/project/app/views/layouts/.gitkeep
61
+ - vendor/project/public/index.html
62
+ - vendor/src/anchorable_element.hpp
63
+ - vendor/src/append_semantics.hpp
64
+ - vendor/src/bindable.cpp
65
+ - vendor/src/bindable.hpp
66
+ - vendor/src/cheerp_parse_cookie_values.cpp
67
+ - vendor/src/comment_element.cpp
68
+ - vendor/src/comment_element.hpp
69
+ - vendor/src/cookies.cpp
70
+ - vendor/src/cookies.hpp
71
+ - vendor/src/custom_element.hpp
72
+ - vendor/src/datatree.cpp
73
+ - vendor/src/datatree.hpp
74
+ - vendor/src/document.cpp
75
+ - vendor/src/document.hpp
76
+ - vendor/src/element.cpp
77
+ - vendor/src/element.hpp
78
+ - vendor/src/events.hpp
79
+ - vendor/src/exception.cpp
80
+ - vendor/src/exception.hpp
81
+ - vendor/src/from_string.cpp
82
+ - vendor/src/from_string.hpp
83
+ - vendor/src/globals.cpp
84
+ - vendor/src/globals.hpp
85
+ - vendor/src/http.cpp
86
+ - vendor/src/http.hpp
87
+ - vendor/src/lexical_cast.hpp
88
+ - vendor/src/local_storage.cpp
89
+ - vendor/src/local_storage.hpp
90
+ - vendor/src/mvc/collection.hpp
91
+ - vendor/src/mvc/controller.hpp
92
+ - vendor/src/mvc/id_type.hpp
93
+ - vendor/src/mvc/layout.hpp
94
+ - vendor/src/mvc/model.cpp
95
+ - vendor/src/mvc/model.hpp
96
+ - vendor/src/object.cpp
97
+ - vendor/src/object.hpp
98
+ - vendor/src/parse_cookie_values.hpp
99
+ - vendor/src/promise.cpp
100
+ - vendor/src/promise.hpp
101
+ - vendor/src/repeater.hpp
102
+ - vendor/src/router.cpp
103
+ - vendor/src/router.hpp
104
+ - vendor/src/router_base.hpp
105
+ - vendor/src/signal.hpp
106
+ - vendor/src/slot_element.hpp
107
+ - vendor/src/url.cpp
108
+ - vendor/src/url.hpp
109
+ - vendor/src/window.cpp
110
+ - vendor/src/window.hpp
111
+ homepage: https://github.com/crails-framework/comet-cpp
112
+ licenses:
113
+ - BSD-3-Clause
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubygems_version: 3.3.7
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: Comet.cpp is a JavaScript client framework
134
+ test_files: []