burke-monkeysupport 0.0.7 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.1.1
@@ -7,10 +7,11 @@
7
7
  #include "activesupport_inflector.h"
8
8
  #include "ruby.h"
9
9
 
10
+ //rb_raise(rb_eTypeError, "Non-ASCII String");
11
+
10
12
  VALUE activesupport_inflector_underscore(VALUE self, VALUE rstr)
11
13
  {
12
- // This is handled in the calling code. Every bit counts...
13
- // Check_Type(rstr, T_STRING);
14
+ Check_Type(rstr, T_STRING);
14
15
 
15
16
  VALUE ret = rb_str_new("", 0);
16
17
  char * ip = StringValuePtr(rstr);
@@ -44,18 +45,24 @@ VALUE activesupport_inflector_underscore(VALUE self, VALUE rstr)
44
45
 
45
46
  VALUE activesupport_inflector_parameterize(VALUE self, VALUE str, VALUE sep)
46
47
  {
47
- // This is handled in the calling code. Every bit counts...
48
- // Check_Type(str, T_STRING);
49
- // Check_Type(sep, T_STRING);
48
+ Check_Type(str, T_STRING);
49
+ Check_Type(sep, T_STRING);
50
+
51
+ VALUE mActiveSupport = rb_define_module("ActiveSupport");
52
+ VALUE mInflector = rb_define_module_under(mActiveSupport, "Inflector");
53
+ VALUE transliterated = rb_funcall(mInflector, rb_intern("transliterate"), 1, str);
54
+
55
+ Check_Type(transliterated, T_STRING); // You never know...
50
56
 
51
57
  VALUE ret = rb_str_new("", 0);
52
58
  int sep_len = RSTRING_LEN(sep);
53
- int ilen = RSTRING_LEN(str);
54
- char * ip = RSTRING_PTR(str);
59
+ int ilen = RSTRING_LEN(transliterated);
60
+ char * ip = RSTRING_PTR(transliterated);
55
61
  bool separated = true;
56
62
  int i;
57
63
  char tmp;
58
-
64
+
65
+
59
66
  for (i = 0; i < ilen; i++, ip++) {
60
67
  if (isalnum(*ip) || *ip == '-' || *ip == '_' || *ip == '+') { // normal char
61
68
  separated = false;
@@ -83,8 +90,7 @@ VALUE activesupport_inflector_parameterize(VALUE self, VALUE str, VALUE sep)
83
90
 
84
91
  VALUE activesupport_inflector_dasherize(VALUE self, VALUE str)
85
92
  {
86
- // This is handled in the calling code. Every bit counts...
87
- // Check_Type(str, T_STRING);
93
+ Check_Type(str, T_STRING);
88
94
 
89
95
  char * out = ALLOC_N(char, RSTRING_LEN(str) + 1);
90
96
  char * ip = RSTRING_PTR(str);
@@ -105,8 +111,7 @@ VALUE activesupport_inflector_dasherize(VALUE self, VALUE str)
105
111
 
106
112
  VALUE activesupport_inflector_demodulize(VALUE self, VALUE rstr)
107
113
  {
108
- // This is handled in the calling code. Every bit counts...
109
- // Check_Type(rstr, T_STRING);
114
+ Check_Type(rstr, T_STRING);
110
115
 
111
116
  char * str = RSTRING_PTR(rstr);
112
117
  char * ip = str;
@@ -129,8 +134,7 @@ VALUE activesupport_inflector_demodulize(VALUE self, VALUE rstr)
129
134
 
130
135
  VALUE activesupport_inflector_camelize(VALUE self, VALUE str, VALUE first_letter_uppercase)
131
136
  {
132
- // This is handled in the calling code. Every bit counts...
133
- // Check_Type(str, T_STRING);
137
+ Check_Type(str, T_STRING);
134
138
 
135
139
  VALUE ret = rb_str_new("", 0);
136
140
  bool cap_next = RTEST(first_letter_uppercase);
@@ -161,8 +165,7 @@ VALUE activesupport_inflector_camelize(VALUE self, VALUE str, VALUE first_letter
161
165
 
162
166
  VALUE activesupport_inflector_foreign_key(VALUE self, VALUE str, VALUE use_underscore)
163
167
  {
164
- // This is handled in the calling code. Every bit counts...
165
- // Check_Type(str, T_STRING);
168
+ Check_Type(str, T_STRING);
166
169
 
167
170
  VALUE ret = activesupport_inflector_underscore(self, activesupport_inflector_demodulize(self, str));
168
171
 
@@ -203,8 +206,7 @@ static char * itoa(int n)
203
206
 
204
207
  VALUE activesupport_inflector_ordinalize(VALUE self, VALUE rn)
205
208
  {
206
- // This is handled in the calling code. Every bit counts...
207
- // Check_Type(rn, T_FIXNUM);
209
+ Check_Type(rn, T_FIXNUM);
208
210
 
209
211
  int n = FIX2INT(rn);
210
212
  VALUE ret = rb_str_new2(itoa(n));
@@ -1,4 +1,3 @@
1
-
2
1
  module ActiveSupport
3
2
  module Inflector
4
3
 
@@ -29,87 +28,16 @@ module ActiveSupport
29
28
  :activesupport_inflector_demodulize,
30
29
  [:string]) # class_name_in_module
31
30
 
32
- =begin
31
+ monkey_c_proxy(:ordinalize,
32
+ :activesupport_inflector_ordinalize,
33
+ [:fixnum]) # number
34
+
33
35
  # TODO: Transliterate
34
36
  monkey_c_proxy(:parameterize,
35
37
  :activesupport_inflector_parameterize,
36
38
  [:string, # string
37
39
  [:string, '-']]) # separator
38
40
 
39
- # TODO: .to_i
40
- monkey_c_proxy(:ordinalize,
41
- :activesupport_inflector_ordinalize,
42
- [:fixnum]) # number
43
-
44
- alias_method :__camelize, :camelize
45
- def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
46
- if MonkeySupport::TypeChecks.is_ascii_string?(lower_case_and_underscored_word)
47
- MonkeySupport::C.activesupport_inflector_camelize(lower_case_and_underscored_word.to_s, first_letter_in_uppercase)
48
- else
49
- __camelize(lower_case_and_underscored_word, first_letter_in_uppercase)
50
- end
51
- end
52
-
53
- alias_method :__underscore, :underscore
54
- def underscore(camel_cased_word)
55
- if MonkeySupport::TypeChecks.is_ascii_string?(camel_cased_word)
56
- MonkeySupport::C.activesupport_inflector_underscore(camel_cased_word)
57
- else
58
- __underscore(camel_cased_word)
59
- end
60
- end
61
-
62
- alias_method :__dasherize, :dasherize
63
- def dasherize(underscored_word)
64
- if MonkeySupport::TypeChecks.is_ascii_string?(underscored_word)
65
- MonkeySupport::C.activesupport_inflector_dasherize(underscored_word)
66
- else
67
- __dasherize(underscored_word)
68
- end
69
- end
70
-
71
- alias_method :__demodulize, :demodulize
72
- def demodulize(class_name_in_module)
73
- if MonkeySupport::TypeChecks.is_ascii_string?(class_name_in_module)
74
- MonkeySupport::C.activesupport_inflector_demodulize(class_name_in_module)
75
- else
76
- __demodulize(class_name_in_module)
77
- end
78
- end
79
-
80
- alias_method :__foreign_key, :foreign_key
81
- def foreign_key(class_name, separate_class_name_and_id_with_underscore = true)
82
- if MonkeySupport::TypeChecks.is_ascii_string?(class_name)
83
- MonkeySupport::C.activesupport_inflector_foreign_key(class_name, separate_class_name_and_id_with_underscore)
84
- else
85
- __foreign_key(class_name, separate_class_name_and_id_with_underscore)
86
- end
87
- end
88
-
89
- =end
90
-
91
- alias_method :__parameterize, :parameterize
92
- def parameterize(string, sep = '-')
93
- parameterized_string = transliterate(string)
94
- if (MonkeySupport::TypeChecks.is_ascii_string?(parameterized_string) \
95
- && MonkeySupport::TypeChecks.is_ascii_string?(sep))
96
-
97
- MonkeySupport::C.activesupport_inflector_parameterize(parameterized_string.to_s, sep)
98
- else
99
- __parameterize(string, sep)
100
- end
101
- end
102
-
103
- alias_method :__ordinalize, :ordinalize
104
- def ordinalize(number)
105
- x = number.to_i
106
- if (x.class == Fixnum)
107
- MonkeySupport::C.activesupport_inflector_ordinalize(x)
108
- else
109
- __ordinalize(number)
110
- end
111
- end
112
-
113
41
  end
114
42
  end
115
43
 
@@ -16,35 +16,24 @@ module MonkeySupport
16
16
  #
17
17
  # alias_method :__demodulize, :demodulize
18
18
  # def demodulize(arg0)
19
- # if ((MonkeySupport::TypeChecks.valid_string?(arg0)))
19
+ # begin
20
20
  # MonkeySupport::C.activesupport_inflector_demodulize(arg0)
21
- # else
21
+ # rescue TypeError
22
22
  # __demodulize(arg0)
23
23
  # end
24
24
  # end
25
25
  def monkey_c_proxy(ruby_name, c_name, args)
26
- checklist = Util::checklist(args)
27
26
  arglist_with_defaults = Util::arglist(args, true)
28
27
  arglist_without_defaults = Util::arglist(args, false)
29
28
 
30
- if checklist
31
- body = <<-EOS
32
- if #{checklist}
33
- MonkeySupport::C.#{c_name}(#{arglist_without_defaults})
34
- else
35
- __#{ruby_name}(#{arglist_without_defaults})
36
- end
37
- EOS
38
- else
39
- body = <<-EOS
40
- MonkeySupport::C.#{c_name}(#{arglist_without_defaults})
41
- EOS
42
- end
43
-
44
29
  function = <<-EOS
45
30
  alias_method :__#{ruby_name}, :#{ruby_name}
46
31
  def #{ruby_name}(#{arglist_with_defaults})
47
- #{body}
32
+ begin
33
+ MonkeySupport::C.#{c_name}(#{arglist_without_defaults})
34
+ rescue TypeError
35
+ __#{ruby_name}(#{arglist_without_defaults})
36
+ end
48
37
  end
49
38
  EOS
50
39
 
@@ -52,22 +41,11 @@ module MonkeySupport
52
41
  end
53
42
 
54
43
  module Util
55
- def self.checklist(args)
56
- checklist = []
57
- args.each_with_index do |x, i|
58
- arg = ((x.class == Array) ? x[0] : x) # support [:bool, true] notation.
59
- if [:string, :fixnum].include?(arg)
60
- checklist << "(MonkeySupport::TypeChecks.valid_#{arg}?(arg#{i}))"
61
- end
62
- end
63
- return (checklist.empty? ? nil : "(#{checklist.join(' && ')})")
64
- end
65
-
66
44
  def self.arglist(args, include_defaults)
67
45
  arglist = []
68
46
  args.each_with_index do |arg, i|
69
47
  if (arg.class == Array && include_defaults)
70
- arglist << "arg#{i} = #{arg[1]}"
48
+ arglist << "arg#{i} = #{arg[1].inspect}"
71
49
  else
72
50
  arglist << "arg#{i}"
73
51
  end
@@ -1,10 +1,12 @@
1
1
  module MonkeySupport
2
2
  module TypeChecks
3
3
 
4
+ # Disclaimer: I may have been writing too much lisp lately.
5
+
4
6
  # NOTE: This exists, but it'll still be a lot faster to just call
5
7
  # obj.class == Fixnum in the calling code, rather than resolving
6
8
  # MonkeySupport::TypeChecks.is_fixnum? each time.
7
- def self.valid_fixnum?(obj)
9
+ def self.valid_fixnum?(obj, string=false)
8
10
  obj.class == Fixnum
9
11
  end
10
12
 
@@ -19,17 +21,17 @@ module MonkeySupport
19
21
  if '1.9'.respond_to?(:force_encoding)
20
22
  ASCII_ENCODING = Encoding.find("ASCII-8BIT")
21
23
  if Encoding.default_external == ASCII_ENCODING
22
- def self.valid_string?(obj)
24
+ def self.valid_string?(obj, string=false)
23
25
  (obj.class == String) && obj.encoding == ASCII_ENCODING
24
26
  end
25
27
  else
26
- def self.valid_string?(obj)
28
+ def self.valid_string?(obj, string=false)
27
29
  #TODO: Check ascii_only? and force_encoding here.
28
30
  (obj.class == String) && obj.encoding == ASCII_ENCODING
29
31
  end
30
32
  end
31
33
  else # <1.9
32
- def self.valid_string?(obj)
34
+ def self.valid_string?(obj, string=false)
33
35
  obj.class == String
34
36
  end
35
37
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{monkeysupport}
8
- s.version = "0.0.7"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Burke Libbey"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: burke-monkeysupport
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Burke Libbey