mmx_build 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2262b754065c319fbf25a2101c066216ccd398f7
4
+ data.tar.gz: 76d66cf42c546d6eaf53e97b8ddf8d0db8bf7a58
5
+ SHA512:
6
+ metadata.gz: cac529da8d1d0b386526cb326b17c4372f2840aab17cecbcd0af83373877cc72469648bc03c367d4307c082da27bf223f798ac328e600463e12d9921a5b1cb00
7
+ data.tar.gz: cc0be1087906a794cbaa2c49538038119a8bf5bdcee2f9450cd32b8fbc2eddc74e917071433aff6fa159142e31ec3ebe2de3b2c1e82bd3498809c1e2bf74b49d
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://gems.moneydesktop.com"
2
+ source "https://rubygems.org"
3
+
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,134 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ mmx_build (0.0.1)
5
+ active_remote
6
+ activesupport
7
+ atlas
8
+ chunky_png
9
+ plist
10
+ steps
11
+ thor
12
+
13
+ GEM
14
+ remote: http://gems.moneydesktop.com/
15
+ remote: https://rubygems.org/
16
+ specs:
17
+ active_attr (0.8.3)
18
+ activemodel (>= 3.0.2, < 4.2)
19
+ activesupport (>= 3.0.2, < 4.2)
20
+ active_remote (2.1.0)
21
+ active_attr (>= 0.8)
22
+ activesupport (>= 3.2)
23
+ protobuf (>= 3.0)
24
+ activemodel (4.1.0)
25
+ activesupport (= 4.1.0)
26
+ builder (~> 3.1)
27
+ activesupport (4.1.0)
28
+ i18n (~> 0.6, >= 0.6.9)
29
+ json (~> 1.7, >= 1.7.7)
30
+ minitest (~> 5.1)
31
+ thread_safe (~> 0.1)
32
+ tzinfo (~> 1.1)
33
+ atlas (2.0.28)
34
+ activesupport (>= 3.2)
35
+ ffi-rzmq (>= 2.0)
36
+ guid (>= 0.1.1)
37
+ protobuf (>= 3.0)
38
+ builder (3.2.2)
39
+ chunky_png (1.2.9)
40
+ coderay (1.1.0)
41
+ colored (1.2)
42
+ columnize (0.3.6)
43
+ debugger (1.6.2)
44
+ columnize (>= 0.3.1)
45
+ debugger-linecache (~> 1.2.0)
46
+ debugger-ruby_core_source (~> 1.2.3)
47
+ debugger-linecache (1.2.0)
48
+ debugger-ruby_core_source (1.2.3)
49
+ diff-lcs (1.2.5)
50
+ docile (1.1.3)
51
+ ffi (1.9.3)
52
+ ffi-rzmq (2.0.1)
53
+ ffi-rzmq-core (>= 1.0.1)
54
+ ffi-rzmq-core (1.0.3)
55
+ ffi (~> 1.9)
56
+ geminabox (0.12.3)
57
+ builder
58
+ httpclient (>= 2.2.7)
59
+ nesty
60
+ sinatra (>= 1.2.7)
61
+ guid (0.1.1)
62
+ highline (1.6.21)
63
+ httpclient (2.3.4.1)
64
+ i18n (0.6.9)
65
+ json (1.8.1)
66
+ method_source (0.8.2)
67
+ middleware (0.1.0)
68
+ minitest (5.3.3)
69
+ multi_json (1.9.2)
70
+ nesty (1.0.2)
71
+ plist (3.1.0)
72
+ protobuf (3.0.4)
73
+ activesupport (>= 3.2)
74
+ middleware
75
+ multi_json
76
+ thor
77
+ protobuf-rspec (1.0.0)
78
+ protobuf (>= 3.0.0)
79
+ rspec (~> 2.8)
80
+ pry (0.9.12.6)
81
+ coderay (~> 1.0)
82
+ method_source (~> 0.8)
83
+ slop (~> 3.4)
84
+ pry-debugger (0.2.2)
85
+ debugger (~> 1.3)
86
+ pry (~> 0.9.10)
87
+ rack (1.5.2)
88
+ rack-protection (1.5.2)
89
+ rack
90
+ rake (10.3.1)
91
+ rspec (2.14.1)
92
+ rspec-core (~> 2.14.0)
93
+ rspec-expectations (~> 2.14.0)
94
+ rspec-mocks (~> 2.14.0)
95
+ rspec-core (2.14.8)
96
+ rspec-expectations (2.14.5)
97
+ diff-lcs (>= 1.1.3, < 2.0)
98
+ rspec-mocks (2.14.6)
99
+ rspec-pride (2.3.0)
100
+ rspec (~> 2.10)
101
+ simplecov (0.8.2)
102
+ docile (~> 1.1.0)
103
+ multi_json
104
+ simplecov-html (~> 0.8.0)
105
+ simplecov-html (0.8.0)
106
+ sinatra (1.4.4)
107
+ rack (~> 1.4)
108
+ rack-protection (~> 1.4)
109
+ tilt (~> 1.3, >= 1.3.4)
110
+ slop (3.5.0)
111
+ special_delivery (1.0.0)
112
+ bundler
113
+ geminabox
114
+ steps (1.1.3)
115
+ colored (>= 1.2)
116
+ highline (>= 1.6)
117
+ thor (0.19.1)
118
+ thread_safe (0.3.3)
119
+ tilt (1.4.1)
120
+ tzinfo (1.1.0)
121
+ thread_safe (~> 0.1)
122
+
123
+ PLATFORMS
124
+ ruby
125
+
126
+ DEPENDENCIES
127
+ mmx_build!
128
+ protobuf-rspec (>= 1.0)
129
+ pry-debugger
130
+ rake
131
+ rspec
132
+ rspec-pride
133
+ simplecov
134
+ special_delivery
data/README.md ADDED
@@ -0,0 +1,23 @@
1
+ MMX Build
2
+ ==========
3
+
4
+ MMX Build is a build tool to run iOS, Android, and Windows Phone builds for a given client.
5
+
6
+ Install
7
+ -------
8
+
9
+ Add `mmx_build` to your Gemfile and run a `bundle install`.
10
+
11
+ ```ruby
12
+ gem "mmx_build"
13
+ ```
14
+
15
+ Usage
16
+ -----
17
+
18
+ Use the provided `mmx_build` program to build MoneyMobileX for all platforms for a given client:
19
+
20
+ ```shell
21
+ $ bundle exec mmx_build build CLT-28996306-b308-72b9-25ba-e87b4f3e3030
22
+ ```
23
+
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'special_delivery/gem_tasks'
2
+ require 'bundler/gem_tasks'
3
+
4
+ task :console do
5
+ require 'pry-debugger'
6
+ require 'mmx_build'
7
+ ARGV.clear
8
+ ::Pry.start
9
+ end
10
+
data/lib/mmx_build.rb ADDED
@@ -0,0 +1,21 @@
1
+ module MmxBuild
2
+ end
3
+
4
+ require 'active_remote'
5
+ require 'atlas'
6
+ require 'chunky_png'
7
+ require 'json'
8
+ require 'plist'
9
+ require 'steps'
10
+ require 'thor'
11
+
12
+ ::Atlas.initialize!
13
+ ::Atlas.configure_services
14
+
15
+ require 'mmx_build/cli'
16
+ require 'mmx_build/client'
17
+ require 'mmx_build/client_profile'
18
+ require 'mmx_build/config_parser'
19
+ require 'mmx_build/icon_generator'
20
+ require 'mmx_build/json_parser'
21
+
@@ -0,0 +1,50 @@
1
+ module MmxBuild
2
+ class CLI < ::Thor
3
+ include ::Thor::Actions
4
+
5
+ attr_reader :client_guid
6
+
7
+ default_task :build
8
+
9
+ desc 'build CLIENT_GUID', 'Build MoneyMobileX for all platforms with the given client'
10
+ def build(client_guid)
11
+ @client_guid = client_guid
12
+ ensure_client_present!
13
+
14
+ say "Building MoneyMobileX for #{client.name}", :blue
15
+
16
+ step "Parsing Configuration" do
17
+ ::MmxBuild::ConfigParser.parse(client)
18
+ end
19
+
20
+ step "Generating Icons" do
21
+ ::MmxBuild::IconGenerator.generate(client)
22
+ end
23
+
24
+ step "Parsing Cocos Studio JSON files" do
25
+ ::MmxBuild::JsonParser.parse(client)
26
+ end
27
+ end
28
+
29
+ no_tasks do
30
+
31
+ def client
32
+ @client ||= Client.search({ :guid => client_guid }).first
33
+ end
34
+
35
+ def client_profile
36
+ client.try(:client_profile)
37
+ end
38
+
39
+ def ensure_client_present!
40
+ unless client.present?
41
+ say "Failed to find a client with guid #{client_guid}", :red
42
+ exit 1
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+ end
50
+
@@ -0,0 +1,9 @@
1
+ module MmxBuild
2
+ class Client < ::ActiveRemote::Base
3
+ has_one :client_profile, :class_name => '::MmxBuild::ClientProfile'
4
+ end
5
+
6
+ ::Atlas::ActiveRemote.configure_active_remote_model(Client)
7
+ end
8
+
9
+
@@ -0,0 +1,7 @@
1
+ module MmxBuild
2
+ class ClientProfile < ::ActiveRemote::Base
3
+ end
4
+
5
+ ::Atlas::ActiveRemote.configure_active_remote_model(ClientProfile)
6
+ end
7
+
@@ -0,0 +1,81 @@
1
+ module MmxBuild
2
+ class ConfigParser
3
+
4
+ attr_reader :client
5
+
6
+ def self.parse(client)
7
+ new(client).parse
8
+ end
9
+
10
+ def initialize(client)
11
+ @client = client
12
+ end
13
+
14
+ def parse
15
+ update_ios_plist
16
+ update_mac_plist
17
+ update_android_manifest_xml
18
+ update_android_strings_xml
19
+ end
20
+
21
+ private
22
+
23
+ # TODO get the app name from client
24
+ def app_name
25
+ 'XenBank'
26
+ end
27
+
28
+ # TODO get the package name from client
29
+ def package_name
30
+ 'com.moneydesktop.xenbank'
31
+ end
32
+
33
+ def update_android_manifest_xml
34
+ update_xml('proj.android/AndroidManifest.xml', 'org.moneydesktop.moneymobilex', package_name)
35
+ end
36
+
37
+ def update_android_strings_xml
38
+ update_xml('proj.android/res/values/strings.xml', 'moneymobilex', app_name)
39
+ end
40
+
41
+ def update_ios_plist
42
+ update_plist('proj.ios_mac/ios/Info.plist')
43
+ end
44
+
45
+ def update_mac_plist
46
+ update_plist('proj.ios_mac/mac/Info.plist')
47
+ end
48
+
49
+ def update_plist(plist_filename)
50
+ raise_if_file_missing(plist_filename)
51
+
52
+ document = ::Plist::parse_xml(plist_filename)
53
+ document['CFBundleDisplayName'] = app_name
54
+ document['CFBundleIdentifier'] = package_name
55
+
56
+ ::File.open(plist_filename, 'w') do |file|
57
+ file.write(document.to_plist)
58
+ end
59
+ end
60
+
61
+ # TODO need to actually parse the xml with nokogiri, so this
62
+ # needs the element name to change, not the current value
63
+ def update_xml(xml_filename, current_value, new_value)
64
+ raise_if_file_missing(xml_filename)
65
+
66
+ document = File.read(xml_filename, 'r')
67
+ document.sub!(current_value, new_value)
68
+
69
+ ::File.open(xml_filename, 'w') do |file|
70
+ file.write(result)
71
+ end
72
+ end
73
+
74
+ def raise_if_file_missing(filename)
75
+ unless ::File.exist?(filename)
76
+ raise "File not found at #{::File.expand_path(filename)}"
77
+ end
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,108 @@
1
+ module MmxBuild
2
+ class IconGenerator
3
+
4
+ MAC_ICON_DIR = 'mac_icons.iconset'.freeze
5
+ MAC_ICON_OUTPUT_DIR = 'proj.ios_mac/mac/Icon.icns'.freeze
6
+ IOS_SIZES = [ 29, 40, 50, 57, 58, 72, 76, 80, 100, 114, 120, 144, 152 ].freeze
7
+ MAC_SIZES = [ 16, 32, 64, 128, 256, 512, 1024 ].freeze
8
+ ANDROID_SIZES = { 32 => 'ldpi',
9
+ 48 => 'mdpi',
10
+ 72 => 'hdpi',
11
+ 96 => 'xhdpi' }.freeze
12
+
13
+ attr_reader :client, :image
14
+
15
+ def self.generate(client)
16
+ new(client).generate
17
+ end
18
+
19
+ def initialize(client)
20
+ @client = client
21
+ end
22
+
23
+ def generate
24
+ icon_setup
25
+ generate_ios_icons
26
+ generate_ios_load_images
27
+ generate_android_icons
28
+ generate_mac_icons
29
+ generate_brand_color
30
+ icon_teardown
31
+ end
32
+
33
+ private
34
+
35
+ # TODO should this be the brand color?
36
+ def border_color
37
+ @border_color ||= image[0,0]
38
+ end
39
+
40
+ def compose_image(other_image, width, height, x_offset, y_offset, file_name)
41
+ ::ChunkyPNG::Image.new(width, height, border_color).compose(other_image, x_offset, y_offset).save(file_name)
42
+ end
43
+
44
+ def generate_android_icons
45
+ ANDROID_SIZES.each_pair do |size, size_folder|
46
+ image.resample_bilinear(size, size).save("proj.android/res/drawable-#{size_folder}/icon.png")
47
+ end
48
+ end
49
+
50
+ # TODO get the brand color from the client properties
51
+ def generate_brand_color
52
+ brand_color = ::ChunkyPNG::Color.rgba(255, 0, 0, 255)
53
+ brand_color_image = ::ChunkyPNG::Image.new(8, 8, brand_color)
54
+ brand_color_image.save('Resources/studio_landscape/Images/ColorBrand.png')
55
+ brand_color_image.save('Resources/studio_portrait/Images/ColorBrand.png')
56
+ end
57
+
58
+ def generate_ios_icons
59
+ IOS_SIZES.each do |size|
60
+ image.resample_bilinear(size,size).save("proj.ios_mac/ios/Icon-#{size}.png")
61
+ end
62
+ end
63
+
64
+ def generate_ios_load_images
65
+ compose_image(image300, 320, 480, 10, 90,'proj.ios_mac/ios/Default.png')
66
+ compose_image(image600, 640, 960, 20, 180, 'proj.ios_mac/ios/Default@2x.png')
67
+ compose_image(image600, 640, 1136, 20, 268, 'proj.ios_mac/ios/Default-568h@2x.png')
68
+ compose_image(image512, 1024, 768, 256, 128, 'proj.ios_mac/ios/Default-Landscape~ipad.png')
69
+ compose_image(image, 2048, 1496, 512, 256, 'proj.ios_mac/ios/Default-Landscape@2x~ipad.png')
70
+ end
71
+
72
+ def generate_mac_icons
73
+ MAC_SIZES.each do |size|
74
+ half_size = size / 2
75
+ image.resample_bilinear(size, size).save("#{MAC_ICON_DIR}/icon_#{half_size}x#{half_size}@2x.png") unless size == 16
76
+ image.resample_bilinear(size, size).save("#{MAC_ICON_DIR}/icon_#{size}x#{size}.png") unless size == 1024
77
+ end
78
+
79
+ system("iconutil -c icns #{MAC_ICON_DIR} -o #{MAC_ICON_OUTPUT_DIR}")
80
+ end
81
+
82
+ def icon_setup
83
+ ::FileUtils.mkdir_p(MAC_ICON_DIR)
84
+ end
85
+
86
+ def icon_teardown
87
+ ::FileUtils.rm_rf(MAC_ICON_DIR)
88
+ end
89
+
90
+ # TODO get the file from the image url in the client profile
91
+ def image
92
+ @image ||= ChunkyPNG::Image.from_file('zenbank.png')
93
+ end
94
+
95
+ def image300
96
+ @image300 ||= image.resample_bilinear(300, 300)
97
+ end
98
+
99
+ def image512
100
+ @image512 ||= image.resample_bilinear(512, 512)
101
+ end
102
+
103
+ def image600
104
+ @image600 ||= image.resample_bilinear(600, 600)
105
+ end
106
+
107
+ end
108
+ end
@@ -0,0 +1,80 @@
1
+ module MmxBuild
2
+ class JsonParser
3
+
4
+ PREFIX_COLORS = %w( color bgColor bgEndColor bgStartColor ).freeze
5
+
6
+ attr_reader :client
7
+
8
+ def self.parse(client)
9
+ new(client).parse
10
+ end
11
+
12
+ def initialize(client)
13
+ @client = client
14
+ end
15
+
16
+ def parse
17
+ ::Dir["Resources/**/*.json"].each do |resource_file|
18
+ file_contents = ::File.read(resource_file)
19
+ data = ::JSON.parse(file_contents)
20
+
21
+ modified = replace_colors_in_hash(data)
22
+ if modified == true
23
+ ::File.open(resource_file, 'w') do |file|
24
+ file.write(parsed.to_json)
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def replace_colors_in_array(array)
33
+ modified = false
34
+
35
+ array.each do |item|
36
+ if element.is_a?(Hash)
37
+ if replace_colors_in_hash(item)
38
+ modified = true
39
+ end
40
+ end
41
+
42
+ if element.is_a?(Array)
43
+ if replace_colors_in_array(item)
44
+ modified = true
45
+ end
46
+ end
47
+ end
48
+
49
+ return modified
50
+ end
51
+
52
+ def replace_colors_in_hash(json_hash)
53
+ modified = false
54
+
55
+ PREFIX_COLORS.each do |prefix|
56
+ if json_hash.key?(prefix+"R")
57
+ r = json_hash[prefix+"R"].to_i
58
+ g = json_hash[prefix+"G"].to_i
59
+ b = json_hash[prefix+"B"].to_i
60
+
61
+ # TODO pull brand color from client
62
+ if r == 0 && g == 172 && b == 237
63
+ json_hash[prefix+"R"] = 255
64
+ json_hash[prefix+"G"] = 0
65
+ json_hash[prefix+"B"] = 0
66
+
67
+ modified = true
68
+ end
69
+ end
70
+ end
71
+
72
+ if replace_colors_in_array(json_hash.values)
73
+ modified = true
74
+ end
75
+
76
+ return modified
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,4 @@
1
+ module MmxBuild
2
+ VERSION = '0.0.1'
3
+ end
4
+
data/mmx_build.gemspec ADDED
@@ -0,0 +1,42 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "mmx_build/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mmx_build"
7
+ s.version = MmxBuild::VERSION
8
+ s.authors = ["MDev"]
9
+ s.email = ["dev@moneydesktop.com"]
10
+ s.homepage = "https://git.moneydesktop.com/dev/mmx_build"
11
+ s.summary = "Build scripts for all supported MoneyMobileX platforms"
12
+ s.description = s.summary
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ ##
20
+ # Dependencies
21
+ #
22
+ s.add_dependency 'activesupport'
23
+ s.add_dependency 'active_remote'
24
+ s.add_dependency 'atlas'
25
+ s.add_dependency 'chunky_png'
26
+ s.add_dependency 'plist'
27
+ s.add_dependency 'steps'
28
+ s.add_dependency 'thor'
29
+
30
+ ##
31
+ # Development Dependencies
32
+ #
33
+ s.add_development_dependency 'rake'
34
+ s.add_development_dependency 'special_delivery'
35
+
36
+ s.add_development_dependency 'protobuf-rspec', '>= 1.0'
37
+ s.add_development_dependency 'pry-debugger'
38
+ s.add_development_dependency 'rspec'
39
+ s.add_development_dependency 'rspec-pride'
40
+ s.add_development_dependency 'simplecov'
41
+ end
42
+
metadata ADDED
@@ -0,0 +1,253 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mmx_build
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - MDev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: active_remote
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: atlas
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: chunky_png
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: plist
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: steps
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: thor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: special_delivery
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: protobuf-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-debugger
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rspec-pride
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: simplecov
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ description: Build scripts for all supported MoneyMobileX platforms
210
+ email:
211
+ - dev@moneydesktop.com
212
+ executables: []
213
+ extensions: []
214
+ extra_rdoc_files: []
215
+ files:
216
+ - .gitignore
217
+ - Gemfile
218
+ - Gemfile.lock
219
+ - README.md
220
+ - Rakefile
221
+ - lib/mmx_build.rb
222
+ - lib/mmx_build/cli.rb
223
+ - lib/mmx_build/client.rb
224
+ - lib/mmx_build/client_profile.rb
225
+ - lib/mmx_build/config_parser.rb
226
+ - lib/mmx_build/icon_generator.rb
227
+ - lib/mmx_build/json_parser.rb
228
+ - lib/mmx_build/version.rb
229
+ - mmx_build.gemspec
230
+ homepage: https://git.moneydesktop.com/dev/mmx_build
231
+ licenses: []
232
+ metadata: {}
233
+ post_install_message:
234
+ rdoc_options: []
235
+ require_paths:
236
+ - lib
237
+ required_ruby_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - '>='
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - '>='
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ requirements: []
248
+ rubyforge_project:
249
+ rubygems_version: 2.1.2
250
+ signing_key:
251
+ specification_version: 4
252
+ summary: Build scripts for all supported MoneyMobileX platforms
253
+ test_files: []