stringify_float 1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ab0d39fa1988ef8dbf83aae85050fe77a347200b
4
+ data.tar.gz: da5375985866fab54af2a54011f3c7f061169d88
5
+ SHA512:
6
+ metadata.gz: dcd1728dfe0b5c8f07d69b318f5a823f0f560c939fe19941faf09d21d3cb93599442c9e6b80c366b56576c3722719fc870a68f42056c9bf0aa78fd1dda1dea2d
7
+ data.tar.gz: d2021b6e85812f16f4ed94b769d1779764a87a20caae8570fc55bc55014630a258d46d2328fbc1f856801c3a3f306933148f6097605196cbaeb82065aced23f6
data/README.md ADDED
@@ -0,0 +1,64 @@
1
+ [![Build Status](https://travis-ci.org/skandragon/stringify_float.png?branch=master)](https://travis-ci.org/skandragon/stringify_float)
2
+
3
+ # stringify_float
4
+
5
+ RubyMotion on 32-bit iOS devices suffers from poor floating point support:
6
+
7
+ (main)> 1.2
8
+ => 1.19999980926514
9
+
10
+ This causes no end of problem with Core Data, and other uses where we really
11
+ want more precision than RubyMotion currently provides. Plus, generally
12
+ these values are converted to and from strings for presentation or editing.
13
+ These are convience functions to ease this use case as well.
14
+
15
+ ## Installation
16
+
17
+ Add this line to your application's Gemfile:
18
+
19
+ gem 'stringify_float'
20
+
21
+ And then execute:
22
+
23
+ $ bundle
24
+
25
+ Or install it yourself as:
26
+
27
+ $ gem install stringify_float
28
+
29
+ ## Usage
30
+
31
+ class Model
32
+ include StringifyFloat
33
+
34
+ attr_accessor :cost
35
+ stringify_float :cost
36
+
37
+ attr_accessor :quantity
38
+ stringify_float :quantity, precision: 1
39
+ end
40
+
41
+ >>> x = Model.new
42
+ >>> x.stringifiedCost = "123.45"
43
+ >>> x.stringifiedCost
44
+ "123.45"
45
+
46
+ >>> x.stringifiedQuantity = "123.45"
47
+ >>> x.stringifiedQuantity
48
+ "123.4"
49
+
50
+ "precision" specifies how many decimal places should be stored. This should
51
+ be greater than 1, and as many positions as you wish. Returned strings are
52
+ always 0-padded, so "123" becomes "123.00" (using the default precision).
53
+
54
+ The underlying data type limits how large a given integer can be. If
55
+ using Core Data, an integer32 can store values up to 21,474,836.48 using the
56
+ default precision of 2.
57
+
58
+ ## Contributing
59
+
60
+ 1. Fork it
61
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
62
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
63
+ 4. Push to the branch (`git push origin my-new-feature`)
64
+ 5. Create new Pull Request
@@ -0,0 +1,45 @@
1
+ module StringifyFloat
2
+ def self.included(base)
3
+ base.extend StringifyFloat::ClassMethods
4
+ end
5
+
6
+ module ClassMethods
7
+ def stringify_float(name, opts = {})
8
+ opts = {
9
+ precision: 2,
10
+ }.merge(opts)
11
+
12
+ precision = opts[:precision]
13
+ multiplier = 10 ** precision
14
+
15
+ name_titleized = name.to_s.dup
16
+ name_titleized[0] = name_titleized[0].upcase
17
+
18
+ define_method("stringified#{name_titleized}") do
19
+ value = send("#{name}")
20
+ if value
21
+ value = value.to_i
22
+ "#{value / multiplier}.#{'%02d' % (value % multiplier)}"
23
+ else
24
+ ""
25
+ end
26
+ end
27
+
28
+ define_method("stringified#{name_titleized}=") do |newValue|
29
+ newValue = newValue.to_s
30
+ if newValue.nil? or newValue.length == 0
31
+ value = nil
32
+ else
33
+ int_string, fraction_string = newValue.split('.')
34
+ value = int_string.to_i * multiplier
35
+ if fraction_string
36
+ fraction_string += "0" while fraction_string.length < precision
37
+ fraction = fraction_string[0..(precision - 1)].to_i
38
+ value += fraction
39
+ end
40
+ end
41
+ send("#{name}=", value)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+
3
+ unless defined?(Motion::Project::Config)
4
+ raise "This file must be required within a RubyMotion project Rakefile."
5
+ end
6
+
7
+ lib_dir_path = File.dirname(File.expand_path(__FILE__))
8
+ Motion::Project::App.setup do |app|
9
+ app.files.unshift(Dir.glob(File.join(lib_dir_path, "project/**/*.rb")))
10
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stringify_float
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - Michael Graff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Work around poor floating point support with RubyMotion and Core Data
28
+ email:
29
+ - explorer@flame.org
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - README.md
35
+ - lib/project/stringify_float.rb
36
+ - lib/stringify_float.rb
37
+ homepage: https://github.com/skandragon/stringify_float
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 2.2.0
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: Work around poor floating point support in RubyMotion + Core Data
61
+ test_files: []