Module: BubbleWrap::String

Defined in:
motion/core/string.rb

Overview

This module contains simplified version of the camelize and underscore methods from ActiveSupport, since these are such common operations when dealing with the Cocoa API.

Instance Method Summary collapse

Instance Method Details

#camelize(uppercase_first_letter = true) ⇒ Object

Convert ‘snake_case’ into ‘CamelCase’



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'motion/core/string.rb', line 8

def camelize(uppercase_first_letter = true)
  string = self.dup
  string.gsub!(/(?:_|(\/))([a-z\d]*)/i) do
    new_word = $2.downcase
    new_word[0] = new_word[0].upcase
    new_word = "/#{new_word}" if $1 == '/'
    new_word
  end
  if uppercase_first_letter && uppercase_first_letter != :lower
    string[0] = string[0].upcase
  else
    string[0] = string[0].downcase
  end
  string.gsub!('/', '::')
  string
end

#to_colorObject



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
# File 'motion/core/string.rb', line 63

def to_color
  # First check if it is a color keyword
  keyword_selector = "#{self.camelize(:lower)}Color"
  color_klass = App.osx? ? NSColor : UIColor
  return color_klass.send(keyword_selector) if color_klass.respond_to? keyword_selector

  # Next attempt to convert from hex
  hex_color = self.gsub("#", "")
  case hex_color.size
    when 3
      colors = hex_color.scan(%r{[0-9A-Fa-f]}).map!{ |el| (el * 2).to_i(16) }
    when 6
      colors = hex_color.scan(%r<[0-9A-Fa-f]{2}>).map!{ |el| el.to_i(16) }
    when 8
      colors = hex_color.scan(%r<[0-9A-Fa-f]{2}>).map!{ |el| el.to_i(16) }
    else
      raise ArgumentError
  end
  if colors.size == 3
    BubbleWrap.rgb_color(colors[0], colors[1], colors[2])
  elsif colors.size == 4
    BubbleWrap.rgba_color(colors[1], colors[2], colors[3], colors[0])
  else
    raise ArgumentError
  end
end

#to_encoded_data(encoding = NSUTF8StringEncoding) ⇒ Object



59
60
61
# File 'motion/core/string.rb', line 59

def to_encoded_data(encoding = NSUTF8StringEncoding)
  dataUsingEncoding encoding
end

#to_url_decoded(encoding = nil, legacy = false) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'motion/core/string.rb', line 46

def to_url_decoded(encoding = nil, legacy = false)
  if legacy
    stringByReplacingPercentEscapesUsingEncoding(encoding || NSUTF8StringEncoding)
  else
    if encoding
      encoding = CFStringConvertNSStringEncodingToEncoding(encoding) unless CFStringIsEncodingAvailable(encoding)
      CFURLCreateStringByReplacingPercentEscapesUsingEncoding(nil, self, nil, encoding)
    else
      CFURLCreateStringByReplacingPercentEscapes(nil, self, nil)
    end
  end
end

#to_url_encoded(encoding = nil, legacy = false) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'motion/core/string.rb', line 36

def to_url_encoded(encoding = nil, legacy = false)
  if legacy
    stringByAddingPercentEscapesUsingEncoding(encoding || NSUTF8StringEncoding)
  else
    encoding ||= KCFStringEncodingUTF8
    encoding = CFStringConvertNSStringEncodingToEncoding(encoding) unless CFStringIsEncodingAvailable(encoding)
    CFURLCreateStringByAddingPercentEscapes(nil, self, nil, "!*'();:@&=+$,/?%#[]", encoding)
  end
end

#underscoreObject

Convert ‘CamelCase’ into ‘snake_case’



26
27
28
29
30
31
32
33
34
# File 'motion/core/string.rb', line 26

def underscore
  word = self.dup
  word.gsub!(/::/, '/')
  word.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
  word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
  word.tr!("-", "_")
  word.downcase!
  word
end