motion-bitmask 0.0.2 → 0.0.3
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 +8 -8
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +10 -0
- data/README.md +75 -0
- data/Rakefile +16 -0
- data/app/app_delegate.rb +5 -0
- data/lib/motion-bitmask.rb +9 -0
- data/lib/motion-bitmask/core.rb +40 -0
- data/motion-bitmask.gemspec +8 -0
- data/spec/bitmask_spec.rb +64 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjU2M2Y4ZDg2NzNkNzFjNDRhNzdlMGFiNTNhNWViMWE1OWQ3NzA0Ng==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDVkYzJmZTZhZjM0Njc4YjYzMmNjNDQ2ZTM4OGVlNjAxNmJmMjg3Nw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTc1MTg1OTZhMjU2MzdkN2Q3ZDE3MTUzNGRkNDQ4MjRmMzMwYTY5NjQxOWYx
|
10
|
+
OGM4N2JkNmJkNzNjY2NhNWVkNWQyMjEwZTM0OTM2MDRiOTRiOWJjZGUzYjQw
|
11
|
+
N2UxYjQwODkwOGY3NmY1YjUxNjUwNmU3YTNiOTk2YzA4YjY1Mjg=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2UxZTlmZTBkNjBkYjFkNTQ4ZjgwMWI0MDhkNmJjNmI5ODI5MjkyMDhjYWY0
|
14
|
+
NDVlNjM2MmQzNDgyYjgwNGJlZWM5OTViYWE1OTg0MmQ1NzY0Y2UzNGE3ZDA4
|
15
|
+
MTM1YTE2NjVlOGI2MWJlMjU1MGY4Njk2ZDQ4MDliZTQ2ODIwNTU=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README.md
ADDED
@@ -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!
|
data/Rakefile
ADDED
@@ -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
|
data/app/app_delegate.rb
ADDED
@@ -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,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.
|
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: {}
|