confetti 0.1.8 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/confetti/config.rb +12 -6
- data/lib/confetti/config/feature.rb +2 -1
- data/lib/confetti/templates/android_manifest.mustache +4 -13
- data/lib/confetti/templates/android_manifest.rb +27 -0
- data/lib/confetti/version.rb +1 -1
- data/spec/config/config_feature_spec.rb +1 -1
- data/spec/config_spec.rb +28 -0
- data/spec/fixtures/AndroidManifest_expected.xml +3 -11
- data/spec/fixtures/android_manifest_spec.xml +0 -10
- data/spec/fixtures/config-icons-custom-attribs.xml +22 -0
- data/spec/fixtures/config.xml +3 -2
- data/spec/templates/android_manifest_spec.rb +27 -0
- metadata +7 -5
data/Gemfile.lock
CHANGED
data/lib/confetti/config.rb
CHANGED
@@ -15,7 +15,7 @@ module Confetti
|
|
15
15
|
Name = Class.new Struct.new(:name, :shortname)
|
16
16
|
License = Class.new Struct.new(:text, :href)
|
17
17
|
Content = Class.new Struct.new(:src, :type, :encoding)
|
18
|
-
Icon = Class.new Struct.new(:src, :height, :width)
|
18
|
+
Icon = Class.new Struct.new(:src, :height, :width, :extras)
|
19
19
|
Feature = Class.new Struct.new(:name, :required)
|
20
20
|
Preference = Class.new Struct.new(:name, :value, :readonly)
|
21
21
|
|
@@ -50,17 +50,23 @@ module Confetti
|
|
50
50
|
@version = config_doc.attributes["version"]
|
51
51
|
|
52
52
|
config_doc.elements.each do |ele|
|
53
|
+
attr = ele.attributes
|
54
|
+
|
53
55
|
case ele.name
|
54
56
|
when "name"
|
55
|
-
@name = Name.new(ele.text.strip,
|
57
|
+
@name = Name.new(ele.text.strip, attr["shortname"])
|
56
58
|
when "author"
|
57
|
-
@author = Author.new(ele.text.strip,
|
58
|
-
ele.attributes["email"])
|
59
|
+
@author = Author.new(ele.text.strip, attr["href"], attr["email"])
|
59
60
|
when "description"
|
60
61
|
@description = ele.text.strip
|
61
62
|
when "icon"
|
62
|
-
|
63
|
-
|
63
|
+
extras = attr.keys.inject({}) do |hash, key|
|
64
|
+
hash[key] = attr[key] unless Icon.public_instance_methods.include? key
|
65
|
+
hash
|
66
|
+
end
|
67
|
+
@icon_set << Icon.new(attr["src"], attr["height"], attr["width"], extras)
|
68
|
+
when "feature"
|
69
|
+
@feature_set << Feature.new(attr["name"], attr["required"])
|
64
70
|
end
|
65
71
|
end
|
66
72
|
end
|
@@ -3,21 +3,12 @@
|
|
3
3
|
package="{{ package_name }}"
|
4
4
|
android:versionName="{{ version }}"
|
5
5
|
android:versionCode="1">
|
6
|
-
<uses-permission android:name="android.permission.CAMERA" />
|
7
|
-
<uses-permission android:name="android.permission.VIBRATE" />
|
8
|
-
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
9
|
-
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
10
|
-
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
|
11
6
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
12
7
|
<uses-permission android:name="android.permission.INTERNET" />
|
13
|
-
|
14
|
-
<uses-permission android:name="android.permission.
|
15
|
-
|
16
|
-
|
17
|
-
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
|
18
|
-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
19
|
-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
20
|
-
|
8
|
+
{{# permissions }}
|
9
|
+
<uses-permission android:name="android.permission.{{ name }}" />
|
10
|
+
{{/ permissions }}
|
11
|
+
|
21
12
|
<application android:icon="@drawable/icon" android:label="@string/app_name"
|
22
13
|
android:debuggable="true">
|
23
14
|
<activity android:name=".{{ class_name }}"
|
@@ -3,6 +3,17 @@ module Confetti
|
|
3
3
|
class AndroidManifest < Base
|
4
4
|
include JavaChecks
|
5
5
|
|
6
|
+
GAP_PERMISSIONS_MAP = {
|
7
|
+
"camera" => ["CAMERA"],
|
8
|
+
"notification" => ["VIBRATE"],
|
9
|
+
"geolocation" => ["ACCESS_COARSE_LOCATION", "ACCESS_FINE_LOCATION",
|
10
|
+
"ACCESS_LOCATION_EXTRA_COMMANDS"],
|
11
|
+
"media" => ["RECORD_AUDIO", "MODIFY_AUDIO_SETTINGS"],
|
12
|
+
"contacts" => ["READ_CONTACTS", "WRITE_CONTACTS"],
|
13
|
+
"file" => ["WRITE_EXTERNAL_STORAGE"],
|
14
|
+
"network" => ["ACCESS_NETWORK_STATE"]
|
15
|
+
}
|
16
|
+
|
6
17
|
def package_name
|
7
18
|
if @config
|
8
19
|
if is_java_package_id(@config.package)
|
@@ -22,6 +33,22 @@ module Confetti
|
|
22
33
|
def version
|
23
34
|
@config.version || '0.0.1'
|
24
35
|
end
|
36
|
+
|
37
|
+
def permissions
|
38
|
+
permissions = []
|
39
|
+
phonegap_api = /http\:\/\/api.phonegap.com\/1[.]0\/(\w+)/
|
40
|
+
feature_names = @config.feature_set.map { |f| f.name }
|
41
|
+
feature_names.sort
|
42
|
+
|
43
|
+
feature_names.each do |f|
|
44
|
+
feature_name = f.match(phonegap_api)[1] if f.match(phonegap_api)
|
45
|
+
associated_permissions = GAP_PERMISSIONS_MAP[feature_name]
|
46
|
+
|
47
|
+
permissions.concat(associated_permissions) if associated_permissions
|
48
|
+
end
|
49
|
+
|
50
|
+
permissions.map { |f| { :name => f } }
|
51
|
+
end
|
25
52
|
end
|
26
53
|
end
|
27
54
|
end
|
data/lib/confetti/version.rb
CHANGED
data/spec/config_spec.rb
CHANGED
@@ -237,6 +237,34 @@ describe Confetti::Config do
|
|
237
237
|
@config.icon_set.size.should be 2
|
238
238
|
end
|
239
239
|
end
|
240
|
+
|
241
|
+
describe "with custom icon attributes" do
|
242
|
+
before do
|
243
|
+
@config = Confetti::Config.new
|
244
|
+
@config.populate_from_xml(fixture_dir + "/config-icons-custom-attribs.xml")
|
245
|
+
end
|
246
|
+
|
247
|
+
it "should populate icon non-standards attributes to extras field" do
|
248
|
+
@config.icon_set.size.should be 1
|
249
|
+
@config.icon_set.first.extras.should_not == nil
|
250
|
+
@config.icon_set.first.extras.length.should be 1
|
251
|
+
@config.icon_set.first.extras["hover"].should == "true"
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
describe "features" do
|
257
|
+
it "should append features to the feature set" do
|
258
|
+
@config.feature_set.size.should be 3
|
259
|
+
end
|
260
|
+
|
261
|
+
it "should include the right features" do
|
262
|
+
# first tends to be last listed in xml document
|
263
|
+
features_names = @config.feature_set.map { |f| f.name }
|
264
|
+
features_names.should include "http://api.phonegap.com/1.0/geolocation"
|
265
|
+
features_names.should include "http://api.phonegap.com/1.0/camera"
|
266
|
+
features_names.should include "http://api.phonegap.com/1.0/notification"
|
267
|
+
end
|
240
268
|
end
|
241
269
|
end
|
242
270
|
end
|
@@ -3,21 +3,13 @@
|
|
3
3
|
package="com.alunny.confetti"
|
4
4
|
android:versionName="1.0.0"
|
5
5
|
android:versionCode="1">
|
6
|
-
<uses-permission android:name="android.permission.
|
6
|
+
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
7
|
+
<uses-permission android:name="android.permission.INTERNET" />
|
7
8
|
<uses-permission android:name="android.permission.VIBRATE" />
|
9
|
+
<uses-permission android:name="android.permission.CAMERA" />
|
8
10
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
9
11
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
10
12
|
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
|
11
|
-
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
12
|
-
<uses-permission android:name="android.permission.INTERNET" />
|
13
|
-
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
14
|
-
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
15
|
-
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
16
|
-
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
17
|
-
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
|
18
|
-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
19
|
-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
20
|
-
|
21
13
|
<application android:icon="@drawable/icon" android:label="@string/app_name"
|
22
14
|
android:debuggable="true">
|
23
15
|
<activity android:name=".ConfettiSampleApp"
|
@@ -3,21 +3,11 @@
|
|
3
3
|
package="com.whoever.awesome.app"
|
4
4
|
android:versionName="0.0.1"
|
5
5
|
android:versionCode="1">
|
6
|
-
<uses-permission android:name="android.permission.CAMERA" />
|
7
|
-
<uses-permission android:name="android.permission.VIBRATE" />
|
8
|
-
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
9
|
-
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
10
|
-
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
|
11
6
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
12
7
|
<uses-permission android:name="android.permission.INTERNET" />
|
13
|
-
<uses-permission android:name="android.permission.RECEIVE_SMS" />
|
14
8
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
15
9
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
16
|
-
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
17
|
-
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
|
18
|
-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
19
10
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
20
|
-
|
21
11
|
<application android:icon="@drawable/icon" android:label="@string/app_name"
|
22
12
|
android:debuggable="true">
|
23
13
|
<activity android:name=".AwesomeApp"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<widget xmlns = "http://www.w3.org/ns/widgets"
|
3
|
+
xmlns:rim="http://www.blackberry.com/ns/widgets"
|
4
|
+
id = "com.alunny.confetti"
|
5
|
+
version = "1.0.0">
|
6
|
+
|
7
|
+
<name>Confetti Sample App</name>
|
8
|
+
|
9
|
+
<description>
|
10
|
+
This is a sample config.xml for integration testing with Confetti
|
11
|
+
</description>
|
12
|
+
|
13
|
+
<author href="http://alunny.github.com"
|
14
|
+
email="alunny@gmail.com">
|
15
|
+
Andrew Lunny
|
16
|
+
</author>
|
17
|
+
|
18
|
+
<icon src="smallicon.png" height="100" width="100" rim:hover="true" />
|
19
|
+
|
20
|
+
<feature name="http://api.phonegap.com/1.0/geolocation"/>
|
21
|
+
<feature name="http://api.phonegap.com/1.0/network"/>
|
22
|
+
</widget>
|
data/spec/fixtures/config.xml
CHANGED
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
<icon src="icon.png" height="150" width="200" />
|
18
18
|
|
19
|
-
<feature name="http://api.phonegap.com/1.0/geolocation"/>
|
20
|
-
<feature name="http://api.phonegap.com/1.0/
|
19
|
+
<feature name="http://api.phonegap.com/1.0/geolocation" required="true"/>
|
20
|
+
<feature name="http://api.phonegap.com/1.0/camera" required="true"/>
|
21
|
+
<feature name="http://api.phonegap.com/1.0/notification" required="true"/>
|
21
22
|
</widget>
|
@@ -33,6 +33,12 @@ describe Confetti::Template::AndroidManifest do
|
|
33
33
|
@config = Confetti::Config.new
|
34
34
|
@config.name.name = "Awesome App"
|
35
35
|
@config.package = "com.whoever.awesome.app"
|
36
|
+
|
37
|
+
network_feature = Confetti::Config::Feature.new("http://api.phonegap.com/1.0/network", nil)
|
38
|
+
media_feature = Confetti::Config::Feature.new("http://api.phonegap.com/1.0/media", nil)
|
39
|
+
|
40
|
+
@config.feature_set << network_feature
|
41
|
+
@config.feature_set << media_feature
|
36
42
|
end
|
37
43
|
|
38
44
|
it "should accept the config object" do
|
@@ -63,4 +69,25 @@ describe Confetti::Template::AndroidManifest do
|
|
63
69
|
end
|
64
70
|
end
|
65
71
|
end
|
72
|
+
|
73
|
+
describe "permissions method" do
|
74
|
+
before do
|
75
|
+
@config = Confetti::Config.new
|
76
|
+
|
77
|
+
camera_feature = Confetti::Config::Feature.new("http://api.phonegap.com/1.0/camera", nil)
|
78
|
+
network_feature = Confetti::Config::Feature.new("http://api.phonegap.com/1.0/network", nil)
|
79
|
+
media_feature = Confetti::Config::Feature.new("http://api.phonegap.com/1.0/media", nil)
|
80
|
+
|
81
|
+
@config.feature_set << camera_feature
|
82
|
+
@config.feature_set << network_feature
|
83
|
+
@config.feature_set << media_feature
|
84
|
+
|
85
|
+
@template = @template_class.new(@config)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should return all of the permissions" do
|
89
|
+
# 1 camera, 1 network, 2 media
|
90
|
+
@template.permissions.size.should be 4
|
91
|
+
end
|
92
|
+
end
|
66
93
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: confetti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andrew Lunny
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-18 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- spec/fixtures/bad_config.xml
|
160
160
|
- spec/fixtures/blackberry_widget_config_expected.xml
|
161
161
|
- spec/fixtures/blackberry_widget_config_spec.xml
|
162
|
+
- spec/fixtures/config-icons-custom-attribs.xml
|
162
163
|
- spec/fixtures/config-icons.xml
|
163
164
|
- spec/fixtures/config.xml
|
164
165
|
- spec/fixtures/ios_info_expected.plist
|
@@ -238,6 +239,7 @@ test_files:
|
|
238
239
|
- spec/fixtures/bad_config.xml
|
239
240
|
- spec/fixtures/blackberry_widget_config_expected.xml
|
240
241
|
- spec/fixtures/blackberry_widget_config_spec.xml
|
242
|
+
- spec/fixtures/config-icons-custom-attribs.xml
|
241
243
|
- spec/fixtures/config-icons.xml
|
242
244
|
- spec/fixtures/config.xml
|
243
245
|
- spec/fixtures/ios_info_expected.plist
|