motion-prime 0.9.9.1 → 0.9.9.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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzRmOTFjOTY1ODY2OTFlZTUwZDNlMDE1MWEwZDliYWVkMjBjM2VhNA==
4
+ ZmRjOTcxMGQ4OTVhODgwZjk1MmUyZjY3YWQxNDc2ODk3MDc2MTE5Yg==
5
5
  data.tar.gz: !binary |-
6
- YTY0M2Q1ZjAzMDI0MmY3ODE2ZGRkNmZmYTliNDY2NTQ4NjhjYjM3ZA==
6
+ OWY3OTg1M2M3ZDk3ZDg0MjY1NjAyMGRkM2M2ZTU1YzJkM2VjYjQ1MQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NTgxZWNhZjE5ZDQwMDgwM2MxOWUzNWU2NzEyOTE5Nzk3MjI1YzcxMmEyYWFj
10
- YmJjZjBkNGYxMWUyY2FiNDAyMGM1YzEwYjE5OGQwYjc2ZmQ0NWMyYzdmODAx
11
- MWFmNTRkMDI1Yzc0NTRmMGJkN2IzZWM4ZDRhZGFkN2U1NDFhNWQ=
9
+ ODhiZjRjNDJjMTY3ZDkzOTEzOGUzMmNkYWZiOWI3MjQ4NDlmMzRjZjNlM2Mw
10
+ NzIxZTQ5MzlkZThmYmIzMTkxNWMzNDFmNmZjOTc4YjZmYTdlYmQ0YTliODZm
11
+ MTMxMjQ2NmUwYjIyNjA1MmQ3MWVkOThlY2UzZTRmODg5NTQzNDE=
12
12
  data.tar.gz: !binary |-
13
- ZTdmNjgyMzdhMjY1MDc2ZThlMTkwYjk4YjgxOTgzNTljYTZiZGI5ZTUyMTIy
14
- ZDZkOTM3Y2EzM2E4NWVlZjQ2ZWI4OTU4MmFkYjMyYWIwMzEzN2ZlZGFhZjU4
15
- ZDU4NmJhMWEwOWNhMTE5NTcxYTQ4N2Q4OTcwYjgyN2Y1OTcxNDQ=
13
+ NmYzMTFhZDQ0MzFiNjIyODczZmZkZjdiYjQzNTFhY2FjOTA0MmIyNzdjMjE1
14
+ ODg4OWViMjAzOGQ3MTU0YTJiNDI5NWQyMDBmMDZiZGM5OTMxMDY3MjFlZGYx
15
+ MGJlODc3NDc1OTYwNmY0MzMwYWE1YTZkMzU1Njk3NzkxM2RkOWM=
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ === 0.9.9.2
2
+ * bug fixes
3
+
1
4
  === 0.9.9.1
2
5
  * BREAKING CHANGE: width/height value have more priority than right/bottom
3
6
  * BREAKING CHANGE: all methods starting with "table" in table section renamed to start with "collection"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- motion-prime (0.9.9.1)
4
+ motion-prime (0.9.9.2)
5
5
  activesupport
6
6
  afmotion (~> 2.1.0)
7
7
  bubble-wrap (~> 1.6.0)
@@ -65,7 +65,7 @@ GEM
65
65
  open4 (1.3.3)
66
66
  rake (10.3.1)
67
67
  rm-digest (0.0.2)
68
- sugarcube (1.6.1)
68
+ sugarcube (1.6.2)
69
69
  thor (0.19.1)
70
70
  xcodeproj (0.16.1)
71
71
  activesupport (~> 3.0)
data/files/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem 'motion-cocoapods', '~> 1.4.1'
4
- gem 'motion-prime', '0.9.9.1'
4
+ gem 'motion-prime', '0.9.9.2'
5
5
 
6
6
  # add reside menu for sidebar support
7
7
  # gem 'prime_reside_menu', '~> 0.1.4'
@@ -41,7 +41,7 @@ module MotionPrime
41
41
 
42
42
  def width_for_attributed_text(attributed_text)
43
43
  min, max = computed_options[:min_width].to_f, computed_options[:max_width]
44
- return min if attributed_text.blank?
44
+ return min if attributed_text.to_s.blank?
45
45
 
46
46
  rect = get_content_rect(attributed_text, Float::MAX)
47
47
  [[rect.size.width.ceil, max].compact.min, min].max.ceil
@@ -61,8 +61,7 @@ module MotionPrime
61
61
 
62
62
  def height_for_attributed_text(attributed_text)
63
63
  min, max = computed_options[:min_height].to_f, computed_options[:max_height]
64
- return min if attributed_text.blank?
65
-
64
+ return min if attributed_text.to_s.blank?
66
65
  rect = get_content_rect(attributed_text, computed_options[:width] - content_padding_width)
67
66
  [[rect.size.height.ceil, max].compact.min, min].max.ceil
68
67
  end
@@ -96,17 +96,21 @@ module MotionPrime
96
96
  compute_options!
97
97
  end
98
98
 
99
- def rerender!
99
+ def rerender!(changed_options = [])
100
100
  render_target = view.try(:superview)
101
101
  view.try(:removeFromSuperview)
102
102
  render(render_target: render_target)
103
+
104
+ if (changed_options & [:text, :size_to_fit]).any? && respond_to?(:size_to_fit)
105
+ size_to_fit
106
+ end
103
107
  section.try(:on_element_render, self)
104
108
  end
105
109
 
106
110
  def update_with_options(new_options = {})
107
111
  options.merge!(new_options)
108
112
  reload!
109
- rerender!
113
+ rerender!(new_options.keys)
110
114
  end
111
115
 
112
116
  def update_options(new_options)
@@ -51,7 +51,7 @@ module MotionPrime
51
51
  rerender!
52
52
  end
53
53
 
54
- def rerender!
54
+ def rerender!(changed_options = [])
55
55
  section.cached_draw_image = nil
56
56
  view.try(:setNeedsDisplay)
57
57
  end
@@ -15,8 +15,7 @@ module MotionPrime
15
15
  def draw_in(rect)
16
16
  return if computed_options[:hidden]
17
17
  draw_background_in_context(UIGraphicsGetCurrentContext())
18
- # bug - when it's a CollectionView we get invalid frame when drawing in a layer
19
- if computed_options[:draw_in_rect] || view.is_a?(MPCollectionCellWithSection)
18
+ if computed_options[:draw_in_rect]
20
19
  draw_in_context(UIGraphicsGetCurrentContext())
21
20
  else
22
21
  draw_with_layer
@@ -94,6 +94,12 @@ module MotionPrime
94
94
  computed_options[:width] ||= cached_content_outer_width
95
95
  computed_options[:height] ||= cached_content_outer_height
96
96
  reset_computed_values
97
+ elsif computed_options.slice(:width, :left, :right).values.none?
98
+ computed_options[:width] ||= cached_content_outer_width
99
+ reset_computed_values
100
+ elsif computed_options.slice(:height, :top, :bottom).values.none?
101
+ computed_options[:height] ||= cached_content_outer_height
102
+ reset_computed_values
97
103
  end
98
104
  end
99
105
 
@@ -55,7 +55,7 @@ module MotionPrime
55
55
  end
56
56
 
57
57
  def cell_sections_for_group(section)
58
- data[section, grid_size]
58
+ data[section*grid_size, grid_size]
59
59
  end
60
60
 
61
61
  # Table View Delegate
@@ -20,7 +20,8 @@ module MotionPrime
20
20
  padding_top.to_i
21
21
  else # center label
22
22
  padding_top_offset = padding_top.to_i - (self.paddingBottom || self.padding).to_i
23
- (bounds_height - line_height)/2 + 1 + padding_top_offset
23
+ (bounds_height - line_height)/2 + padding_top_offset
24
+ # TODO: check in which cases we should add `1` here
24
25
  end
25
26
  end
26
27
 
@@ -1,3 +1,3 @@
1
1
  module MotionPrime
2
- VERSION = "0.9.9.1"
2
+ VERSION = "0.9.9.2"
3
3
  end
@@ -23,31 +23,41 @@ module MotionPrime
23
23
  temp_height = height || 0.0
24
24
 
25
25
  if left && left > 0 && left <= 1 && value_type != 'absolute' && left.is_a?(Float)
26
- left = max_width * left
26
+ left = (max_width * left).round(2)
27
27
  end
28
28
 
29
29
  if right && right > 0 && right <= 1 && value_type != 'absolute' && right.is_a?(Float)
30
- right = max_width * right
30
+ right = (max_width * right).round(2)
31
+ end
32
+
33
+ if top && top > 0 && top <= 1 && value_type != 'absolute' && top.is_a?(Float)
34
+ top = (max_height * top).round(2)
35
+ end
36
+
37
+ if bottom && bottom > 0 && bottom <= 1 && value_type != 'absolute' && bottom.is_a?(Float)
38
+ bottom = (max_height * bottom).round(2)
31
39
  end
32
40
 
33
41
  # calculate left and right if width is relative, e.g 0.7
34
42
  if width && width > 0 && width <= 1 && value_type != 'absolute' && width.is_a?(Float)
35
43
  if right.nil?
36
44
  left ||= 0
37
- right = max_width - max_width * width - left
45
+ right = (max_width - max_width * width - left).round(2)
38
46
  else
39
- left = max_width - max_width * width - right
47
+ left = (max_width - max_width * width - right).round(2)
40
48
  end
49
+ width = (max_width * width).round(2)
41
50
  end
42
51
 
43
52
  # calculate top and bottom if height is relative, e.g 0.7
44
53
  if height && height > 0 && height <= 1 && value_type != 'absolute' && height.is_a?(Float)
45
54
  if bottom.nil?
46
55
  top ||= 0
47
- bottom = max_height - max_height * height
56
+ bottom = (max_height - max_height * height - top).round(2)
48
57
  else
49
- top = max_height - max_height * height
58
+ top = (max_height - max_height * height - bottom).round(2)
50
59
  end
60
+ height = (max_height * height).round(2)
51
61
  end
52
62
 
53
63
  if !left.nil? && !right.nil?
@@ -89,7 +89,20 @@ module MotionPrime
89
89
  'UICollectionView' => Proc.new{|klass, options|
90
90
  unless layout = options.delete(:layout)
91
91
  layout = UICollectionViewFlowLayout.alloc.init
92
- total_width = options[:parent_bounds].size.width / (options.delete(:grid_size) || 4)
92
+ total_width = options[:parent_bounds].size.width / (options.delete(:grid_size) || 3)
93
+ if horizontal_spacing = options.delete(:horizontal_spacing)
94
+ layout.setMinimumInteritemSpacing horizontal_spacing
95
+ end
96
+ if vertical_spacing = options.delete(:vertical_spacing)
97
+ layout.setMinimumLineSpacing vertical_spacing
98
+ end
99
+ if scroll_direction = options.delete(:scroll_direction)
100
+ if scroll_direction == :horizontal
101
+ layout.setScrollDirection UICollectionViewScrollDirectionHorizontal
102
+ else
103
+ layout.setScrollDirection UICollectionViewScrollDirectionVertical
104
+ end
105
+ end
93
106
  width = total_width - layout.minimumInteritemSpacing
94
107
  layout.setItemSize CGSizeMake(width, options.delete(:item_height) || 100)
95
108
  end
@@ -0,0 +1,94 @@
1
+ describe MotionPrime::Section do
2
+ before do
3
+ @screen = BaseScreen.new
4
+ end
5
+
6
+ describe "view label" do
7
+ before do
8
+ @section = SampleViewSection.new(screen: @screen)
9
+ @section.create_elements
10
+ end
11
+
12
+ describe "size_to_fit option" do
13
+ before do
14
+ @section.element(:description).options.merge!({
15
+ text: '',
16
+ size_to_fit: true
17
+ })
18
+ end
19
+
20
+ it "should set zero size" do
21
+ @section.render
22
+ @section.view(:description).bounds.size.width.should.be.zero
23
+ @section.view(:description).bounds.size.height.should.be.zero
24
+ end
25
+
26
+ it "should update bounds with text" do
27
+ @section.render
28
+ @section.element(:description).update_with_options(text: 'test')
29
+ @section.view(:description).bounds.size.width.should > 0
30
+ @section.view(:description).bounds.size.height.should > 0
31
+ end
32
+ end
33
+
34
+ # describe "`top` with zero `height`" do
35
+ # before do
36
+ # @section.element(:description).options.merge!({
37
+ # top: 20
38
+ # })
39
+ # end
40
+
41
+ # it "should set top" do
42
+ # @section.render
43
+ # @section.view(:description).origin.y.should == 20
44
+ # end
45
+ # end
46
+ end
47
+
48
+ describe "draw label" do
49
+ before do
50
+ @section = SampleDrawSection.new(screen: @screen)
51
+ @section.create_elements
52
+ end
53
+
54
+ describe "size_to_fit option" do
55
+ before do
56
+ @section.element(:description).options.merge!({
57
+ text: '',
58
+ size_to_fit: true
59
+ })
60
+ end
61
+
62
+ it "should set zero size" do
63
+ @section.render
64
+ @section.element(:description).size_to_fit_if_needed
65
+ @section.element(:description).computed_options[:width].should.be.zero
66
+ @section.element(:description).computed_options[:height].should.be.zero
67
+ end
68
+
69
+ it "should update bounds with text" do
70
+ @section.render
71
+ @section.element(:description).update_with_options(text: 'test')
72
+ @section.element(:description).size_to_fit_if_needed
73
+ @section.element(:description).computed_options[:width].should > 0
74
+ @section.element(:description).computed_options[:height].should > 0
75
+ end
76
+ end
77
+
78
+ describe "`top` with zero `height`" do
79
+ before do
80
+ @section.element(:description).options.merge!({
81
+ top: 20
82
+ })
83
+ end
84
+
85
+ it "should set top" do
86
+ @section.render
87
+ @section.container_view.bounds = UIScreen.mainScreen.bounds
88
+ @section.element(:description).size_to_fit_if_needed
89
+ @section.element(:description).draw_options[:top_left_corner].y.should == 20
90
+ @section.element(:description).draw_options[:inner_rect].origin.y.should == 20
91
+ end
92
+ end
93
+ end
94
+ end
@@ -40,4 +40,37 @@ describe MotionPrime::FrameCalculatorMixin do
40
40
  result = @subject.calculate_frame_for(@parent_bounds, {width: 100, left: 10, right: 10})
41
41
  result.size.width.should == 100
42
42
  end
43
+
44
+ it "should calculate relative width" do
45
+ result = @subject.calculate_frame_for(@parent_bounds, {width: 0.5})
46
+ result.size.width.should == 150
47
+ result.origin.x.should == 0
48
+ end
49
+
50
+ it "should calculate relative height" do
51
+ result = @subject.calculate_frame_for(@parent_bounds, {height: 0.5})
52
+ result.size.height.should == 100
53
+ end
54
+
55
+ it "should calculate left based on relative width and absolute right" do
56
+ result = @subject.calculate_frame_for(@parent_bounds, {width: 0.5, right: 70})
57
+ result.origin.x.should == 80
58
+ end
59
+
60
+ it "should calculate top based on relative height and absolute bottom" do
61
+ result = @subject.calculate_frame_for(@parent_bounds, {height: 0.5, bottom: 70})
62
+ result.origin.y.should == 30
63
+ end
64
+
65
+ it "should calculate relative left and width" do
66
+ result = @subject.calculate_frame_for(@parent_bounds, {left: 0.2, width: 0.4})
67
+ result.origin.x.should == 60
68
+ result.size.width.should == 120
69
+ end
70
+
71
+ it "should calculate relative top and height" do
72
+ result = @subject.calculate_frame_for(@parent_bounds, {top: 0.2, height: 0.4})
73
+ result.origin.y.should == 40
74
+ result.size.height.should == 80
75
+ end
43
76
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-prime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9.1
4
+ version: 0.9.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iskander Haziev
@@ -400,6 +400,7 @@ files:
400
400
  - spec/helpers/has_content.rb
401
401
  - spec/unit/config/store_spec.rb
402
402
  - spec/unit/delegate/delegate_spec.rb
403
+ - spec/unit/elements/label_spec.rb
403
404
  - spec/unit/models/association_collection_spec.rb
404
405
  - spec/unit/models/associations_spec.rb
405
406
  - spec/unit/models/bag_spec.rb
@@ -459,6 +460,7 @@ test_files:
459
460
  - spec/helpers/has_content.rb
460
461
  - spec/unit/config/store_spec.rb
461
462
  - spec/unit/delegate/delegate_spec.rb
463
+ - spec/unit/elements/label_spec.rb
462
464
  - spec/unit/models/association_collection_spec.rb
463
465
  - spec/unit/models/associations_spec.rb
464
466
  - spec/unit/models/bag_spec.rb