Class: Opera::MobileStore::Compatibility

Inherits:
Object
  • Object
show all
Includes:
ActiveModel::Model, ActiveModel::Serialization, InspectableAttributes, Opera::MobileStoreSDK::APIAccessible
Defined in:
lib/opera/mobile_store/compatibility.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from InspectableAttributes

#inspect

Instance Attribute Details

#build_idObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def build_id
  @build_id
end

#max_sdk_versionObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def max_sdk_version
  @max_sdk_version
end

#min_sdk_versionObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def min_sdk_version
  @min_sdk_version
end

#model_idsObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def model_ids
  @model_ids
end

#platform_family_idsObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def platform_family_ids
  @platform_family_ids
end

#platform_idsObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def platform_ids
  @platform_ids
end

#product_idObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def product_id
  @product_id
end

#target_sdk_versionObject

All attributes are Read-Only…



14
15
16
# File 'lib/opera/mobile_store/compatibility.rb', line 14

def target_sdk_version
  @target_sdk_version
end

Class Method Details

.build_from_nokogiri_node(node) ⇒ Object

TODO: Move this implementation to the SDK namespace



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/opera/mobile_store/compatibility.rb', line 54

def self.build_from_nokogiri_node(node)

  t_node = node.xpath("build").first || node.xpath("product").first

  ref_key = case t_node.node_name
  when 'build' then :build_id
  when 'product' then :product_id
  else raise "No recognizable compatibility parent"
  end

  # parse the rest of the data:
  data = {
    ref_key => t_node.xpath("number(@id)").to_i,
    model_ids: t_node.xpath("models/model").map do |model_node|
      device_model_id = model_node.xpath("number(@id)").to_i

      DeviceModel.new(
        id:   device_model_id,
        code: model_node.xpath("string(@code)").strip,
        name: model_node.text.strip
      ) unless DeviceModel.identity_mapped? device_model_id

      device_model_id
    end,

    platform_ids: t_node.xpath("platforms/platform").map do |platform_node|
      device_platform_id = platform_node.xpath("number(@id)").to_i

      DevicePlatform.new(
        id:   device_platform_id,
        code: platform_node.xpath("string(@code)").strip,
        name: platform_node.text.strip
      ) unless DevicePlatform.identity_mapped? device_platform_id

      device_platform_id
    end,

    platform_family_ids: t_node.xpath("platform_families/platform_family").map do |platform_family_node|
      platform_family_id = platform_family_node.xpath("number(@id)").to_i

      DevicePlatformFamily.new(
        id:   platform_family_id,
        code: platform_family_node.xpath("string(@code)").strip,
        name: platform_family_node.text.strip
      ) unless DevicePlatformFamily.identity_mapped? platform_family_id

      platform_family_id
    end
  }

  self.new data
end

Instance Method Details

#attributesObject



18
19
20
21
22
23
24
25
26
27
# File 'lib/opera/mobile_store/compatibility.rb', line 18

def attributes
  [
    :model_ids, :platform_ids, :platform_family_ids, :product_id, :build_id,
    :min_sdk_version, :target_sdk_version, :max_sdk_version
  ].inject({}) do |hash, field_name|
    field_value = self.public_send field_name
    hash[field_name.to_s] = field_value unless field_value.nil?
    hash
  end
end

#buildObject



47
48
49
# File 'lib/opera/mobile_store/compatibility.rb', line 47

def build
  Build.find build_id if build_id.present?
end

#modelsObject



33
34
35
# File 'lib/opera/mobile_store/compatibility.rb', line 33

def models
  model_ids.map { |model_id| DeviceModel.find model_id }
end

#platform_familiesObject



41
42
43
44
45
# File 'lib/opera/mobile_store/compatibility.rb', line 41

def platform_families
  platform_family_ids.map do |platform_family_id|
    DevicePlatform.find platform_family_id
  end
end

#platformsObject



37
38
39
# File 'lib/opera/mobile_store/compatibility.rb', line 37

def platforms
  platform_ids.map { |platform_id| DevicePlatform.find platform_id }
end