motion-bitmask 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWJkZDdiZTlhYWI2MTgzOTM5YWFmYjA5ZDllMjUyOWQ0NGFjZWVjOA==
4
+ ZjU2M2Y4ZDg2NzNkNzFjNDRhNzdlMGFiNTNhNWViMWE1OWQ3NzA0Ng==
5
5
  data.tar.gz: !binary |-
6
- ZWIzZTgwZmNkMmE0ODcwNTFhNjkxYWI5NzhhNTE5ZGJjMGI0NGYwNQ==
6
+ MDVkYzJmZTZhZjM0Njc4YjYzMmNjNDQ2ZTM4OGVlNjAxNmJmMjg3Nw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NGRkMzQ3NDc4ZWE5MDMwNDJmMTQ4ZWQ0OTg5NjllMDBjMWU1OTA0NmU2MjBl
10
- YzNmZjA2NzIwOWZhYWQzYTAxZGE3OGQ5NTNkYmVmMDVmNTljNWQ2NDZmNzU5
11
- MjMxMjhiZjEyODhhNzY0MTUzNGJlYzk5ZTZkYjFhMTQwN2IwYTc=
9
+ YTc1MTg1OTZhMjU2MzdkN2Q3ZDE3MTUzNGRkNDQ4MjRmMzMwYTY5NjQxOWYx
10
+ OGM4N2JkNmJkNzNjY2NhNWVkNWQyMjEwZTM0OTM2MDRiOTRiOWJjZGUzYjQw
11
+ N2UxYjQwODkwOGY3NmY1YjUxNjUwNmU3YTNiOTk2YzA4YjY1Mjg=
12
12
  data.tar.gz: !binary |-
13
- NzUzZDQyMTIxYWExN2I5M2JlMzZlOWE5MWVkZTM2ZTQ3YmExOWZmNTNmNTJh
14
- NjAzZDFhYWNjODc4OGNjMDY4NDRlZjYyN2RjYmUyYTkyMTA5ZTlhNDZlZmYz
15
- MWE5OGU0ZGY0NWNjOGU2ZmFiY2Q5YTIyNTRlNGZjNTRlMGUwOTU=
13
+ N2UxZTlmZTBkNjBkYjFkNTQ4ZjgwMWI0MDhkNmJjNmI5ODI5MjkyMDhjYWY0
14
+ NDVlNjM2MmQzNDgyYjgwNGJlZWM5OTViYWE1OTg0MmQ1NzY0Y2UzNGE3ZDA4
15
+ MTM1YTE2NjVlOGI2MWJlMjU1MGY4Njk2ZDQ4MDliZTQ2ODIwNTU=
@@ -0,0 +1,2 @@
1
+ build/*
2
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake'
@@ -0,0 +1,10 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ rake (10.4.2)
5
+
6
+ PLATFORMS
7
+ ruby
8
+
9
+ DEPENDENCIES
10
+ rake
@@ -0,0 +1,75 @@
1
+ # MotionBitmask
2
+
3
+ This is a simple implementation of generic bitmasks for use in RubyMotion.
4
+
5
+ This is a work in progress, but is used in production in apps in App Store. YMMV.
6
+
7
+ # Installation
8
+
9
+ Install with
10
+
11
+ ```
12
+ gem install motion-bitmask
13
+ ```
14
+
15
+ or add to your ```Gemfile```
16
+
17
+ ````ruby
18
+ gem 'motion-bitmask'
19
+ ````
20
+
21
+ # Usage
22
+
23
+ Create a new bitmask with
24
+
25
+ ```ruby
26
+ bitmask = Bitmask.new([:first_value, :second_value, :third_value])
27
+ ```
28
+
29
+ Set a value with
30
+
31
+ ```ruby
32
+ bitmask << :first_value
33
+ ```
34
+
35
+ Check if a given value is set with
36
+
37
+ ```ruby
38
+ bitmask.set?(:first_value)
39
+ ```
40
+
41
+ Get an array of all set values with
42
+
43
+ ```ruby
44
+ bitmask.values => [:first_value]
45
+ ```
46
+
47
+ Get an array of all allowed values with
48
+
49
+ ```ruby
50
+ bitmask.allowed_values => [:first_value, :second_value, :third_value]
51
+ ```
52
+
53
+ # Persistence
54
+
55
+ ```motion-bitmask``` does not have an opinion on how values are persisted but support setting the initial bitmask field with
56
+
57
+ ```ruby
58
+ bitmask = Bitmask.new(INITIAL_VALUE, [:first_value, :second_value, :third_value])
59
+ ```
60
+
61
+ To get the current "raw" value of the bitmask, use
62
+
63
+ ```ruby
64
+ bitmask.raw_value = > 1
65
+ ```
66
+
67
+ # License
68
+
69
+ MotionBitmask is released under the MIT license:
70
+
71
+ [http://www.opensource.org/licenses/MIT](http://www.opensource.org/licenses/MIT)
72
+
73
+ # Forking
74
+
75
+ Feel free to fork and submit pull requests!
@@ -0,0 +1,16 @@
1
+ $:.unshift("/Library/RubyMotion/lib")
2
+ require 'motion/project/template/ios'
3
+ require 'bundler'
4
+
5
+ $:.unshift("./lib/")
6
+ require './lib/motion-bitmask'
7
+
8
+ Motion::Project::App.setup do |app|
9
+ end
10
+
11
+ task :spec do
12
+ App.config.spec_mode = true
13
+ spec_files = App.config.spec_files
14
+ App.config.instance_variable_set("@spec_files", spec_files)
15
+ Rake::Task["simulator"].invoke
16
+ end
@@ -0,0 +1,5 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ true
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise "This file must be required within a RubyMotion project Rakefile."
3
+ end
4
+
5
+ Motion::Project::App.setup do |app|
6
+ Dir.glob(File.join(File.dirname(__FILE__), 'motion-bitmask/*.rb')).each do |file|
7
+ app.files.unshift(file)
8
+ end
9
+ end
@@ -0,0 +1,40 @@
1
+ class Bitmask
2
+
3
+ def initialize(*args)
4
+ @field = args.first.is_a?(Integer) ? args.shift : 0
5
+ @values = args.first.is_a?(Array) ? args.shift : []
6
+ @options = args.last.is_a?(Hash) ? args.pop : {}
7
+ self
8
+ end
9
+
10
+ def <<(value)
11
+ validate_value(value)
12
+ @field |= 1 << @values.index(value)**2
13
+ end
14
+
15
+ def set?(value)
16
+ validate_value(value)
17
+ @field & (1 << @values.index(value)**2) > 0
18
+ end
19
+
20
+ def values
21
+ return @values.reject do |value|
22
+ !set?(value)
23
+ end
24
+ end
25
+
26
+ def allowed_values
27
+ @values
28
+ end
29
+
30
+ def raw_value
31
+ @field
32
+ end
33
+
34
+ private
35
+
36
+ def validate_value(val)
37
+ raise ArgumentError.new("Value not in field value list: #{@values.inspect}") unless @values.include?(val)
38
+ end
39
+
40
+ end
@@ -0,0 +1,8 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "motion-bitmask"
3
+ s.version = '0.0.3'
4
+ s.summary = "Simple implementation of bitmasks with a Rubyesque interface"
5
+ s.description = "Sample gem"
6
+ s.authors = ["buffpojken"]
7
+ s.files = `git ls-files`.split($/)
8
+ end
@@ -0,0 +1,64 @@
1
+ describe 'Bitmask' do
2
+
3
+ describe 'creation' do
4
+ it "should support creating a bitmask" do
5
+ Bitmask.new([:test, :more_test]).class.should.equal(Bitmask)
6
+ end
7
+
8
+ it 'should support setting an initial value' do
9
+ Bitmask.new(1, [:test, :more_test]).class.should.equal(Bitmask)
10
+ end
11
+ end
12
+
13
+ describe 'setting values' do
14
+ before do
15
+ @mask = Bitmask.new([:test, :more_test, :even_more_test])
16
+ end
17
+
18
+ it "should support setting an allowed value" do
19
+ @mask << :test
20
+ @mask.set?(:test).should.equal(true)
21
+ end
22
+
23
+ it 'should not report non-set values as set' do
24
+ @mask.set?(:more_test).should.equal(false)
25
+ end
26
+
27
+ it 'should raise an error for unsupported values' do
28
+ lambda{ @mask << :monkey }.should.raise(ArgumentError)
29
+ end
30
+ end
31
+
32
+ describe 'getting values' do
33
+ before do
34
+ @mask = Bitmask.new([:test, :more_test, :even_more_test])
35
+ end
36
+
37
+ it 'should support checking a single value' do
38
+ @mask.set?(:test).should.equal(false)
39
+ @mask << :test
40
+ @mask.set?(:test).should.equal(true)
41
+ end
42
+
43
+ it 'should support returning a list of set values' do
44
+ @mask.values.should.equal([])
45
+ @mask << :test
46
+ @mask << :more_test
47
+ @mask.values.should.equal([:test, :more_test])
48
+ end
49
+ end
50
+
51
+ describe 'storing values' do
52
+ it 'should support a single initial value' do
53
+ mask = Bitmask.new(1, [:test, :more_test, :even_more_test])
54
+ mask.set?(:test).should.equal(true)
55
+ end
56
+
57
+ it 'should support multiple initial values' do
58
+ mask = Bitmask.new(17, [:test, :more_test, :even_more_test])
59
+ mask.values.should.equal([:test, :even_more_test])
60
+ end
61
+
62
+ end
63
+
64
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-bitmask
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - buffpojken
@@ -15,7 +15,17 @@ email:
15
15
  executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
- files: []
18
+ files:
19
+ - .gitignore
20
+ - Gemfile
21
+ - Gemfile.lock
22
+ - README.md
23
+ - Rakefile
24
+ - app/app_delegate.rb
25
+ - lib/motion-bitmask.rb
26
+ - lib/motion-bitmask/core.rb
27
+ - motion-bitmask.gemspec
28
+ - spec/bitmask_spec.rb
19
29
  homepage:
20
30
  licenses: []
21
31
  metadata: {}