pebblex 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 1.9.3-p392
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: objective-c
2
+ env:
3
+ # same as specified in xcodeproj
4
+ - RVM_RUBY_VERSION=ruby-1.9.3-p392 CI=true'
5
+ before_install: source ~/.rvm/scripts/rvm && rvm install $RVM_RUBY_VERSION && rvm use $RVM_RUBY_VERSION
6
+ script: bundle exec rake spec build
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pebblex.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Heiko Behrens
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # PebbleX [![Build Status](https://travis-ci.org/HBehrens/pebblex.png)](https://travis-ci.org/HBehrens/pebblex)
2
+
3
+ A small command line tool to add functionality the `pebble` command is missing right now.
4
+ Ideally, there will be no need for `pebblex` in the future, anymore.
5
+
6
+ ## Background
7
+
8
+ The [Pebble SDK](https://developer.getpebble.com/2/) comes with a powerful command line tool `pebble` to create, build and analyze pebble projects.
9
+ Unfortunately, there's no development environment for the created project structure.
10
+
11
+ With the help of `pebblex` you can take advantage of Xcode or [AppCode](AppCode) to develop your Pebble watch faces or apps directly from a convenient IDE.
12
+ The command line tool will create a `.xcodeproj` that contains the needed search paths, resources and .c files to start right away.
13
+
14
+ With [AppCode](AppCode) you can even build, install the `.pbw` to your watch and look at the live logs as a one-step action directly from your IDE!
15
+
16
+ ## Installation
17
+
18
+ Install the Ruby Gem:
19
+
20
+ sudo gem install pebblex
21
+
22
+ ## Usage
23
+
24
+ After creating a new pebble project, you can easily create an xcode project file
25
+
26
+ pebble new-project myproject --javascript
27
+ cd myproject
28
+ pebblex xcode
29
+ open myproject.xcodeproj
30
+
31
+ The `pebblex xcode` command will also create a target `pebble` that builds your project right from the IDE.
32
+
33
+ If you are using, [AppCode](AppCode) you can even deploy and look at the logs directly from the IDE! Make these adjustments to the run configuration to do so:
34
+
35
+ ![alt tag](https://raw.github.com/HBehrens/pebblex/master/images/AppCodeRunConfig.png)
36
+
37
+ ## Contributing
38
+
39
+ 1. Fork it ( https://github.com/HBehrens/pebblex/fork )
40
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
41
+ 3. Build and test PebbleX locally (`rake build && rake install`)
42
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
43
+ 4. Push to the branch (`git push origin my-new-feature`)
44
+ 5. Create a new Pull Request
45
+
46
+ [AppCode]: http://www.jetbrains.com/objc/
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
data/bin/pebblex ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
3
+ require 'pebble_x.rb'
4
+
5
+ PebbleX::CLI.start(ARGV)
Binary file
data/lib/pebble_x.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'pebble_x/version'
2
+ require 'pebble_x/cli'
3
+ require 'pebble_x/xcode'
4
+ require 'pebble_x/pebble'
5
+
6
+ module PebbleX
7
+ end
8
+
@@ -0,0 +1,86 @@
1
+ require 'thor'
2
+
3
+ module PebbleX
4
+
5
+ class CLI < Thor
6
+
7
+ class_option :verbose, :type => :boolean
8
+ #class_option :version, :type => :boolean, :desc => "Prints version"
9
+ class_option :pebble_sdk, :banner => "<directory>", :desc => "Sets directory of Pebble SDK (default derived from PATH)"
10
+
11
+ def self.exit_on_failure?
12
+ true
13
+ end
14
+
15
+ desc "version", "Prints the pebblex's version information"
16
+ def version
17
+ puts PebbleX::VERSION
18
+ end
19
+ map %w(-v --version) => :version
20
+
21
+ desc "xcode", "Creates and Xcode project file"
22
+ def xcode
23
+ xcode = command_helper PebbleX::Xcode
24
+ xcode.create_project
25
+ end
26
+
27
+ desc "build", "Builds pebble project"
28
+ def build
29
+ pebble = command_helper PebbleX::Pebble
30
+ exit(pebble.build)
31
+ end
32
+
33
+ desc "debug", "Loads PBW and logs output from connected watch"
34
+ def debug
35
+ pebble = command_helper PebbleX::Pebble
36
+ exit(pebble.debug)
37
+ end
38
+
39
+ # provide recurring logic (based on command line switches) to separate commands
40
+ no_commands do
41
+
42
+ def command_helper(cls)
43
+ cls.new self
44
+ end
45
+
46
+ def verbose?
47
+ return options[:verbose]
48
+ end
49
+
50
+ def sys_call(call)
51
+ `#{call}`
52
+ end
53
+
54
+ def pebble_sdk_dir
55
+ sdk_dir = options[:pebble_sdk]
56
+ unless sdk_dir
57
+ pebble_cmd = sys_call('which pebble').strip
58
+ if pebble_cmd != ''
59
+ sdk_dir = File.expand_path('../..', pebble_cmd)
60
+ end
61
+ end
62
+
63
+ unless sdk_dir != ''
64
+ raise ArgumentError, "Make sure the 'pebble' command is on your path or you pass --pebble_sdk."
65
+ end
66
+
67
+ return sdk_dir
68
+ end
69
+
70
+ def pebble_cmd
71
+ pebble_cmd = File.expand_path('bin/pebble', self.pebble_sdk_dir)
72
+ unless File.exists?(pebble_cmd)
73
+ raise ArgumentError, "Cannot find 'pebble' command at #{pebble_cmd}."
74
+ end
75
+ return pebble_cmd
76
+ end
77
+
78
+ def pebblex_cmd
79
+ return $0
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+
86
+ end
@@ -0,0 +1,43 @@
1
+ module PebbleX
2
+ class Pebble
3
+
4
+ attr_accessor :verbose
5
+
6
+ def initialize(environment)
7
+ @pebble_cmd = environment.pebble_cmd
8
+ end
9
+
10
+ def sys_call(call)
11
+ `#{call}`
12
+ $?.exitstatus
13
+ end
14
+
15
+ def kill_pebble
16
+ sys_call('pkill -f python.*pebble')
17
+ sleep(0.5) # phone's Pebble app needs some time before it accepts new connections
18
+ end
19
+
20
+ def pebble_call(args)
21
+ kill_pebble
22
+ sys_call("#{@pebble_cmd} #{args}")
23
+ end
24
+
25
+ def build
26
+ pebble_call('build')
27
+ end
28
+
29
+ def install
30
+ pebble_call('install')
31
+ end
32
+
33
+ def logs
34
+ pebble_call('logs')
35
+ end
36
+
37
+ def debug
38
+ r = install
39
+ r == 0 ? logs : r
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module PebbleX
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,66 @@
1
+ require 'xcodeproj'
2
+
3
+ module PebbleX
4
+ class Xcode
5
+ def initialize(environment, directory=nil, project_name=nil)
6
+ @verbose = environment.verbose?
7
+ @directory = directory || Dir.getwd
8
+ @project_name = project_name || File.basename(@directory)
9
+ @pebblex_cmd = environment.pebblex_cmd
10
+ @pebble_sdk_dir = environment.pebble_sdk_dir
11
+
12
+ unless File.exists?(File.join(@directory, 'appinfo.json'))
13
+ raise ArgumentError, "The directory '#{@directory}' does not contain a Pebble project."
14
+ end
15
+ end
16
+
17
+ def create_project
18
+ if @verbose
19
+ puts "creating project in directory #{@directory}"
20
+ puts "using pebble sdk at #{@pebble_sdk_dir}"
21
+ end
22
+
23
+ Dir.chdir(@directory) # TODO: popd at the end of this method
24
+
25
+ project = Xcodeproj::Project.new(@project_name+'.xcodeproj')
26
+
27
+ # will add pebble sdk headers and build/src/resource_ids.auto.h to search path
28
+ project.build_configuration_list.set_setting('HEADER_SEARCH_PATHS', [File.join(@pebble_sdk_dir, 'Pebble/include'), 'build'])
29
+
30
+ legacy_target = project.new(Xcodeproj::Project::Object::PBXLegacyTarget)
31
+ legacy_target.name = 'Pebble'
32
+ legacy_target.product_name = 'Pebble'
33
+
34
+ legacy_target.build_tool_path = @pebblex_cmd
35
+ legacy_target.build_arguments_string = "build --pebble_sdk=#{@pebble_sdk_dir}"
36
+
37
+ legacy_target.build_configuration_list = Xcodeproj::Project::ProjectHelper.configuration_list(project, :osx)
38
+ project.targets << legacy_target
39
+
40
+ # fake iOS target to provide search path
41
+ ios_target = project.new_target(:application, 'fake-iOS-target', :ios)
42
+
43
+ # build project groups
44
+ group = project.main_group.new_group("sources", "src")
45
+
46
+ Dir.glob('src/**/*.{c,h,js}').each do |f|
47
+ file = group.new_file(f)
48
+ puts "adding file #{f}" if @verbose
49
+ if File.extname(f) == '.c'
50
+ ios_target.add_file_references([file])
51
+ end
52
+ end
53
+
54
+ project.main_group.new_reference('resources') if File.directory?('resources')
55
+ project.main_group.new_file('appinfo.json')
56
+
57
+ # clean up xcode project ('products' group must remain due to fake iOS target)
58
+ project.frameworks_group.remove_from_project
59
+
60
+ project.save
61
+
62
+ project
63
+ end
64
+
65
+ end
66
+ end
data/pebblex.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'pebble_x/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "pebblex"
8
+ spec.version = PebbleX::VERSION
9
+ spec.authors = ["Heiko Behrens"]
10
+ spec.email = ["HeikoBehrens@gmx.de"]
11
+ spec.summary = %q{Some additions to the pebble CLI.}
12
+ spec.description = %q{For now, it can create and Xcode project from a pebble dir. In future, some other convenience commands will be added.}
13
+ spec.homepage = "https://github.com/hbehrens/pebblex"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency(%q<thor>, ["~> 0.18.1"])
22
+ spec.add_runtime_dependency(%q<xcodeproj>, ["~> 0.14.1"])
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.5"
25
+ spec.add_development_dependency "rspec", "~> 2.14"
26
+ spec.add_development_dependency "rspec-mocks", "~> 2.14"
27
+ spec.add_development_dependency "rake"
28
+ end
data/spec/cli_spec.rb ADDED
@@ -0,0 +1,79 @@
1
+ require 'rspec'
2
+ require 'pebble_x'
3
+
4
+ describe 'CLI' do
5
+
6
+ describe 'xcode' do
7
+
8
+ it 'calls create_project' do
9
+ xcode = double 'Xcode'
10
+ expect(xcode).to receive(:create_project)
11
+
12
+ c = PebbleX::CLI.new
13
+ expect(c).to receive(:command_helper).with(PebbleX::Xcode).and_return(xcode)
14
+ c.xcode
15
+ end
16
+ end
17
+
18
+
19
+ describe 'build' do
20
+ it 'delegates to pebble build' do
21
+ pebble = double 'pebble'
22
+ expect(pebble).to receive(:build).and_return 23
23
+
24
+ c = PebbleX::CLI.new
25
+ expect(c).to receive(:command_helper).with(PebbleX::Pebble).and_return(pebble)
26
+ expect(c).to receive(:exit).with(23)
27
+ c.build
28
+ end
29
+ end
30
+
31
+ describe 'build' do
32
+ it 'delegates to pebble debug' do
33
+ pebble = double 'pebble'
34
+ expect(pebble).to receive(:debug).and_return 23
35
+
36
+ c = PebbleX::CLI.new
37
+ expect(c).to receive(:command_helper).with(PebbleX::Pebble).and_return(pebble)
38
+ expect(c).to receive(:exit).with(23)
39
+ c.debug
40
+ end
41
+ end
42
+
43
+ describe 'pebble_cmd' do
44
+
45
+ it 'derives pebble location from pebble_sdk_dir' do
46
+ c = PebbleX::CLI.new
47
+ expect(c).to receive(:pebble_sdk_dir).and_return "/path/to/sdk"
48
+ expect(File).to receive(:exists?).and_return true
49
+ expect(c.pebble_cmd).to eq "/path/to/sdk/bin/pebble"
50
+ end
51
+
52
+ it 'verifies existence of pebble binary' do
53
+ c = PebbleX::CLI.new
54
+ expect(c).to receive(:pebble_sdk_dir).and_return "/path/to/sdk"
55
+ expect(File).to receive(:exists?).and_return false
56
+ expect{c.pebble_cmd}.to raise_error
57
+ end
58
+
59
+ end
60
+
61
+
62
+ describe 'pebble_sdk_dir' do
63
+ it 'uses `which pebble` to determine sdk path' do
64
+ c = PebbleX::CLI.new
65
+ expect(c).to receive(:sys_call).with('which pebble').and_return '/path/to/sdk/bin/pebble'
66
+ expect(c.pebble_sdk_dir).to eq '/path/to/sdk'
67
+ end
68
+
69
+ it 'uses option pebble_sdk if provided' do
70
+ c = PebbleX::CLI.new
71
+ expect(c).to_not receive(:sys_call)
72
+ expect(c).to receive(:options).and_return({:pebble_sdk => "/path/to/sdk"})
73
+ expect(c.pebble_sdk_dir).to eq '/path/to/sdk'
74
+ end
75
+ end
76
+
77
+
78
+
79
+ end
@@ -0,0 +1,3 @@
1
+
2
+ # Ignore build generated files
3
+ build
@@ -0,0 +1,17 @@
1
+ {
2
+ "uuid": "9665dc7e-4c18-4fbc-9eca-902dc4b42aa5",
3
+ "shortName": "project_with_js",
4
+ "longName": "project_with_js",
5
+ "companyName": "MakeAwesomeHappen",
6
+ "versionCode": 1,
7
+ "versionLabel": "1.0.0",
8
+ "watchapp": {
9
+ "watchface": false
10
+ },
11
+ "appKeys": {
12
+ "dummy": 0
13
+ },
14
+ "resources": {
15
+ "media": []
16
+ }
17
+ }
@@ -0,0 +1,5 @@
1
+ Pebble.addEventListener("ready",
2
+ function(e) {
3
+ console.log("Hello world! - Sent from your javascript application.");
4
+ }
5
+ );
@@ -0,0 +1,60 @@
1
+ #include <pebble.h>
2
+
3
+ static Window *window;
4
+ static TextLayer *text_layer;
5
+
6
+ static void select_click_handler(ClickRecognizerRef recognizer, void *context) {
7
+ text_layer_set_text(text_layer, "Select");
8
+ }
9
+
10
+ static void up_click_handler(ClickRecognizerRef recognizer, void *context) {
11
+ text_layer_set_text(text_layer, "Up");
12
+ }
13
+
14
+ static void down_click_handler(ClickRecognizerRef recognizer, void *context) {
15
+ text_layer_set_text(text_layer, "Down");
16
+ }
17
+
18
+ static void click_config_provider(void *context) {
19
+ window_single_click_subscribe(BUTTON_ID_SELECT, select_click_handler);
20
+ window_single_click_subscribe(BUTTON_ID_UP, up_click_handler);
21
+ window_single_click_subscribe(BUTTON_ID_DOWN, down_click_handler);
22
+ }
23
+
24
+ static void window_load(Window *window) {
25
+ Layer *window_layer = window_get_root_layer(window);
26
+ GRect bounds = layer_get_bounds(window_layer);
27
+
28
+ text_layer = text_layer_create((GRect) { .origin = { 0, 72 }, .size = { bounds.size.w, 20 } });
29
+ text_layer_set_text(text_layer, "Press a button");
30
+ text_layer_set_text_alignment(text_layer, GTextAlignmentCenter);
31
+ layer_add_child(window_layer, text_layer_get_layer(text_layer));
32
+ }
33
+
34
+ static void window_unload(Window *window) {
35
+ text_layer_destroy(text_layer);
36
+ }
37
+
38
+ static void init(void) {
39
+ window = window_create();
40
+ window_set_click_config_provider(window, click_config_provider);
41
+ window_set_window_handlers(window, (WindowHandlers) {
42
+ .load = window_load,
43
+ .unload = window_unload,
44
+ });
45
+ const bool animated = true;
46
+ window_stack_push(window, animated);
47
+ }
48
+
49
+ static void deinit(void) {
50
+ window_destroy(window);
51
+ }
52
+
53
+ int main(void) {
54
+ init();
55
+
56
+ APP_LOG(APP_LOG_LEVEL_DEBUG, "Done initializing, pushed window: %p", window);
57
+
58
+ app_event_loop();
59
+ deinit();
60
+ }
@@ -0,0 +1,24 @@
1
+
2
+ #
3
+ # This file is the default set of rules to compile a Pebble project.
4
+ #
5
+ # Feel free to customize this to your needs.
6
+ #
7
+
8
+ top = '.'
9
+ out = 'build'
10
+
11
+ def options(ctx):
12
+ ctx.load('pebble_sdk')
13
+
14
+ def configure(ctx):
15
+ ctx.load('pebble_sdk')
16
+
17
+ def build(ctx):
18
+ ctx.load('pebble_sdk')
19
+
20
+ ctx.pbl_program(source=ctx.path.ant_glob('src/**/*.c'),
21
+ target='pebble-app.elf')
22
+
23
+ ctx.pbl_bundle(elf='pebble-app.elf',
24
+ js=ctx.path.ant_glob('src/js/**/*.js'))
@@ -0,0 +1,44 @@
1
+ require 'rspec'
2
+ require 'pebble_x'
3
+
4
+ describe 'Pebble' do
5
+ e = nil
6
+
7
+ before(:each) do
8
+ e = double("environment")
9
+ expect(e).to receive(:pebble_cmd) {'path/to/pebble'}
10
+ end
11
+
12
+ describe 'initialize' do
13
+ it 'asks environment' do
14
+ PebbleX::Pebble.new(e)
15
+ end
16
+ end
17
+
18
+ describe 'pebble_call' do
19
+ it 'kills pebble and calls system' do
20
+ p = PebbleX::Pebble.new(e)
21
+ expect(p).to receive(:kill_pebble)
22
+ expect(p).to receive(:sys_call).with('path/to/pebble foo')
23
+ p.pebble_call('foo')
24
+ end
25
+ end
26
+
27
+ describe 'debug' do
28
+
29
+ it 'calls install and logs' do
30
+ p = PebbleX::Pebble.new(e)
31
+ expect(p).to receive(:install).and_return(0)
32
+ expect(p).to receive(:logs).and_return(3)
33
+ expect(p.debug).to eq 3
34
+ end
35
+
36
+ it 'aborts if install fails' do
37
+ p = PebbleX::Pebble.new(e)
38
+ expect(p).to receive(:install).and_return(1)
39
+ expect(p).to_not receive(:logs)
40
+ expect(p.debug).to eq 1
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,53 @@
1
+ require 'rspec'
2
+ require 'pebble_x'
3
+ require 'tmpdir'
4
+
5
+ describe 'Xcode' do
6
+
7
+ def prepare_fixture(fixture_name)
8
+ dest = File.join(Dir.tmpdir, fixture_name)
9
+ src = File.join(File.dirname(__FILE__), 'fixtures', fixture_name)
10
+
11
+ FileUtils.rm_rf(dest)
12
+ FileUtils.copy_entry(src, dest, remove_destination=true)
13
+ dest
14
+ end
15
+
16
+
17
+ def project_with_js
18
+ @project_with_js ||= prepare_fixture('project_with_js')
19
+ end
20
+ @project_with_js = nil
21
+
22
+ e = nil
23
+
24
+ before(:each) do
25
+ e = double("environment")
26
+ @project_with_js = nil
27
+ expect(e).to receive(:verbose?) {false}
28
+ expect(e).to receive(:pebble_sdk_dir) {'path/to/pebble_sdk'}
29
+ expect(e).to receive(:pebblex_cmd) {'path/to/pebblex'}
30
+ end
31
+
32
+ describe 'initialize' do
33
+ it 'asks environment' do
34
+ PebbleX::Xcode.new(e, project_with_js, 'some_name')
35
+ end
36
+
37
+ it 'fails on wrong directory' do
38
+ expect{PebbleX::Xcode.new(e, 'any directory', 'some_name')}.to raise_error
39
+ end
40
+ end
41
+
42
+ describe 'create_project' do
43
+
44
+ it 'creates files' do
45
+ x = PebbleX::Xcode.new(e, project_with_js, 'some_name')
46
+ p = x.create_project
47
+ expect(p).to be_a(Xcodeproj::Project)
48
+ expect(File).to exist(File.join(project_with_js, 'some_name.xcodeproj', 'project.pbxproj'))
49
+ end
50
+
51
+ end
52
+
53
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pebblex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Heiko Behrens
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-02-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: thor
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.18.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.18.1
30
+ - !ruby/object:Gem::Dependency
31
+ name: xcodeproj
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.14.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.14.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.5'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.5'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '2.14'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '2.14'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec-mocks
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '2.14'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2.14'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: For now, it can create and Xcode project from a pebble dir. In future,
111
+ some other convenience commands will be added.
112
+ email:
113
+ - HeikoBehrens@gmx.de
114
+ executables:
115
+ - pebblex
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - .gitignore
120
+ - .ruby-version
121
+ - .travis.yml
122
+ - Gemfile
123
+ - LICENSE.txt
124
+ - README.md
125
+ - Rakefile
126
+ - bin/pebblex
127
+ - images/AppCodeRunConfig.png
128
+ - lib/pebble_x.rb
129
+ - lib/pebble_x/cli.rb
130
+ - lib/pebble_x/pebble.rb
131
+ - lib/pebble_x/version.rb
132
+ - lib/pebble_x/xcode.rb
133
+ - pebblex.gemspec
134
+ - spec/cli_spec.rb
135
+ - spec/fixtures/project_with_js/.gitignore
136
+ - spec/fixtures/project_with_js/appinfo.json
137
+ - spec/fixtures/project_with_js/src/js/pebble-js-app.js
138
+ - spec/fixtures/project_with_js/src/project_with_js.c
139
+ - spec/fixtures/project_with_js/wscript
140
+ - spec/pebble_spec.rb
141
+ - spec/xcode_spec.rb
142
+ homepage: https://github.com/hbehrens/pebblex
143
+ licenses:
144
+ - MIT
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 1.8.23
164
+ signing_key:
165
+ specification_version: 3
166
+ summary: Some additions to the pebble CLI.
167
+ test_files:
168
+ - spec/cli_spec.rb
169
+ - spec/fixtures/project_with_js/.gitignore
170
+ - spec/fixtures/project_with_js/appinfo.json
171
+ - spec/fixtures/project_with_js/src/js/pebble-js-app.js
172
+ - spec/fixtures/project_with_js/src/project_with_js.c
173
+ - spec/fixtures/project_with_js/wscript
174
+ - spec/pebble_spec.rb
175
+ - spec/xcode_spec.rb