opera-mobile-store-sdk 0.1.1 → 0.1.2
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 +4 -4
- data/lib/opera-mobile-store-sdk.rb +2 -1
- data/lib/opera-mobile-store-sdk/version.rb +1 -1
- data/lib/opera/mobile_store/build.rb +97 -101
- data/lib/opera/mobile_store/build_file.rb +24 -27
- data/lib/opera/mobile_store/category.rb +17 -19
- data/lib/opera/mobile_store/developer.rb +61 -59
- data/lib/opera/mobile_store/inspectable_attributes.rb +13 -0
- data/lib/opera/mobile_store/payment_info.rb +76 -82
- data/lib/opera/mobile_store/product.rb +172 -177
- data/lib/opera/mobile_store/product_image.rb +30 -32
- data/lib/opera/mobile_store/product_localization.rb +21 -23
- data/lib/opera/mobile_store_sdk/identity_mapable.rb +11 -3
- metadata +3 -3
- data/lib/opera/mobile_store/author.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7580c98f69eaa74be9332b97b6c508f6189b5e0e
|
4
|
+
data.tar.gz: 0aa75ee6c1c38dcf970acd47116ec627bec85549
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9565ba3b577af06ec4a9532d1982ebb90c42152dd7f8f6ef66a977934b5d593a183534dd0420900c27cfb42409aceaca2d174fae3a0d62f021a6ee281f87f3e2
|
7
|
+
data.tar.gz: bfed336b46f33cf1aabf435807b77fafdcd54229c2d078c3465fb81a55438a4e486ccb86e5d98a537a4e6f6f0ff3a8cddaedb5c1d3baf722cc5fdaa4260f84e3
|
@@ -9,11 +9,12 @@ module Opera
|
|
9
9
|
autoload :ProductLocalization
|
10
10
|
autoload :ProductImage
|
11
11
|
autoload :Category
|
12
|
-
autoload :Author
|
13
12
|
autoload :Build
|
14
13
|
autoload :BuildFile
|
15
14
|
autoload :Developer
|
16
15
|
autoload :PaymentInfo
|
16
|
+
|
17
|
+
autoload :InspectableAttributes
|
17
18
|
end
|
18
19
|
|
19
20
|
module MobileStoreSDK
|
@@ -1,129 +1,125 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
1
|
+
require "active_model"
|
2
|
+
|
3
|
+
module Opera::MobileStore
|
4
|
+
class Build
|
5
|
+
|
6
|
+
include ActiveModel::Model
|
7
|
+
include ActiveModel::Serialization
|
8
|
+
|
9
|
+
include Opera::MobileStore::InspectableAttributes
|
10
|
+
|
11
|
+
# All attributes are Read-Only...
|
12
|
+
attr_accessor :id,
|
13
|
+
:name,
|
14
|
+
:platform,
|
15
|
+
:type,
|
16
|
+
:installer_type,
|
17
|
+
:package_name,
|
18
|
+
:version_name,
|
19
|
+
:version_code,
|
20
|
+
:build_update_date,
|
21
|
+
:files,
|
22
|
+
:billing,
|
23
|
+
:languages
|
24
|
+
|
25
|
+
def files
|
26
|
+
@files ||= []
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
def languages
|
30
|
+
@languages ||= []
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
def billing
|
34
|
+
@billing ||= false
|
35
|
+
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
37
|
+
def attributes
|
38
|
+
[
|
39
|
+
:id, :name, :platform, :type, :installer_type, :package_name,
|
40
|
+
:version_name, :version_code, :build_update_date, :files, :billing,
|
41
|
+
:languages
|
42
|
+
].inject({}) do |hash, field_name|
|
43
|
+
field_value = self.public_send field_name
|
44
|
+
hash[field_name.to_s] = field_value if field_value.present?
|
45
|
+
hash
|
46
46
|
end
|
47
|
+
end
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
# Override of serializable_hash:
|
50
|
+
#
|
51
|
+
# This override will prevent dumping special objects to the hash:
|
52
|
+
def serializable_hash(options = nil)
|
53
|
+
attributes.inject({}) do |shsh, keyval|
|
54
|
+
field_name, field_value = keyval
|
54
55
|
|
55
|
-
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
shsh[field_name] = field_value
|
60
|
-
shsh
|
56
|
+
if field_name == 'files' # Array of special objects
|
57
|
+
field_value = field_value.map(&:serializable_hash)
|
61
58
|
end
|
62
|
-
end
|
63
59
|
|
64
|
-
|
60
|
+
shsh[field_name] = field_value
|
61
|
+
shsh
|
62
|
+
end
|
63
|
+
end
|
65
64
|
|
66
|
-
|
65
|
+
def self.build_from_nokogiri_node(node)
|
67
66
|
|
68
|
-
|
69
|
-
id: node.xpath("string(@id)").to_i,
|
70
|
-
name: node.xpath("string(name)").strip,
|
71
|
-
platform: node.xpath("string(platform)").strip,
|
72
|
-
type: node.xpath("string(type)").strip,
|
73
|
-
installer_type: node.xpath("string(installer_type)").strip,
|
74
|
-
package_name: node.xpath("string(package_name)").strip,
|
75
|
-
version_name: node.xpath("string(version_name)").strip,
|
76
|
-
version_code: version_code.present? ? version_code.to_i : nil,
|
77
|
-
build_update_date: Time.parse(node.xpath "string(build_update_date)"),
|
78
|
-
}.select { |key, val| val.present? }
|
67
|
+
version_code = node.xpath("string(version_code)")
|
79
68
|
|
80
|
-
|
81
|
-
|
82
|
-
|
69
|
+
data = {
|
70
|
+
id: node.xpath("string(@id)").to_i,
|
71
|
+
name: node.xpath("string(name)").strip,
|
72
|
+
platform: node.xpath("string(platform)").strip,
|
73
|
+
type: node.xpath("string(type)").strip,
|
74
|
+
installer_type: node.xpath("string(installer_type)").strip,
|
75
|
+
package_name: node.xpath("string(package_name)").strip,
|
76
|
+
version_name: node.xpath("string(version_name)").strip,
|
77
|
+
version_code: version_code.present? ? version_code.to_i : nil,
|
78
|
+
build_update_date: Time.parse(node.xpath "string(build_update_date)"),
|
79
|
+
}.select { |key, val| val.present? }
|
83
80
|
|
84
|
-
|
81
|
+
data[:files] = node.xpath("files/file").map do |f|
|
82
|
+
BuildFile.build_from_nokogiri_node f
|
83
|
+
end
|
85
84
|
|
86
|
-
|
87
|
-
language.attributes["code"].to_s.strip
|
88
|
-
end
|
85
|
+
data[:billing] = node.xpath("string(billing)").to_i > 0
|
89
86
|
|
90
|
-
|
87
|
+
data[:languages] = node.xpath("languages/language").map do |language|
|
88
|
+
language.attributes["code"].to_s.strip
|
91
89
|
end
|
92
90
|
|
93
|
-
|
94
|
-
|
95
|
-
:id, :name, :platform, :type, :installer_type, :package_name,
|
96
|
-
:version_name, :version_code, :build_update_date, :files, :billing,
|
97
|
-
:languages
|
98
|
-
].inject({}) do |hash, field_name|
|
99
|
-
field_value = self.public_send field_name
|
100
|
-
hash[field_name.to_s] = field_value if field_value.present?
|
101
|
-
hash
|
102
|
-
end
|
103
|
-
end
|
91
|
+
self.new data
|
92
|
+
end
|
104
93
|
|
105
|
-
|
106
|
-
|
94
|
+
def attributes
|
95
|
+
[
|
96
|
+
:id, :name, :platform, :type, :installer_type, :package_name,
|
97
|
+
:version_name, :version_code, :build_update_date, :files, :billing,
|
98
|
+
:languages
|
99
|
+
].inject({}) do |hash, field_name|
|
100
|
+
field_value = self.public_send field_name
|
101
|
+
hash[field_name.to_s] = field_value if field_value.present?
|
102
|
+
hash
|
107
103
|
end
|
104
|
+
end
|
108
105
|
|
109
|
-
|
110
|
-
|
111
|
-
|
106
|
+
def self.deserialize(serializable_hash)
|
107
|
+
attributes_hash = serializable_hash.inject({}) do |hsh, keyval|
|
108
|
+
field_name, field_value = keyval
|
112
109
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
end
|
110
|
+
case field_name
|
111
|
+
when 'files'
|
112
|
+
field_value = field_value.map do |item_serializable_hash|
|
113
|
+
BuildFile.deserialize item_serializable_hash
|
118
114
|
end
|
119
|
-
|
120
|
-
hsh[field_name] = field_value
|
121
|
-
hsh
|
122
115
|
end
|
123
116
|
|
124
|
-
|
117
|
+
hsh[field_name] = field_value
|
118
|
+
hsh
|
125
119
|
end
|
126
120
|
|
121
|
+
self.new attributes_hash
|
127
122
|
end
|
123
|
+
|
128
124
|
end
|
129
125
|
end
|
@@ -1,38 +1,35 @@
|
|
1
|
-
|
2
|
-
module MobileStore
|
3
|
-
class BuildFile
|
4
|
-
|
5
|
-
include ActiveModel::Model
|
6
|
-
include ActiveModel::Serialization
|
7
|
-
|
8
|
-
# All attributes are Read-Only...
|
9
|
-
attr_accessor :size, :url
|
10
|
-
|
11
|
-
def attributes
|
12
|
-
[:size, :url].inject({}) do |hash, field_name|
|
13
|
-
field_value = self.public_send field_name
|
14
|
-
hash[field_name.to_s] = field_value if field_value.present?
|
15
|
-
hash
|
16
|
-
end
|
17
|
-
end
|
1
|
+
require "active_model"
|
18
2
|
|
19
|
-
|
3
|
+
module Opera::MobileStore
|
4
|
+
class BuildFile
|
20
5
|
|
21
|
-
|
6
|
+
include ActiveModel::Model
|
7
|
+
include ActiveModel::Serialization
|
8
|
+
include Opera::MobileStore::InspectableAttributes
|
22
9
|
|
23
|
-
|
24
|
-
|
25
|
-
data[:size] = file_size.to_i if file_size.present?
|
10
|
+
# All attributes are Read-Only...
|
11
|
+
attr_accessor :size, :url
|
26
12
|
|
27
|
-
|
13
|
+
def attributes
|
14
|
+
[:size, :url].inject({}) do |hash, field_name|
|
15
|
+
field_value = self.public_send field_name
|
16
|
+
hash[field_name.to_s] = field_value if field_value.present?
|
17
|
+
hash
|
28
18
|
end
|
19
|
+
end
|
29
20
|
|
30
|
-
|
31
|
-
"<#{self.class.name} #{attributes.inspect}>"
|
32
|
-
end
|
21
|
+
def self.build_from_nokogiri_node(node)
|
33
22
|
|
34
|
-
|
23
|
+
data = { url: node.text.strip }
|
35
24
|
|
25
|
+
# Extract width + height data:
|
26
|
+
file_size = node.xpath("string(@size)")
|
27
|
+
data[:size] = file_size.to_i if file_size.present?
|
28
|
+
|
29
|
+
self.new data
|
36
30
|
end
|
31
|
+
|
32
|
+
self.singleton_class.send :alias_method, :deserialize, :new
|
33
|
+
|
37
34
|
end
|
38
35
|
end
|
@@ -1,29 +1,27 @@
|
|
1
|
-
|
2
|
-
module MobileStore
|
3
|
-
class Category
|
1
|
+
require "active_model"
|
4
2
|
|
5
|
-
|
6
|
-
|
3
|
+
module Opera::MobileStore
|
4
|
+
class Category
|
7
5
|
|
8
|
-
|
6
|
+
include ActiveModel::Model
|
7
|
+
include ActiveModel::Serialization
|
9
8
|
|
10
|
-
|
11
|
-
attr_accessor :id, :code, :name
|
9
|
+
include Opera::MobileStore::InspectableAttributes
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
hash
|
18
|
-
end
|
19
|
-
end
|
11
|
+
include Opera::MobileStoreSDK::IdentityMapable
|
12
|
+
|
13
|
+
# All attributes are Read-Only...
|
14
|
+
attr_accessor :id, :code, :name
|
20
15
|
|
21
|
-
|
22
|
-
|
16
|
+
def attributes
|
17
|
+
[:id, :code, :name].inject({}) do |hash, field_name|
|
18
|
+
field_value = self.public_send field_name
|
19
|
+
hash[field_name.to_s] = field_value unless field_value.nil?
|
20
|
+
hash
|
23
21
|
end
|
22
|
+
end
|
24
23
|
|
25
|
-
|
24
|
+
self.singleton_class.send :alias_method, :deserialize, :new
|
26
25
|
|
27
|
-
end
|
28
26
|
end
|
29
27
|
end
|
@@ -1,70 +1,72 @@
|
|
1
1
|
require "active_model"
|
2
2
|
|
3
|
-
module Opera
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
data[:address2] = node.xpath("string(address2)").strip
|
29
|
-
|
30
|
-
[
|
31
|
-
:city, :state, :zip, :country_code, :website_url,
|
32
|
-
:orders_email, :contact_email
|
33
|
-
].each do |attribute_name|
|
34
|
-
value = node.xpath("string(#{attribute_name})").strip
|
35
|
-
data[attribute_name] = value if value.present?
|
36
|
-
end
|
37
|
-
|
38
|
-
phones = node.xpath("phones").text
|
39
|
-
byebug if phones.present?
|
40
|
-
|
41
|
-
payment_info = PaymentInfo.build_from_nokogiri_node node.xpath("payment").first
|
42
|
-
data[:payment_info] = payment_info if payment_info.present?
|
43
|
-
|
44
|
-
|
45
|
-
self.new data
|
3
|
+
module Opera::MobileStore
|
4
|
+
class Developer
|
5
|
+
|
6
|
+
include ActiveModel::Model
|
7
|
+
include ActiveModel::Serialization
|
8
|
+
|
9
|
+
include Opera::MobileStore::InspectableAttributes
|
10
|
+
|
11
|
+
include Opera::MobileStoreSDK::APIAccessible
|
12
|
+
include Opera::MobileStoreSDK::IdentityMapable
|
13
|
+
|
14
|
+
# All attributes are Read-Only...
|
15
|
+
attr_accessor :id, :login, :email, :name,
|
16
|
+
:address1, :address2,
|
17
|
+
:city, :state, :zip, :country_code, :website_url,
|
18
|
+
:orders_email, :contact_email, :phones, :payment_info
|
19
|
+
|
20
|
+
def attributes
|
21
|
+
[
|
22
|
+
:id, :login, :email, :name, :address1, :address2, :city, :state, :zip,
|
23
|
+
:country_code, :website_url, :orders_email, :contact_email, :payment_info
|
24
|
+
].inject({}) do |attributes_hash, field_name|
|
25
|
+
field_value = public_send field_name
|
26
|
+
attributes_hash[field_name.to_s] = field_value if field_value.present?
|
27
|
+
attributes_hash
|
46
28
|
end
|
29
|
+
end
|
47
30
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
hash[method] = value if value.present?
|
55
|
-
hash
|
56
|
-
end
|
57
|
-
end
|
31
|
+
# Override of serializable_hash:
|
32
|
+
#
|
33
|
+
# This override will prevent dumping special objects to the hash:
|
34
|
+
def serializable_hash(options = nil)
|
35
|
+
attributes.inject({}) do |shsh, keyval|
|
36
|
+
field_name, field_value = keyval
|
58
37
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
attributes + ["#{key}:#{val}"]
|
63
|
-
end.join(", ")
|
38
|
+
# Get the payment_info serializable hash:
|
39
|
+
field_value = field_value.serializable_hash \
|
40
|
+
if field_name == 'payment_info'
|
64
41
|
|
65
|
-
|
42
|
+
shsh[field_name] = field_value
|
43
|
+
shsh
|
66
44
|
end
|
45
|
+
end
|
67
46
|
|
47
|
+
def self.build_from_nokogiri_node(node)
|
48
|
+
data = {
|
49
|
+
id: node.xpath("string(@id)").to_i,
|
50
|
+
login: node.xpath("string(@login)").strip,
|
51
|
+
email: node.xpath("string(email)").strip,
|
52
|
+
name: node.xpath("string(name)").strip,
|
53
|
+
address1: node.xpath("string(address1)").strip,
|
54
|
+
address2: node.xpath("string(address2)").strip,
|
55
|
+
city: node.xpath("string(city)").strip,
|
56
|
+
state: node.xpath("string(state)").strip,
|
57
|
+
zip: node.xpath("string(zip)").strip,
|
58
|
+
country_code: node.xpath("string(country_code)").strip,
|
59
|
+
website_url: node.xpath("string(website_url)").strip,
|
60
|
+
orders_email: node.xpath("string(orders_email)").strip,
|
61
|
+
contact_email: node.xpath("string(contact_email)").strip,
|
62
|
+
phones: node.xpath("phones").text
|
63
|
+
}.select { |key, value| value.present? }
|
64
|
+
|
65
|
+
payment_info = PaymentInfo.build_from_nokogiri_node node.xpath("payment").first
|
66
|
+
data[:payment_info] = payment_info if payment_info.present?
|
67
|
+
|
68
|
+
self.new data
|
68
69
|
end
|
70
|
+
|
69
71
|
end
|
70
72
|
end
|