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 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: {}