mmx_build 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []