rack-si 0.0.1

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.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source :rubygems
2
+
3
+ gemspec :path => '.'
4
+
5
+ gem 'herbalist', :path => '~/herbalist'
data/README.markdown ADDED
File without changes
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ class SI
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
data/lib/rack/si.rb ADDED
@@ -0,0 +1,40 @@
1
+ require 'herbalist'
2
+ Herbalist.basic = true
3
+
4
+ module Rack
5
+
6
+ # A Rack middleware for converting params to base SI units
7
+ #
8
+ class Rack::SI
9
+ BASE_UNITS = [:metre, :metres, :meter, :meters, :litre, :litres, :liter, :liters, :joule, :joules, :gram, :grams, :watt, :watts]
10
+
11
+ def initialize(app)
12
+ @app = app
13
+ end
14
+
15
+ def call(env)
16
+ convert_params(env)
17
+ @app.call(env)
18
+ end
19
+
20
+ def convert_params(env)
21
+ params = ::Rack::Request.new(env).params
22
+ env['si.params'] = params.inject({}) do |hsh, (name, value)|
23
+ if measurement = Herbalist.parse(value)
24
+ value = normalize(measurement)
25
+ end
26
+ hsh[name] = value
27
+ hsh
28
+ end
29
+ end
30
+
31
+ def normalize(measurement)
32
+ group_name = Alchemist.conversion_table.keys.find do |k|
33
+ Alchemist.conversion_table[k].include?(measurement.unit_name)
34
+ end
35
+ group = Alchemist.conversion_table[group_name]
36
+ base_unit = BASE_UNITS.find { |u| group.include?(u) }
37
+ measurement.to.send base_unit
38
+ end
39
+ end
40
+ end
data/rack-si.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/rack/si/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'rack-si'
6
+ s.version = Rack::SI::VERSION
7
+ s.author = 'Derek Kastner'
8
+ s.email = ['dkastner@gmail.com']
9
+ s.summary = 'Convert any measurement params to base SI units'
10
+ s.description = 'Choose params that are converted with Herbalist to base SI units (meters, grams, etc)'
11
+ s.homepage = 'https://github.com/brighterplanet/carbon'
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
+ s.require_paths = ["lib"]
16
+
17
+ #s.add_runtime_dependency 'herbalist'
18
+ s.add_runtime_dependency 'rack'
19
+
20
+ s.add_development_dependency 'rack-test'
21
+ s.add_development_dependency 'rspec'
22
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'bundler'
2
+
3
+ Bundler.setup
data/spec/si_spec.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'rack/si'
2
+ require 'rack/test'
3
+
4
+ describe Rack::SI do
5
+ include Rack::Test::Methods
6
+
7
+ def app
8
+ Rack::SI.new lambda { |env| [200, {}, []] }
9
+ end
10
+
11
+ describe '#call' do
12
+ it 'returns control to the app' do
13
+ get '/foo'
14
+ last_response.should be_ok
15
+ end
16
+
17
+ it 'ignores missing parameters' do
18
+ post '/bar'
19
+ last_request.env['si.params'].should == {}
20
+ end
21
+
22
+ it 'does not convert non-unit params' do
23
+ post '/automobile_trips', {
24
+ 'destination' => '2,3',
25
+ 'distance' => 233
26
+ }
27
+ last_request.env['si.params'].should ==({
28
+ 'destination' => '2,3',
29
+ 'distance' => '233'
30
+ })
31
+ end
32
+
33
+ it 'converts any unit-ed params to base SI units' do
34
+ post '/automobile_trips', {
35
+ 'destination' => '2,3',
36
+ 'distance' => '233 miles'
37
+ }
38
+ last_request.env['si.params']['destination'].should == '2,3'
39
+ last_request.env['si.params']['distance'].to_f.should == 374977.152
40
+ end
41
+
42
+ #it 'converts compound measurements' do
43
+ #post '/automobile_trips', {
44
+ #'fuel_efficiency' => '54 miles per gallon'
45
+ #}
46
+ #last_request.env['si.params']['fuel_efficiency'].to_f.should == 86904.576
47
+ #end
48
+
49
+ #it 'converts dates' do
50
+
51
+ #end
52
+ end
53
+ end
54
+
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-si
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Derek Kastner
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rack
16
+ requirement: &2166367960 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2166367960
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack-test
27
+ requirement: &2166383900 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2166383900
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &2166383480 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2166383480
47
+ description: Choose params that are converted with Herbalist to base SI units (meters,
48
+ grams, etc)
49
+ email:
50
+ - dkastner@gmail.com
51
+ executables: []
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - Gemfile
57
+ - README.markdown
58
+ - lib/rack/si.rb
59
+ - lib/rack/si/version.rb
60
+ - rack-si.gemspec
61
+ - spec/helper.rb
62
+ - spec/si_spec.rb
63
+ homepage: https://github.com/brighterplanet/carbon
64
+ licenses: []
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ! '>='
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 1.8.11
84
+ signing_key:
85
+ specification_version: 3
86
+ summary: Convert any measurement params to base SI units
87
+ test_files:
88
+ - spec/helper.rb
89
+ - spec/si_spec.rb