qml 0.0.6 → 0.0.7
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/README.md +34 -3
- data/changes.md +6 -1
- data/ext/qml/extconf.rb +4 -1
- data/ext/qml/plugins/core/engineextension.cpp +16 -0
- data/ext/qml/plugins/core/engineextension.h +3 -0
- data/ext/qml/rubyvalue.cpp +33 -1
- data/ext/qml/rubyvalue.h +1 -0
- data/lib/qml/engine.rb +15 -0
- data/lib/qml/version.rb +1 -1
- data/spec/assets/testmodule/qmldir +2 -0
- data/spec/assets/testmodule/test.qml +5 -0
- data/spec/qml/dispatchable_spec.rb +0 -1
- data/spec/qml/dispatcher_spec.rb +0 -1
- data/spec/qml/engine_spec.rb +31 -0
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 481b84b8d826ec6fd5a2f307d8edfe4f33ad3d8f
|
4
|
+
data.tar.gz: d4394d24401e9b9c4d244b240670d46ec063d28c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b0219afde5a224d1018d1561571f5667da11aa4716f37720a3d85df8addbd52de3687924ff2c7fa3c508b7cb60e2f000928f600da3f8e983a72463436e99ed8
|
7
|
+
data.tar.gz: eec31c2af2ca479301637ea4b87cf6dd29e0968a80d2b2278e5dc6078a86e641e8d2f7e7ce68c4febbf24114a31a138b9470bef2a3469d2994c074138e51f606
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -456,7 +456,7 @@ end
|
|
456
456
|
You can also use [em-synchrony](https://github.com/igrigorik/em-synchrony) to
|
457
457
|
write callback-free asynchronous operation for ruby-qml.
|
458
458
|
|
459
|
-
```
|
459
|
+
```ruby
|
460
460
|
require 'qml'
|
461
461
|
require 'eventmachine'
|
462
462
|
require 'em-synchrony'
|
@@ -489,11 +489,42 @@ end
|
|
489
489
|
|
490
490
|
## Contributing
|
491
491
|
|
492
|
-
|
492
|
+
### Install dependencies
|
493
|
+
|
494
|
+
```
|
495
|
+
$ bundle install
|
496
|
+
```
|
497
|
+
|
498
|
+
### Build native extension
|
499
|
+
|
500
|
+
Before running ruby-qml in development, the native extension of ruby-qml needs to have been built.
|
501
|
+
To build it, run the following commands:
|
502
|
+
|
503
|
+
```
|
504
|
+
$ cd ext/qml
|
505
|
+
$ bundle exec ruby extconf.rb --with-qt-dir=/path/to/qt --with-libffi-dir=/path/to/libffi
|
506
|
+
$ make -j4
|
507
|
+
```
|
508
|
+
|
509
|
+
### Run tests
|
510
|
+
|
511
|
+
Tests for ruby-qml is written in RSpec. To run tests, do:
|
512
|
+
|
513
|
+
```
|
514
|
+
$ bundle exec rspec
|
515
|
+
```
|
516
|
+
|
517
|
+
### Run examples
|
518
|
+
|
519
|
+
```
|
520
|
+
$ bundle exec ruby examples/fizzbuzz/fizzbuzz.rb
|
521
|
+
```
|
522
|
+
|
523
|
+
### Send pull requests
|
493
524
|
|
494
525
|
1. Fork it ( http://github.com/seanchas116/ruby-qml/fork )
|
495
526
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
496
527
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
497
|
-
4. Write some tests
|
528
|
+
4. Write some tests
|
498
529
|
5. Push to the branch (`git push origin my-new-feature`)
|
499
530
|
6. Create new Pull Request
|
data/changes.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.0.7 (2014-12-25)
|
2
|
+
|
3
|
+
* Support Ruby 2.2 (rc1) and Qt 5.4
|
4
|
+
* Add `Engine#add_import_path` and `Engine#import_paths` by @tokoro10g
|
5
|
+
|
1
6
|
## 0.0.6 (2014-08-19)
|
2
7
|
|
3
8
|
* Fix problems when using Fiber with ruby-qml
|
@@ -21,7 +26,7 @@
|
|
21
26
|
## 0.0.2 (2014-07-21)
|
22
27
|
|
23
28
|
* Improve list models
|
24
|
-
|
29
|
+
|
25
30
|
* Add ArrayModel#replace
|
26
31
|
* Add QueryModel for ORMs
|
27
32
|
* Specify column names in ListModel#initialize
|
data/ext/qml/extconf.rb
CHANGED
@@ -91,7 +91,10 @@ class Configurator
|
|
91
91
|
end
|
92
92
|
$CPPFLAGS += " -DHAVE_RUBY_THREAD_H" if have_header('ruby/thread.h')
|
93
93
|
|
94
|
-
|
94
|
+
have_func('rb_rational_num')
|
95
|
+
have_func('rb_rational_den')
|
96
|
+
|
97
|
+
$CPPFLAGS += " -std=c++11 -Wall -Wextra -pipe -Wno-reserved-user-defined-literal"
|
95
98
|
if @debug_enabled
|
96
99
|
$CPPFLAGS += " -O0 -ggdb3"
|
97
100
|
else
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "engineextension.h"
|
2
2
|
#include "imageprovider.h"
|
3
3
|
#include <QQmlEngine>
|
4
|
+
#include <QStringList>
|
4
5
|
|
5
6
|
namespace RubyQml {
|
6
7
|
|
@@ -19,6 +20,21 @@ void EngineExtension::addImageProvider(const QString &id, ImageProvider *provide
|
|
19
20
|
mEngine->addImageProvider(id, provider);
|
20
21
|
}
|
21
22
|
|
23
|
+
void EngineExtension::addImportPath(const QString &path)
|
24
|
+
{
|
25
|
+
mEngine->addImportPath(path);
|
26
|
+
}
|
27
|
+
|
28
|
+
QVariantList EngineExtension::importPaths() const
|
29
|
+
{
|
30
|
+
QStringList pathList = mEngine->importPathList();
|
31
|
+
QVariantList varList;
|
32
|
+
for(auto path : pathList){
|
33
|
+
varList << path;
|
34
|
+
}
|
35
|
+
return varList;
|
36
|
+
}
|
37
|
+
|
22
38
|
void EngineExtension::collectGarbage()
|
23
39
|
{
|
24
40
|
mEngine->collectGarbage();
|
@@ -1,6 +1,7 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
3
|
#include <QObject>
|
4
|
+
#include <QVariantList>
|
4
5
|
|
5
6
|
class QQmlEngine;
|
6
7
|
class QQmlContext;
|
@@ -19,6 +20,8 @@ public:
|
|
19
20
|
|
20
21
|
public slots:
|
21
22
|
void addImageProvider(const QString &id, RubyQml::ImageProvider *provider);
|
23
|
+
void addImportPath(const QString &path);
|
24
|
+
QVariantList importPaths() const;
|
22
25
|
void collectGarbage();
|
23
26
|
|
24
27
|
private:
|
data/ext/qml/rubyvalue.cpp
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
#include "accessobject.h"
|
8
8
|
#include "listmodel.h"
|
9
9
|
#include "ext_accesswrapperfactory.h"
|
10
|
+
#include "kernel.h"
|
10
11
|
#include <ruby/intern.h>
|
11
12
|
#define ONIG_ESCAPE_UCHAR_COLLISION
|
12
13
|
#include <ruby/encoding.h>
|
@@ -14,6 +15,25 @@
|
|
14
15
|
#include <QDateTime>
|
15
16
|
#include <QRect>
|
16
17
|
#include <QSet>
|
18
|
+
#include <QJSValue>
|
19
|
+
|
20
|
+
#ifndef HAVE_RB_RATIONAL_NUM
|
21
|
+
|
22
|
+
VALUE rb_rational_num(VALUE rat)
|
23
|
+
{
|
24
|
+
return RRATIONAL(rat)->num;
|
25
|
+
}
|
26
|
+
|
27
|
+
#endif
|
28
|
+
|
29
|
+
#ifndef HAVE_RB_RATIONAL_DEN
|
30
|
+
|
31
|
+
VALUE rb_rational_den(VALUE rat)
|
32
|
+
{
|
33
|
+
return RRATIONAL(rat)->den;
|
34
|
+
}
|
35
|
+
|
36
|
+
#endif
|
17
37
|
|
18
38
|
namespace RubyQml {
|
19
39
|
|
@@ -71,6 +91,8 @@ struct ConverterHash
|
|
71
91
|
add<QRect>();
|
72
92
|
add<QRectF>();
|
73
93
|
|
94
|
+
add<QJSValue>();
|
95
|
+
|
74
96
|
add<QObject *>();
|
75
97
|
add<const QMetaObject *>();
|
76
98
|
|
@@ -148,7 +170,7 @@ template <> QDateTime Conversion<QDateTime>::from(RubyValue time)
|
|
148
170
|
offset = time.send(RUBYQML_INTERN("gmt_offset")).to<int>();
|
149
171
|
} else { // DateTime
|
150
172
|
VALUE dayOffset = time.send(RUBYQML_INTERN("offset"));
|
151
|
-
offset = RubyValue(
|
173
|
+
offset = RubyValue(rb_rational_num(dayOffset)).to<int>() * 24 * 60 * 60 / RubyValue(rb_rational_den(dayOffset)).to<int>();
|
152
174
|
time = time.send(RUBYQML_INTERN("to_time"));
|
153
175
|
}
|
154
176
|
timeval at = rb_time_timeval(time);
|
@@ -292,6 +314,16 @@ template <> RubyValue Conversion<const QMetaObject *>::to(const QMetaObject *met
|
|
292
314
|
return Ext_MetaObject::fromMetaObject(metaobj);
|
293
315
|
}
|
294
316
|
|
317
|
+
template <> QJSValue Conversion<QJSValue>::from(RubyValue x)
|
318
|
+
{
|
319
|
+
return Kernel::instance()->engine()->toScriptValue(x.to<QVariant>());
|
320
|
+
}
|
321
|
+
|
322
|
+
template <> RubyValue Conversion<QJSValue>::to(const QJSValue &jsValue)
|
323
|
+
{
|
324
|
+
return RubyValue::from(jsValue.toVariant());
|
325
|
+
}
|
326
|
+
|
295
327
|
} // namespace detail
|
296
328
|
|
297
329
|
Q_GLOBAL_STATIC(QSet<int>, enumeratorMetaTypes)
|
data/ext/qml/rubyvalue.h
CHANGED
data/lib/qml/engine.rb
CHANGED
@@ -43,6 +43,21 @@ module QML
|
|
43
43
|
@extension.add_image_provider(id, provider.qt_image_provider)
|
44
44
|
provider
|
45
45
|
end
|
46
|
+
|
47
|
+
# Adds a QML import path to the {Engine}.
|
48
|
+
# @param path [String]
|
49
|
+
# @see http://doc.qt.io/qt-5/qtqml-syntax-imports.html#qml-import-path
|
50
|
+
def add_import_path(path)
|
51
|
+
@extension.add_import_path(path)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Gets an array of QML import paths.
|
55
|
+
# @see add_import_path
|
56
|
+
# @return [Array]
|
57
|
+
def import_paths()
|
58
|
+
@extension.import_paths()
|
59
|
+
end
|
60
|
+
|
46
61
|
end
|
47
62
|
|
48
63
|
# @return [Engine] the instance of {Engine}.
|
data/lib/qml/version.rb
CHANGED
@@ -11,7 +11,6 @@ describe QML::Dispatchable do
|
|
11
11
|
foo = DispatchableFoo.new
|
12
12
|
foo.later.value = 'hoge'
|
13
13
|
QML.application.process_events # wait for event loop hook to be enabled
|
14
|
-
expect(foo.value).to be_nil
|
15
14
|
QML.application.process_events
|
16
15
|
expect(foo.value).to eq 'hoge'
|
17
16
|
end
|
data/spec/qml/dispatcher_spec.rb
CHANGED
data/spec/qml/engine_spec.rb
CHANGED
@@ -6,6 +6,37 @@ describe QML::Engine do
|
|
6
6
|
expect { QML::Engine.new }.to raise_error(QML::EngineError)
|
7
7
|
end
|
8
8
|
end
|
9
|
+
|
10
|
+
describe '#import_paths' do
|
11
|
+
it 'returns array' do
|
12
|
+
expect(QML.engine.import_paths()).to be_a(Array)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#add_import_path' do
|
17
|
+
context 'with test module' do
|
18
|
+
let(:path) { (QML::ROOT_PATH + 'spec/assets').to_s }
|
19
|
+
|
20
|
+
it 'adds QML import path' do
|
21
|
+
QML.engine.add_import_path(path)
|
22
|
+
paths = QML.engine.import_paths()
|
23
|
+
expect(paths[0]).to eq path
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:data) do
|
27
|
+
<<-EOS
|
28
|
+
import QtQuick 2.0
|
29
|
+
import testmodule 1.0
|
30
|
+
Test {}
|
31
|
+
EOS
|
32
|
+
end
|
33
|
+
let(:component) { QML::Component.new data: data }
|
34
|
+
|
35
|
+
it 'loads a module' do
|
36
|
+
expect(component.create.name).to eq 'poyo'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
9
40
|
end
|
10
41
|
|
11
42
|
describe QML do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryohei Ikegami
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -289,6 +289,8 @@ files:
|
|
289
289
|
- lib/qml/wrappable.rb
|
290
290
|
- qml.gemspec
|
291
291
|
- spec/assets/test.png
|
292
|
+
- spec/assets/testmodule/qmldir
|
293
|
+
- spec/assets/testmodule/test.qml
|
292
294
|
- spec/assets/testobj.qml
|
293
295
|
- spec/qml/access_spec.rb
|
294
296
|
- spec/qml/application_spec.rb
|
@@ -339,12 +341,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
339
341
|
version: '0'
|
340
342
|
requirements: []
|
341
343
|
rubyforge_project:
|
342
|
-
rubygems_version: 2.4.
|
344
|
+
rubygems_version: 2.4.5
|
343
345
|
signing_key:
|
344
346
|
specification_version: 4
|
345
347
|
summary: A QML / Qt Quick wrapper for Ruby
|
346
348
|
test_files:
|
347
349
|
- spec/assets/test.png
|
350
|
+
- spec/assets/testmodule/qmldir
|
351
|
+
- spec/assets/testmodule/test.qml
|
348
352
|
- spec/assets/testobj.qml
|
349
353
|
- spec/qml/access_spec.rb
|
350
354
|
- spec/qml/application_spec.rb
|
@@ -375,4 +379,3 @@ test_files:
|
|
375
379
|
- spec/shared/qml/data/list_model.rb
|
376
380
|
- spec/shared/qml/reactive/object.rb
|
377
381
|
- spec/spec_helper.rb
|
378
|
-
has_rdoc:
|