confetti 0.1.8 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- confetti (0.1.7)
4
+ confetti (0.1.8)
5
5
  mustache (= 0.11.2)
6
6
  thor (= 0.14.3)
7
7
 
@@ -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, ele.attributes["shortname"])
57
+ @name = Name.new(ele.text.strip, attr["shortname"])
56
58
  when "author"
57
- @author = Author.new(ele.text.strip, ele.attributes["href"],
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
- @icon_set << Icon.new(ele.attributes["src"], ele.attributes["height"],
63
- ele.attributes["width"])
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
@@ -5,8 +5,9 @@ module Confetti
5
5
 
6
6
  Param = Class.new
7
7
 
8
- def initialize
8
+ def initialize(name, src)
9
9
  @param_set = TypedSet.new Param
10
+ super name, src
10
11
  end
11
12
  end
12
13
  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
- <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
-
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
@@ -1,3 +1,3 @@
1
1
  module Confetti
2
- VERSION = "0.1.8"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe Confetti::Config::Feature do
4
4
  before do
5
- @feature = Confetti::Config::Feature.new
5
+ @feature = Confetti::Config::Feature.new("Geolocation", nil)
6
6
  end
7
7
 
8
8
  it "should have a readable and writable name field" do
@@ -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.CAMERA" />
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>
@@ -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/network"/>
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: 11
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 8
10
- version: 0.1.8
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-15 00:00:00 -07:00
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