app_store_pricing_matrix 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,8 +1,7 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  group :development do
4
- gem "rspec", "~> 2.6.0"
5
- gem "bundler", "~> 1.0.0"
6
- gem "jeweler", "~> 1.6.2"
7
- gem "pdf-reader", ">= 0.9.1"
4
+ gem "rspec"
5
+ gem "bundler"
6
+ gem "jeweler"
8
7
  end
data/Gemfile.lock CHANGED
@@ -1,15 +1,12 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- Ascii85 (1.0.1)
5
- diff-lcs (1.1.2)
4
+ diff-lcs (1.1.3)
6
5
  git (1.2.5)
7
- jeweler (1.6.2)
6
+ jeweler (1.6.4)
8
7
  bundler (~> 1.0)
9
8
  git (>= 1.2.5)
10
9
  rake
11
- pdf-reader (0.9.2)
12
- Ascii85 (>= 0.9)
13
10
  rake (0.9.2)
14
11
  rspec (2.6.0)
15
12
  rspec-core (~> 2.6.0)
@@ -24,7 +21,6 @@ PLATFORMS
24
21
  ruby
25
22
 
26
23
  DEPENDENCIES
27
- bundler (~> 1.0.0)
28
- jeweler (~> 1.6.2)
29
- pdf-reader (>= 0.9.1)
30
- rspec (~> 2.6.0)
24
+ bundler
25
+ jeweler
26
+ rspec
data/README.rdoc CHANGED
@@ -17,10 +17,10 @@ That will give you the currency string like "USD" or "EUR", and this library exp
17
17
  Some constants, useful for validation:
18
18
 
19
19
  AppStorePricingMatrix::CUSTOMER_CURRENCIES
20
- => ["USD", "MXN", "CAD", "AUD", "NZD", "JPY", "EUR", "DKK", "NOK", "SEK", "CHF", "GBP"]
20
+ => ["USD", "CAD", "MXN", "AUD", "NZD", "JPY", "EUR", "DKK", "SEK", "CHF", "NOK", "GBP"]
21
21
 
22
22
  AppStorePricingMatrix::DEVELOPER_CURRENCIES
23
- => ["USD", "CAD", "AUD", "JPY", "EUR", "GBP"]
23
+ => ["USD", "CAD", "MXN", "AUD", "NZD", "JPY", "EUR", "CHF", "NOK", "GBP"]
24
24
 
25
25
  To retrieve a customer price, query with the currency and the tier number:
26
26
 
@@ -28,29 +28,17 @@ To retrieve a customer price, query with the currency and the tier number:
28
28
  => "0.99"
29
29
 
30
30
  AppStorePricingMatrix::CUSTOMER_PRICES['JPY'][1]
31
- => "115"
31
+ => "85"
32
32
 
33
33
  For developer proceeds:
34
34
 
35
35
  AppStorePricingMatrix::DEVELOPER_PROCEEDS['GBP'][30]
36
- => "10.95"
36
+ => "12.78"
37
37
 
38
38
  To retrieve a developer currency from a given customer currency:
39
39
 
40
- AppStorePricingMatrix::REVERSE_CURRENCY_MAP['MXN']
41
- => "USD"
40
+ AppStorePricingMatrix::REVERSE_CURRENCY_MAP['SEK']
41
+ => "EUR"
42
42
 
43
43
  AppStorePricingMatrix::REVERSE_CURRENCY_MAP['DKK']
44
44
  => "EUR"
45
-
46
- == Updating the price table
47
-
48
- The price table was generated by parsing the exhibit C part of the paid app contract PDF file. As of June 10, 2011, it was versioned as v8.
49
-
50
- However Apple haven't changed it much so far, it's reasonable to expect changes in the future. When that happens, strip the PDF down to 2 pages only containing the price table, rename it to "input.pdf", put it in the project root, then run the following rake task.
51
-
52
- rake aspm:generate
53
-
54
- Then run the spec to verify the generated content:
55
-
56
- rake
data/Rakefile CHANGED
@@ -18,7 +18,7 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.summary = "Constants for App Store Pricing Matrix"
19
19
  gem.description = "A simple module that holds currencies and prices from the Apple's iOS App Store."
20
20
  gem.email = "kenn.ejima@gmail.com"
21
- gem.authors = ["Kenn Ejima"]
21
+ gem.authors = ["Kenn Ejima", "Elliot Bowes"]
22
22
  end
23
23
  Jeweler::RubygemsDotOrgTasks.new
24
24
 
@@ -29,43 +29,3 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
29
29
  end
30
30
 
31
31
  task :default => :spec
32
-
33
- namespace :aspm do
34
- desc "Parse PDF and generate files"
35
- task :generate do
36
- require 'pdf-reader'
37
-
38
- receiver = PDF::Reader::RegisterReceiver.new
39
- pdf = PDF::Reader.file("input.pdf", receiver)
40
-
41
- targets = receiver.callbacks.select{|callback| callback[:name] == :show_text }[17..-1].map{|i| i[:args].first }
42
- split_at = 11*86-1
43
-
44
- page1_headers = [ :tier, :usd, :mxn, :usd_pro, :cad, :cad_pro, :aud, :nzd, :aud_pro, :jpy, :jpy_pro ]
45
- page2_headers = [ :tier, :eur, :dkk, :nok, :sek, :chf, :eur_pro, :gbp, :gbp_pro ]
46
-
47
- # Page 1 of Exhibit C
48
- page1 = Hash.new{|h,k| h[k] = Array.new }.tap do |hash|
49
- targets.each_with_index do |v,i|
50
- next if i > split_at
51
- key = page1_headers[i % 11]
52
- hash[key.to_s] << v unless key == :tier
53
- end
54
- end
55
-
56
- targets = targets[split_at+22..-1]
57
-
58
- # Page 2 of Exhibit C
59
- page2 = Hash.new{|h,k| h[k] = Array.new }.tap do |hash|
60
- targets.each_with_index do |v,i|
61
- key = page2_headers[i % 9]
62
- hash[key.to_s] << v unless key == :tier
63
- end
64
- end
65
-
66
- whole = page1.merge(page2)
67
- whole.keys.each do |key|
68
- File.open("lib/prices/#{key}", 'w') {|file| file.write whole[key].join("\n") }
69
- end
70
- end
71
- end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.4
1
+ 1.1.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{app_store_pricing_matrix}
8
- s.version = "1.0.4"
8
+ s.version = "1.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Kenn Ejima"]
12
- s.date = %q{2011-06-13}
11
+ s.authors = ["Kenn Ejima", "Elliot Bowes"]
12
+ s.date = %q{2011-09-26}
13
13
  s.description = %q{A simple module that holds currencies and prices from the Apple's iOS App Store.}
14
14
  s.email = %q{kenn.ejima@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
32
32
  "lib/prices/cad",
33
33
  "lib/prices/cad_pro",
34
34
  "lib/prices/chf",
35
+ "lib/prices/chf_pro",
35
36
  "lib/prices/dkk",
36
37
  "lib/prices/eur",
37
38
  "lib/prices/eur_pro",
@@ -40,8 +41,11 @@ Gem::Specification.new do |s|
40
41
  "lib/prices/jpy",
41
42
  "lib/prices/jpy_pro",
42
43
  "lib/prices/mxn",
44
+ "lib/prices/mxn_pro",
43
45
  "lib/prices/nok",
46
+ "lib/prices/nok_pro",
44
47
  "lib/prices/nzd",
48
+ "lib/prices/nzd_pro",
45
49
  "lib/prices/sek",
46
50
  "lib/prices/usd",
47
51
  "lib/prices/usd_pro",
@@ -58,21 +62,18 @@ Gem::Specification.new do |s|
58
62
  s.specification_version = 3
59
63
 
60
64
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
- s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
62
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
63
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
64
- s.add_development_dependency(%q<pdf-reader>, [">= 0.9.1"])
65
+ s.add_development_dependency(%q<rspec>, [">= 0"])
66
+ s.add_development_dependency(%q<bundler>, [">= 0"])
67
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
65
68
  else
66
- s.add_dependency(%q<rspec>, ["~> 2.6.0"])
67
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
68
- s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
69
- s.add_dependency(%q<pdf-reader>, [">= 0.9.1"])
69
+ s.add_dependency(%q<rspec>, [">= 0"])
70
+ s.add_dependency(%q<bundler>, [">= 0"])
71
+ s.add_dependency(%q<jeweler>, [">= 0"])
70
72
  end
71
73
  else
72
- s.add_dependency(%q<rspec>, ["~> 2.6.0"])
73
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
74
- s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
75
- s.add_dependency(%q<pdf-reader>, [">= 0.9.1"])
74
+ s.add_dependency(%q<rspec>, [">= 0"])
75
+ s.add_dependency(%q<bundler>, [">= 0"])
76
+ s.add_dependency(%q<jeweler>, [">= 0"])
76
77
  end
77
78
  end
78
79
 
@@ -1,12 +1,18 @@
1
1
  module AppStorePricingMatrix
2
2
  CURRENCY_MAP = {
3
- :usd => [ :usd, :mxn ].freeze, # WARNING: MXN is a valid Mexican peso - there's no MXP, apparently.
3
+ :usd => [ :usd ].freeze,
4
4
  :cad => [ :cad ].freeze,
5
- :aud => [ :aud, :nzd ].freeze,
5
+ :mxn => [ :mxn ].freeze,
6
+ :aud => [ :aud ].freeze,
7
+ :nzd => [ :nzd ].freeze,
6
8
  :jpy => [ :jpy ].freeze,
7
- :eur => [ :eur, :dkk, :nok, :sek, :chf ].freeze,
9
+ :eur => [ :eur, :dkk, :sek ].freeze,
10
+ :chf => [ :chf ].freeze,
11
+ :nok => [ :nok ].freeze,
8
12
  :gbp => [ :gbp ].freeze
9
13
  }.freeze
14
+
15
+ EURO_CURRENCIES = [ :bgn , :czk , :eek , :huf , :lvl , :ltl , :mtl , :pln , :ron ].map {|i| i.to_s.upcase }.freeze
10
16
  CUSTOMER_CURRENCIES = CURRENCY_MAP.values.flatten.map{|i| i.to_s.upcase }.freeze
11
17
  DEVELOPER_CURRENCIES = CURRENCY_MAP.keys.map{|i| i.to_s.upcase }.freeze
12
18
 
@@ -29,4 +35,11 @@ module AppStorePricingMatrix
29
35
  hash[key] = File.read("#{File.dirname(__FILE__)}/prices/#{key.downcase}_pro").split("\n").freeze
30
36
  end
31
37
  end.freeze
38
+
39
+ def self.customer_currency_for(currency_code)
40
+ code = currency_code.to_s.upcase
41
+ return code if AppStorePricingMatrix::CUSTOMER_CURRENCIES.include? code
42
+ return "EUR" if AppStorePricingMatrix::EURO_CURRENCIES.include? code
43
+ return nil
44
+ end
32
45
  end
data/lib/prices/aud CHANGED
@@ -1,13 +1,15 @@
1
1
  0.00
2
- 1.19
3
- 2.49
4
- 3.99
5
- 4.99
6
- 5.99
7
- 7.99
8
- 8.99
9
- 9.99
10
- 11.99
2
+ 0.99
3
+ 1.99
4
+ 2.99
5
+ 4.49
6
+ 5.49
7
+ 6.49
8
+ 7.49
9
+ 8.49
10
+ 9.49
11
+ 10.49
12
+ 11.49
11
13
  12.99
12
14
  13.99
13
15
  14.99
@@ -16,22 +18,26 @@
16
18
  17.99
17
19
  18.99
18
20
  19.99
21
+ 20.99
19
22
  21.99
20
23
  22.99
21
24
  23.99
22
25
  24.99
26
+ 25.99
23
27
  26.99
24
28
  27.99
25
- 28.99
26
29
  29.99
30
+ 30.99
27
31
  31.99
28
32
  32.99
29
33
  33.99
30
34
  34.99
35
+ 35.99
31
36
  36.99
32
37
  37.99
33
38
  38.99
34
39
  39.99
40
+ 40.99
35
41
  41.99
36
42
  42.99
37
43
  43.99
@@ -41,46 +47,40 @@
41
47
  47.99
42
48
  48.99
43
49
  49.99
50
+ 50.99
44
51
  51.99
45
- 52.99
46
- 53.99
47
- 54.99
48
- 56.99
49
- 57.99
50
- 58.99
51
52
  59.99
53
+ 64.99
52
54
  69.99
53
55
  74.99
54
56
  79.99
57
+ 84.99
55
58
  89.99
56
59
  94.99
57
60
  99.99
58
- 104.99
59
61
  109.99
60
- 114.99
61
62
  119.99
63
+ 129.99
62
64
  139.99
63
65
  149.99
64
66
  159.99
65
67
  169.99
68
+ 179.99
66
69
  189.99
67
70
  199.99
71
+ 209.99
68
72
  219.99
69
73
  229.99
70
74
  239.99
71
75
  249.99
72
- 259.99
73
76
  269.99
74
- 279.99
75
- 289.99
76
- 299.99
77
- 349.99
78
- 399.99
79
- 449.99
77
+ 319.99
78
+ 379.99
79
+ 429.99
80
80
  499.99
81
- 599.99
82
- 699.99
83
- 799.99
84
- 899.99
85
- 999.99
86
- 1199.99
81
+ 549.99
82
+ 649.99
83
+ 749.99
84
+ 849.99
85
+ 949.99
86
+ 1049.99
data/lib/prices/aud_pro CHANGED
@@ -1,13 +1,15 @@
1
1
  0.00
2
- 0.76
3
- 1.58
4
- 2.54
5
- 3.18
6
- 3.81
7
- 5.08
8
- 5.72
9
- 6.36
10
- 7.63
2
+ 0.63
3
+ 1.27
4
+ 1.90
5
+ 2.86
6
+ 3.49
7
+ 4.13
8
+ 4.77
9
+ 5.40
10
+ 6.04
11
+ 6.68
12
+ 7.31
11
13
  8.27
12
14
  8.90
13
15
  9.54
@@ -16,22 +18,26 @@
16
18
  11.45
17
19
  12.08
18
20
  12.72
21
+ 13.36
19
22
  13.99
20
23
  14.63
21
24
  15.27
22
25
  15.90
26
+ 16.54
23
27
  17.18
24
28
  17.81
25
- 18.45
26
29
  19.08
30
+ 19.72
27
31
  20.36
28
32
  20.99
29
33
  21.63
30
34
  22.27
35
+ 22.90
31
36
  23.54
32
37
  24.18
33
38
  24.81
34
39
  25.45
40
+ 26.08
35
41
  26.72
36
42
  27.36
37
43
  27.99
@@ -41,46 +47,40 @@
41
47
  30.54
42
48
  31.18
43
49
  31.81
50
+ 32.45
44
51
  33.08
45
- 33.72
46
- 34.36
47
- 34.99
48
- 36.27
49
- 36.90
50
- 37.54
51
52
  38.18
53
+ 41.36
52
54
  44.54
53
55
  47.72
54
56
  50.90
57
+ 54.08
55
58
  57.27
56
59
  60.45
57
60
  63.63
58
- 66.81
59
61
  69.99
60
- 73.18
61
62
  76.36
63
+ 82.72
62
64
  89.08
63
65
  95.45
64
66
  101.81
65
67
  108.18
68
+ 114.54
66
69
  120.90
67
70
  127.27
71
+ 133.63
68
72
  139.99
69
73
  146.36
70
74
  152.72
71
75
  159.08
72
- 165.45
73
76
  171.81
74
- 178.18
75
- 184.54
76
- 190.90
77
- 222.72
78
- 254.54
79
- 286.36
77
+ 203.63
78
+ 241.81
79
+ 273.63
80
80
  318.18
81
- 381.81
82
- 445.45
83
- 509.08
84
- 572.72
85
- 636.36
86
- 763.63
81
+ 349.99
82
+ 413.63
83
+ 477.27
84
+ 540.90
85
+ 604.54
86
+ 668.18