confetti 0.1.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 (74) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +48 -0
  4. data/README.md +46 -0
  5. data/Rakefile +19 -0
  6. data/bin/confetti +4 -0
  7. data/confetti.gemspec +29 -0
  8. data/features/android.feature +14 -0
  9. data/features/blackberry.feature +9 -0
  10. data/features/command_line.feature +12 -0
  11. data/features/ios.feature +9 -0
  12. data/features/step_definitions/aruba_ext_steps.rb +7 -0
  13. data/features/support/setup.rb +1 -0
  14. data/features/symbian.wrt.feature +9 -0
  15. data/features/webos.feature +9 -0
  16. data/lib/confetti.rb +31 -0
  17. data/lib/confetti/cli.rb +19 -0
  18. data/lib/confetti/config.rb +57 -0
  19. data/lib/confetti/config/feature.rb +13 -0
  20. data/lib/confetti/helpers.rb +7 -0
  21. data/lib/confetti/template.rb +4 -0
  22. data/lib/confetti/template_helper.rb +28 -0
  23. data/lib/confetti/templates/android_manifest.mustache +33 -0
  24. data/lib/confetti/templates/android_manifest.rb +27 -0
  25. data/lib/confetti/templates/android_strings.mustache +5 -0
  26. data/lib/confetti/templates/android_strings.rb +13 -0
  27. data/lib/confetti/templates/base.mustache +0 -0
  28. data/lib/confetti/templates/base.rb +13 -0
  29. data/lib/confetti/templates/blackberry_widgets_config.mustache +20 -0
  30. data/lib/confetti/templates/blackberry_widgets_config.rb +37 -0
  31. data/lib/confetti/templates/ios_info.mustache +48 -0
  32. data/lib/confetti/templates/ios_info.rb +21 -0
  33. data/lib/confetti/templates/java_checks.rb +18 -0
  34. data/lib/confetti/templates/symbian_wrt_info.mustache +17 -0
  35. data/lib/confetti/templates/symbian_wrt_info.rb +21 -0
  36. data/lib/confetti/templates/webos_appinfo.mustache +9 -0
  37. data/lib/confetti/templates/webos_appinfo.rb +49 -0
  38. data/lib/confetti/version.rb +3 -0
  39. data/lib/typedset.rb +23 -0
  40. data/spec/config/config_author_spec.rb +22 -0
  41. data/spec/config/config_content_spec.rb +22 -0
  42. data/spec/config/config_feature_spec.rb +33 -0
  43. data/spec/config/config_icon_spec.rb +22 -0
  44. data/spec/config/config_license_spec.rb +17 -0
  45. data/spec/config/config_name_spec.rb +17 -0
  46. data/spec/config/config_preference_spec.rb +22 -0
  47. data/spec/config_spec.rb +217 -0
  48. data/spec/fixtures/AndroidManifest_expected.xml +33 -0
  49. data/spec/fixtures/android_manifest_spec.xml +33 -0
  50. data/spec/fixtures/android_strings_expected.xml +5 -0
  51. data/spec/fixtures/android_strings_spec.xml +5 -0
  52. data/spec/fixtures/appinfo_expected.json +9 -0
  53. data/spec/fixtures/blackberry_widget_config_expected.xml +20 -0
  54. data/spec/fixtures/blackberry_widget_config_spec.xml +20 -0
  55. data/spec/fixtures/config.xml +21 -0
  56. data/spec/fixtures/ios_info_expected.plist +48 -0
  57. data/spec/fixtures/ios_info_spec.plist +48 -0
  58. data/spec/fixtures/symbian_wrt_info_expected.plist +17 -0
  59. data/spec/fixtures/symbian_wrt_info_spec.plist +17 -0
  60. data/spec/fixtures/webos_appinfo_spec.json +9 -0
  61. data/spec/helpers_spec.rb +21 -0
  62. data/spec/integration_spec.rb +66 -0
  63. data/spec/spec_helper.rb +83 -0
  64. data/spec/template_spec.rb +4 -0
  65. data/spec/templates/android_manifest_spec.rb +66 -0
  66. data/spec/templates/android_strings_spec.rb +56 -0
  67. data/spec/templates/base_spec.rb +25 -0
  68. data/spec/templates/blackberry_widget_config_spec.rb +94 -0
  69. data/spec/templates/ios_info_spec.rb +68 -0
  70. data/spec/templates/java_checks_spec.rb +59 -0
  71. data/spec/templates/symbian_wrt_info_spec.rb +68 -0
  72. data/spec/templates/webos_appinfo_spec.rb +101 -0
  73. data/spec/typedset_spec.rb +72 -0
  74. metadata +256 -0
@@ -0,0 +1,27 @@
1
+ module Confetti
2
+ module Template
3
+ class AndroidManifest < Base
4
+ include JavaChecks
5
+
6
+ def package_name
7
+ if @config
8
+ if is_java_package_id(@config.package)
9
+ @config.package
10
+ end
11
+ end
12
+ end
13
+
14
+ def class_name
15
+ convert_to_java_identifier(@config.name.name) if @config
16
+ end
17
+
18
+ def output_filename
19
+ "AndroidManifest.xml"
20
+ end
21
+
22
+ def version
23
+ @config.version || '0.0.1'
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources>
3
+ <string name="app_name">{{ app_name }}</string>
4
+ <string name="go">Snap</string>
5
+ </resources>
@@ -0,0 +1,13 @@
1
+ module Confetti
2
+ module Template
3
+ class AndroidStrings < Base
4
+ def app_name
5
+ @config.name.name if @config && @config.name
6
+ end
7
+
8
+ def output_filename
9
+ "strings.xml"
10
+ end
11
+ end
12
+ end
13
+ end
File without changes
@@ -0,0 +1,13 @@
1
+ module Confetti
2
+ module Template
3
+ class Base < Mustache
4
+ self.template_path = File.dirname(__FILE__)
5
+
6
+ def initialize (*args)
7
+ @config = args.pop
8
+
9
+ super *args
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- Widget Configuration Reference: http://docs.blackberry.com/en/developers/deliverables/15274/ -->
3
+ <widget xmlns="http://www.w3.org/ns/widgets" xmlns:rim="http://www.blackberry.com/ns/widgets"
4
+ version="{{ widget_version }}"
5
+ id="{{ widget_id }}">
6
+ <name>{{ widget_name }}</name>
7
+ <author href="{{ author_href }}" email="{{ author_email }}">{{ author_name }}</author>
8
+ <description>{{ widget_description }}</description>
9
+ <license></license>
10
+ <feature id="blackberry.system" required="true" version="1.0.0.0"/>
11
+ <feature id="phonegap" required="false" version="1.0.0"/>
12
+ <access subdomains="true" uri="file:///store/home"/>
13
+ <access subdomains="true" uri="file:///SDCard"/>
14
+ <icon rim:hover="false" src="resources/icon.png"/>
15
+ <icon rim:hover="true" src="resources/icon_hover.png"/>
16
+ <content src="index.html"/>
17
+ <rim:loadingScreen backgroundColor="#000000" foregroundImage="resources/loading_foreground.png" onFirstLaunch="true">
18
+ <rim:transitionEffect type="fadeOut"/>
19
+ </rim:loadingScreen>
20
+ </widget>
@@ -0,0 +1,37 @@
1
+ module Confetti
2
+ module Template
3
+ class BlackberryWidgetsConfig < Base
4
+ def widget_version
5
+ @config.version
6
+ end
7
+
8
+ def widget_id
9
+ @config.package
10
+ end
11
+
12
+ def widget_name
13
+ @config.name.name
14
+ end
15
+
16
+ def author_href
17
+ @config.author.href
18
+ end
19
+
20
+ def author_email
21
+ @config.author.email
22
+ end
23
+
24
+ def author_name
25
+ @config.author.name
26
+ end
27
+
28
+ def widget_description
29
+ @config.description
30
+ end
31
+
32
+ def output_filename
33
+ "bb-config.xml"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,48 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleIconFiles</key>
6
+ <array>
7
+ <string>icon.png</string>
8
+ <string>icon-72.png</string>
9
+ </array>
10
+ <key>UISupportedInterfaceOrientations~ipad</key>
11
+ <array>
12
+ <string>UIInterfaceOrientationPortrait</string>
13
+ <string>UIInterfaceOrientationLandscapeLeft</string>
14
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
15
+ <string>UIInterfaceOrientationLandscapeRight</string>
16
+ </array>
17
+ <key>UISupportedInterfaceOrientations</key>
18
+ <array>
19
+ <string>UIInterfaceOrientationPortrait</string>
20
+ </array>
21
+ <key>CFBundleDevelopmentRegion</key>
22
+ <string>English</string>
23
+ <key>CFBundleDisplayName</key>
24
+ <string>{{ product_name }}</string>
25
+ <key>CFBundleExecutable</key>
26
+ <string>${EXECUTABLE_NAME}</string>
27
+ <key>CFBundleIconFile</key>
28
+ <string>icon.png</string>
29
+ <key>CFBundleIdentifier</key>
30
+ <string>{{ bundle_identifier }}</string>
31
+ <key>CFBundleInfoDictionaryVersion</key>
32
+ <string>6.0</string>
33
+ <key>CFBundleName</key>
34
+ <string>{{ product_name }}</string>
35
+ <key>CFBundlePackageType</key>
36
+ <string>APPL</string>
37
+ <key>CFBundleSignature</key>
38
+ <string>????</string>
39
+ <key>CFBundleVersion</key>
40
+ <string>{{ bundle_version }}</string>
41
+ <key>LSRequiresIPhoneOS</key>
42
+ <true/>
43
+ <key>NSMainNibFile</key>
44
+ <string></string>
45
+ <key>NSMainNibFile~ipad</key>
46
+ <string>-iPad</string>
47
+ </dict>
48
+ </plist>
@@ -0,0 +1,21 @@
1
+ module Confetti
2
+ module Template
3
+ class IosInfo < Base
4
+ def bundle_identifier
5
+ @config.package
6
+ end
7
+
8
+ def bundle_version
9
+ @config.version
10
+ end
11
+
12
+ def product_name
13
+ @config.name.name
14
+ end
15
+
16
+ def output_filename
17
+ "Info.plist"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Confetti
2
+ module Template
3
+ module JavaChecks
4
+ def is_java_identifier(str)
5
+ str.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)
6
+ end
7
+
8
+ def convert_to_java_identifier(str)
9
+ str.sub(/^\d/,"_").gsub(/\s/,"").gsub(/[^a-zA-Z0-9_]/,"_")
10
+ end
11
+
12
+ def is_java_package_id(str)
13
+ # second param to #split ensures can't be dot-terminated
14
+ str.split('.', -1).all? { |s| is_java_identifier(s) }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Nokia//DTD PLIST 1.0//EN" "http://www.nokia.com/DTDs/plist-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>DisplayName</key>
6
+ <string>{{ display_name }}</string>
7
+ <key>Identifier</key>
8
+ <string>{{ identifier }}</string>
9
+ <key>Version</key>
10
+ <string>{{ version }}</string>
11
+ <key>MainHTML</key>
12
+ <string>index.html</string>
13
+ <key>MiniViewEnabled</key>
14
+ <false/>
15
+ </dict>
16
+ </plist>
17
+
@@ -0,0 +1,21 @@
1
+ module Confetti
2
+ module Template
3
+ class SymbianWrtInfo < Base
4
+ def identifier
5
+ @config.package
6
+ end
7
+
8
+ def version
9
+ @config.version
10
+ end
11
+
12
+ def display_name
13
+ @config.name.name
14
+ end
15
+
16
+ def output_filename
17
+ "info.plist"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "{{ app_id }}",
3
+ "version": "{{ version }}",
4
+ "vendor": "{{ vendor }}",
5
+ "type": "web",
6
+ "main": "index.html",
7
+ "title": "{{ app_name }}",
8
+ "icon": "icon.png"
9
+ }
@@ -0,0 +1,49 @@
1
+ module Confetti
2
+ module Template
3
+ class WebosAppinfo < Base
4
+ include JavaChecks
5
+
6
+ def app_id
7
+ if @config
8
+ if is_java_package_id(@config.package)
9
+ @config.package
10
+ end
11
+ end
12
+ end
13
+
14
+ def app_name
15
+ @config.name.name
16
+ end
17
+
18
+ def output_filename
19
+ "appinfo.json"
20
+ end
21
+
22
+ def version
23
+ if @config.version.nil?
24
+ '0.0.1'
25
+ elsif @config.version.match /^(\d)+[.](\d)+[.](\d)+$/
26
+ @config.version
27
+ elsif @config.version.match /^((\d)+[.])*(\d)+$/
28
+ fix_version(@config.version)
29
+ else
30
+ fail "need a valid version number of the form 0.0.0"
31
+ end
32
+ end
33
+
34
+ def vendor
35
+ @config.author.name
36
+ end
37
+
38
+ private
39
+ def fix_version(str)
40
+ segments = str.split('.')
41
+
42
+ segments << '0' if segments.length == 1
43
+ segments << '0' if segments.length == 2
44
+
45
+ segments[0,3].join '.'
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,3 @@
1
+ module Confetti
2
+ VERSION = "0.1.0"
3
+ end
data/lib/typedset.rb ADDED
@@ -0,0 +1,23 @@
1
+ require "set"
2
+
3
+ # based on RestricedSet from Ruby's stdlib, cf
4
+ # http://github.com/ruby/ruby/blob/72ef219804e5524848170a197887a95718334e2a/lib/set.rb#L627-717
5
+ # not sure why it's been commented out
6
+ # I should follow these things
7
+
8
+ class TypedSet < Set
9
+ attr_reader :klass
10
+ alias set_class klass
11
+
12
+ def initialize (klass, *args)
13
+ raise ArgumentError, "require a Class object" unless klass.class == Class
14
+ @klass = klass
15
+ super args
16
+ end
17
+
18
+ def add o
19
+ raise ArgumentError, "members must be of class #{@klass}" unless o.class == @klass
20
+ super o
21
+ end
22
+ alias << add
23
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Confetti::Config::Author do
4
+ before do
5
+ @author = Confetti::Config::Author.new
6
+ end
7
+
8
+ it "should have a readable and writable name field" do
9
+ lambda { @author.name = "Andrew Lunny" }.should_not raise_error
10
+ @author.name.should == "Andrew Lunny"
11
+ end
12
+
13
+ it "should have a readable and writable href field" do
14
+ lambda { @author.href = "http://alunny.github.com" }.should_not raise_error
15
+ @author.href.should == "http://alunny.github.com"
16
+ end
17
+
18
+ it "should have a readable and writable email field" do
19
+ lambda { @author.email = "alunny@gmail.com" }.should_not raise_error
20
+ @author.email.should == "alunny@gmail.com"
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Confetti::Config::Content do
4
+ before do
5
+ @content = Confetti::Config::Content.new
6
+ end
7
+
8
+ it "should have a readable and writable src field" do
9
+ lambda { @content.src = "content.html" }.should_not raise_error
10
+ @content.src.should == "content.html"
11
+ end
12
+
13
+ it "should have a readable and writable type field" do
14
+ lambda { @content.type = "text/html" }.should_not raise_error
15
+ @content.type.should == "text/html"
16
+ end
17
+
18
+ it "should have a readable and writable encoding field" do
19
+ lambda { @content.encoding = "GB2313" }.should_not raise_error
20
+ @content.encoding.should == "GB2313"
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Confetti::Config::Feature do
4
+ before do
5
+ @feature = Confetti::Config::Feature.new
6
+ end
7
+
8
+ it "should have a readable and writable name field" do
9
+ lambda { @feature.name = "Geolocation" }.should_not raise_error
10
+ @feature.name.should == "Geolocation"
11
+ end
12
+
13
+ it "should have a readable and writable required field" do
14
+ lambda { @feature.required = true }.should_not raise_error
15
+ @feature.required.should be_true
16
+ end
17
+
18
+ describe "parameter set" do
19
+ it "should have a param_set field, that is a TypedSet" do
20
+ @feature.param_set.should be_a TypedSet
21
+ end
22
+
23
+ it "should make the param_set set typed to Confetti::Config::Feature::Param" do
24
+ @feature.param_set.set_class.should be Confetti::Config::Feature::Param
25
+ end
26
+
27
+ it "should not allow the param_set to be clobbered" do
28
+ lambda {
29
+ @feature.param_set = { :accuracy => 2.0 }
30
+ }.should raise_error
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Confetti::Config::Icon do
4
+ before do
5
+ @icon = Confetti::Config::Icon.new
6
+ end
7
+
8
+ it "should have a readable and writable src field" do
9
+ lambda { @icon.src = "icon.png" }.should_not raise_error
10
+ @icon.src.should == "icon.png"
11
+ end
12
+
13
+ it "should have a readable and writable width field" do
14
+ lambda { @icon.width = 50 }.should_not raise_error
15
+ @icon.width.should == 50
16
+ end
17
+
18
+ it "should have a readable and writable height field" do
19
+ lambda { @icon.height = 50 }.should_not raise_error
20
+ @icon.height.should == 50
21
+ end
22
+ end